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(); } }); }