diff --git a/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java index 8fed6e80d..c9b80ebf7 100644 --- a/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java +++ b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkCore.java @@ -43,6 +43,8 @@ public class DeepLinkCore { } private String pendingURL; + + private final List deepLinkPrepareList = new ArrayList<>(); private final List deepLinkList = new ArrayList<>(); @@ -51,6 +53,9 @@ public class DeepLinkCore { public void register(DeepLink deepLink) { if (deepLink != null) { deepLinkList.add(deepLink); + if (deepLink instanceof DeepLinkPrepare) { + deepLinkPrepareList.add((DeepLinkPrepare) deepLink); + } } } @@ -129,6 +134,11 @@ public class DeepLinkCore { private void acceptNewURL(String url) { this.pendingURL = url; + + UrlBean urlBean = UrlBean.create(this.pendingURL); + for (DeepLinkPrepare deepLinkPrepare : deepLinkPrepareList) { + deepLinkPrepare.prepare(urlBean.getUrl(), urlBean.getHost(), urlBean.getPath(), urlBean.getParams()); + } } private boolean canConsumePendingURL() { @@ -148,32 +158,11 @@ public class DeepLinkCore { } private void consumePendingURL() { - String host = null; - String path = null; - Map params = new HashMap<>(); - - URL url = null; - try { - url = new URL(null, this.pendingURL, new URLStreamHandler() { - @Override - protected URLConnection openConnection(URL u) throws IOException { - return null; - } - }); - } catch (MalformedURLException ignored) {} - - if (url != null) { - host = url.getHost(); - path = url.getPath(); - - List pairs = URLUtils.parse(url.getQuery()); - for (NameValuePair pair: pairs) { - params.put(pair.getName(), pair.getValue()); - } - } - + + UrlBean urlBean = UrlBean.create(this.pendingURL); + FineLoggerFactory.getLogger().info("consume deep link: " + this.pendingURL); - performDeepLinks(this.pendingURL, host, path, params); + performDeepLinks(urlBean.getUrl(), urlBean.getHost(), urlBean.getPath(), urlBean.getParams()); markPendingURLConsumed(); } @@ -194,4 +183,67 @@ public class DeepLinkCore { private void markPendingURLConsumed() { this.pendingURL = null; } + + private static class UrlBean { + + private String url; + + private String host; + + private String path; + + private Map params; + + public UrlBean(String url, String host, String path, Map params) { + this.url = url; + this.host = host; + this.path = path; + this.params = params; + } + + public String getUrl() { + return url; + } + + public String getHost() { + return host; + } + + public String getPath() { + return path; + } + + public Map getParams() { + return params; + } + + public static UrlBean create(String pendingUrl) { + + String host = null; + String path = null; + Map params = new HashMap<>(); + + URL url = null; + try { + url = new URL(null, pendingUrl, new URLStreamHandler() { + @Override + protected URLConnection openConnection(URL u) throws IOException { + return null; + } + }); + } catch (MalformedURLException ignored) { + } + + if (url != null) { + host = url.getHost(); + path = url.getPath(); + + List pairs = URLUtils.parse(url.getQuery()); + for (NameValuePair pair : pairs) { + params.put(pair.getName(), pair.getValue()); + } + } + return new UrlBean(pendingUrl, host, path, params); + } + } } diff --git a/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java new file mode 100644 index 000000000..e74d99d8b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/deeplink/DeepLinkPrepare.java @@ -0,0 +1,17 @@ +package com.fr.design.deeplink; + +import java.util.Map; + +/** + * created by Harrison on 2022/08/23 + **/ +public interface DeepLinkPrepare { + + /** + * 准备 + * + * @param url 链接 + * @return 成功/失败 + */ + boolean prepare(String url, String host, String path, Map params); +} diff --git a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java index c78469b45..7874329f5 100644 --- a/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java +++ b/designer-base/src/main/java/com/fr/start/common/DesignerStartupContext.java @@ -20,6 +20,11 @@ import java.util.Iterator; **/ public class DesignerStartupContext { + /** + * 可以启动 + */ + private boolean enabled = true; + /** * 启动参数 */ @@ -79,6 +84,14 @@ public class DesignerStartupContext { 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(); } @@ -114,7 +127,7 @@ public class DesignerStartupContext { 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(); + return !startupArgs.isDemo() && DesignerStartupUtil.convertArgs2FILE(startupArgs.get()) == null && !envs.isEmpty() && envManager.isStartupPageEnabled() && enabled; } /* 预热相关 */ diff --git a/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java b/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java index 6eb3ea366..ce69e0823 100644 --- a/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java +++ b/designer-realize/src/main/java/com/fr/design/deeplink/FileOpen4MacDeepLink.java @@ -4,6 +4,7 @@ import com.fr.design.mainframe.DesignerContext; import com.fr.file.FileFILE; import com.fr.stable.StringUtils; import com.fr.stable.os.OperatingSystem; +import com.fr.start.common.DesignerStartupContext; import com.fr.start.common.DesignerStartupUtil; import java.io.File; @@ -14,10 +15,11 @@ import java.util.Map; * @version 1.0 * Created by Starryi on 2022/1/13 */ -public class FileOpen4MacDeepLink extends DeepLink { +public class FileOpen4MacDeepLink extends DeepLink implements DeepLinkPrepare{ @Override public boolean accept(String url, String host, String path, Map params) { - return OperatingSystem.isMacos() && StringUtils.isEmpty(host) && StringUtils.isEmpty(path) && params.isEmpty(); + + return support(url, host, path, params); } @Override @@ -30,4 +32,19 @@ public class FileOpen4MacDeepLink extends DeepLink { DesignerContext.getDesignerFrame().openTemplate(new FileFILE(file)); } } + + @Override + public boolean prepare(String url, String host, String path, Map params) { + + if (support(url, host, path, params)) { + DesignerStartupContext.getInstance().setEnabled(false); + return true; + } + return false; + } + + public static boolean support(String url, String host, String path, Map params) { + + return OperatingSystem.isMacos() && StringUtils.isEmpty(host) && StringUtils.isEmpty(path) && params.isEmpty(); + } }