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(); - } /** * 创建新建文件的快捷方式数组。 *