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 747cf6aef5..16c8ef46ca 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
@@ -36,9 +36,9 @@ import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.manager.search.TemplateTreeSearchManager;
import com.fr.design.mainframe.manager.search.searcher.control.pane.TemplateTreeSearchToolbarPane;
import com.fr.design.mainframe.vcs.RecycleAction;
+import com.fr.design.mainframe.vcs.common.VcsCloseTemplateHelper;
import com.fr.design.mainframe.vcs.common.VcsHelper;
import com.fr.design.mainframe.vcs.ui.FileVersionsPanel;
-import com.fr.design.mainframe.vcs.ui.VcsNewPane;
import com.fr.design.menu.KeySetUtils;
import com.fr.design.menu.ShortCut;
import com.fr.design.menu.ToolBarDef;
@@ -46,7 +46,6 @@ 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;
@@ -392,15 +391,6 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
}
}
- private boolean isCurrentEditing(String path) {
- JTemplate, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
- if (JTemplate.isValid(jt)) {
- String editing = jt.getEditingFILE().getPath();
- return ComparatorUtils.equals(editing, path);
- }
- return false;
- }
-
/**
* 按钮状态改变
*/
@@ -505,7 +495,7 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
public void actionPerformed(ActionEvent e) {
String path = DesignerFrameFileDealerPane.getInstance().getSelectedOperation().getFilePath();
path = StableUtils.pathJoin(ProjectConstants.REPORTLETS_NAME, path);
- boolean currentEditing = isCurrentEditing(path);
+ boolean currentEditing = VcsCloseTemplateHelper.isCurrentEditing(path);
if (VcsHelper.getInstance().isLegacyMode()) {
// 如果模板已经打开了,关掉,避免出现2个同名tab(1个是模板,1个是版本)
closeOpenedTemplate(path, currentEditing);
@@ -513,16 +503,10 @@ public class DesignerFrameFileDealerPane extends JPanel implements FileToolbarSt
fileVersionTablePanel.showFileVersionsPane();
stateChange();
} else {
- checkTemplateSavedAndShowVcsNewPane(path, currentEditing);
+ VcsCloseTemplateHelper.checkTemplateSavedAndShowVcsNewPane(path, currentEditing);
}
-
-
}
- private void showVcsNewPane(String path) {
- VcsNewPane panel = new VcsNewPane(path);
- panel.showDialog();
- }
/**
* 版本管理可用状态的监控
@@ -577,61 +561,6 @@ 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)) {
- if (!jTemplate.isALLSaved()) {
- MultiTemplateTabPane.getInstance().setIsCloseCurrent(isCurrentEditing);
- MultiTemplateTabPane.getInstance().closeFormat(jTemplate);
- confirmCloseAndShowVcsNewPane(jTemplate, path);
- return;
- }
- }
- }
- 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();
- }
-
}
/**
diff --git a/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCloseTemplateHelper.java b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCloseTemplateHelper.java
new file mode 100644
index 0000000000..93fde383df
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/mainframe/vcs/common/VcsCloseTemplateHelper.java
@@ -0,0 +1,122 @@
+package com.fr.design.mainframe.vcs.common;
+
+import com.fr.base.vcs.DesignerMode;
+import com.fr.design.dialog.BasicDialog;
+import com.fr.design.dialog.FineJOptionPane;
+import com.fr.design.file.HistoryTemplateListCache;
+import com.fr.design.file.MultiTemplateTabPane;
+import com.fr.design.i18n.Toolkit;
+import com.fr.design.mainframe.DesignerContext;
+import com.fr.design.mainframe.JTemplate;
+import com.fr.design.mainframe.vcs.ui.VcsNewPane;
+import com.fr.design.worker.save.CallbackSaveWorker;
+import com.fr.general.ComparatorUtils;
+import com.fr.log.FineLoggerFactory;
+
+import javax.swing.JOptionPane;
+
+/**
+ * 版本管理关闭模板辅助类
+ *
+ * @author Destiny.Lin
+ * @since 11.0
+ * Created on 2023/7/27
+ */
+public class VcsCloseTemplateHelper {
+
+ /**
+ * 根据传入的pane与dialog生成指定面板的Vcs模板关闭的处理方法
+ * 如果指定模板已经打开:
+ * 1.如果该模板已保存,则正常打开新版本管理弹窗
+ *
2.如果该模板未保存,触发保存逻辑
+ *
a.如果用户选择保存,则保存并不关闭模板,弹出新版本管理弹窗
+ * b.如果用户选择不保存,则关闭当前模板,弹出新版本管理弹窗
+ * c.如果用户选择取消, 则啥操作都不做
+ *
+ * @param path 对应模板路径
+ * @param isCurrentEditing 是否是正在编辑的模板
+ * @param dialog 生成的新版本管理的详情面板的父面板
+ */
+ public static void checkTemplateSavedAndShowVcsNewPane(String path, boolean isCurrentEditing, BasicDialog dialog, VcsNewPane pane) {
+ for (JTemplate jTemplate : HistoryTemplateListCache.getInstance().getHistoryList()) {
+ if (ComparatorUtils.equals(jTemplate.getEditingFILE().getPath(), path)) {
+ if (!jTemplate.isALLSaved()) {
+ MultiTemplateTabPane.getInstance().setIsCloseCurrent(isCurrentEditing);
+ MultiTemplateTabPane.getInstance().closeFormat(jTemplate);
+ confirmCloseAndShowVcsNewPane(jTemplate, path, dialog, pane);
+ return;
+ }
+ }
+ }
+ showVcsNewPane(path, dialog, pane);
+ }
+
+
+ /**
+ * 自己生成新的VcsNewPane的Vcs模板关闭的处理方法
+ */
+ public static void checkTemplateSavedAndShowVcsNewPane(String path, boolean isCurrentEditing) {
+ checkTemplateSavedAndShowVcsNewPane(path, isCurrentEditing, null, null);
+ }
+
+
+ /**
+ * 是否是当前编辑的模板
+ *
+ * @param path 对应模板路径
+ * @return 是则返回true
+ */
+ public static boolean isCurrentEditing(String path) {
+ JTemplate, ?> jt = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate();
+ if (JTemplate.isValid(jt)) {
+ String editing = jt.getEditingFILE().getPath();
+ return ComparatorUtils.equals(editing, path);
+ }
+ return false;
+ }
+
+
+
+
+ private static void confirmCloseAndShowVcsNewPane(JTemplate, ?> specifiedTemplate, String path, BasicDialog dialog, VcsNewPane pane) {
+ 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, dialog, pane);
+ });
+ worker.start(specifiedTemplate.getRuntimeId());
+ } else if (returnVal == JOptionPane.NO_OPTION) {
+ closeTpl(specifiedTemplate);
+ showVcsNewPane(path, dialog, pane);
+ }
+ } else {
+ showVcsNewPane(path, dialog, pane);
+ }
+ }
+
+ private static void showVcsNewPane(String path, BasicDialog dialog, VcsNewPane pane) {
+ if (pane != null) {
+ pane.showDialog(dialog);
+ } else {
+ VcsNewPane newPane = new VcsNewPane(path);
+ newPane.showDialog(dialog);
+ }
+
+
+
+ }
+
+ private static void closeTpl(JTemplate, ?> specifiedTemplate) {
+ HistoryTemplateListCache.getInstance().closeSelectedReport(specifiedTemplate);
+ MultiTemplateTabPane.getInstance().closeAndFreeLock(specifiedTemplate);
+ MultiTemplateTabPane.getInstance().activePrevTemplateAfterClose();
+ }
+}
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 e50ef2c4d4..c363e346af 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
@@ -10,7 +10,7 @@ import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.vcs.VcsOperatorWorker;
import com.fr.design.mainframe.vcs.VcsTableEntity;
-import com.fr.design.mainframe.vcs.VcsTableOperatorListener;
+import com.fr.design.mainframe.vcs.common.VcsCloseTemplateHelper;
import com.fr.file.FileNodeFILE;
import com.fr.file.filetree.FileNode;
import com.fr.report.entity.VcsEntity;
@@ -155,7 +155,8 @@ public class VcsCenterPane extends VcsNewPane {
Object o = table.getValueAt(table.getEditingRow(), table.getEditingColumn());
if (o instanceof VcsTableEntity) {
VcsEntity entity = ((VcsTableEntity) o).getEntity();
- VcsNewPane pane = new VcsNewPane(getTemplateTruePath(entity.getFilename())) {
+ String path = getTemplateTruePath(entity.getFilename());
+ VcsNewPane pane = new VcsNewPane(path) {
@Override
protected String title4PopupWindow() {
return entity.getFilename()+Toolkit.i18nText("Fine-Design_Vcs_Version_Tips");
@@ -167,7 +168,7 @@ public class VcsCenterPane extends VcsNewPane {
model.fireTableDataChanged();
}
});
- pane.showDialog(getDialog());
+ VcsCloseTemplateHelper.checkTemplateSavedAndShowVcsNewPane(path, VcsCloseTemplateHelper.isCurrentEditing(path), getDialog(), pane);
}
}
});
@@ -189,8 +190,9 @@ public class VcsCenterPane extends VcsNewPane {
dialog.addDialogActionListener(new DialogActionAdapter() {
@Override
public void doOk() {
- getParentDialog().doOK();
- getParentDialog().dispose();
+ BasicDialog parent = getParentDialog();
+ parent.doOK();
+ parent.dispose();
}
});
}