|
|
|
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.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.ServerStarter;
|
|
|
|
import com.fr.start.SplashContext;
|
|
|
|
import com.fr.start.server.FineEmbedServer;
|
|
|
|
import com.fr.startup.activators.BasicActivator;
|
|
|
|
import com.fr.workspace.Workspace;
|
|
|
|
import com.fr.workspace.WorkspaceEvent;
|
|
|
|
|
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
import java.util.concurrent.Executors;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Created by juhaoyu on 2018/1/8.
|
|
|
|
*/
|
|
|
|
@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);
|
|
|
|
//designer模块启动好后,查看demo
|
|
|
|
browserDemo();
|
|
|
|
ExecutorService service = Executors.newFixedThreadPool(2);
|
|
|
|
service.submit(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
FineEmbedServer.start();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
service.submit(new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
try {
|
|
|
|
designer.show(args);
|
|
|
|
} finally {
|
|
|
|
DesignerContext.getDesignerFrame().getProgressDialog().dispose();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
service.shutdown();
|
|
|
|
DesignerContext.getDesignerFrame().setVisible(true);
|
|
|
|
//启动画面结束
|
|
|
|
SplashContext.getInstance().hide();
|
|
|
|
|
|
|
|
DesignerContext.getDesignerFrame().getProgressDialog().setVisible(true);
|
|
|
|
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<Workspace>(Integer.MIN_VALUE) {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void on(Event event, Workspace current) {
|
|
|
|
getSub(EnvBasedModule.class).stop();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
/*切换环境后,重新启动所有相关模块,最先执行*/
|
|
|
|
listenEvent(WorkspaceEvent.AfterSwitch, new Listener<Workspace>(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<Workspace>(Integer.MAX_VALUE) {
|
|
|
|
@Override
|
|
|
|
public void on(Event event, Workspace workspace) {
|
|
|
|
HistoryTemplateListCache.getInstance().stash();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
/*切换环境后,装载一下打开的所有文件对象,优先级低于默认优先级,要后于 启动相关模块部分 被触发*/
|
|
|
|
listenEvent(WorkspaceEvent.AfterSwitch, new Listener<Workspace>(Integer.MIN_VALUE) {
|
|
|
|
@Override
|
|
|
|
public void on(Event event, Workspace workspace) {
|
|
|
|
HistoryTemplateListCache.getInstance().load();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void stop() {
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|