From aa39a6aa6367a14b6fbad40a94d00e2051ba68fb Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 16 Mar 2020 14:39:06 +0800 Subject: [PATCH 1/5] REPORT-27937 && REPORT-28214 --- .../java/com/fr/file/FILEChooserPane.java | 1 + .../main/java/com/fr/start/MainDesigner.java | 104 +++++++++++++----- 2 files changed, 78 insertions(+), 27 deletions(-) diff --git a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java b/designer-base/src/main/java/com/fr/file/FILEChooserPane.java index efb1e3a38b..0ca481b09b 100644 --- a/designer-base/src/main/java/com/fr/file/FILEChooserPane.java +++ b/designer-base/src/main/java/com/fr/file/FILEChooserPane.java @@ -737,6 +737,7 @@ public class FILEChooserPane extends BasicPane { fileNameTextField.setText(""); fileNameTextField.addDocumentListener(); } + dialog.setAlwaysOnTop(true); dialog.setVisible(true); return option; } diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index d4eb68e866..5b3ecea4ef 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -14,6 +14,7 @@ import com.fr.design.actions.server.WidgetManagerAction; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.ErrorDialog; +import com.fr.design.dialog.FineJOptionPane; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; @@ -42,17 +43,24 @@ import com.fr.design.menu.ShortCut; import com.fr.design.module.DesignModuleFactory; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.exit.DesignerExiter; import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; +import com.fr.io.utils.ResourceIOUtils; import com.fr.log.FineLoggerFactory; import com.fr.module.Module; import com.fr.module.ModuleContext; +import com.fr.module.engine.event.LifecycleErrorEvent; import com.fr.runtime.FineRuntime; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.ErrorType; import com.fr.stable.lifecycle.LifecycleFatalError; +import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLTools; import com.fr.start.module.StartupArgs; import com.fr.start.server.ServerTray; @@ -107,39 +115,19 @@ public class MainDesigner extends BaseDesigner { //启动运行时 FineRuntime.start(); DesignerSubListener.getInstance().start(); + EventDispatcher.listen(LifecycleErrorEvent.SELF, new Listener() { + @Override + public void on(Event event, LifecycleFatalError param) { + afterError(param); + } + }); Module designerRoot = ModuleContext.parseRoot("designer-startup.xml"); //传递启动参数 designerRoot.setSingleton(StartupArgs.class, new StartupArgs(args)); try { designerRoot.start(); } catch (LifecycleFatalError fatal) { - SplashContext.getInstance().hide(); - if (ErrorType.FINEDB.equals(fatal.getErrorType())) { - StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.FINEDB_PROBLEM.getId(), - DesignerErrorMessage.FINEDB_PROBLEM.getMessage(), - fatal.getMessage()); - JOptionPane.showMessageDialog(null, fatal.getMessage(), Toolkit.i18nText("Fine-Design_Basic_Error"), JOptionPane.ERROR_MESSAGE); - } - FineLoggerFactory.getLogger().error(fatal.getMessage(), fatal); - StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_START_FAILED.getId(), - DesignerErrorMessage.UNEXCEPTED_START_FAILED.getMessage(), - fatal.getMessage()); - ErrorDialog dialog = new ErrorDialog(null, Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), - Toolkit.i18nText("Fine-Design_Error_Start_Report"), - fatal.getMessage()) { - @Override - protected void okEvent() { - dispose(); - DesignerExiter.getInstance().execute(); - } - - @Override - protected void restartEvent() { - dispose(); - RestartHelper.restart(); - } - }; - dialog.setVisible(true); + afterError(fatal); } if (WorkContext.getCurrent().isLocal()) { @@ -150,6 +138,68 @@ public class MainDesigner extends BaseDesigner { watch.stop(); } + private static void afterError(LifecycleFatalError fatal) { + SplashContext.getInstance().hide(); + if (ErrorType.FINEDB.equals(fatal.getErrorType())) { + StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.FINEDB_PROBLEM.getId(), + DesignerErrorMessage.FINEDB_PROBLEM.getMessage(), + fatal.getMessage()); + FineLoggerFactory.getLogger().error(DesignerErrorMessage.FINEDB_PROBLEM.getId() + ": " + DesignerErrorMessage.FINEDB_PROBLEM.getMessage()); + int result = FineJOptionPane.showOptionDialog(null, + Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset"), + Toolkit.i18nText("Fine-Design_Basic_Error_Tittle"), + JOptionPane.YES_NO_OPTION, + JOptionPane.ERROR_MESSAGE, + IOUtils.readIcon("com/fr/design/images/error/error2.png"), + new Object[] {Toolkit.i18nText("Fine-Design_Basic_Reset"), Toolkit.i18nText("Fine-Design_Basic_Cancel")}, + null); + if (result == JOptionPane.YES_OPTION) { + boolean success = false; + try { + ResourceIOUtils.copy(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME), + StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_BAK_NAME)); + success = ResourceIOUtils.delete(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME)); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + afterBackupFailed(); + } + if (!success) { + afterBackupFailed(); + } + } else { + DesignerExiter.getInstance().execute(); + } + } + FineLoggerFactory.getLogger().error(fatal.getMessage(), fatal); + StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_START_FAILED.getId(), + DesignerErrorMessage.UNEXCEPTED_START_FAILED.getMessage(), + fatal.getMessage()); + ErrorDialog dialog = new ErrorDialog(null, Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), + Toolkit.i18nText("Fine-Design_Error_Start_Report"), + fatal.getMessage()) { + @Override + protected void okEvent() { + dispose(); + DesignerExiter.getInstance().execute(); + } + + @Override + protected void restartEvent() { + dispose(); + RestartHelper.restart(); + } + }; + dialog.setVisible(true); + } + + private static void afterBackupFailed() { + FineJOptionPane.showMessageDialog(null, + Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset_Result", + ResourceIOUtils.getRealPath(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME))), + Toolkit.i18nText("Fine-Design_Basic_Error"), + JOptionPane.ERROR_MESSAGE); + DesignerExiter.getInstance().execute(); + } /** * 创建新建文件的快捷方式数组。 * From 1f4fed29582c889c7837c7221a4cc3e30762dbbb Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 16 Mar 2020 15:08:44 +0800 Subject: [PATCH 2/5] fix restart --- designer-realize/src/main/java/com/fr/start/MainDesigner.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index 5b3ecea4ef..a52efdde78 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -165,6 +165,8 @@ public class MainDesigner extends BaseDesigner { } if (!success) { afterBackupFailed(); + } else { + RestartHelper.restart(); } } else { DesignerExiter.getInstance().execute(); From d457e9c1cfd90c2002355ccdcfc0b429360ef710 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 16 Mar 2020 16:21:08 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix=20=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/start/MainDesigner.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index a52efdde78..cac05f841e 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -59,6 +59,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.lifecycle.ErrorType; +import com.fr.stable.lifecycle.FineLifecycleFatalError; import com.fr.stable.lifecycle.LifecycleFatalError; import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLTools; @@ -115,9 +116,9 @@ public class MainDesigner extends BaseDesigner { //启动运行时 FineRuntime.start(); DesignerSubListener.getInstance().start(); - EventDispatcher.listen(LifecycleErrorEvent.SELF, new Listener() { + EventDispatcher.listen(LifecycleErrorEvent.SELF, new Listener() { @Override - public void on(Event event, LifecycleFatalError param) { + public void on(Event event, FineLifecycleFatalError param) { afterError(param); } }); @@ -126,7 +127,7 @@ public class MainDesigner extends BaseDesigner { designerRoot.setSingleton(StartupArgs.class, new StartupArgs(args)); try { designerRoot.start(); - } catch (LifecycleFatalError fatal) { + } catch (FineLifecycleFatalError fatal) { afterError(fatal); } From 323d892a15156d9760da8b63f79519f5fe1c3413 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 16 Mar 2020 17:40:59 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix=20=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/start/LifecycleFatalErrorHandler.java | 100 ++++++++++++++++++ .../main/java/com/fr/start/MainDesigner.java | 81 +------------- 2 files changed, 102 insertions(+), 79 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java diff --git a/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java b/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java new file mode 100644 index 0000000000..1241dae0ab --- /dev/null +++ b/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java @@ -0,0 +1,100 @@ +package com.fr.start; + +import com.fr.design.RestartHelper; +import com.fr.design.dialog.ErrorDialog; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.messagecollect.StartErrorMessageCollector; +import com.fr.design.mainframe.messagecollect.entity.DesignerErrorMessage; +import com.fr.exit.DesignerExiter; +import com.fr.general.IOUtils; +import com.fr.io.utils.ResourceIOUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.StableUtils; +import com.fr.stable.lifecycle.ErrorType; +import com.fr.stable.lifecycle.FineLifecycleFatalError; +import com.fr.stable.project.ProjectConstants; + +import javax.swing.*; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2020/3/16 + */ +public class LifecycleFatalErrorHandler { + + private static final LifecycleFatalErrorHandler INSTANCE = new LifecycleFatalErrorHandler(); + + public static LifecycleFatalErrorHandler getInstance() { + return INSTANCE; + } + + + public void handle(FineLifecycleFatalError fatal) { + SplashContext.getInstance().hide(); + if (ErrorType.FINEDB.equals(fatal.getErrorType())) { + StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.FINEDB_PROBLEM.getId(), + DesignerErrorMessage.FINEDB_PROBLEM.getMessage(), + fatal.getMessage()); + FineLoggerFactory.getLogger().error(DesignerErrorMessage.FINEDB_PROBLEM.getId() + ": " + DesignerErrorMessage.FINEDB_PROBLEM.getMessage()); + int result = FineJOptionPane.showOptionDialog(null, + Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset"), + Toolkit.i18nText("Fine-Design_Basic_Error_Tittle"), + JOptionPane.YES_NO_OPTION, + JOptionPane.ERROR_MESSAGE, + IOUtils.readIcon("com/fr/design/images/error/error2.png"), + new Object[] {Toolkit.i18nText("Fine-Design_Basic_Reset"), Toolkit.i18nText("Fine-Design_Basic_Cancel")}, + null); + if (result == JOptionPane.YES_OPTION) { + boolean success = false; + try { + ResourceIOUtils.copy(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME), + StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_BAK_NAME)); + success = ResourceIOUtils.delete(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME)); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + afterBackupFailed(); + } + if (!success) { + afterBackupFailed(); + } else { + RestartHelper.restart(); + } + } else { + DesignerExiter.getInstance().execute(); + } + } + FineLoggerFactory.getLogger().error(fatal.getMessage(), fatal); + StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_START_FAILED.getId(), + DesignerErrorMessage.UNEXCEPTED_START_FAILED.getMessage(), + fatal.getMessage()); + ErrorDialog dialog = new ErrorDialog(null, Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), + Toolkit.i18nText("Fine-Design_Error_Start_Report"), + fatal.getMessage()) { + @Override + protected void okEvent() { + dispose(); + DesignerExiter.getInstance().execute(); + } + + @Override + protected void restartEvent() { + dispose(); + RestartHelper.restart(); + } + }; + dialog.setVisible(true); + } + + private void afterBackupFailed() { + FineJOptionPane.showMessageDialog(null, + Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset_Result", + ResourceIOUtils.getRealPath(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME))), + Toolkit.i18nText("Fine-Design_Basic_Error"), + JOptionPane.ERROR_MESSAGE); + DesignerExiter.getInstance().execute(); + } + + +} diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index cac05f841e..2cdc832308 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -3,7 +3,6 @@ package com.fr.start; import com.fr.base.BaseUtils; import com.fr.base.vcs.DesignerMode; import com.fr.design.DesignerEnvManager; -import com.fr.design.RestartHelper; import com.fr.design.actions.core.ActionFactory; import com.fr.design.actions.file.WebPreviewUtils; import com.fr.design.actions.file.newReport.NewPolyReportAction; @@ -13,8 +12,6 @@ import com.fr.design.actions.server.StyleListAction; import com.fr.design.actions.server.WidgetManagerAction; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.constants.UIConstants; -import com.fr.design.dialog.ErrorDialog; -import com.fr.design.dialog.FineJOptionPane; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; @@ -24,7 +21,6 @@ import com.fr.design.gui.ibutton.UIPreviewButton; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.itoolbar.UILargeToolbar; -import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.ActiveKeyGenerator; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.InformationCollector; @@ -33,8 +29,6 @@ import com.fr.design.mainframe.JWorkBook; import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoPane; -import com.fr.design.mainframe.messagecollect.StartErrorMessageCollector; -import com.fr.design.mainframe.messagecollect.entity.DesignerErrorMessage; import com.fr.design.mainframe.toolbar.ToolBarMenuDockPlus; import com.fr.design.menu.KeySetUtils; import com.fr.design.menu.MenuDef; @@ -46,10 +40,7 @@ import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; -import com.fr.exit.DesignerExiter; import com.fr.general.ComparatorUtils; -import com.fr.general.IOUtils; -import com.fr.io.utils.ResourceIOUtils; import com.fr.log.FineLoggerFactory; import com.fr.module.Module; import com.fr.module.ModuleContext; @@ -58,10 +49,7 @@ import com.fr.runtime.FineRuntime; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.lifecycle.ErrorType; import com.fr.stable.lifecycle.FineLifecycleFatalError; -import com.fr.stable.lifecycle.LifecycleFatalError; -import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLTools; import com.fr.start.module.StartupArgs; import com.fr.start.server.ServerTray; @@ -69,7 +57,6 @@ import com.fr.third.org.apache.commons.lang3.time.StopWatch; import com.fr.workspace.WorkContext; import javax.swing.JComponent; -import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.border.MatteBorder; import java.awt.Component; @@ -119,7 +106,7 @@ public class MainDesigner extends BaseDesigner { EventDispatcher.listen(LifecycleErrorEvent.SELF, new Listener() { @Override public void on(Event event, FineLifecycleFatalError param) { - afterError(param); + LifecycleFatalErrorHandler.getInstance().handle(param); } }); Module designerRoot = ModuleContext.parseRoot("designer-startup.xml"); @@ -128,7 +115,7 @@ public class MainDesigner extends BaseDesigner { try { designerRoot.start(); } catch (FineLifecycleFatalError fatal) { - afterError(fatal); + LifecycleFatalErrorHandler.getInstance().handle(fatal); } if (WorkContext.getCurrent().isLocal()) { @@ -139,70 +126,6 @@ public class MainDesigner extends BaseDesigner { watch.stop(); } - private static void afterError(LifecycleFatalError fatal) { - SplashContext.getInstance().hide(); - if (ErrorType.FINEDB.equals(fatal.getErrorType())) { - StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.FINEDB_PROBLEM.getId(), - DesignerErrorMessage.FINEDB_PROBLEM.getMessage(), - fatal.getMessage()); - FineLoggerFactory.getLogger().error(DesignerErrorMessage.FINEDB_PROBLEM.getId() + ": " + DesignerErrorMessage.FINEDB_PROBLEM.getMessage()); - int result = FineJOptionPane.showOptionDialog(null, - Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset"), - Toolkit.i18nText("Fine-Design_Basic_Error_Tittle"), - JOptionPane.YES_NO_OPTION, - JOptionPane.ERROR_MESSAGE, - IOUtils.readIcon("com/fr/design/images/error/error2.png"), - new Object[] {Toolkit.i18nText("Fine-Design_Basic_Reset"), Toolkit.i18nText("Fine-Design_Basic_Cancel")}, - null); - if (result == JOptionPane.YES_OPTION) { - boolean success = false; - try { - ResourceIOUtils.copy(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME), - StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_BAK_NAME)); - success = ResourceIOUtils.delete(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME)); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - afterBackupFailed(); - } - if (!success) { - afterBackupFailed(); - } else { - RestartHelper.restart(); - } - } else { - DesignerExiter.getInstance().execute(); - } - } - FineLoggerFactory.getLogger().error(fatal.getMessage(), fatal); - StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_START_FAILED.getId(), - DesignerErrorMessage.UNEXCEPTED_START_FAILED.getMessage(), - fatal.getMessage()); - ErrorDialog dialog = new ErrorDialog(null, Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), - Toolkit.i18nText("Fine-Design_Error_Start_Report"), - fatal.getMessage()) { - @Override - protected void okEvent() { - dispose(); - DesignerExiter.getInstance().execute(); - } - - @Override - protected void restartEvent() { - dispose(); - RestartHelper.restart(); - } - }; - dialog.setVisible(true); - } - - private static void afterBackupFailed() { - FineJOptionPane.showMessageDialog(null, - Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset_Result", - ResourceIOUtils.getRealPath(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME))), - Toolkit.i18nText("Fine-Design_Basic_Error"), - JOptionPane.ERROR_MESSAGE); - DesignerExiter.getInstance().execute(); - } /** * 创建新建文件的快捷方式数组。 * From ac2fc4dda22fd6e6a33747ab504f78ed19e432d1 Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 16 Mar 2020 18:46:41 +0800 Subject: [PATCH 5/5] =?UTF-8?q?fix=20=E5=B0=81=E8=A3=85=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/start/LifecycleFatalErrorHandler.java | 146 +++++++++++------- 1 file changed, 92 insertions(+), 54 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java b/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java index 1241dae0ab..252b01dc1a 100644 --- a/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java +++ b/designer-realize/src/main/java/com/fr/start/LifecycleFatalErrorHandler.java @@ -16,6 +16,8 @@ import com.fr.stable.lifecycle.FineLifecycleFatalError; import com.fr.stable.project.ProjectConstants; import javax.swing.*; +import java.util.HashMap; +import java.util.Map; /** * @author hades @@ -25,75 +27,111 @@ import javax.swing.*; public class LifecycleFatalErrorHandler { private static final LifecycleFatalErrorHandler INSTANCE = new LifecycleFatalErrorHandler(); + private Map map = new HashMap<>(); + + private LifecycleFatalErrorHandler() { + for (ErrorType type : ErrorType.values()) { + if (ErrorType.FINEDB.equals(type)) { + map.put(type, FineDBHandler.SELF); + } else { + map.put(type, DefaultHandler.SELF); + } + } + } public static LifecycleFatalErrorHandler getInstance() { return INSTANCE; } - public void handle(FineLifecycleFatalError fatal) { SplashContext.getInstance().hide(); - if (ErrorType.FINEDB.equals(fatal.getErrorType())) { - StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.FINEDB_PROBLEM.getId(), - DesignerErrorMessage.FINEDB_PROBLEM.getMessage(), - fatal.getMessage()); - FineLoggerFactory.getLogger().error(DesignerErrorMessage.FINEDB_PROBLEM.getId() + ": " + DesignerErrorMessage.FINEDB_PROBLEM.getMessage()); - int result = FineJOptionPane.showOptionDialog(null, - Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset"), - Toolkit.i18nText("Fine-Design_Basic_Error_Tittle"), - JOptionPane.YES_NO_OPTION, - JOptionPane.ERROR_MESSAGE, - IOUtils.readIcon("com/fr/design/images/error/error2.png"), - new Object[] {Toolkit.i18nText("Fine-Design_Basic_Reset"), Toolkit.i18nText("Fine-Design_Basic_Cancel")}, - null); - if (result == JOptionPane.YES_OPTION) { - boolean success = false; - try { - ResourceIOUtils.copy(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME), - StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_BAK_NAME)); - success = ResourceIOUtils.delete(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME)); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - afterBackupFailed(); - } - if (!success) { - afterBackupFailed(); + map.get(fatal.getErrorType()).handle(fatal); + } + + interface Handler { + void handle(FineLifecycleFatalError error); + } + + /** + * finedb处理 + */ + enum FineDBHandler implements Handler { + + SELF { + @Override + public void handle(FineLifecycleFatalError fatal) { + StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.FINEDB_PROBLEM.getId(), + DesignerErrorMessage.FINEDB_PROBLEM.getMessage(), + fatal.getMessage()); + FineLoggerFactory.getLogger().error(DesignerErrorMessage.FINEDB_PROBLEM.getId() + ": " + DesignerErrorMessage.FINEDB_PROBLEM.getMessage()); + int result = FineJOptionPane.showOptionDialog(null, + Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset"), + Toolkit.i18nText("Fine-Design_Basic_Error_Tittle"), + JOptionPane.YES_NO_OPTION, + JOptionPane.ERROR_MESSAGE, + IOUtils.readIcon("com/fr/design/images/error/error2.png"), + new Object[] {Toolkit.i18nText("Fine-Design_Basic_Reset"), Toolkit.i18nText("Fine-Design_Basic_Cancel")}, + null); + if (result == JOptionPane.YES_OPTION) { + boolean success = false; + try { + ResourceIOUtils.copy(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME), + StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_BAK_NAME)); + success = ResourceIOUtils.delete(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME)); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + afterBackupFailed(); + } + if (!success) { + afterBackupFailed(); + } else { + RestartHelper.restart(); + } } else { - RestartHelper.restart(); + DesignerExiter.getInstance().execute(); } - } else { - DesignerExiter.getInstance().execute(); } - } - FineLoggerFactory.getLogger().error(fatal.getMessage(), fatal); - StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_START_FAILED.getId(), - DesignerErrorMessage.UNEXCEPTED_START_FAILED.getMessage(), - fatal.getMessage()); - ErrorDialog dialog = new ErrorDialog(null, Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), - Toolkit.i18nText("Fine-Design_Error_Start_Report"), - fatal.getMessage()) { - @Override - protected void okEvent() { - dispose(); + + private void afterBackupFailed() { + FineJOptionPane.showMessageDialog(null, + Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset_Result", + ResourceIOUtils.getRealPath(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME))), + Toolkit.i18nText("Fine-Design_Basic_Error"), + JOptionPane.ERROR_MESSAGE); DesignerExiter.getInstance().execute(); } + } + } + /** + * 默认处理 + */ + enum DefaultHandler implements Handler { + SELF { @Override - protected void restartEvent() { - dispose(); - RestartHelper.restart(); - } - }; - dialog.setVisible(true); - } + public void handle(FineLifecycleFatalError fatal) { + FineLoggerFactory.getLogger().error(fatal.getMessage(), fatal); + StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_START_FAILED.getId(), + DesignerErrorMessage.UNEXCEPTED_START_FAILED.getMessage(), + fatal.getMessage()); + ErrorDialog dialog = new ErrorDialog(null, Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message"), + Toolkit.i18nText("Fine-Design_Error_Start_Report"), + fatal.getMessage()) { + @Override + protected void okEvent() { + dispose(); + DesignerExiter.getInstance().execute(); + } - private void afterBackupFailed() { - FineJOptionPane.showMessageDialog(null, - Toolkit.i18nText("Fine-Design_Error_Finedb_Backup_Reset_Result", - ResourceIOUtils.getRealPath(StableUtils.pathJoin(ProjectConstants.EMBED_DB_DIRECTORY, ProjectConstants.FINE_DB_NAME))), - Toolkit.i18nText("Fine-Design_Basic_Error"), - JOptionPane.ERROR_MESSAGE); - DesignerExiter.getInstance().execute(); + @Override + protected void restartEvent() { + dispose(); + RestartHelper.restart(); + } + }; + dialog.setVisible(true); + } + } }