package com.fr.start.common; import com.fr.design.DesignerEnvManager; import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceType; import com.fr.file.FileFILE; import com.fr.start.module.StartupArgs; import com.fr.startup.metric.DesignerMetrics; import com.fr.startup.ui.StartupPageModel; import com.fr.third.guava.collect.Lists; import com.fr.third.org.apache.commons.lang3.time.StopWatch; import java.util.ArrayList; import java.util.Iterator; /** * 启动页上下文 * * created by Harrison on 2022/06/22 **/ public class DesignerStartupContext { /** * 可以启动 */ private boolean enabled = true; /** * 启动参数 */ private StartupArgs startupArgs; /** * 启动数据 */ private StartupPageModel startupPageModel; /** * 设计器启动埋点 */ private final DesignerMetrics designerMetrics = new DesignerMetrics(); /** * 是否在起始页打开的等待过程中 */ private boolean onWaiting = false; /** * 是否在启动中 */ private boolean onStartup = true; /** * 是否在预热中 */ private boolean onWarmup = false; /** * 打开上一次的文件 */ private boolean openLastFile; /** * 打开空设计器 */ private boolean openEmpty; /** * 直接创建一个新模板 */ private boolean createNew; /** * 启动的模板 */ private FileFILE startingTemplateFile; /** * 时间记录 */ private static StopWatch STOP_WATCH = new StopWatch(); public static DesignerStartupContext getInstance() { return StartupContextHolder.INSTANCE; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } private static class StartupContextHolder { private static final DesignerStartupContext INSTANCE = new DesignerStartupContext(); } public static StopWatch getRecorder() { return STOP_WATCH; } public DesignerMetrics getDesignerMetrics() { return designerMetrics; } /* 启动模式 */ public FileFILE getStartingTemplateFile() { return startingTemplateFile; } public void setStartingTemplateFile(FileFILE startingTemplateFile) { this.startingTemplateFile = startingTemplateFile; } /** * 展示启动页 * 1. 判断当前的工作目录数量 * 2. 判断是否是 demo、还是打开目标文件 * 3. 功能是否开启 * * @return 是/否 */ public boolean isShowStartupPage() { DesignerEnvManager envManager = DesignerEnvManager.getEnvManager(); Iterator envNameIterator = envManager.getEnvNameIterator(); ArrayList envs = Lists.newArrayList(envNameIterator); return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && envManager.isStartupPageEnabled() && enabled; } /* 预热相关 */ public boolean onWarmup() { return this.onWarmup; } public boolean canWarmup() { String curEnvName = DesignerEnvManager.getEnvManager().getCurEnvName(); DesignerWorkspaceInfo workspaceInfo = DesignerEnvManager.getEnvManager().getWorkspaceInfo(curEnvName); return workspaceInfo.getType() == DesignerWorkspaceType.Local; } public void setStartupPageModel(StartupPageModel startupPageModel) { this.startupPageModel = startupPageModel; } public StartupPageModel getStartupPageModel() { return startupPageModel; } public boolean isOnWaiting() { return onWaiting; } public void setOnWaiting(boolean onWaiting) { this.onWaiting = onWaiting; } public boolean isSupport() { return onStartup && isShowStartupPage(); } public boolean isOnStartup() { return onStartup; } public void setOnStartup(boolean onStartup) { this.onStartup = onStartup; } /* 文件相关*/ public boolean isOpenLastFile() { return this.openLastFile; } public boolean isOpenEmpty() { return this.openEmpty; } /* set */ public void setOnWarmup(boolean onWarmup) { this.onWarmup = onWarmup; } public void setOpenLastFile(boolean openLastFile) { this.openLastFile = openLastFile; } public void setOpenEmpty(boolean openEmpty) { this.openEmpty = openEmpty; } public boolean isCreateNew() { return createNew; } public void setCreateNew(boolean createNew) { this.createNew = createNew; } public void setStartupArgs(StartupArgs startupArgs) { this.startupArgs = startupArgs; } }