From 23b7051b6eb06507145d016e1fc23fa9805d8010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Destiny=2ELin-=E6=9E=97=E9=94=A6=E9=BE=99?= Date: Thu, 20 Jul 2023 23:22:48 +0800 Subject: [PATCH 01/12] =?UTF-8?q?REPORT-101167=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=80=E6=9C=9F=E3=80=91=E9=9B=86?= =?UTF-8?q?=E7=BE=A4=E7=8E=AF=E5=A2=83=EF=BC=8C=E4=BF=9D=E5=AD=98=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 51bfa1fb5..d16dce3d1 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 @@ -916,7 +916,8 @@ public class PreferencePane extends BasicPane { defaultStringToFormulaBox.setSelected(false); } VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); - if (WorkContext.getCurrent().isCluster()) { + //如果是集群并且是老版本则不可用 + if (WorkContext.getCurrent().isCluster() && VcsHelper.getInstance().isLegacyMode()) { vcsEnableCheckBox.setEnabled(false); gcEnableCheckBox.setEnabled(false); } From 70aba8428818b06fd58a14e0c2beb41711ad7d25 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Fri, 21 Jul 2023 00:15:06 +0800 Subject: [PATCH 02/12] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/AbstractSupportSelectTablePane.java | 20 +++++++++++-- .../vcs/ui/ToolTipTableCellRenderer.java | 28 +++++++++++++++++++ .../mainframe/vcs/ui/VcsCenterPane.java | 6 ++++ .../design/mainframe/vcs/ui/VcsNewPane.java | 6 ++++ .../standard/vcslist/vcs_sort_normal.svg | 4 +++ 5 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java create mode 100644 designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index 7c2d56b50..a4ee2623c 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -1,5 +1,6 @@ package com.fr.design.mainframe.vcs.ui; +import com.fr.base.svg.IconUtils; import com.fr.design.data.tabledata.tabledatapane.loading.TipsPane; import com.fr.design.dialog.BasicPane; import com.fr.design.gui.icheckbox.UICheckBox; @@ -242,6 +243,7 @@ public abstract class AbstractSupportSelectTablePane exte public HeaderRenderer(JTable table) { this.tableHeader = table.getTableHeader(); + tableHeader.setCursor(new Cursor(Cursor.HAND_CURSOR)); selectBox = new UICheckBox(); selectBox.setSelected(false); tableHeader.addMouseListener(new MouseAdapter() { @@ -290,8 +292,12 @@ public abstract class AbstractSupportSelectTablePane exte tableHeader = table.getTableHeader(); tableHeader.setReorderingAllowed(false); String valueStr = (String) value; - JLabel label = new JLabel(valueStr); - label.setHorizontalAlignment(SwingConstants.LEFT); + UILabel label = new UILabel(valueStr); + if (needIcon4Head(column)) { + label.setIcon(IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_sort")); + label.setHorizontalTextPosition(JLabel.LEFT); + label.setHorizontalAlignment(SwingConstants.LEFT); + } selectBox.setHorizontalAlignment(SwingConstants.CENTER); selectBox.setBorderPainted(true); JComponent component = (column == 0) ? selectBox : label; @@ -320,6 +326,7 @@ public abstract class AbstractSupportSelectTablePane exte setColumnClass(classes); this.setDefaultEditor(Boolean.class, new BooleanEditor()); this.setDefaultRenderer(Boolean.class, new BooleanRenderer()); + this.setDefaultRenderer(UILabel.class, new ToolTipTableCellRenderer()); } @Override @@ -375,5 +382,14 @@ public abstract class AbstractSupportSelectTablePane exte } + /** + * 表头的某列是否需要icon + * + * @param col 列 + * @return + */ + protected boolean needIcon4Head(int col) { + return col != 0; + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java new file mode 100644 index 000000000..9e2dca105 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java @@ -0,0 +1,28 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.general.GeneralUtils; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.table.DefaultTableCellRenderer; +import java.awt.*; + + +/** + * 带ToolTip的UILabel的表格渲染类 + * + */ +public class ToolTipTableCellRenderer extends DefaultTableCellRenderer { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + if(component instanceof JLabel) { + String toolTipText = GeneralUtils.objectToString(value); + if (StringUtils.isNotEmpty(toolTipText)) { + ((JLabel) component).setToolTipText(toolTipText); + } + } + return component; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index 5c2520ce1..d1ac7ad31 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -125,6 +125,12 @@ public class VcsCenterPane extends VcsNewPane { }); } + + @Override + protected boolean needIcon4Head(int col) { + return col != 0 && col != OPERATOR_COL; + } + private void initOpenListener() { open.addMouseListener(new MouseAdapter() { @Override diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index 42b5f15db..e65726bc6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -113,6 +113,7 @@ public class VcsNewPane extends RecyclePane { this.operatorPane = createOperatorPane(); this.model.setDefaultEditor(VcsOperatorPane.class, new VcsCellEditor(createOperatorPane())); this.model.setDefaultRenderer(VcsOperatorPane.class, new VcsCellRender(createOperatorPane())); + this.model.setDefaultRenderer(UILabel.class, new ToolTipTableCellRenderer()); } @@ -339,4 +340,9 @@ public class VcsNewPane extends RecyclePane { }; dialog.setVisible(true); } + + @Override + protected boolean needIcon4Head(int col) { + return col != 0 && col != OPERATOR_COL; + } } diff --git a/designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg b/designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg new file mode 100644 index 000000000..01d9ffeb5 --- /dev/null +++ b/designer-base/src/main/resources/com/fr/design/standard/vcslist/vcs_sort_normal.svg @@ -0,0 +1,4 @@ + + + + From e20fca28e3b389d0a78bf4c7990e25188c85bca0 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" <3166887LjL> Date: Fri, 21 Jul 2023 01:31:52 +0800 Subject: [PATCH 03/12] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/ToolTipTableCellRenderer.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java index 9e2dca105..bfb10e205 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/ToolTipTableCellRenderer.java @@ -3,7 +3,8 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.general.GeneralUtils; import com.fr.stable.StringUtils; -import javax.swing.*; +import javax.swing.JTable; +import javax.swing.JLabel; import javax.swing.table.DefaultTableCellRenderer; import java.awt.*; @@ -11,6 +12,9 @@ import java.awt.*; /** * 带ToolTip的UILabel的表格渲染类 * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/21 */ public class ToolTipTableCellRenderer extends DefaultTableCellRenderer { From 10569aa772f4883a5e7a0716b083bb02574084ee Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 10:03:02 +0800 Subject: [PATCH 04/12] =?UTF-8?q?REPORT-100954=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E4=B8=AD=E5=BF=83=E5=BC=B9=E7=AA=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/actions/file/PreferencePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d16dce3d1..e7f747d81 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 @@ -917,7 +917,7 @@ public class PreferencePane extends BasicPane { } VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager(); //如果是集群并且是老版本则不可用 - if (WorkContext.getCurrent().isCluster() && VcsHelper.getInstance().isLegacyMode()) { + if (VcsHelper.getInstance().isLegacyMode() && WorkContext.getCurrent().isCluster()) { vcsEnableCheckBox.setEnabled(false); gcEnableCheckBox.setEnabled(false); } From 378ae2eb0e8b32150787c8b39776d98407dae90a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 10:54:50 +0800 Subject: [PATCH 05/12] =?UTF-8?q?REPORT-101063=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=B7=B2=E6=89=93=E5=BC=80=EF=BC=8C=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=EF=BC=8C=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=A2=AB=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 68 +++++++++++++++++-- 1 file changed, 63 insertions(+), 5 deletions(-) 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 ad65c59ac..ad2980d98 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 @@ -46,6 +46,7 @@ import com.fr.design.roleAuthority.RolesAlreadyEditedPane; import com.fr.design.ui.util.UIUtil; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.design.worker.save.CallbackSaveWorker; import com.fr.event.Event; import com.fr.file.filetree.FileNode; import com.fr.general.ComparatorUtils; @@ -502,21 +503,31 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath(); path = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path); boolean currentEditing = isCurrentEditing(path); - // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) - closeOpenedTemplate(path, currentEditing); if (VcsHelper.getInstance().isLegacyMode()) { + // 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本) + closeOpenedTemplate(path, currentEditing); FileVersionsPanel fileVersionTablePanel = FileVersionsPanel.getInstance(); fileVersionTablePanel.showFileVersionsPane(); stateChange(); } else { - VcsNewPane panel = new VcsNewPane(path); - BasicDialog dialog = panel.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); + //如果指定模板已经打开: + //1.如果该模板已保存,则正常打开新版本管理弹窗 + //2.如果该模板未保存,触发保存逻辑 + // a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗 + // b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗 + // c.如果用户选择取消, 则啥操作都不做 + checkTemplateSavedAndShowVcsNewPane(path, currentEditing); } } + private void showVcsNewPane(String path) { + VcsNewPane panel = new VcsNewPane(path); + BasicDialog dialog = panel.showWindow(DesignerContext.getDesignerFrame(), false); + dialog.setVisible(true); + } + /** * 版本管理可用状态的监控 */ @@ -571,6 +582,53 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } + private void checkTemplateSavedAndShowVcsNewPane(String path, boolean isCurrentEditing) { + for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { + if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { + if (!jTemplate.isALLSaved()) { + if (isCurrentEditing) { + MultiTemplateTabPane.getInstance().setIsCloseCurrent(true); + } + MultiTemplateTabPane.getInstance().closeFormat(jTemplate); + confirmCloseAndShowVcsNewPane(jTemplate, path); + return; + } else { + showVcsNewPane(path); + } + } + } + } + + private void confirmCloseAndShowVcsNewPane(JTemplate specifiedTemplate, String path) { + if (specifiedTemplate == null) { + return; + } + if (!specifiedTemplate.isALLSaved() && !DesignerMode.isVcsMode()) { + specifiedTemplate.stopEditing(); + int returnVal = FineJOptionPane.showConfirmDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Utils_Would_You_Like_To_Save") + " \"" + specifiedTemplate.getEditingFILE() + "\" ?", + Toolkit.i18nText("Fine-Design_Basic_Confirm"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + if (returnVal == JOptionPane.YES_OPTION) { + CallbackSaveWorker worker = specifiedTemplate.save(); + worker.addSuccessCallback(() -> { + FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Template_Already_Saved", specifiedTemplate.getEditingFILE().getName())); + showVcsNewPane(path); + }); + worker.start(specifiedTemplate.getRuntimeId()); + } else if (returnVal == JOptionPane.NO_OPTION) { + closeTpl(specifiedTemplate); + showVcsNewPane(path); + } + } else { + showVcsNewPane(path); + } + } + + private void closeTpl(JTemplate specifiedTemplate) { + HistoryTemplateListCache.getInstance().closeSelectedReport(specifiedTemplate); + MultiTemplateTabPane.getInstance().closeAndFreeLock(specifiedTemplate); + MultiTemplateTabPane.getInstance().activePrevTemplateAfterClose(); + } + } /** From 83b13ffd4baca33d1c4c3fa1cda6cdaad671e430 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 11:13:13 +0800 Subject: [PATCH 06/12] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DesignerFrameFileDealerPane.java | 3 +- .../design/mainframe/vcs/ui/RecyclePane.java | 45 +++++++++++++++++++ .../mainframe/vcs/ui/VcsCenterPane.java | 3 +- .../design/mainframe/vcs/ui/VcsMovePanel.java | 4 +- .../design/mainframe/vcs/ui/VcsNewPane.java | 2 + 5 files changed, 50 insertions(+), 7 deletions(-) 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 ad2980d98..a207b75d5 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 @@ -524,8 +524,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt private void showVcsNewPane(String path) { VcsNewPane panel = new VcsNewPane(path); - BasicDialog dialog = panel.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); + panel.showDialog(); } /** diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index e606fed72..e1a9bce62 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -1,10 +1,12 @@ package com.fr.design.mainframe.vcs.ui; import com.fr.base.svg.IconUtils; +import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.vcs.VcsOperatorWorker; import com.fr.design.mainframe.vcs.TableEntity; import com.fr.design.mainframe.vcs.TableValueOperator; @@ -47,7 +49,9 @@ public class RecyclePane extends AbstractSupportSelectTablePane protected UILabel restoreLabel; private static final int COLUMNS_COUNT = 15; + private BasicDialog dialog; + private BasicDialog parent; private List tableEntities; public RecyclePane() { @@ -196,6 +200,47 @@ public class RecyclePane extends AbstractSupportSelectTablePane } + /** + * 显示弹窗 + * + */ + public void showDialog() { + dialog = this.showWindow(DesignerContext.getDesignerFrame(), false); + dialog.setVisible(true); + } + + /** + * 依据父弹窗显示弹窗 + * + * @param parent 父弹窗 + */ + public void showDialog(BasicDialog parent) { + this.parent = parent; + dialog = this.showWindow(parent, false); + dialog.setVisible(true); + } + + /** + * 关闭弹窗,如果有父弹窗,则一起关闭 + * + */ + public void closeDialog() { + if (dialog != null) { + dialog.dispose(); + } + if (parent != null) { + parent.dispose(); + } + } + + public BasicDialog getDialog() { + return dialog; + } + + public void setDialog(BasicDialog dialog) { + this.dialog = dialog; + } + /** * 删除范围 * diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java index d1ac7ad31..474d6fbb6 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsCenterPane.java @@ -159,8 +159,7 @@ public class VcsCenterPane extends VcsNewPane { return entity.getFilename()+Toolkit.i18nText("Fine-Design_Vcs_Version_Tips"); } }; - BasicDialog dialog = pane.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); + pane.showDialog(getDialog()); } } }); 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 index f9d362ad8..99ce67f21 100644 --- 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 @@ -265,9 +265,7 @@ public class VcsMovePanel extends BasicPane { @Override public void actionPerformed(ActionEvent e) { VcsCenterPane vcsCenterPane = new VcsCenterPane(); - BasicDialog dialog = vcsCenterPane.showWindow(DesignerContext.getDesignerFrame(), false); - dialog.setVisible(true); - + vcsCenterPane.showDialog(); } }); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java index e65726bc6..8273de81d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/VcsNewPane.java @@ -160,6 +160,7 @@ public class VcsNewPane extends RecyclePane { JOptionPane.QUESTION_MESSAGE); if (selVal == JOptionPane.YES_OPTION) { restoreEntity(entity); + VcsNewPane.this.closeDialog(); } } } @@ -229,6 +230,7 @@ public class VcsNewPane extends RecyclePane { if (o instanceof VcsTableEntity) { VcsEntity entity = ((VcsTableEntity) o).getEntity(); previewEntity(entity); + VcsNewPane.this.closeDialog(); } } }); From 9c862e2d6f06713a865a018eae76088116b86973 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 11:26:59 +0800 Subject: [PATCH 07/12] =?UTF-8?q?REPORT-100958=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E8=BF=98?= =?UTF-8?q?=E5=8E=9F=E6=88=96=E8=80=85=E9=A2=84=E8=A7=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=EF=BC=8C=E5=BC=B9=E7=AA=97=E5=BA=94=E8=AF=A5=E5=85=B3=E9=97=AD?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=B3=A8=E9=87=8A=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/DesignerFrameFileDealerPane.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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 a207b75d5..063ef5913 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 @@ -510,12 +510,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt fileVersionTablePanel.showFileVersionsPane(); stateChange(); } else { - //如果指定模板已经打开: - //1.如果该模板已保存,则正常打开新版本管理弹窗 - //2.如果该模板未保存,触发保存逻辑 - // a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗 - // b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗 - // c.如果用户选择取消, 则啥操作都不做 checkTemplateSavedAndShowVcsNewPane(path, currentEditing); } @@ -580,7 +574,17 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt } } - + /** + * 如果指定模板已经打开: + *

1.如果该模板已保存,则正常打开新版本管理弹窗 + *

2.如果该模板未保存,触发保存逻辑 + *

  • a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗 + *
  • b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗 + *
  • c.如果用户选择取消, 则啥操作都不做 + * + * @param path + * @param isCurrentEditing + */ private void checkTemplateSavedAndShowVcsNewPane(String path, boolean isCurrentEditing) { for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { From 941c1e864e9ef56ad4b286ce1f078dde7ac61b62 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 13:35:17 +0800 Subject: [PATCH 08/12] =?UTF-8?q?REPORT-101045=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E7=AB=99=E4=BA=A4=E4=BA=92=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 9 +- .../design/mainframe/vcs/RecycleAction.java | 4 +- .../ui/AbstractSupportSelectTablePane.java | 12 ++ .../design/mainframe/vcs/ui/RecyclePane.java | 25 +++- .../mainframe/vcs/ui/RecycleSettingPane.java | 119 ++++++++++++++++++ 5 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java 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 e7f747d81..563c1620e 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 @@ -64,6 +64,8 @@ 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 com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanSchedule; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; @@ -1189,9 +1191,12 @@ public class PreferencePane extends BasicPane { } if (useVcsAutoCleanScheduleCheckBox.isSelected()) { FineLoggerFactory.getLogger().info("[VcsV2] start auto clean!"); - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob(getDay(autoCleanIntervalComboBox.getSelectedIndex())); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME, + getDay(autoCleanIntervalComboBox.getSelectedIndex()), + VcsAutoCleanSchedule.class); } else { - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).stopVcsAutoCleanJob(VcsAutoCleanService.VCS_AUTO_CLEAN_JOB_NAME); } } return null; diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java index b074f17f8..acd89f668 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/RecycleAction.java @@ -4,7 +4,7 @@ import com.fr.design.actions.UpdateAction; import com.fr.design.dialog.BasicDialog; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; -import com.fr.design.mainframe.vcs.ui.RecyclePane; +import com.fr.design.mainframe.vcs.ui.RecycleSettingPane; import java.awt.event.ActionEvent; @@ -24,7 +24,7 @@ public class RecycleAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { - RecyclePane pane = new RecyclePane(); + RecycleSettingPane pane = new RecycleSettingPane(); BasicDialog dialog = pane.showWindow(DesignerContext.getDesignerFrame(), false); dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java index a4ee2623c..75733121d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/AbstractSupportSelectTablePane.java @@ -220,6 +220,17 @@ public abstract class AbstractSupportSelectTablePane exte //更新表头的勾选框状态 HeaderRenderer renderer = (HeaderRenderer) table.getTableHeader().getDefaultRenderer(); renderer.refreshHeader(table, selectCount >= table.getRowCount()); + changeExtraComponentStatus(); + } + + /** + * 更新额外组件的状态 + */ + protected void changeExtraComponentStatus() { + } + + public int getSelectCount() { + return selectCount; } @@ -256,6 +267,7 @@ public abstract class AbstractSupportSelectTablePane exte selectBox.setSelected(value); selectAllOrNull(value); selectCount = value ? table.getRowCount() : 0; + changeExtraComponentStatus(); tableHeader.repaint(); model.fireTableDataChanged(); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java index e1a9bce62..f9e803c3f 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecyclePane.java @@ -39,8 +39,10 @@ import static com.fr.design.i18n.Toolkit.i18nText; */ public class RecyclePane extends AbstractSupportSelectTablePane { public static final Icon ICON_SEARCH = IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_recycle_search"); - public static final Icon ICON_REFRESH = IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_recycle_restore"); - public static final Icon ICON_DELETE = IconUtils.readIcon("/com/fr/design/standard/vcslist/vcs_recycle_delete"); + public static final Icon ICON_REFRESH = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_restore", IconUtils.ICON_TYPE_NORMAL); + public static final Icon ICON_REFRESH_DISABLE = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_restore", IconUtils.ICON_TYPE_DISABLED); + public static final Icon ICON_DELETE = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_delete", IconUtils.ICON_TYPE_NORMAL); + public static final Icon ICON_DELETE_DISABLE = IconUtils.readSVGIcon("/com/fr/design/standard/vcslist/vcs_recycle_delete", IconUtils.ICON_TYPE_DISABLED); protected UITextField searchTextField; @@ -77,7 +79,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane Toolkit.i18nText("Fine-Design_Vcs_Recycle_Size"), Toolkit.i18nText("Fine-Design_Vcs_Delete_Time"), Toolkit.i18nText("Fine-Design_Vcs_Time") - }, true); + }, false); } public RecyclePane(String title, TableValueOperator operators, boolean needBorder) { @@ -115,17 +117,33 @@ public class RecyclePane extends AbstractSupportSelectTablePane if (isNeedRestore()) { restoreLabel = new UILabel(ICON_REFRESH); restoreLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); + restoreLabel.setDisabledIcon(ICON_REFRESH_DISABLE); + restoreLabel.setEnabled(false); rightPane.add(restoreLabel); } if (isNeedDelete()) { deleteLabel = new UILabel(ICON_DELETE); deleteLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); + deleteLabel.setDisabledIcon(ICON_DELETE_DISABLE); + deleteLabel.setEnabled(false); rightPane.add(deleteLabel); } tableTopPane.add(leftPane, BorderLayout.EAST); tableTopPane.add(rightPane, BorderLayout.WEST); } + + @Override + protected void changeExtraComponentStatus() { + boolean canUseLabel = getSelectCount() > 0; + if (restoreLabel != null) { + restoreLabel.setEnabled(canUseLabel); + } + if (deleteLabel != null) { + deleteLabel.setEnabled(canUseLabel); + } + } + @Override protected void initTopPaneListener() { initSearchTextFiledListener(); @@ -181,6 +199,7 @@ public class RecyclePane extends AbstractSupportSelectTablePane } + private void fireListener(VcsResponseListener listener, boolean isDelete) { List selectList = model.getList().stream().filter(TableEntity::isSelect).map(VcsTableEntity::getEntity).collect(Collectors.toList()); if (selectList.size() > 0) { diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java new file mode 100644 index 000000000..7c41e64f2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java @@ -0,0 +1,119 @@ +package com.fr.design.mainframe.vcs.ui; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.frpane.UITabbedPane; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +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.transaction.Configurations; +import com.fr.transaction.WorkerAdaptor; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsConfig; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoRecycleSchedule; + +import javax.swing.JPanel; +import javax.swing.ScrollPaneConstants; +import javax.swing.border.EmptyBorder; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + + +/** + * 回收站配置面板 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/21 + */ +public class RecycleSettingPane extends BasicPane { + + 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 = 30; + + private UISpinner spinner; + + private UIButton button; + + public RecycleSettingPane() { + init(); + } + + private void init() { + + this.setLayout(new BorderLayout()); + UITabbedPane tabbedPane = new UITabbedPane(); + //回收站内容 + JPanel recyclePane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + UIScrollPane recycleScrollPane = patchScroll(recyclePane); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Vcs_Recycle_Content"), recycleScrollPane); + recyclePane.add(new RecyclePane()); + //通用设置 + JPanel settingPane = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); + UIScrollPane settingScrollPane = patchScroll(settingPane); + tabbedPane.addTab(Toolkit.i18nText("Fine-Design_Basic_Carton_General_Settings"), settingScrollPane); + settingPane.add(createSchedulePane()); + this.add(tabbedPane, BorderLayout.CENTER); + } + + private JPanel createSchedulePane() { + JPanel schedulePane = FRGUIPaneFactory.createVerticalFlowLayout_Pane(true, VerticalFlowLayout.TOP, 0, 0); + JPanel spinnerPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane_First0(); + JPanel buttonPane = FRGUIPaneFactory.createBoxFlowInnerContainer_S_Pane_First0(); + spinnerPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Recycle_Schedule"))); + spinner = new UISpinner(MIN_VALUE, MAX_VALUE, STEP, DEFAULT_VALUE); + spinner.setValue(VcsConfig.getInstance().getV2CleanRecycleInterval()); + spinnerPane.add(spinner); + spinnerPane.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Recycle_Schedule_Day"))); + schedulePane.add(spinnerPane); + button = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Save")); + initButtonListener(); + buttonPane.add(button); + schedulePane.add(buttonPane); + return schedulePane; + } + + private void initButtonListener() { + button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new Thread(() -> { + Configurations.update(new WorkerAdaptor(VcsConfig.class) { + @Override + public void run() { + VcsConfig.getInstance().setV2CleanRecycleInterval((int) spinner.getValue()); + } + }); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_RECYCLE_JOB_NAME, + 1, + VcsAutoRecycleSchedule.class); + }).start(); + } + }); + } + + + private UIScrollPane patchScroll(JPanel generalPane) { + UIScrollPane generalPanelWithScroll = new UIScrollPane(generalPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + generalPanelWithScroll.setBorder(new EmptyBorder(0, 0, 0, 0)); + return generalPanelWithScroll; + } + + @Override + protected String title4PopupWindow() { + return Toolkit.i18nText("Fine-Design_Vcs_Recycle"); + } +} From c7224d54209c98099daeaadf5fe600cbcff5b6ce Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 13:46:13 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=20REPORT-101063=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=B7=B2=E6=89=93=E5=BC=80=EF=BC=8C=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=EF=BC=8C=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=A2=AB=E8=87=AA=E5=8A=A8=E5=85=B3=E9=97=AD=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mainframe/DesignerFrameFileDealerPane.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) 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 063ef5913..4fb218be6 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 @@ -589,15 +589,12 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) { if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) { if (!jTemplate.isALLSaved()) { - if (isCurrentEditing) { - MultiTemplateTabPane.getInstance().setIsCloseCurrent(true); - } + MultiTemplateTabPane.getInstance().setIsCloseCurrent(isCurrentEditing); MultiTemplateTabPane.getInstance().closeFormat(jTemplate); confirmCloseAndShowVcsNewPane(jTemplate, path); return; - } else { - showVcsNewPane(path); } + showVcsNewPane(path); } } } From 608ca0c6a16cbde1fd85231ec6a67df9d3642a47 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 13:51:58 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=20REPORT-101045=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=B8=89=E6=9C=9F=E3=80=91=E5=9B=9E?= =?UTF-8?q?=E6=94=B6=E7=AB=99=E4=BA=A4=E4=BA=92=E9=97=AE=E9=A2=98=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vcs/VcsRecycleSettingHelper.java | 49 +++++++++++++++++++ .../mainframe/vcs/ui/RecycleSettingPane.java | 20 +------- 2 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java new file mode 100644 index 000000000..3e6a5bab9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/VcsRecycleSettingHelper.java @@ -0,0 +1,49 @@ +package com.fr.design.mainframe.vcs; + +import com.fr.concurrent.NamedThreadFactory; +import com.fr.transaction.Configurations; +import com.fr.transaction.WorkerAdaptor; +import com.fr.workspace.WorkContext; +import com.fr.workspace.server.vcs.VcsConfig; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; +import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoRecycleSchedule; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * 版本管理界面配置回收事件的处理类 + * + * @author Destiny.Lin + * @since 11.0 + * Created on 2023/7/21 + */ +public class VcsRecycleSettingHelper { + + private static ExecutorService executorService = Executors.newSingleThreadExecutor(new NamedThreadFactory("VcsRecycle")); + + + /** + * 更新任务 + * + * @param day + */ + public static void updateJob(int day) { + executorService.execute(new Runnable() { + @Override + public void run() { + Configurations.update(new WorkerAdaptor(VcsConfig.class) { + @Override + public void run() { + VcsConfig.getInstance().setV2CleanRecycleInterval(day); + } + }); + WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( + VcsAutoCleanService.VCS_AUTO_CLEAN_RECYCLE_JOB_NAME, + 1, + VcsAutoRecycleSchedule.class); + } + }); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java index 7c41e64f2..0653aad05 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/ui/RecycleSettingPane.java @@ -9,13 +9,8 @@ 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.transaction.Configurations; -import com.fr.transaction.WorkerAdaptor; -import com.fr.workspace.WorkContext; +import com.fr.design.mainframe.vcs.VcsRecycleSettingHelper; import com.fr.workspace.server.vcs.VcsConfig; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanOperator; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoCleanService; -import com.fr.workspace.server.vcs.v2.scheduler.VcsAutoRecycleSchedule; import javax.swing.JPanel; import javax.swing.ScrollPaneConstants; @@ -89,18 +84,7 @@ public class RecycleSettingPane extends BasicPane { button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - new Thread(() -> { - Configurations.update(new WorkerAdaptor(VcsConfig.class) { - @Override - public void run() { - VcsConfig.getInstance().setV2CleanRecycleInterval((int) spinner.getValue()); - } - }); - WorkContext.getCurrent().get(VcsAutoCleanOperator.class).addOrUpdateVcsAutoCleanJob( - VcsAutoCleanService.VCS_AUTO_CLEAN_RECYCLE_JOB_NAME, - 1, - VcsAutoRecycleSchedule.class); - }).start(); + VcsRecycleSettingHelper.updateJob((int) spinner.getValue()); } }); } From 5a8ddf8ec2078e612510adaff45259c3f48a6f6a Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 14:50:20 +0800 Subject: [PATCH 11/12] =?UTF-8?q?REPORT-91839=20=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=BF=81=E7=A7=BB=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/vcs/ui/VcsMovePanel.java | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) 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 index 99ce67f21..064da17e7 100644 --- 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 @@ -5,6 +5,7 @@ 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.dialog.FineJOptionPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIRadioButton; import com.fr.design.gui.ilable.UILabel; @@ -26,6 +27,7 @@ import com.fr.workspace.server.vcs.v2.move.VcsMoveStrategy; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; @@ -277,18 +279,7 @@ public class VcsMovePanel extends BasicPane { 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(); + createConfirmPane(VcsMovePanel.this); } }); dlg.setVisible(true); @@ -296,6 +287,42 @@ public class VcsMovePanel extends BasicPane { }); } + private void createConfirmPane(Component parent) { + VerticalFlowLayout layout = new VerticalFlowLayout(VerticalFlowLayout.TOP); + layout.setAlignLeft(true); + JPanel panel = new JPanel(); + panel.setLayout(layout); + UILabel titleLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tip_Title")); + UILabel firstLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tip_First")); + UILabel secondLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Tip_Second")); + titleLabel.setForeground(TIP_COLOR); + firstLabel.setForeground(TIP_COLOR); + secondLabel.setForeground(TIP_COLOR); + panel.add(new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Move_Right_Now"))); + panel.add(titleLabel); + panel.add(firstLabel); + panel.add(secondLabel); + int value = FineJOptionPane.showConfirmDialog(parent, panel, Toolkit.i18nText("Fine-Design_Vcs_Move_Title"), JOptionPane.YES_NO_OPTION); + processMove(value); + } + + private void processMove(int value) { + if (value == YES_OPTION) { + //进度条面板 + 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(); + } + } + private void initSuccessPane() { JPanel successPane = new JPanel(); JPanel body = FRGUIPaneFactory.createY_AXISBoxInnerContainer_L_Pane(); From 175de09e0b555c0f943dadd65975bccf146e8148 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 21 Jul 2023 16:03:10 +0800 Subject: [PATCH 12/12] =?UTF-8?q?REPORT-100547=20=E3=80=90=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=AE=A1=E7=90=86=E4=BA=8C=E6=9C=9F=E3=80=91=E8=BF=9C?= =?UTF-8?q?=E7=A8=8B=E7=8E=AF=E5=A2=83=E4=B8=8B=EF=BC=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9A=84=E4=BF=9D=E7=95=99=E5=8E=86=E5=8F=B2=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=95=B0=E7=9B=AE=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/vcs/ui/VcsMovePanel.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 index 064da17e7..64b93fe99 100644 --- 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 @@ -313,11 +313,11 @@ public class VcsMovePanel extends BasicPane { VcsMovePanel.this.getParentCard().next(getParentPane()); VcsMoveStrategy strategy; if (moveDefaultButton.isSelected()) { - strategy = VcsMoveStrategy.createNumStrategy((int) spinner.getValue()); + strategy = VcsMoveStrategy.createStrategy((int) spinner.getValue()); } else if (moveNothingButton.isSelected()) { - strategy = VcsMoveStrategy.ALL_GIVE_UP; + strategy = VcsMoveStrategy.createStrategy(0); } else { - strategy = VcsMoveStrategy.ALL_RETAIN; + strategy = VcsMoveStrategy.createStrategy(Integer.MAX_VALUE); } new MoveWorker(strategy).execute(); }