From 1c70ee19f38e12f574189aa0a3d7effabbd5ca47 Mon Sep 17 00:00:00 2001 From: ju Date: Fri, 14 Jun 2019 11:00:04 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-17988=20=E8=AE=BE=E8=AE=A1=E5=99=A8?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E9=80=9F=E5=BA=A6--=E6=9C=AC=E6=9C=BA?= =?UTF-8?q?=E5=A4=A7=E6=A6=82=E4=BB=8E=2014.2s=20->=2010.2=201=E3=80=81bas?= =?UTF-8?q?ic=E5=B9=B6=E8=A1=8C=202=E3=80=81new=20Designer=E5=92=8Cenv?= =?UTF-8?q?=E3=80=81core=E5=B9=B6=E8=A1=8C=EF=BC=8C=E4=BD=86=E6=98=AF?= =?UTF-8?q?=E5=92=8CshowDesigner=E4=B8=B2=E8=A1=8C=203=E3=80=81=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E8=AF=BB=E6=A8=A1=E6=9D=BF=E6=97=B6=E5=80=99=E7=9A=84?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=9D=A1=EF=BC=88=E5=BE=85=E8=AE=A8=E8=AE=BA?= =?UTF-8?q?=EF=BC=8C=E6=80=BB=E5=85=B1=E5=BF=AB=E4=BA=861s=E5=B7=A6?= =?UTF-8?q?=E5=8F=B3=E4=B8=8D=E8=BF=87=E5=90=AF=E5=8A=A8=E5=8A=A8=E7=94=BB?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E9=97=B4=E9=95=BF=E4=BA=86=EF=BC=8C=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E6=84=9F=E5=8F=97=E4=B8=8D=E7=A1=AE=E5=AE=9A=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/EnvChangeEntrance.java | 11 +- .../main/java/com/fr/start/BaseDesigner.java | 47 +++----- .../java/com/fr/start/DesignerInitial.java | 24 ++++ .../start/module/DesignerInitActivator.java | 21 ++++ .../start/module/DesignerShowActivator.java | 21 ++++ .../com/fr/start/module/DesignerStartup.java | 111 ++---------------- .../module/DesignerWorkspaceActivator.java | 94 +++++++++++++++ 7 files changed, 196 insertions(+), 133 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/start/DesignerInitial.java create mode 100644 designer-realize/src/main/java/com/fr/start/module/DesignerInitActivator.java create mode 100644 designer-realize/src/main/java/com/fr/start/module/DesignerShowActivator.java create mode 100644 designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceActivator.java diff --git a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java index 93f282454..c1c11553f 100644 --- a/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java +++ b/designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java @@ -102,11 +102,7 @@ public class EnvChangeEntrance { return false; } - //REPORT-13810如果只是添加了工作目录,没有切换,这里ToolArea也是要显示新建的工作目录 - JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); - if (template != null) { - template.refreshToolArea(); - } + WorkContext.switchTo(workspace, new WorkContextCallback() { @Override public void done() { @@ -119,6 +115,11 @@ public class EnvChangeEntrance { } } }); + //REPORT-13810如果只是添加了工作目录,没有切换,这里ToolArea也是要显示新建的工作目录 + JTemplate template = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + if (template != null) { + template.refreshToolArea(); + } } catch (WorkspaceAuthException | RegistEditionException e) { // String title = Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed"); diff --git a/designer-base/src/main/java/com/fr/start/BaseDesigner.java b/designer-base/src/main/java/com/fr/start/BaseDesigner.java index 3e466ed1f..f88582e66 100644 --- a/designer-base/src/main/java/com/fr/start/BaseDesigner.java +++ b/designer-base/src/main/java/com/fr/start/BaseDesigner.java @@ -31,19 +31,18 @@ import java.lang.reflect.Method; * The main class of Report Designer. */ public abstract class BaseDesigner extends ToolBarMenuDock { - private static final int PERCENT_TEN = 10; - private static final int PERCENT_SIXTY = 60; - private static final int PERCENT_NINTY= 90; - private static final int PERCENT_COMPLETE= 100; - + private static final int LOAD_TREE_MAXNUM = 10; + + private final String[] args; public BaseDesigner(String[] args) { - - init(args); + + this.args = args; + init(); } - - private void init(String[] args) { + + private void init() { //初始化 EventDispatcher.fire(ModuleEvent.MajorModuleStarting, Toolkit.i18nText("Fine-Design_Basic_Initializing")); // 初始化look and feel.这个在预加载之前执行是因为lookAndFeel里的东西,预加载时也要用到 @@ -52,18 +51,15 @@ public abstract class BaseDesigner extends ToolBarMenuDock { DesignerEnvManager.loadLogSetting(); createDesignerFrame(); } - - public void show(final String[] args) { + + public void show() { collectUserInformation(); - DesignerContext.getDesignerFrame().updateProgress(PERCENT_TEN); - showDesignerFrame(args, DesignerContext.getDesignerFrame(), false); - DesignerContext.getDesignerFrame().updateProgress(PERCENT_SIXTY); + showDesignerFrame(false); + DesignerContext.getDesignerFrame().setVisible(true); DesignerContext.getDesignerFrame().refreshEnv(); - DesignerContext.getDesignerFrame().updateProgress(PERCENT_NINTY); for (int i = 0; !TemplateTreePane.getInstance().getTemplateFileTree().isTemplateShowing() && i < LOAD_TREE_MAXNUM; i++) { TemplateTreePane.getInstance().getTemplateFileTree().refresh(); } - DesignerContext.getDesignerFrame().updateProgress(PERCENT_COMPLETE); } @@ -71,10 +67,9 @@ public abstract class BaseDesigner extends ToolBarMenuDock { new DesignerFrame(this); } - - - private void showDesignerFrame(String[] args, final DesignerFrame df, - boolean isException) { + + + private void showDesignerFrame(boolean isException) { try { FILE file = null; if (args != null && args.length > 0) { @@ -101,12 +96,13 @@ public abstract class BaseDesigner extends ToolBarMenuDock { file = FILEFactory.createFILE(FILEFactory.ENV_PREFIX + DesignerEnvManager.getEnvManager().getLastOpenFile()); } + DesignerFrame df = DesignerContext.getDesignerFrame(); isException = openFile(df, isException, file); df.fireDesignerOpened(); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); if (!isException) { - showDesignerFrame(args, df, true); + showDesignerFrame(true); } else { System.exit(0); } @@ -137,19 +133,14 @@ public abstract class BaseDesigner extends ToolBarMenuDock { df.getSelectedJTemplate().requestGridFocus(); return isException; } - - - /** - * @param window - */ + private void enableFullScreenMode(Window window) { String className = "com.apple.eawt.FullScreenUtilities"; String methodName = "setWindowCanFullScreen"; try { Class clazz = Class.forName(className); - Method method = clazz.getMethod(methodName, new Class[]{ - Window.class, boolean.class}); + Method method = clazz.getMethod(methodName, Window.class, boolean.class); method.invoke(null, window, true); } catch (Throwable t) { FineLoggerFactory.getLogger().error("Full screen mode is not supported"); diff --git a/designer-realize/src/main/java/com/fr/start/DesignerInitial.java b/designer-realize/src/main/java/com/fr/start/DesignerInitial.java new file mode 100644 index 000000000..ea1faa321 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/start/DesignerInitial.java @@ -0,0 +1,24 @@ +package com.fr.start; + +/** + * Created by juhaoyu on 2019-06-14. + * 设计器上下文 + */ +public class DesignerInitial { + + private static volatile Designer designer; + + public synchronized static void init(String... args) { + + designer = new Designer(args); + } + + public synchronized static void show() { + + if (designer != null) { + designer.show(); + } + //启动画面结束 + SplashContext.getInstance().hide(); + } +} diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerInitActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerInitActivator.java new file mode 100644 index 000000000..e9bea2692 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerInitActivator.java @@ -0,0 +1,21 @@ +package com.fr.start.module; + +import com.fr.module.Activator; +import com.fr.start.DesignerInitial; + +/** + * Created by juhaoyu on 2019-06-14. + */ +public class DesignerInitActivator extends Activator { + + @Override + public void start() { + + DesignerInitial.init(upFindSingleton(StartupArgs.class).get()); + } + + @Override + public void stop() { + + } +} diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerShowActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerShowActivator.java new file mode 100644 index 000000000..d1e0ab567 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerShowActivator.java @@ -0,0 +1,21 @@ +package com.fr.start.module; + +import com.fr.module.Activator; +import com.fr.start.DesignerInitial; + +/** + * Created by juhaoyu on 2019-06-14. + */ +public class DesignerShowActivator extends Activator { + + @Override + public void start() { + + DesignerInitial.show(); + } + + @Override + public void stop() { + + } +} diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java b/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java index a81676979..97bdceda1 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerStartup.java @@ -2,20 +2,15 @@ package com.fr.start.module; import com.fr.design.file.HistoryTemplateListCache; -import com.fr.design.mainframe.DesignerContext; import com.fr.event.Event; import com.fr.event.Listener; -import com.fr.log.FineLoggerFactory; import com.fr.module.Activator; import com.fr.record.analyzer.EnableMetrics; import com.fr.record.analyzer.Metrics; import com.fr.runtime.FineRuntime; -import com.fr.start.Designer; +import com.fr.start.DesignerInitial; import com.fr.start.ServerStarter; -import com.fr.start.SplashContext; import com.fr.start.server.FineEmbedServer; -import com.fr.startup.activators.BasicActivator; -import com.fr.third.org.apache.commons.lang3.time.StopWatch; import com.fr.workspace.Workspace; import com.fr.workspace.WorkspaceEvent; @@ -27,115 +22,31 @@ import java.util.concurrent.Executors; */ @EnableMetrics public class DesignerStartup extends Activator { - + @Override @Metrics public void start() { - + startSub(PreStartActivator.class); - //启动基础部分 - startSub(BasicActivator.class); - final String[] args = getModule().upFindSingleton(StartupArgs.class).get(); - final Designer designer = new Designer(args); - - startSub(DesignerWorkspaceProvider.class); - registerEnvListener(); - //启动env - startSub(EnvBasedModule.class); + getSub("parallel").start(); //designer模块启动好后,查看demo browserDemo(); - ExecutorService service = Executors.newFixedThreadPool(2); - service.submit(new Runnable() { - @Override - public void run() { - FineEmbedServer.start(); - } - }); - final StopWatch watch = new StopWatch(); - service.submit(new Runnable() { - - @Override - public void run() { - try { - - watch.start(); - designer.show(args); - } finally { - DesignerContext.getDesignerFrame().getProgressDialog().dispose(); - FineLoggerFactory.getLogger().info("Designer showed.Time used {} ms", watch.getTime()); - watch.stop(); - } - } - }); - service.shutdown(); - DesignerContext.getDesignerFrame().setVisible(true); - //启动画面结束 - SplashContext.getInstance().hide(); - - DesignerContext.getDesignerFrame().getProgressDialog().setVisible(true); + + startSub(DesignerShowActivator.class); startSub(StartFinishActivator.class); FineRuntime.startFinish(); } - + private void browserDemo() { - + if (getModule().leftFindSingleton(StartupArgs.class) != null && getModule().leftFindSingleton(StartupArgs.class).isDemo()) { ServerStarter.browserDemoURL(); } } - - /** - * 注册切换环境前后事件监听 - */ - private void registerEnvListener() { - - /*切换环境前,关闭所有相关模块,最后执行*/ - listenEvent(WorkspaceEvent.BeforeSwitch, new Listener(Integer.MIN_VALUE) { - - @Override - public void on(Event event, Workspace current) { - getSub(EnvBasedModule.class).stop(); - } - }); - /*切换环境后,重新启动所有相关模块,最先执行*/ - listenEvent(WorkspaceEvent.AfterSwitch, new Listener(Integer.MAX_VALUE) { - - @Override - public void on(Event event, Workspace current) { - getSub(EnvBasedModule.class).start(); - // 切换后的环境是本地环境才启动内置服务器 - if (current.isLocal()) { - ExecutorService service = Executors.newSingleThreadExecutor(); - service.submit(new Runnable() { - @Override - public void run() { - FineEmbedServer.start(); - } - }); - service.shutdown(); - } - } - }); - /*切换环境前,存储一下打开的所有文件对象,要先于 关闭相关模块部分 被触发*/ - listenEvent(WorkspaceEvent.BeforeSwitch, new Listener(Integer.MAX_VALUE) { - @Override - public void on(Event event, Workspace workspace) { - HistoryTemplateListCache.getInstance().stash(); - } - }); - - /*切换环境后,装载一下打开的所有文件对象,优先级低于默认优先级,要后于 启动相关模块部分 被触发*/ - listenEvent(WorkspaceEvent.AfterSwitch, new Listener(Integer.MIN_VALUE) { - @Override - public void on(Event event, Workspace workspace) { - HistoryTemplateListCache.getInstance().load(); - } - }); - } - - + + @Override public void stop() { - + } } diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceActivator.java new file mode 100644 index 000000000..09115eb50 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceActivator.java @@ -0,0 +1,94 @@ +package com.fr.start.module; + +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.event.Event; +import com.fr.event.Listener; +import com.fr.module.Activator; +import com.fr.start.server.FineEmbedServer; +import com.fr.workspace.WorkContext; +import com.fr.workspace.Workspace; +import com.fr.workspace.WorkspaceEvent; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * Created by juhaoyu on 2019-06-14. + */ +public class DesignerWorkspaceActivator extends Activator { + + @Override + public void start() { + + registerEnvListener(); + startServer(WorkContext.getCurrent()); + } + + + /** + * 注册切换环境前后事件监听 + */ + private void registerEnvListener() { + + /*切换环境前,关闭所有相关模块,最后执行*/ + listenEvent(WorkspaceEvent.BeforeSwitch, new Listener(Integer.MIN_VALUE) { + + @Override + public void on(Event event, Workspace current) { + + getSub(EnvBasedModule.class).stop(); + } + }); + /*切换环境后,重新启动所有相关模块,最先执行*/ + listenEvent(WorkspaceEvent.AfterSwitch, new Listener(Integer.MAX_VALUE) { + + @Override + public void on(Event event, Workspace current) { + + getSub(EnvBasedModule.class).start(); + startServer(current); + } + }); + /*切换环境前,存储一下打开的所有文件对象,要先于 关闭相关模块部分 被触发*/ + listenEvent(WorkspaceEvent.BeforeSwitch, new Listener(Integer.MAX_VALUE) { + + @Override + public void on(Event event, Workspace workspace) { + + HistoryTemplateListCache.getInstance().stash(); + } + }); + + /*切换环境后,装载一下打开的所有文件对象,优先级低于默认优先级,要后于 启动相关模块部分 被触发*/ + listenEvent(WorkspaceEvent.AfterSwitch, new Listener(Integer.MIN_VALUE) { + + @Override + public void on(Event event, Workspace workspace) { + + HistoryTemplateListCache.getInstance().load(); + } + }); + } + + private void startServer(Workspace current) { + + // 切换后的环境是本地环境才启动内置服务器 + if (current.isLocal()) { + ExecutorService service = Executors.newSingleThreadExecutor(); + service.submit(new Runnable() { + + @Override + public void run() { + + FineEmbedServer.start(); + } + }); + service.shutdown(); + } + } + + @Override + public void stop() { + + } +}