diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 4d31904f1f..46485409bb 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -36,7 +36,6 @@ import com.fr.design.layout.TableLayoutHelper; import com.fr.design.layout.VerticalFlowLayout; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.common.VcsHelper; -import com.fr.design.mainframe.vcs.ui.VcsMovePanel; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.unit.UnitConvertUtil; import com.fr.design.utils.gui.GUICoreUtils; @@ -55,12 +54,9 @@ import com.fr.stable.os.OperatingSystem; import com.fr.third.apache.logging.log4j.Level; import com.fr.transaction.Configurations; import com.fr.transaction.Worker; -import com.fr.transaction.WorkerAdaptor; import com.fr.workspace.WorkContext; -import com.fr.workspace.server.vcs.VcsConfig; import com.fr.workspace.server.vcs.VcsOperator; import com.fr.workspace.server.vcs.git.config.GcConfig; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; @@ -81,7 +77,14 @@ import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; @@ -146,32 +149,6 @@ public class PreferencePane extends BasicPane { private static final Level[] LOG = {Level.FATAL, Level.ERROR, Level.WARN, Level.INFO, Level.DEBUG}; - private static final int ONE_DAY_INT = 1; - private static final int ONE_WEEK_INT = 7; - private static final int ONE_MONTH_INT = 30; - private static final int THREE_MONTH_INT = 90; - private static final int SIX_MONTH_INT = 180; - - private static final int ONE_DAY_INDEX = 0; - private static final int ONE_WEEK_INDEX = 1; - private static final int ONE_MONTH_INDEX = 2; - private static final int THREE_MONTH_INDEX = 3; - private static final int SIX_MONTH_INDEX = 4; - private static final String ONE_DAY = Toolkit.i18nText("Fine-Design_Vcs_Auto_Clean_ONE_DAY"); - private static final String ONE_WEEK = Toolkit.i18nText("Fine-Design_Vcs_Auto_Clean_ONE_WEEK"); - private static final String ONE_MONTH = Toolkit.i18nText("Fine-Design_Vcs_Auto_Clean_ONE_MONTH"); - private static final String THREE_MONTH = Toolkit.i18nText("Fine-Design_Vcs_Auto_Clean_THREE_MONTH"); - private static final String SIX_MONTH = Toolkit.i18nText("Fine-Design_Vcs_Auto_Clean_SIX_MONTH"); - private static final String[] INTERVAL = { - ONE_DAY, - ONE_WEEK, - ONE_MONTH, - THREE_MONTH, - SIX_MONTH - }; - - private static final int DEFAULT_INDEX = 3; - private boolean languageChanged; // 是否修改了设计器语言设置 //设置是否支持undo private UICheckBox supportUndoCheckBox; @@ -209,20 +186,8 @@ public class PreferencePane extends BasicPane { private UICheckBox cloudAnalyticsDelayCheckBox; private UICheckBox vcsEnableCheckBox; - private UICheckBox useVcsAutoSaveScheduleCheckBox; - - private UICheckBox useVcsAutoCleanScheduleCheckBox; - - private UIComboBox autoCleanIntervalComboBox; - private UIComboBox autoCleanRetainIntervalComboBox; - - private IntegerEditor autoSaveIntervalEditor; private UICheckBox saveCommitCheckBox; private UICheckBox useIntervalCheckBox; - private VcsMovePanel movePanel; - - private JPanel saveIntervalPane; - private JPanel autoCleanPane; private UICheckBox startupPageEnabledCheckBox; private IntegerEditor saveIntervalEditor; private UICheckBox gcEnableCheckBox; @@ -262,26 +227,13 @@ public class PreferencePane extends BasicPane { JPanel advancePane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); UIScrollPane adviceScrollPane = patchScroll(advancePane); jtabPane.addTab(i18nText("Fine-Design_Basic_Advanced"), adviceScrollPane); - //初始化vcs总面板 - JPanel vcsParentPane = new JPanel(); - CardLayout cardLayout = new CardLayout(); - vcsParentPane.setLayout(cardLayout); - //vcs配置面板 - JPanel vcsPane = new JPanel(new BorderLayout()); - //添加滚动条 - UIScrollPane vcsScrollPane = patchScroll(vcsPane); - //配置面板作为vcs总面板的一张卡片 - vcsParentPane.add(vcsScrollPane, VcsMovePanel.SETTING); - jtabPane.addTab(i18nText("Fine-Design_Vcs_Title"), vcsParentPane); contentPane.add(jtabPane, BorderLayout.NORTH); createFunctionPane(generalPane); createEditPane(generalPane); createColorSettingPane(generalPane); - - // vcsPane - createVcsSettingPane(vcsPane, vcsParentPane, cardLayout); + createVcsSettingPane(generalPane); // ConfPane JPanel confLocationPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane(); @@ -393,31 +345,21 @@ public class PreferencePane extends BasicPane { return generalPanelWithScroll; } - private void createVcsSettingPane(JPanel generalPane,JPanel parentPane, CardLayout cardLayout) { - //迁移面板 - movePanel = createMovePane(cardLayout, parentPane); - generalPane.add(movePanel, BorderLayout.NORTH); - JPanel savePane = FRGUIPaneFactory.createTopVerticalTitledBorderPane(i18nText("Fine-Design_Vcs_Save_Setting")); - JPanel vcsPane = FRGUIPaneFactory.createTopVerticalTitledBorderPane(i18nText("Fine-Design_Vcs_Clean_Setting")); - JPanel containPane = new JPanel(new GridLayout(10,1,0,8)); - containPane.add(savePane); - containPane.add(vcsPane); - generalPane.add(containPane, BorderLayout.CENTER); + private void createVcsSettingPane(JPanel generalPane) { + JPanel vcsPane = FRGUIPaneFactory.createTopVerticalTitledBorderPane(i18nText("Fine-Design_Vcs_Title")); + generalPane.add(vcsPane); remindVcsLabel = new UILabel(i18nText("Fine-Design_Vcs_Remind")); remindVcsLabel.setVisible(!VcsHelper.getInstance().needInit()); vcsEnableCheckBox = new UICheckBox(i18nText("Fine-Design_Vcs_SaveAuto")); - - saveIntervalPane = createSaveIntervalPane(); saveCommitCheckBox = new UICheckBox(i18nText("Fine-Design_Vcs_No_Delete")); saveIntervalEditor = new IntegerEditor(60); useIntervalCheckBox = new UICheckBox(); - savePane.add(vcsEnableCheckBox); - savePane.add(saveIntervalPane); //gc面板 JPanel gcControlPane = createGcControlPane(); JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); + enableVcsPanel.add(vcsEnableCheckBox); enableVcsPanel.add(remindVcsLabel); JPanel intervalPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); final UILabel everyLabel = new UILabel(i18nText("Fine-Design_Vcs_Every")); @@ -426,7 +368,6 @@ public class PreferencePane extends BasicPane { intervalPanel.add(everyLabel); intervalPanel.add(saveIntervalEditor); intervalPanel.add(delayLabel); - autoCleanPane = createAutoCleanPane(); vcsEnableCheckBox.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { @@ -449,58 +390,9 @@ public class PreferencePane extends BasicPane { vcsPane.add(enableVcsPanel); vcsPane.add(intervalPanel); vcsPane.add(saveCommitCheckBox); - vcsPane.add(autoCleanPane); - saveIntervalPane.setVisible(!VcsHelper.getInstance().isLegacyMode()); - autoCleanPane.setVisible(!VcsHelper.getInstance().isLegacyMode()); - if (VcsHelper.getInstance().isLegacyMode()) { - // 老版本时才显示gc选项 - vcsPane.add(gcControlPane); - } + vcsPane.add(gcControlPane); } - private VcsMovePanel createMovePane(CardLayout cardLayout, JPanel parentPane) { - return new VcsMovePanel(cardLayout, parentPane, new VcsMovePanel.MoveCallBack(){ - @Override - public void doCallBack(boolean visible) { - saveIntervalPane.setVisible(visible); - autoCleanPane.setVisible(visible); - } - }); - }; - - private JPanel createAutoCleanPane() { - JPanel autoCleanPane = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); - useVcsAutoCleanScheduleCheckBox = new UICheckBox(); - autoCleanIntervalComboBox = new UIComboBox(INTERVAL); - autoCleanIntervalComboBox.setSelectedIndex(DEFAULT_INDEX); - autoCleanRetainIntervalComboBox = new UIComboBox(INTERVAL); - autoCleanRetainIntervalComboBox.setSelectedIndex(DEFAULT_INDEX); - autoCleanPane.add(useVcsAutoCleanScheduleCheckBox); - autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Every"))); - autoCleanPane.add(autoCleanIntervalComboBox); - autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Content"))); - autoCleanPane.add(autoCleanRetainIntervalComboBox); - autoCleanPane.add(new UILabel(i18nText("Fine-Design_Vcs_Auto_Clean_Last"))); - useVcsAutoCleanScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode()); - autoCleanPane.setVisible(false); - return autoCleanPane; - } - - private JPanel createSaveIntervalPane() { - JPanel saveIntervalPane = new JPanel(FRGUIPaneFactory.createLeftZeroLayout()); - useVcsAutoSaveScheduleCheckBox = new UICheckBox(); - autoSaveIntervalEditor = new IntegerEditor(60); - saveIntervalPane.add(useVcsAutoSaveScheduleCheckBox); - saveIntervalPane.add(new UILabel(i18nText("Fine-Design_Vcs_Every"))); - saveIntervalPane.add(autoSaveIntervalEditor); - saveIntervalPane.add(new UILabel(i18nText("Fine-Design_Vcs_Save_Delay"))); - useVcsAutoSaveScheduleCheckBox.setEnabled(!VcsHelper.getInstance().isLegacyMode()); - saveIntervalPane.setVisible(false); - return saveIntervalPane; - } - - - /** * 模创建板版本gc 配置操作面板 * @@ -904,10 +796,6 @@ public class PreferencePane extends BasicPane { gcEnableCheckBox.setSelected(GcConfig.getInstance().isGcEnable()); gcButton.setEnabled(gcEnableCheckBox.isSelected()); - useVcsAutoSaveScheduleCheckBox.setSelected(vcsConfigManager.isUseAutoSave()); - useVcsAutoCleanScheduleCheckBox.setSelected(VcsConfig.getInstance().isUseV2AutoClean()); - autoSaveIntervalEditor.setValue(vcsConfigManager.getAutoSaveInterval()); - gridLineColorTBButton.setColor(designerEnvManager.getGridLineColor()); paginationLineColorTBButton.setColor(designerEnvManager.getPaginationLineColor()); @@ -987,21 +875,6 @@ public class PreferencePane extends BasicPane { } } - private int getDay(int dateIndex) { - switch (dateIndex) { - case ONE_DAY_INDEX: - return ONE_DAY_INT; - case ONE_WEEK_INDEX: - return ONE_WEEK_INT; - case ONE_MONTH_INDEX: - return ONE_MONTH_INT; - case SIX_MONTH_INDEX: - return SIX_MONTH_INT; - default: - return THREE_MONTH_INT; - } - } - /** * The method of update. */ @@ -1047,17 +920,6 @@ public class PreferencePane extends BasicPane { vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected()); vcsConfigManager.setSaveCommit(this.saveCommitCheckBox.isSelected()); vcsConfigManager.setUseInterval(this.useIntervalCheckBox.isSelected()); - vcsConfigManager.setUseAutoSave(this.useVcsAutoSaveScheduleCheckBox.isSelected()); - vcsConfigManager.setAutoSaveInterval(this.autoSaveIntervalEditor.getValue()); - Configurations.update(new WorkerAdaptor(VcsConfig.class) { - @Override - public void run() { - VcsConfig.getInstance().setUseV2AutoClean(useVcsAutoCleanScheduleCheckBox.isSelected()); - VcsConfig.getInstance().setV2CleanInterval(getDay(autoCleanIntervalComboBox.getSelectedIndex())); - VcsConfig.getInstance().setV2RetainInterval(getDay(autoCleanRetainIntervalComboBox.getSelectedIndex())); - } - }); - dealWithSchedule(); designerEnvManager.setStartupPageEnabled(this.startupPageEnabledCheckBox.isSelected()); Configurations.update(new Worker() { @Override @@ -1132,31 +994,6 @@ public class PreferencePane extends BasicPane { } - private void dealWithSchedule() { - new SwingWorker() { - @Override - protected Void doInBackground() throws Exception { - boolean v2FunctionSupport = VcsHelper.getInstance().checkV2FunctionSupport(); - if (v2FunctionSupport) { - //如果支持V2 - if (useVcsAutoSaveScheduleCheckBox.isSelected()) { - FineLoggerFactory.getLogger().info("[VcsV2] start auto save!"); - VcsHelper.getInstance().startAutoSave(autoSaveIntervalEditor.getValue()); - } else { - VcsHelper.getInstance().stopAutoSave(); - } - if (useVcsAutoCleanScheduleCheckBox.isSelected()) { - FineLoggerFactory.getLogger().info("[VcsV2] start auto clean!"); - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob(getDay(autoCleanIntervalComboBox.getSelectedIndex())); - } else { - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(); - } - } - return null; - } - }.execute(); - } - // 如果语言设置改变了,则显示重启对话框 public void showRestartDialog() { if (!languageChanged) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java index 174655127c..fc2f9c658c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java @@ -325,7 +325,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt if (VcsHelper.getInstance().needInit()) { vcsAction = new VcsAction(); - if (!isLegacyOnCluster()) { + if (!WorkContext.getCurrent().isCluster()) { vcsAction.setName(Toolkit.i18nText("Fine-Design_Vcs_Title")); } else { vcsAction.setName(Toolkit.i18nText("Fine-Design_Vcs_NotSupportRemote")); @@ -509,7 +509,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private void fireVcsActionChange(boolean enable) { if (!DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() || VcsHelper.getInstance().isUnSelectedTemplate() - || isLegacyOnCluster()) { + || WorkContext.getCurrent().isCluster()) { setEnabled(false); return; } @@ -810,11 +810,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } } - private boolean isLegacyOnCluster() { - // 老模式且为集群,用于代替之前的只判断集群逻辑 - return WorkContext.getCurrent().isCluster() && VcsHelper.getInstance().isLegacyMode(); - } - private String doCheck (String userInput, String suffix) { String errorMsg = StringUtils.EMPTY; if (selectedOperation.duplicated(userInput, suffix, true)) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java index 8551f735b9..f61bba67a8 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsConfigManager.java @@ -16,10 +16,6 @@ public class VcsConfigManager implements XMLReadable, XMLWriter { private boolean useInterval = true; private int saveInterval = 60; - private boolean useAutoSave = false; - - private int autoSaveInterval = 15; - public static VcsConfigManager getInstance() { return instance; } @@ -52,23 +48,6 @@ public class VcsConfigManager implements XMLReadable, XMLWriter { return saveInterval; } - public int getAutoSaveInterval() { - return autoSaveInterval; - } - - public void setAutoSaveInterval(int autoSaveInterval) { - this.autoSaveInterval = autoSaveInterval; - } - - public boolean isUseAutoSave() { - return useAutoSave; - } - - public void setUseAutoSave(boolean useAutoSave) { - this.useAutoSave = useAutoSave; - } - - public void setSaveInterval(int saveInterval) { this.saveInterval = saveInterval; } @@ -80,8 +59,6 @@ public class VcsConfigManager implements XMLReadable, XMLWriter { this.setSaveInterval(reader.getAttrAsInt("saveInterval", 60)); this.setUseInterval(reader.getAttrAsBoolean("useInterval", true)); this.setVcsEnable(reader.getAttrAsBoolean("vcsEnable", true)); - this.setAutoSaveInterval(reader.getAttrAsInt("autoSaveInterval", 15)); - this.setUseAutoSave(reader.getAttrAsBoolean("useAutoSave", false)); } } @@ -92,8 +69,6 @@ public class VcsConfigManager implements XMLReadable, XMLWriter { writer.attr("saveInterval", this.getSaveInterval()); writer.attr("useInterval", this.isUseInterval()); writer.attr("vcsEnable", this.isVcsEnable()); - writer.attr("autoSaveInterval", this.getAutoSaveInterval()); - writer.attr("useAutoSave", this.isUseAutoSave()); writer.end(); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java index b245eff66c..980ccb5a3a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsHelper.java @@ -2,7 +2,6 @@ package com.fr.design.mainframe.vcs.common; import com.fr.concurrent.NamedThreadFactory; -import com.fr.config.ConfigEvent; import com.fr.design.DesignerEnvManager; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.TemplateTreePane; @@ -13,9 +12,6 @@ import com.fr.design.mainframe.JTemplate; import com.fr.design.mainframe.JTemplateActionListener; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.ui.FileVersionTable; -import com.fr.event.Event; -import com.fr.event.EventDispatcher; -import com.fr.event.ListenerAdaptor; import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; @@ -29,14 +25,11 @@ import com.fr.workspace.server.vcs.filesystem.VcsFileSystem; import com.fr.workspace.server.vcs.git.config.GcConfig; import javax.swing.Icon; -import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; import java.awt.Color; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; /** * Created by XiaXiang on 2019/4/17. @@ -62,65 +55,10 @@ public class VcsHelper implements JTemplateActionListener { private final static String SERVICE_NAME_MOVE = "moveVcs"; private static final VcsHelper INSTANCE = new VcsHelper(); - private static ScheduledExecutorService saveSchedule; - - private volatile boolean legacyMode; - public static VcsHelper getInstance() { return INSTANCE; } - private VcsHelper() { - VcsOperator op = WorkContext.getCurrent().get(VcsOperator.class); - // 开了设计器启动页面时一开始取不到VcsOperator,通过下面的切换环境事件再取,这边判断下 - if (op != null) { - legacyMode = op.isLegacyMode(); - } - EventDispatcher.listen(ConfigEvent.READY, new ListenerAdaptor() { - @Override - protected void on(Event event) { - try { - legacyMode = WorkContext.getCurrent().get(VcsOperator.class).isLegacyMode(); - FineLoggerFactory.getLogger().info("[VcsHelper] legacyMode:{}", legacyMode); - } catch (Exception e) { - //保险起见走老逻辑 - legacyMode = true; - FineLoggerFactory.getLogger().error("[VcsHelper] get legacy failed", e.getMessage()); - } - } - }); - } - - /** - * 开始自动保存任务 - * - * @param interval 时间间隔 - */ - public void startAutoSave(int interval) { - stopAutoSave(); - saveSchedule = Executors.newSingleThreadScheduledExecutor(new NamedThreadFactory("VcsAutoSaveSchedule")); - saveSchedule.scheduleWithFixedDelay(new Runnable() { - @Override - public void run() { - FineLoggerFactory.getLogger().info("[VcsV2] start to run auto save schedule"); - JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (DesignerEnvManager.getEnvManager().getVcsConfigManager().isVcsEnable() && JTemplate.isValid(template)) { - fireAutoSaveVcs(template); - } - } - }, interval, interval, TimeUnit.MINUTES); - } - - /** - * 停止任务 - */ - public void stopAutoSave() { - if (saveSchedule != null && !saveSchedule.isShutdown()) { - saveSchedule.shutdown(); - } - } - - private int containsFolderCounts() { TemplateFileTree fileTree = TemplateTreePane.getInstance().getTemplateFileTree(); if (fileTree.getSelectionPaths() == null) { @@ -195,21 +133,24 @@ public class VcsHelper implements JTemplateActionListener { fireVcs.execute(new Runnable() { @Override public void run() { + String fileName = getEditingFilename(); VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); - boolean replace = needDeleteVersion(entity); int latestFileVersion = 0; if (entity != null) { latestFileVersion = entity.getVersion(); } if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - operator.saveVersionFromCache(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1, replace); + operator.saveVersionFromCache(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1); String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - List updatedList = WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst(VCS_FILE_SLASH, StringUtils.EMPTY)); - SwingUtilities.invokeLater(() -> FileVersionTable.getInstance().updateModel(1, updatedList)); + FileVersionTable.getInstance().updateModel(1, WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst(VCS_FILE_SLASH, StringUtils.EMPTY))); } else { - operator.saveVersion(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1, replace); + operator.saveVersion(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1); + } + VcsEntity oldEntity = WorkContext.getCurrent().get(VcsOperator.class).getFileVersionByIndexAndUsername(fileName, getCurrentUsername(), 1); + if (needDeleteVersion(oldEntity)) { + operator.deleteVersion(oldEntity.getFilename(), oldEntity.getVersion()); } if (GcConfig.getInstance().isGcEnable()) { operator.gc(); @@ -217,9 +158,7 @@ public class VcsHelper implements JTemplateActionListener { } }); - if (!fireVcs.isShutdown()) { - fireVcs.shutdown(); - } + fireVcs.shutdown(); } /** @@ -249,85 +188,12 @@ public class VcsHelper implements JTemplateActionListener { moveVcs.shutdown(); } - /** - * 判断是否为老模式 - * @return 是否为老模式 - */ - public boolean isLegacyMode() { - return legacyMode; - } - - /** - * 更新当前的legacyMode状态 - *
  • 目前用在迁移结束后更新模式为新模式
  • - * - */ - public void updateLegacyMode() { - this.legacyMode = !legacyMode; - } @Override public void templateOpened(JTemplate jt) { - try { - if (checkAutoSaveSupport()) { - startAutoSave(VcsConfigManager.getInstance().getAutoSaveInterval()); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } } - /** - * 响应版本管理自动保存 - * - *
  • 直接用template的file来保存的话相当于拿源文件来保存模板,这样用户做的改动会丢失
  • - *
  • 因此需要自己实现一下自动保存的逻辑,将当前模板的数据导出,再拿这个Byte[]去做我们需要的保存处理
  • - *
  • 保存后需要触发清理逻辑
  • - * - * @param jt 模板 - */ - public void fireAutoSaveVcs(final JTemplate jt) { - String fileName = getEditingFilename(); - VcsOperator operator = WorkContext.getCurrent().get(VcsOperator.class); - VcsEntity entity = operator.getFileVersionByIndex(fileName, 0); - boolean replace = needDeleteVersion(entity); - int latestFileVersion = 0; - if (entity != null) { - latestFileVersion = entity.getVersion(); - } - if (JTemplate.isValid(jt)) { - doSave(jt, fileName, latestFileVersion, replace, operator); - } - } - - private void doSave(JTemplate jt, String fileName, int latestFileVersion, boolean replace, VcsOperator operator) { - if (jt.getEditingFILE() instanceof VcsCacheFileNodeFile) { - operator.saveVersionFromCache(getCurrentUsername(), fileName, StringUtils.EMPTY, latestFileVersion + 1, replace); - String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); - List updatedList = WorkContext.getCurrent().get(VcsOperator.class).getVersions(path.replaceFirst(VCS_FILE_SLASH, StringUtils.EMPTY)); - SwingUtilities.invokeLater(() -> FileVersionTable.getInstance().updateModel(1, updatedList)); - } else { - autoSave(jt, getCurrentUsername(), fileName, latestFileVersion + 1, replace, operator); - } - if (GcConfig.getInstance().isGcEnable()) { - operator.gc(); - } - } - - private void autoSave(JTemplate jt, String currentUsername, String fileName, int nowVersion, boolean replace, VcsOperator operator) { - try { - if (JTemplate.isValid(jt)) { - operator.autoSave(currentUsername, fileName, StringUtils.EMPTY, nowVersion, jt.exportData(), replace); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - } - - - - /** * 模板保存时 处理. * @@ -344,40 +210,6 @@ public class VcsHelper implements JTemplateActionListener { @Override public void templateClosed(JTemplate jt) { - try { - if (checkAutoSaveSupport()) { - stopAutoSave(); - } - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage()); - } - - } - - /** - * 判断是否支持V2功能 - * - * @return 支持返回true - */ - public boolean checkV2FunctionSupport() { - return !VcsHelper.getInstance().isLegacyMode() && (WorkContext.getCurrent().isLocal() || WorkContext.getCurrent().isRoot()); - } - /** - * 判断是否支持迁移功能 - * - * @return 支持返回true - */ - public boolean checkMoveFunctionSupport() { - return VcsHelper.getInstance().isLegacyMode() && (WorkContext.getCurrent().isLocal() || WorkContext.getCurrent().isRoot()); - } - - /** - * 是否支持自动保存 - * - * @return 支持返回true - */ - public boolean checkAutoSaveSupport() { - return VcsConfigManager.getInstance().isUseAutoSave() && !VcsHelper.getInstance().isLegacyMode(); } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java deleted file mode 100644 index af450d8250..0000000000 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java +++ /dev/null @@ -1,406 +0,0 @@ -package com.fr.design.mainframe.vcs.ui; - - -import com.fr.base.svg.IconUtils; -import com.fr.design.dialog.BasicDialog; -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.DialogActionAdapter; -import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ibutton.UIRadioButton; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.gui.iprogressbar.ModernUIProgressBarUI; -import com.fr.design.gui.ispinner.UISpinner; -import com.fr.design.i18n.Toolkit; -import com.fr.design.layout.FRGUIPaneFactory; -import com.fr.design.layout.VerticalFlowLayout; -import com.fr.design.mainframe.vcs.common.VcsHelper; -import com.fr.design.utils.DesignUtils; -import com.fr.design.widget.FRWidgetFactory; -import com.fr.general.FRFont; -import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import com.fr.workspace.server.vcs.v2.move.VcsMoveService; -import com.fr.workspace.server.vcs.v2.move.VcsMoveStrategy; - -import javax.swing.ButtonGroup; -import javax.swing.JPanel; -import javax.swing.JProgressBar; -import javax.swing.SwingUtilities; -import javax.swing.SwingWorker; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.List; -import java.util.concurrent.ExecutionException; - - -/** - * 迁移面板 - * - * @author Destiny.Lin - * @since 11.0 - * Created on 2023/6/13 - */ -public class VcsMovePanel extends BasicPane { - private static final FRFont FONT = DesignUtils - .getDefaultGUIFont() - .applySize(14) - .applyStyle(FRFont.BOLD); - - private static final Color BACK_GROUND_COLOR = new Color(202,232,255); - - //提示字体的颜色,直接模仿其他面板的写法 - private static final Color TIP_COLOR = new Color(51, 51, 52, (int)Math.round(0.5 * 255)); - - private static final Color LABEL_COLOR = new Color(34,149,233); - - private static final int MIN_VALUE = 1; - - private static final int MAX_VALUE = 999; - - private static final int STEP = 1; - - private static final int DEFAULT_VALUE = 5; - - public static final String SETTING = "SETTING"; - - public static final String PROCESS = "PROCESS"; - - public static final String SUCCESS = "SUCCESS"; - - public static final String FAILED = "FAILED"; - - public static boolean moving = false; - private UILabel vcsUpdateExistLabel; - private UILabel vcsUpdateFireLabel; - private BasicPane choosePane; - private CardLayout parentCard; - private JPanel parentPane; - private static final JProgressBar PROGRESS_BAR = new JProgressBar(); - - private JPanel progressPanel; - private UILabel tipLabel; - private UIButton successButton; - private UILabel iconLabel; - private UILabel successLabel; - private UILabel successTipLabel; - private UIButton failedButton; - private UILabel failedIconLabel; - private UILabel failedLabel; - private UILabel failedTipLabel; - - //保留全部 - private UIRadioButton moveAllButton; - //默认选项,保留部分 - private UIRadioButton moveDefaultButton; - //全部放弃 - private UIRadioButton moveNothingButton; - - private UISpinner spinner; - - private MoveCallBack callBack; - - private JPanel updatePane; - - private boolean visible = false; - - - public VcsMovePanel(CardLayout cardLayout, JPanel parentPane, MoveCallBack callBack) { - this.parentCard = cardLayout; - this.parentPane = parentPane; - this.callBack = callBack; - this.setLayout(new BorderLayout()); - updatePane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane(); - updatePane.setBackground(BACK_GROUND_COLOR); - //初始化迁移的面板 - initVcsLabel(updatePane); - //initVcsChoosePane - initVcsChoosePane(); - //初始化listener - initListener(); - this.add(updatePane); - checkVisible(); - //如果已经在迁移 - if (VcsMoveService.getInstance().isMoving()) { - initProcessPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), PROCESS); - } - } - - private void checkVisible() { - new SwingWorker() { - @Override - protected Boolean doInBackground() throws Exception { - return VcsHelper.getInstance().checkMoveFunctionSupport(); - } - @Override - protected void done() { - try { - boolean useMove = get(); - VcsMovePanel.this.setVisible(useMove); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - } - }.execute(); - } - - private void initProcessPane() { - JPanel processPane = new JPanel(); - JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); - PROGRESS_BAR.setStringPainted(true); - PROGRESS_BAR.setUI(new ModernUIProgressBarUI()); - PROGRESS_BAR.setBorderPainted(false); - PROGRESS_BAR.setOpaque(false); - PROGRESS_BAR.setBorder(null); - PROGRESS_BAR.setSize(BasicDialog.MEDIUM); - body.add(PROGRESS_BAR); - body.add(new UILabel(StringUtils.BLANK)); - tipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_While_Moving")); - tipLabel.setAlignmentX(CENTER_ALIGNMENT); - body.add(tipLabel); - processPane.add(body); - processPane.setLayout(FRGUIPaneFactory.createCenterLayout(body, 0.5f, 0.5f)); - parentPane.add(processPane, PROCESS); - } - - private void initVcsChoosePane() { - choosePane = new BasicPane() { - @Override - protected String title4PopupWindow() { - return Toolkit.i18nText("Fine-Design_Vcs_Deal_With_Entry"); - } - }; - VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP); - layout.setAlignLeft(true); - choosePane.setLayout(layout); - - //初始化上方的文字板块 - initTopDesc(); - //初始化中间区域的单选框 - initRadioButton(); - //初始化下方的Tip描述 - initTipDesc(); - } - - private void initTopDesc() { - UILabel label = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_How_To_Deal_With_Entry")); - choosePane.add(label); - } - - private void initTipDesc() { - UILabel descLabel = FRWidgetFactory.createLineWrapLabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Desc")); - descLabel.setForeground(TIP_COLOR); - choosePane.add(descLabel); - } - - private void initRadioButton() { - //保留全部 - moveAllButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Vcs_Move_All")); - //默认选项,保留部分 - moveDefaultButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Vcs_Move_Default")); - //全部放弃 - moveNothingButton = new UIRadioButton(Toolkit.i18nText("Fine-Design_Vcs_Move_Nothing")); - // 将按钮"保留部分"设置为选中状态 - moveDefaultButton.setSelected(true); - // 创建一个按钮组,添加三个按钮 - ButtonGroup buttonGroup = new ButtonGroup(); - buttonGroup.add(moveAllButton); - buttonGroup.add(moveDefaultButton); - buttonGroup.add(moveNothingButton); - - JPanel moveDefaultPanel = new JPanel(); - JPanel moveAllPane = new JPanel(); - JPanel moveNothingPane = new JPanel(); - moveAllPane.add(moveAllButton); - moveDefaultPanel.add(moveDefaultButton); - moveDefaultPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Default_Text_Left"))); - spinner = new UISpinner(MIN_VALUE, MAX_VALUE, STEP, DEFAULT_VALUE); - moveDefaultPanel.add(spinner); - moveDefaultPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Default_Text_Right"))); - moveNothingPane.add(moveNothingButton); - choosePane.add(moveAllPane); - choosePane.add(moveDefaultPanel); - choosePane.add(moveNothingPane); - } - - private void initVcsLabel(JPanel parent) { - vcsUpdateExistLabel = new UILabel(IconUtils.readIcon("/com/fr/design/vcs/vcs_move_icon.svg")); - vcsUpdateExistLabel.setText(Toolkit.i18nText("Fine-Design_Vcs_Can_Update")); - vcsUpdateFireLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Update")); - vcsUpdateFireLabel.setForeground(LABEL_COLOR); - vcsUpdateFireLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); - parent.add(vcsUpdateExistLabel); - parent.add(vcsUpdateFireLabel); - } - - private void initListener() { - vcsUpdateFireLabel.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - BasicDialog dlg = choosePane.showMediumWindow(SwingUtilities.getWindowAncestor(VcsMovePanel.this), new DialogActionAdapter() { - @Override - public void doOk() { - //进度条面板 - initProcessPane(); - VcsMovePanel.this.getParentCard().next(getParentPane()); - VcsMoveStrategy strategy; - if (moveDefaultButton.isSelected()) { - strategy = VcsMoveStrategy.createNumStrategy((int) spinner.getValue()); - } else if (moveNothingButton.isSelected()) { - strategy = VcsMoveStrategy.ALL_GIVE_UP; - } else { - strategy = VcsMoveStrategy.ALL_RETAIN; - } - new MoveWorker(strategy).execute(); - } - }); - dlg.setVisible(true); - } - }); - } - - private void initSuccessPane() { - JPanel successPane = new JPanel(); - JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); - successButton = new UIButton(Toolkit.i18nText("Fine-Design_Vcs_Move_Success_Go")); - initSuccessButtonListener(); - iconLabel = new UILabel(IconUtils.readIcon("/com/fr/design/vcs/move_success.svg")); - successLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Success")); - successLabel.setFont(FONT); - successTipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Success_Tip")); - initStatusPane(successTipLabel, iconLabel, successLabel, successButton, body, SUCCESS, successPane); - } - - private void initSuccessButtonListener() { - successButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - doAfterMove(); - } - }); - } - - private void initFailedButtonListener() { - failedButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - doAfterMove(); - } - }); - } - - private void doAfterMove() { - visible = !VcsHelper.getInstance().isLegacyMode(); - updatePane.setVisible(!visible); - callBack.doCallBack(visible); - parentCard.show(parentPane, SETTING); - } - - - @Override - protected String title4PopupWindow() { - return StringUtils.EMPTY; - } - - public CardLayout getParentCard() { - return parentCard; - } - - public JPanel getParentPane() { - return parentPane; - } - - private void initFailedPane() { - JPanel failedPane = new JPanel(); - JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); - failedButton = new UIButton(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed_Go")); - initFailedButtonListener(); - failedIconLabel = new UILabel(IconUtils.readIcon("/com/fr/design/vcs/move_failed.svg")); - failedLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed")); - failedLabel.setFont(FONT); - failedTipLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Failed_Tip")); - initStatusPane(failedTipLabel, failedIconLabel, failedLabel, failedButton, body, FAILED, failedPane); - } - - private void initStatusPane(UILabel tipLabel, UILabel iconLabel, UILabel label, UIButton button, JPanel body, String tag,JPanel statusPane) { - tipLabel.setForeground(TIP_COLOR); - body.add(iconLabel); - body.add(new UILabel(StringUtils.BLANK)); - body.add(label); - body.add(new UILabel(StringUtils.BLANK)); - body.add(tipLabel); - body.add(new UILabel(StringUtils.BLANK)); - body.add(button); - statusPane.add(body); - statusPane.setLayout(FRGUIPaneFactory.createCenterLayout(body, 0.5f, 0.5f)); - parentPane.add(statusPane, tag); - iconLabel.setAlignmentX(CENTER_ALIGNMENT); - label.setAlignmentX(CENTER_ALIGNMENT); - button.setAlignmentX(CENTER_ALIGNMENT); - tipLabel.setAlignmentX(CENTER_ALIGNMENT); - } - - - private class MoveWorker extends SwingWorker { - - private VcsMoveStrategy strategy; - - public MoveWorker(VcsMoveStrategy strategy) { - this.strategy = strategy; - } - - @Override - protected Void doInBackground() throws Exception { - try { - //开始迁移 - VcsMoveService.getInstance().startMove(new VcsMoveService.BaseMoveServiceWhileMoving() { - @Override - public void publishProgress() { - int num = VcsMoveService.getInstance().getCurrentMove(); - publish(num); - } - @Override - public void prepare4Move() { - PROGRESS_BAR.setMaximum(VcsMoveService.getInstance().getTotal()); - } - }, strategy); - } catch (Exception e) { - this.cancel(true); - VcsMoveService.getInstance().stopMoving(); - initFailedPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), FAILED); - FineLoggerFactory.getLogger().error("[VcsV2] Vcs move failed!"); - } - return null; - } - - @Override - protected void process(List chunks) { - PROGRESS_BAR.setValue(chunks.get(chunks.size() - 1)); - } - - @Override - protected void done() { - VcsMoveService.getInstance().stopMoving(); - initSuccessPane(); - VcsMovePanel.this.getParentCard().show(getParentPane(), SUCCESS); - VcsHelper.getInstance().updateLegacyMode(); - } - } - - - /** - * 迁移回调事件 - * - */ - public static class MoveCallBack { - /** - * 处理回调 - */ - public void doCallBack(boolean visible){} - } - -} diff --git a/designer-base/src/main/resources/com/fr/design/vcs/move_failed.svg b/designer-base/src/main/resources/com/fr/design/vcs/move_failed.svg deleted file mode 100644 index 6d36a9dc0c..0000000000 --- a/designer-base/src/main/resources/com/fr/design/vcs/move_failed.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/designer-base/src/main/resources/com/fr/design/vcs/move_success.svg b/designer-base/src/main/resources/com/fr/design/vcs/move_success.svg deleted file mode 100644 index 8b92bd8a04..0000000000 --- a/designer-base/src/main/resources/com/fr/design/vcs/move_success.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/designer-base/src/main/resources/com/fr/design/vcs/vcs_move_icon.svg b/designer-base/src/main/resources/com/fr/design/vcs/vcs_move_icon.svg deleted file mode 100644 index a5ad91d09c..0000000000 --- a/designer-base/src/main/resources/com/fr/design/vcs/vcs_move_icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -