From fef71f3f47fac65ef4e445dede278c46a628c9ac Mon Sep 17 00:00:00 2001 From: ju Date: Wed, 31 Jan 2018 17:35:44 +0800 Subject: [PATCH] =?UTF-8?q?DEC-472=20=E6=96=B0=E6=A8=A1=E5=9D=97=E5=88=92?= =?UTF-8?q?=E5=88=86=E4=B8=8E=E5=90=AF=E5=8A=A8=E3=80=81=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=A1=86=E6=9E=B6=20=E8=AE=BE=E8=AE=A1=E5=99=A8=E5=90=AF?= =?UTF-8?q?=E5=8A=A8+=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E7=9A=84=E5=A4=A7=E6=A6=82=E7=BB=93=E6=9E=84+=E5=85=B6?= =?UTF-8?q?=E4=BB=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/start/Designer.java | 23 +- designer/src/com/fr/start/EnvSwitcher.java | 28 ++ .../fr/start/module/DesignerEnvProvider.java | 23 +- .../start/module/DesignerModuleActivator.java | 27 ++ .../gui/itree/filetree/EnvFileTree.java | 2 + .../src/com/fr/start/BaseDesigner.java | 241 ++++-------------- 6 files changed, 117 insertions(+), 227 deletions(-) create mode 100644 designer/src/com/fr/start/EnvSwitcher.java create mode 100644 designer/src/com/fr/start/module/DesignerModuleActivator.java diff --git a/designer/src/com/fr/start/Designer.java b/designer/src/com/fr/start/Designer.java index 2f484553a..fa4e50597 100644 --- a/designer/src/com/fr/start/Designer.java +++ b/designer/src/com/fr/start/Designer.java @@ -40,18 +40,17 @@ import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; import com.fr.general.Inter; +import com.fr.module.Module; +import com.fr.module.ModuleStartup; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.xml.XMLTools; +import com.fr.start.module.StartupArgs; -import javax.swing.JComponent; -import javax.swing.JPanel; +import javax.swing.*; import javax.swing.border.MatteBorder; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Insets; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; @@ -83,7 +82,11 @@ public class Designer extends BaseDesigner { * @param args 参数 */ public static void main(String[] args) { - new Designer(args); + + Module designerRoot = ModuleStartup.parse("/com/fr/config/starter/designer-startup.xml"); + //传递启动参数 + designerRoot.setSingleton(StartupArgs.class, new StartupArgs(args)); + designerRoot.start(); } public Designer(String[] args) { @@ -375,12 +378,6 @@ public class Designer extends BaseDesigner { return AlphaFinePane.getAlphaFinePane(); } - - @Override - protected SplashPane createSplashPane() { - return new ReportSplashPane(); - } - /** * 收集用户信息吗 */ diff --git a/designer/src/com/fr/start/EnvSwitcher.java b/designer/src/com/fr/start/EnvSwitcher.java new file mode 100644 index 000000000..800466a46 --- /dev/null +++ b/designer/src/com/fr/start/EnvSwitcher.java @@ -0,0 +1,28 @@ +package com.fr.start; + +import com.fr.base.FRContext; +import com.fr.design.DesignerEnvManager; +import com.fr.design.mainframe.TemplatePane; +import com.fr.env.SignIn; +import com.fr.general.Inter; + +/** + * Created by juhaoyu on 2018/1/31. + * 环境切换器 + */ +public class EnvSwitcher { + + public void switch2LastEnv() { + + try { + String current = DesignerEnvManager.getEnvManager().getCurEnvName(); + SignIn.signIn(DesignerEnvManager.getEnvManager().getEnv(current)); + if (!FRContext.getCurrentEnv().testServerConnectionWithOutShowMessagePane()) { + throw new Exception(Inter.getLocText("Datasource-Connection_failed")); + } + } catch (Exception e) { + TemplatePane.getInstance().dealEvnExceptionWhenStartDesigner(); + } + } + +} diff --git a/designer/src/com/fr/start/module/DesignerEnvProvider.java b/designer/src/com/fr/start/module/DesignerEnvProvider.java index 5fc1e4a33..4b050f599 100644 --- a/designer/src/com/fr/start/module/DesignerEnvProvider.java +++ b/designer/src/com/fr/start/module/DesignerEnvProvider.java @@ -1,12 +1,9 @@ package com.fr.start.module; -import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; -import com.fr.design.mainframe.TemplatePane; -import com.fr.env.SignIn; import com.fr.general.ComparatorUtils; -import com.fr.general.Inter; import com.fr.module.Activator; +import com.fr.start.EnvSwitcher; import com.fr.start.StartServer; /** @@ -28,27 +25,17 @@ public class DesignerEnvProvider extends Activator { } } } + getRoot().setSingleton(EnvSwitcher.class, new EnvSwitcher()); //设置好环境即可,具体跟环境有关的模块会自动调用 - switch2LastEnv(); + getRoot().getSingleton(EnvSwitcher.class).switch2LastEnv(); } - private void switch2LastEnv() { - - try { - String current = DesignerEnvManager.getEnvManager().getCurEnvName(); - SignIn.signIn(DesignerEnvManager.getEnvManager().getEnv(current)); - if (!FRContext.getCurrentEnv().testServerConnectionWithOutShowMessagePane()) { - throw new Exception(Inter.getLocText("Datasource-Connection_failed")); - } - } catch (Exception e) { - TemplatePane.getInstance().dealEvnExceptionWhenStartDesigner(); - } - } - + @Override public void stop() { //清空模块 + getRoot().removeSingleton(EnvSwitcher.class); } } diff --git a/designer/src/com/fr/start/module/DesignerModuleActivator.java b/designer/src/com/fr/start/module/DesignerModuleActivator.java new file mode 100644 index 000000000..99f09b815 --- /dev/null +++ b/designer/src/com/fr/start/module/DesignerModuleActivator.java @@ -0,0 +1,27 @@ +package com.fr.start.module; + +import com.fr.design.module.DesignerModule; +import com.fr.general.ModuleContext; +import com.fr.module.Activator; +import com.fr.stable.module.ModuleListener; + +/** + * Created by juhaoyu on 2018/1/31. + * 触发原来的DesignerModule的启动 + * 之后慢慢将DesignerModule拆成Activator + */ +public class DesignerModuleActivator extends Activator { + + @Override + public void start() { + + ModuleContext.registerModuleListener(getModule().findSingleton(ModuleListener.class)); + ModuleContext.startModule(DesignerModule.class.getName()); + ModuleContext.clearModuleListener(); + } + + @Override + public void stop() { + + } +} diff --git a/designer_base/src/com/fr/design/gui/itree/filetree/EnvFileTree.java b/designer_base/src/com/fr/design/gui/itree/filetree/EnvFileTree.java index 7aa9dd2c4..9e35d062e 100644 --- a/designer_base/src/com/fr/design/gui/itree/filetree/EnvFileTree.java +++ b/designer_base/src/com/fr/design/gui/itree/filetree/EnvFileTree.java @@ -49,6 +49,8 @@ public class EnvFileTree extends RefreshableJTree { this.setSubPathes(subPathes); this.init(); + //9.0的时候是在设置环境之前构造的这个对象,10.0改为之后了 + this.refreshEnv(FRContext.getCurrentEnv()); } private void setTreeRootPath(String path) { diff --git a/designer_base/src/com/fr/start/BaseDesigner.java b/designer_base/src/com/fr/start/BaseDesigner.java index d299a8cdd..409106486 100644 --- a/designer_base/src/com/fr/start/BaseDesigner.java +++ b/designer_base/src/com/fr/start/BaseDesigner.java @@ -3,13 +3,9 @@ */ package com.fr.start; -import com.fr.base.ConfigManagerCreatorProxy; -import com.fr.base.ConfigManagerFactory; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.ExtraDesignClassManager; -import com.fr.design.RestartHelper; -import com.fr.design.extra.WebViewDlgHelper; import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.TemplateTreePane; @@ -18,7 +14,6 @@ import com.fr.design.fun.impl.GlobalListenerProviderManager; import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.TemplatePane; import com.fr.design.mainframe.toolbar.ToolBarMenuDock; -import com.fr.design.module.DesignModule; import com.fr.design.utils.DesignUtils; import com.fr.env.SignIn; import com.fr.file.FILE; @@ -26,25 +21,11 @@ import com.fr.file.FILEFactory; import com.fr.file.FileFILE; import com.fr.general.ComparatorUtils; import com.fr.general.FRLogger; -import com.fr.general.GeneralContext; import com.fr.general.Inter; import com.fr.general.ModuleContext; -import com.fr.general.SiteCenter; -import com.fr.plugin.PluginCollector; -import com.fr.plugin.conversion.PluginConversionModule; -import com.fr.plugin.manage.PluginManager; -import com.fr.plugin.manage.PluginStartup; -import com.fr.register.Register; -import com.fr.stable.ArrayUtils; -import com.fr.stable.BuildContext; import com.fr.stable.OperatingSystem; -import com.fr.stable.ProductConstants; -import com.fr.stable.StableUtils; -import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; @@ -56,171 +37,34 @@ import java.lang.reflect.Method; public abstract class BaseDesigner extends ToolBarMenuDock { private static final int LOAD_TREE_MAXNUM = 10; - - private static final int MESSAGEPORT = 51462; - - private Timer timer; - + public BaseDesigner(String[] args) { - - RestartHelper.deleteRecordFilesWhenStart(); - ConfigManagerFactory.registerConfigManagerProxy(new ConfigManagerCreatorProxy()); - //启动core - BuildContext.setBuildFilePath(buildPropertiesPath()); - Register.load(); - //标记一下是设计器启动 - PluginConversionModule.getInstance().markDesignerStart(); - SiteCenter.getInstance(); - - if (isDebug()) { - setDebugEnv(); - } else { - DesignUtils.setPort(getStartPort()); - } - // 如果端口被占用了 说明程序已经运行了一次,也就是说,已经建立一个监听服务器,现在只要给服务器发送命令就好了 - if (DesignUtils.isStarted()) { - DesignUtils.clientSend(args); - return; - } - - //下面这两句的位置不能随便调换,因为会影响语言切换的问题 - initLanguage(); - - // 在 initLanguage 之后加载设计器国际化文件,确保是正确的语言环境 - Inter.loadLocaleFile(GeneralContext.getLocale(), DesignModule.LOCALE_FILE_PATH); - - SplashWindow splashWindow = new SplashWindow(createSplashPane()); - if (args != null) { - for (String arg : args) { - if (ComparatorUtils.equals(arg, "demo")) { - DesignerEnvManager.getEnvManager().setCurrentEnv2Default(); - StartServer.browserDemoURL(); - break; - } - } - } - + + init(args); + } + + private void init(String[] args) { + // 初始化look and feel.这个在预加载之前执行是因为lookAndFeel里的东西,预加载时也要用到 DesignUtils.initLookAndFeel(); - - DesignUtils.creatListeningServer(getStartPort(), startFileSuffix()); - + // 初始化Log Handler DesignerEnvManager.loadLogSetting(); DesignerFrame df = createDesignerFrame(); - - // 默认加载工作目录,用于读取License - switch2LastEnv(); - - initDefaultFont(); - //PluginManager要在环境切换和模块启动之前初始化 - PluginManager.registerEnvListener(); - // 必须先初始化Env再去startModule, 不然会导致lic读取不到 - ModuleContext.startModule(module2Start()); - - // 再次加载工作目录,用于读取工作目录下的各种插件 - switch2LastEnv(); - - ModuleContext.clearModuleListener(); + collectUserInformation(); showDesignerFrame(args, df, false); for (int i = 0; !TemplateTreePane.getInstance().getTemplateFileTree().isTemplateShowing() && i < LOAD_TREE_MAXNUM; i++) { TemplateTreePane.getInstance().getTemplateFileTree().refresh(); } - - splashWindow.setVisible(false); - splashWindow.dispose(); - - bindGlobalListener(); - - showErrorPluginsMessage(); } + + - private void bindGlobalListener() { - - GlobalListenerProviderManager.getInstance().init(); - } - - private void showErrorPluginsMessage() { - if (timer == null) { - timer = new Timer(5000, new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - String[] plugins = PluginCollector.getCollector().getErrorPlugins(); - if (ArrayUtils.isNotEmpty(plugins)) { - String text = StableUtils.join(plugins, ",") + ": " + Inter.getLocText("FR-Designer_Plugin_Should_Update_Please_Contact_Developer"); - int r = JOptionPane.showConfirmDialog(null, text, Inter.getLocText("FR-Designer_Plugin_Should_Update_Title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE); - if (r == JOptionPane.OK_OPTION) { - WebViewDlgHelper.createPluginDialog(); - } - } - timer.stop(); - } - }); - timer.start(); - } - } - - protected String[] startFileSuffix() { - return new String[]{".cpt", ".xls", ".xlsx", ".frm", ".form", ".cht", ".chart"}; - } - - protected DesignerFrame createDesignerFrame() { + private DesignerFrame createDesignerFrame() { return new DesignerFrame(this); } - protected int getStartPort() { - return MESSAGEPORT; - } - - protected void initLanguage() { - //这两句的位置不能随便调换,因为会影响语言切换的问题 - FRContext.setLanguage(DesignerEnvManager.getEnvManager(false).getLanguage()); - DesignerEnvManager.checkNameEnvMap(); - } - - protected void initDefaultFont() { - - } - - /** - * build得路径 - * - * @return build得路径 - */ - public String buildPropertiesPath() { - return "/com/fr/stable/build.properties"; - } - - - protected SplashPane createSplashPane() { - return new SplashPane(); - } - - //在VM options里加入-Ddebug=true激活 - private boolean isDebug() { - return "true".equals(System.getProperty("debug")); - } - - private static final int DEBUG_PORT = 51463; - - //端口改一下,环境配置文件改一下。便于启动两个设计器,进行对比调试 - private void setDebugEnv() { - DesignUtils.setPort(DEBUG_PORT); - DesignerEnvManager.setEnvFile(new File(ProductConstants.getEnvHome() + File.separator + ProductConstants.APP_NAME + "Env_debug.xml")); - } - - private void switch2LastEnv() { - try { - String current = DesignerEnvManager.getEnvManager().getCurEnvName(); - SignIn.signIn(DesignerEnvManager.getEnvManager().getEnv(current)); - if (!FRContext.getCurrentEnv().testServerConnectionWithOutShowMessagePane()) { - throw new Exception(Inter.getLocText("Datasource-Connection_failed")); - } - } catch (Exception e) { - TemplatePane.getInstance().dealEvnExceptionWhenStartDesigner(); - } - } private void showDesignerFrame(String[] args, final DesignerFrame df, boolean isException) { @@ -250,32 +94,7 @@ public abstract class BaseDesigner extends ToolBarMenuDock { file = FILEFactory.createFILE(FILEFactory.ENV_PREFIX + DesignerEnvManager.getEnvManager().getLastOpenFile()); } - - //启动时打开指定文件的接口 - DesignerStartOpenFileProcessor processor = ExtraDesignClassManager.getInstance().getSingle(DesignerStartOpenFileProcessor.XML_TAG); - if (processor != null) { - FILE f = processor.fileToShow(); - if (f != null) { - file = f;//避免null - } else { - isException = true;//此时有文件nullpointer异常,执行打开空文件 - } - } - if (file.exists() && !isException) { - df.openTemplate(file); - } else { - df.addAndActivateJTemplate(); - MutilTempalteTabPane.getInstance().setTemTemplate(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); - } - if (OperatingSystem.isMacOS()) { - enableFullScreenMode(df); - } - df.addWindowListener(new WindowAdapter() { - public void windowOpened(WindowEvent e) { - df.getSelectedJTemplate().requestGridFocus(); - } - }); - df.setVisible(true); + isException = openFile(df, isException, file); } catch (Exception e) { FRLogger.getLogger().error(e.getMessage(), e); if (!isException) { @@ -285,8 +104,38 @@ public abstract class BaseDesigner extends ToolBarMenuDock { } } } - - + + private boolean openFile(final DesignerFrame df, boolean isException, FILE file) { + + //启动时打开指定文件的接口 + DesignerStartOpenFileProcessor processor = ExtraDesignClassManager.getInstance().getSingle(DesignerStartOpenFileProcessor.XML_TAG); + if (processor != null) { + FILE f = processor.fileToShow(); + if (f != null) { + file = f;//避免null + } else { + isException = true;//此时有文件nullpointer异常,执行打开空文件 + } + } + if (file.exists() && !isException) { + df.openTemplate(file); + } else { + df.addAndActivateJTemplate(); + MutilTempalteTabPane.getInstance().setTemTemplate(HistoryTemplateListPane.getInstance().getCurrentEditingTemplate()); + } + if (OperatingSystem.isMacOS()) { + enableFullScreenMode(df); + } + df.addWindowListener(new WindowAdapter() { + public void windowOpened(WindowEvent e) { + df.getSelectedJTemplate().requestGridFocus(); + } + }); + df.setVisible(true); + return isException; + } + + /** * @param window */