From ff97775129bbf6aedfb7edf7b2d20186ea9a49c0 Mon Sep 17 00:00:00 2001 From: "Wim.Zhai" Date: Thu, 18 Apr 2019 16:49:44 +0800 Subject: [PATCH 01/13] =?UTF-8?q?CHART-4177=20=E4=BA=A4=E4=BA=92=20?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=BB=84=E4=BB=B6=E8=BE=B9=E8=B7=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/extended/chart/ExtendedOtherPane.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java b/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java index 31aa2d003..6fba552b7 100644 --- a/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java +++ b/designer-chart/src/main/java/com/fr/extended/chart/ExtendedOtherPane.java @@ -11,6 +11,7 @@ import com.fr.design.mainframe.chart.AbstractChartAttrPane; import com.fr.design.mainframe.chart.PaneTitleConstants; import com.fr.van.chart.designer.TableLayout4VanChartHelper; +import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -138,4 +139,10 @@ public class ExtendedOtherPane extends AbstractChartAtt return PaneTitleConstants.CHART_OTHER_TITLE; } + @Override + protected void initContentPane() { + leftContentPane = createContentPane(); + leftContentPane.setBorder(BorderFactory.createMatteBorder(10, 3, 0, 10, original)); + this.add(leftContentPane, BorderLayout.CENTER); + } } From d68ad46855e63b13165a65507b5c81a65a34b9b4 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 18 Apr 2019 22:13:44 +0800 Subject: [PATCH 02/13] =?UTF-8?q?KERNEL-442=20=E6=8F=90=E4=BE=9B=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BD=BF=E7=94=A8=E9=87=8D=E6=9E=84=E8=BF=87=E7=9A=84?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E5=99=A8=E5=BC=80=E5=85=B3?= =?UTF-8?q?=EF=BC=88=E5=9F=BA=E4=BA=8EFineUI=E5=92=8CTypeScript=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/file/PreferencePane.java | 21 +- .../actions/server/PluginManagerAction.java | 15 +- .../com/fr/design/bridge/exec/JSBridge.java | 17 + .../com/fr/design/bridge/exec/JSCallback.java | 18 + .../callback => bridge/exec}/JSExecutor.java | 2 +- .../exec/JSUtils.java} | 58 +-- .../fr/design/extra/PluginJavaFxExecutor.java | 42 ++ .../fr/design/extra/PluginOperateUtils.java | 2 +- .../com/fr/design/extra/PluginWebBridge.java | 20 +- .../exe/callback/InstallFromDiskCallback.java | 1 + .../exe/callback/InstallOnlineCallback.java | 1 + .../exe/callback/ModifyStatusCallback.java | 1 + .../exe/callback/UninstallPluginCallback.java | 1 + .../exe/callback/UpdateFromDiskCallback.java | 1 + .../exe/callback/UpdateOnlineCallback.java | 1 + .../main/java/com/fr/design/ui/Assistant.java | 1 + .../com/fr/design/ui/EmbProtocolHandler.java | 34 +- .../java/com/fr/design/ui/ModernUIPane.java | 22 + .../java/com/fr/design/upm/UPMBridge.java | 373 ++++++++++++++++- .../java/com/fr/design/upm/UPMDialog.java | 4 +- .../main/java/com/fr/design/upm/UPMPane.java | 20 +- .../java/com/fr/design/upm/UpmBridge.java | 378 ++++++++++++++++++ .../java/com/fr/design/upm/UpmDialog.java | 34 ++ .../design/upm/{UPM.java => UpmFinder.java} | 24 +- .../main/java/com/fr/design/upm/UpmPane.java | 72 ++++ .../main/java/com/fr/design/upm/UpmUtils.java | 21 + .../fr/design/upm/event/CertificateEvent.java | 12 + .../design/upm/exec/UpmBrowserExecutor.java | 30 ++ .../upm/loader/UpmDesignResourceLoader.java | 27 ++ .../com/fr/design/upm/task/UpmTaskWorker.java | 52 +++ .../main/resources/com/fr/design/upm/warn.js | 4 +- .../design/mainframe/bbs/UserInfoLabel.java | 16 + 32 files changed, 1237 insertions(+), 88 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java rename designer-base/src/main/java/com/fr/design/{extra/exe/callback => bridge/exec}/JSExecutor.java (72%) rename designer-base/src/main/java/com/fr/design/{extra/exe/callback/JSCallback.java => bridge/exec/JSUtils.java} (59%) create mode 100644 designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmBridge.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmDialog.java rename designer-base/src/main/java/com/fr/design/upm/{UPM.java => UpmFinder.java} (70%) create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmPane.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmUtils.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java create mode 100644 designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java index 4edf71c3b..ae6ba4c25 100644 --- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java +++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java @@ -2,6 +2,7 @@ package com.fr.design.actions.file; import com.fr.base.BaseUtils; import com.fr.config.Configuration; +import com.fr.config.ServerPreferenceConfig; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; import com.fr.design.dialog.BasicDialog; @@ -24,7 +25,6 @@ import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.design.mainframe.DesignerContext; import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.ComparatorUtils; import com.fr.general.FRFont; @@ -133,6 +133,7 @@ public class PreferencePane extends BasicPane { private UICheckBox oracleSpace; private UISpinner cachingTemplateSpinner; private UICheckBox openDebugComboBox; + private UICheckBox useOptimizedUPMCheckbox; private UICheckBox joinProductImprove; public PreferencePane() { @@ -178,6 +179,11 @@ public class PreferencePane extends BasicPane { debuggerPane.add(openDebugComboBox, BorderLayout.CENTER); advancePane.add(debuggerPane); + JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager")); + useOptimizedUPMCheckbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager")); + upmSelectorPane.add(useOptimizedUPMCheckbox); + advancePane.add(upmSelectorPane); + JPanel improvePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve")); joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve")); @@ -560,6 +566,8 @@ public class PreferencePane extends BasicPane { openDebugComboBox.setSelected(designerEnvManager.isOpenDebug()); + useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM()); + this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace()); this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit()); this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove()); @@ -641,6 +649,17 @@ public class PreferencePane extends BasicPane { return new Class[]{Log4jConfig.class}; } }); + Configurations.update(new Worker() { + @Override + public void run() { + ServerPreferenceConfig.getInstance().setUseOptimizedUPM(useOptimizedUPMCheckbox.isSelected()); + } + + @Override + public Class[] targets() { + return new Class[] {ServerPreferenceConfig.class}; + } + }); } diff --git a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java index aa2eef705..1b7d7bbc4 100644 --- a/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java +++ b/designer-base/src/main/java/com/fr/design/actions/server/PluginManagerAction.java @@ -1,20 +1,12 @@ package com.fr.design.actions.server; -import com.fr.base.BaseUtils; import com.fr.config.ServerPreferenceConfig; -import com.fr.design.DesignerEnvManager; import com.fr.design.actions.UpdateAction; -import com.fr.design.dialog.UIDialog; -import com.fr.design.extra.ShopDialog; import com.fr.design.extra.WebViewDlgHelper; -import com.fr.design.mainframe.DesignerContext; import com.fr.design.menu.MenuKeySet; -import com.fr.design.upm.UPM; -import com.fr.design.upm.UPMDialog; -import com.fr.design.upm.UPMPane; +import com.fr.design.upm.UpmFinder; import com.fr.general.IOUtils; - import javax.swing.*; import java.awt.event.ActionEvent; @@ -35,9 +27,8 @@ public class PluginManagerAction extends UpdateAction { @Override public void actionPerformed(ActionEvent e) { // 可以启用新版本的插件商店(使用JxBrowser作为容器) - if (DesignerEnvManager.getEnvManager().isOpenDebug() - ||ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { - UPM.showUPMDialog(); + if (ServerPreferenceConfig.getInstance().isUseOptimizedUPM()) { + UpmFinder.showUPMDialog(); } else { WebViewDlgHelper.createPluginDialog(); } diff --git a/designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java new file mode 100644 index 000000000..4c7995243 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSBridge.java @@ -0,0 +1,17 @@ +package com.fr.design.bridge.exec; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + * 用于标记一个方法是用于和JS做桥接的,避免被误删除 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.SOURCE) +public @interface JSBridge { +} diff --git a/designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java new file mode 100644 index 000000000..0a0451b54 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSCallback.java @@ -0,0 +1,18 @@ +package com.fr.design.bridge.exec; + +/** + * Created by ibm on 2017/5/27. + */ +public class JSCallback { + + private JSExecutor executeScript; + + public JSCallback(JSExecutor jsExecutor) { + this.executeScript = jsExecutor; + } + + public void execute(String newValue) { + executeScript.executor(newValue); + } +} + diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSExecutor.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java similarity index 72% rename from designer-base/src/main/java/com/fr/design/extra/exe/callback/JSExecutor.java rename to designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java index 2adbadc87..9ded472eb 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSExecutor.java +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSExecutor.java @@ -1,4 +1,4 @@ -package com.fr.design.extra.exe.callback; +package com.fr.design.bridge.exec; /** * Created by ibm on 2017/6/21. diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSCallback.java b/designer-base/src/main/java/com/fr/design/bridge/exec/JSUtils.java similarity index 59% rename from designer-base/src/main/java/com/fr/design/extra/exe/callback/JSCallback.java rename to designer-base/src/main/java/com/fr/design/bridge/exec/JSUtils.java index d01446ee0..730a283e1 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/JSCallback.java +++ b/designer-base/src/main/java/com/fr/design/bridge/exec/JSUtils.java @@ -1,46 +1,20 @@ -package com.fr.design.extra.exe.callback; +package com.fr.design.bridge.exec; +import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; -import javafx.application.Platform; -import javafx.scene.web.WebEngine; import netscape.javascript.JSObject; +import java.util.ArrayList; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * Created by ibm on 2017/5/27. + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 */ -public class JSCallback { - - private JSExecutor executeScript; - - public JSCallback(final WebEngine webEngine, final JSObject callback) { - init(webEngine, callback); - } - - public void init(final WebEngine webEngine, final JSObject callback){ - executeScript = new JSExecutor() { - @Override - public void executor(final String newValue) { - Platform.runLater(new Runnable() { - @Override - public void run() { - String fun = "(" + callback + ")(\"" + trimText(newValue) + "\")"; - try { - webEngine.executeScript(fun); - } catch (Exception e) { - webEngine.executeScript("alert(\"" + e.getMessage() + "\")"); - } - } - }); - } - }; - } - - public void execute(String newValue) { - executeScript.executor(newValue); - } +public class JSUtils { /** @@ -60,7 +34,7 @@ public class JSCallback { * @param old 原始字符串 * @return 处理之后的字符串 */ - private String trimText(String old) { + public static String trimText(String old) { if (StringUtils.isNotBlank(old)) { String b = filterHtmlTag(old); return b.replaceAll("\\\\n", StringUtils.EMPTY).replaceAll("\\\\t", StringUtils.EMPTY).replaceAll("\"", "\\\\\"").replaceAll("\'", "\\\\\'").replaceAll("\\\\\\\\", "\\\\\\\\\\\\"); @@ -73,7 +47,7 @@ public class JSCallback { * @param origin 原始字符串 * @return 处理之后的字符串 */ - private String filterHtmlTag(String origin) { + public static String filterHtmlTag(String origin) { String regHtml = "<[^>]+>"; Pattern patternHtml = Pattern.compile(regHtml, Pattern.CASE_INSENSITIVE); Matcher matchHtml = patternHtml.matcher(origin); @@ -81,5 +55,15 @@ public class JSCallback { return origin; } + public String[] jsObjectToStringArray(JSObject obj) { + if (obj == null) { + return ArrayUtils.EMPTY_STRING_ARRAY; + } + int len = (int) obj.getMember("length"); + List list = new ArrayList<>(); + for (int i = 0; i < len; i++) { + list.add(obj.getSlot(i).toString()); + } + return list.toArray(new String[len]); + } } - diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java b/designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java new file mode 100644 index 000000000..c3863a46d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/extra/PluginJavaFxExecutor.java @@ -0,0 +1,42 @@ +package com.fr.design.extra; + +import com.fr.design.bridge.exec.JSExecutor; +import com.fr.design.bridge.exec.JSUtils; +import javafx.application.Platform; +import javafx.scene.web.WebEngine; +import netscape.javascript.JSObject; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class PluginJavaFxExecutor implements JSExecutor { + + public static PluginJavaFxExecutor create(WebEngine webEngine, JSObject callback) { + return new PluginJavaFxExecutor(webEngine, callback); + } + + private WebEngine webEngine; + private JSObject callback; + + private PluginJavaFxExecutor(WebEngine webEngine, JSObject callback) { + this.webEngine = webEngine; + this.callback = callback; + } + + @Override + public void executor(final String newValue) { + Platform.runLater(new Runnable() { + @Override + public void run() { + String fun = "(" + callback + ")(\"" + JSUtils.trimText(newValue) + "\")"; + try { + webEngine.executeScript(fun); + } catch (Exception e) { + webEngine.executeScript("alert(\"" + e.getMessage() + "\")"); + } + } + }); + } +} diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java index 99e02bdc1..774578630 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java @@ -3,7 +3,7 @@ package com.fr.design.extra; import com.fr.config.MarketConfig; import com.fr.design.extra.exe.callback.InstallFromDiskCallback; import com.fr.design.extra.exe.callback.InstallOnlineCallback; -import com.fr.design.extra.exe.callback.JSCallback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.exe.callback.ModifyStatusCallback; import com.fr.design.extra.exe.callback.UninstallPluginCallback; import com.fr.design.extra.exe.callback.UpdateFromDiskCallback; diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java index 02a51ad3f..492bbfd97 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java @@ -3,6 +3,7 @@ package com.fr.design.extra; import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; import com.fr.design.RestartHelper; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.GetInstalledPluginsExecutor; import com.fr.design.extra.exe.GetPluginCategoriesExecutor; @@ -11,12 +12,9 @@ import com.fr.design.extra.exe.GetPluginPrefixExecutor; import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor; -import com.fr.design.extra.exe.callback.JSCallback; import com.fr.design.gui.ilable.UILabel; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; - import com.fr.general.CloudCenter; -import com.fr.json.JSONException; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginMarker; @@ -172,7 +170,7 @@ public class PluginWebBridge { * @param callback 回调函数 */ public void installPluginOnline(final String pluginInfo, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); } @@ -183,7 +181,7 @@ public class PluginWebBridge { * @param filePath 插件包的路径 */ public void installPluginFromDisk(final String filePath, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); File file = new File(filePath); PluginOperateUtils.installPluginFromDisk(file, jsCallback); } @@ -194,7 +192,7 @@ public class PluginWebBridge { * @param pluginInfo 插件信息 */ public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); } @@ -204,7 +202,7 @@ public class PluginWebBridge { * @param pluginIDs 插件集合 */ public void updatePluginOnline(JSObject pluginIDs, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); String[] pluginInfos = jsObjectToStringArray(pluginIDs); List pluginMarkerList = new ArrayList(); for (int i = 0; i < pluginInfos.length; i++) { @@ -219,7 +217,7 @@ public class PluginWebBridge { * @param filePath 插件包的路径 */ public void updatePluginFromDisk(String filePath, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); File file = new File(filePath); PluginOperateUtils.updatePluginFromDisk(file, jsCallback); } @@ -230,7 +228,7 @@ public class PluginWebBridge { * @param pluginID 插件ID */ public void setPluginActive(String pluginID, final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginOperateUtils.setPluginActive(pluginID, jsCallback); } @@ -427,7 +425,7 @@ public class PluginWebBridge { * @param callback */ public void registerLoginInfo(final JSObject callback) { - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); PluginOperateUtils.getLoginInfo(jsCallback, uiLabel); } @@ -559,7 +557,7 @@ public class PluginWebBridge { } public void getPackInfo(final JSObject callback){ - JSCallback jsCallback = new JSCallback(webEngine, callback); + JSCallback jsCallback = new JSCallback(PluginJavaFxExecutor.create(webEngine, callback)); jsCallback.execute(StringUtils.EMPTY); } diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java index 1e170c844..e8096efbf 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java index 9b86641e6..23b6679b6 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java index 681180053..b7b817ef4 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginUtils; import com.fr.plugin.manage.control.PluginTaskCallback; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java index a6f781b94..db8a69188 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginUtils; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java index cd0ccab84..26315fd03 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginUtils; diff --git a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java index c857960c7..28f4f6a31 100644 --- a/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java +++ b/designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java @@ -1,5 +1,6 @@ package com.fr.design.extra.exe.callback; +import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; import com.fr.log.FineLoggerFactory; diff --git a/designer-base/src/main/java/com/fr/design/ui/Assistant.java b/designer-base/src/main/java/com/fr/design/ui/Assistant.java index 601f0ac36..7a51c188c 100644 --- a/designer-base/src/main/java/com/fr/design/ui/Assistant.java +++ b/designer-base/src/main/java/com/fr/design/ui/Assistant.java @@ -49,5 +49,6 @@ public class Assistant { ProtocolService protocolService = browserContext.getProtocolService(); // 支持读取jar包中文件的自定义协议————emb:/com/fr/design/images/bbs.png protocolService.setProtocolHandler("emb", handler); + //protocolService.setProtocolHandler("file", handler); } } diff --git a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java index 6636e2874..94456df97 100644 --- a/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java +++ b/designer-base/src/main/java/com/fr/design/ui/EmbProtocolHandler.java @@ -1,7 +1,11 @@ package com.fr.design.ui; +import com.fr.base.TemplateUtils; import com.fr.general.IOUtils; import com.fr.stable.StringUtils; +import com.fr.third.org.apache.commons.codec.net.URLCodec; +import com.fr.third.org.apache.commons.io.FileUtils; +import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.web.struct.AssembleComponent; import com.fr.web.struct.AtomBuilder; import com.fr.web.struct.PathGroup; @@ -11,7 +15,12 @@ import com.teamdev.jxbrowser.chromium.ProtocolHandler; import com.teamdev.jxbrowser.chromium.URLRequest; import com.teamdev.jxbrowser.chromium.URLResponse; +import java.io.File; +import java.io.FileInputStream; import java.io.InputStream; +import java.io.StringReader; +import java.net.URI; +import java.util.Map; /** * @author richie @@ -21,6 +30,7 @@ import java.io.InputStream; public class EmbProtocolHandler implements ProtocolHandler { private AssembleComponent component; + private Map map; public EmbProtocolHandler() { @@ -30,17 +40,35 @@ public class EmbProtocolHandler implements ProtocolHandler { this.component = component; } + public EmbProtocolHandler(AssembleComponent component, Map map) { + this.component = component; + this.map = map; + } + + public EmbProtocolHandler(Map map) { + this.map = map; + } @Override public URLResponse onRequest(URLRequest req) { try { String path = req.getURL(); - if (path.startsWith("emb:dynamic")) { + if (path.startsWith("file:")) { + String url = new URLCodec().decode(path); + String filePath = TemplateUtils.renderParameter4Tpl(url, map); + File file = new File(URI.create(filePath).getPath()); + InputStream inputStream = new FileInputStream(file); + if (path.endsWith(".svg")) { + System.out.println(path); + } + return Assistant.inputStream2Response(inputStream, "file:///" + file.getAbsolutePath()); + } + else if (path.startsWith("emb:dynamic")) { URLResponse response = new URLResponse(); response.setData(htmlText().getBytes()); response.getHeaders().setHeader("Content-Type", "text/html"); return response; - } else { + } else { int index = path.indexOf("="); if (index > 0) { path = path.substring(index + 1); @@ -51,7 +79,7 @@ public class EmbProtocolHandler implements ProtocolHandler { return Assistant.inputStream2Response(inputStream, path); } } catch (Exception ignore) { - + ignore.printStackTrace(); } return null; } diff --git a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java index 5f6c8c955..99a4fe97c 100644 --- a/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java +++ b/designer-base/src/main/java/com/fr/design/ui/ModernUIPane.java @@ -22,6 +22,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Map; /** * @author richie @@ -164,6 +165,16 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载url指向的资源 + * @param url 文件的地址 + */ + public Builder withURL(final String url, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(map)); + pane.browser.loadURL(url); + return this; + } + /** * 加载Atom组件 * @param component Atom组件 @@ -174,6 +185,17 @@ public class ModernUIPane extends BasicPane { return this; } + /** + * 加载Atom组件 + * @param component Atom组件 + */ + public Builder withComponent(AssembleComponent component, Map map) { + Assistant.setEmbProtocolHandler(pane.browser, new EmbProtocolHandler(component, map)); + pane.browser.loadURL("emb:dynamic"); + return this; + } + + /** * 加载html文本内容 * @param html 要加载html文本内容 diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java index 4fa98ed32..8984e4191 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java @@ -1,7 +1,46 @@ package com.fr.design.upm; +import com.fr.base.passport.FinePassportManager; +import com.fr.config.MarketConfig; +import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; +import com.fr.design.bridge.exec.JSBridge; +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.extra.PluginOperateUtils; +import com.fr.design.extra.PluginUtils; +import com.fr.design.extra.exe.GetInstalledPluginsExecutor; +import com.fr.design.extra.exe.GetPluginCategoriesExecutor; +import com.fr.design.extra.exe.GetPluginFromStoreExecutor; +import com.fr.design.extra.exe.PluginLoginExecutor; +import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; +import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.i18n.Toolkit; +import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; +import com.fr.design.upm.exec.UpmBrowserExecutor; +import com.fr.design.upm.task.UpmTaskWorker; import com.fr.event.EventDispatcher; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralUtils; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginMarker; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.JSArray; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +import javax.swing.*; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.awt.*; +import java.io.File; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; +import java.util.concurrent.RunnableFuture; /** * @author richie @@ -9,23 +48,343 @@ import com.fr.event.EventDispatcher; * Created by richie on 2019-04-12 * 桥接Java和JavaScript的类 */ -public class UPMBridge { +public class UpmBridge { + + public static UpmBridge getBridge(Browser browser) { + return new UpmBridge(browser); + } - private static UPMBridge bridge = new UPMBridge(); + private JSObject window; - public static UPMBridge getBridge() { - return bridge; + private UpmBridge(Browser browser) { + this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } public void startDownload() { - // do something..... + try { + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } EventDispatcher.fire(DownloadEvent.FINISH, "start"); } + @JSBridge + public String i18nText(String key) { + return Toolkit.i18nText(key); + } - + @JSBridge public void closeWindow() { - UPM.closeWindow(); + UpmFinder.closeWindow(); + } + + + @JSBridge + public boolean isDesigner() { + return true; + } + + @JSBridge + public void getPackInfo(final JSFunction callback) { + callback.invoke(window, StringUtils.EMPTY); + } + + /** + * 在线获取插件分类 + * + * @param callback 回调函数 + */ + @JSBridge + public void getPluginCategories(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); + task.execute(); + } + + /** + * 根据条件获取在线插件 + * + * @param info 插件信息 + * @param callback 回调函数 + */ + @JSBridge + public void getPluginFromStoreNew(String info, final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); + task.execute(); } + /** + * 已安装插件检查更新 + */ + @JSBridge + public void readUpdateOnline(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); + task.execute(); + } + + /** + * 获取已经安装的插件的数组 + */ + @JSBridge + public void getInstalledPlugins(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); + task.execute(); + } + + /** + * 从插件服务器上更新选中的插件 + * + * @param pluginIDs 插件集合 + */ + @JSBridge + public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + List pluginMarkerList = new ArrayList<>(); + if (pluginIDs instanceof String) { + pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); + } else if (pluginIDs instanceof JSArray) { + JSArray pluginInfos = (JSArray) pluginIDs; + for (int i = 0, len = pluginInfos.length(); i < len; i++) { + String value = pluginInfos.get(i).asString().getValue(); + pluginMarkerList.add(PluginUtils.createPluginMarker(value)); + } + } + PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); + } + + /** + * 搜索在线插件 + * + * @param keyword 关键字 + */ + @JSBridge + public void searchPlugin(String keyword, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); + worker.execute(); + } + + /** + * 从磁盘上选择插件安装包进行安装 + * + * @param filePath 插件包的路径 + */ + @JSBridge + public void installPluginFromDisk(final String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.installPluginFromDisk(file, jsCallback); + } + + /** + * 卸载当前选中的插件 + * + * @param pluginInfo 插件信息 + */ + @JSBridge + public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); + } + + /** + * 从插件服务器上安装插件 + * + * @param pluginInfo 插件的ID + * @param callback 回调函数 + */ + @JSBridge + public void installPluginOnline(final String pluginInfo, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); + PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); + } + + /** + * 从磁盘上选择插件安装包进行插件升级 + * + * @param filePath 插件包的路径 + */ + public void updatePluginFromDisk(String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.updatePluginFromDisk(file, jsCallback); + } + + /** + * 修改选中的插件的活跃状态 + * + * @param pluginID 插件ID + */ + @JSBridge + public void setPluginActive(String pluginID, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.setPluginActive(pluginID, jsCallback); + } + + /** + * 选择文件对话框 + * + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooser() { + return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param filter 文件的后缀 + * @return 选择的文件的路径 + * 这里换用JFileChooser会卡死,不知道为什么 + */ + @JSBridge + public String showFileChooserWithFilter(final String des, final String filter) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + if (StringUtils.isNotEmpty(filter)) { + fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); + } + + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param args 文件的后缀 + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooserWithFilters(final String des, final Object args) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + List filterList = new ArrayList<>(); + if (args instanceof String) { + filterList.add(GeneralUtils.objectToString(args)); + } else if (args instanceof JSArray) { + JSArray array = (JSArray)args; + for (int i = 0, len = array.length(); i < len; i ++) { + filterList.add(array.get(i).getStringValue()); + } + } + String[] filters = filterList.toArray(new String[0]); + if (ArrayUtils.isNotEmpty(filters)) { + FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); + fileChooser.setFileFilter(filter); + } + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + ////////登录相关/////// + + /** + * 获取系统登录的用户名 + */ + @JSBridge + public String getLoginInfo(final JSFunction callback) { + registerLoginInfo(callback); + return MarketConfig.getInstance().getBbsUsername(); + } + + /** + * 系统登录注册 + * + * @param callback 回调函数 + */ + @JSBridge + public void registerLoginInfo(final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + String username = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isEmpty(username)) { + jsCallback.execute(StringUtils.EMPTY); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } else { + jsCallback.execute(username); + EventDispatcher.fire(CertificateEvent.LOGIN, username); + } + } + + + /** + * 设计器端的用户登录 + * + * @param username 用户名 + * @param password 密码 + * @param callback 回调函数 + */ + @JSBridge + public void defaultLogin(String username, String password, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); + worker.execute(); + } + + /** + * 清除用户信息 + */ + public void clearUserInfo() { + MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); + FinePassportManager.getInstance().logout(); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } + + /** + * 打开论坛消息界面 + */ + @JSBridge + public void getPriviteMessage() { + try { + String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); + Desktop.getDesktop().browse(new URI(loginUrl)); + } catch (Exception exp) { + FineLoggerFactory.getLogger().info(exp.getMessage()); + } + } + + /** + * 忘记密码 + */ + @JSBridge + public void forgetHref() { + try { + Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); + } catch (Exception e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + } + } } diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java b/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java index d5a2f4b79..a03fe1d8f 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java @@ -13,11 +13,11 @@ import java.awt.*; * @version 10.0 * Created by richie on 2019-04-12 */ -public class UPMDialog extends UIDialog { +public class UpmDialog extends UIDialog { private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); - public UPMDialog(Frame frame, BasicPane pane) { + public UpmDialog(Frame frame, BasicPane pane) { super(frame); setUndecorated(true); JPanel panel = (JPanel) getContentPane(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java index 6480d8ad7..ec0b542f4 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java @@ -1,6 +1,5 @@ package com.fr.design.upm; -import com.fr.base.FRContext; import com.fr.design.dialog.BasicPane; import com.fr.design.ui.ModernUIPane; import com.fr.design.upm.event.DownloadEvent; @@ -19,7 +18,7 @@ import java.awt.*; * Created by richie on 2019-04-12 * Update Plugin Manager容器 */ -public class UPMPane extends BasicPane { +public class UpmPane extends BasicPane { private ModernUIPane modernUIPane; @@ -28,11 +27,18 @@ public class UPMPane extends BasicPane { return "UPM"; } - public UPMPane() { + public UpmPane() { setLayout(new BorderLayout()); - if (false) { + if (UpmFinder.checkUPMResourcesExist()) { modernUIPane = new ModernUIPane.Builder<>() - .withURL(UPM.getMainResourcePath()) + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + } + }) + .withURL(UpmFinder.getMainResourcePath()) .build(); } else { modernUIPane = new ModernUIPane.Builder<>() @@ -41,13 +47,13 @@ public class UPMPane extends BasicPane { @Override public void onScriptContextCreated(ScriptContextEvent event) { JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginBridgeTest", UPMBridge.getBridge()); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); } }).build(); EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { @Override public void on(Event event, String param) { - modernUIPane.redirect(UPM.getMainResourcePath()); + modernUIPane.redirect(UpmFinder.getMainResourcePath()); } }); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java new file mode 100644 index 000000000..73e4d2f1a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -0,0 +1,378 @@ +package com.fr.design.upm; + +import com.fr.base.passport.FinePassportManager; +import com.fr.config.MarketConfig; +import com.fr.design.bridge.exec.JSBridge; +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.extra.PluginOperateUtils; +import com.fr.design.extra.PluginUtils; +import com.fr.design.extra.exe.GetInstalledPluginsExecutor; +import com.fr.design.extra.exe.GetPluginCategoriesExecutor; +import com.fr.design.extra.exe.GetPluginFromStoreExecutor; +import com.fr.design.extra.exe.PluginLoginExecutor; +import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; +import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.upm.event.CertificateEvent; +import com.fr.design.upm.event.DownloadEvent; +import com.fr.design.upm.exec.UpmBrowserExecutor; +import com.fr.design.upm.task.UpmTaskWorker; +import com.fr.event.EventDispatcher; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralUtils; +import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; +import com.fr.plugin.context.PluginMarker; +import com.fr.stable.ArrayUtils; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.Browser; +import com.teamdev.jxbrowser.chromium.JSArray; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +import javax.swing.*; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.awt.*; +import java.io.File; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.FutureTask; +import java.util.concurrent.RunnableFuture; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + * 桥接Java和JavaScript的类 + */ +public class UpmBridge { + + public static UpmBridge getBridge(Browser browser) { + return new UpmBridge(browser); + } + + private JSObject window; + + private UpmBridge(Browser browser) { + this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); + } + + public void startDownload() { + // do something..... + EventDispatcher.fire(DownloadEvent.FINISH, "start"); + } + + @JSBridge + public void closeWindow() { + UpmFinder.closeWindow(); + } + + + @JSBridge + public boolean isDesigner() { + return true; + } + + @JSBridge + public void getPackInfo(final JSFunction callback) { + callback.invoke(window, StringUtils.EMPTY); + } + + /** + * 在线获取插件分类 + * + * @param callback 回调函数 + */ + @JSBridge + public void getPluginCategories(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); + task.execute(); + } + + /** + * 根据条件获取在线插件 + * + * @param info 插件信息 + * @param callback 回调函数 + */ + @JSBridge + public void getPluginFromStoreNew(String info, final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); + task.execute(); + } + + /** + * 已安装插件检查更新 + */ + @JSBridge + public void readUpdateOnline(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); + task.execute(); + } + + /** + * 获取已经安装的插件的数组 + */ + @JSBridge + public void getInstalledPlugins(final JSFunction callback) { + UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); + task.execute(); + } + + /** + * 从插件服务器上更新选中的插件 + * + * @param pluginIDs 插件集合 + */ + @JSBridge + public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + List pluginMarkerList = new ArrayList<>(); + if (pluginIDs instanceof String) { + pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); + } else if (pluginIDs instanceof JSArray) { + JSArray pluginInfos = (JSArray) pluginIDs; + for (int i = 0, len = pluginInfos.length(); i < len; i++) { + String value = pluginInfos.get(i).asString().getValue(); + pluginMarkerList.add(PluginUtils.createPluginMarker(value)); + } + } + PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); + } + + /** + * 搜索在线插件 + * + * @param keyword 关键字 + */ + @JSBridge + public void searchPlugin(String keyword, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); + worker.execute(); + } + + /** + * 从磁盘上选择插件安装包进行安装 + * + * @param filePath 插件包的路径 + */ + @JSBridge + public void installPluginFromDisk(final String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.installPluginFromDisk(file, jsCallback); + } + + /** + * 卸载当前选中的插件 + * + * @param pluginInfo 插件信息 + */ + @JSBridge + public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); + } + + /** + * 从插件服务器上安装插件 + * + * @param pluginInfo 插件的ID + * @param callback 回调函数 + */ + @JSBridge + public void installPluginOnline(final String pluginInfo, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); + PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); + } + + /** + * 从磁盘上选择插件安装包进行插件升级 + * + * @param filePath 插件包的路径 + */ + public void updatePluginFromDisk(String filePath, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + File file = new File(filePath); + PluginOperateUtils.updatePluginFromDisk(file, jsCallback); + } + + /** + * 修改选中的插件的活跃状态 + * + * @param pluginID 插件ID + */ + @JSBridge + public void setPluginActive(String pluginID, final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + PluginOperateUtils.setPluginActive(pluginID, jsCallback); + } + + /** + * 选择文件对话框 + * + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooser() { + return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param filter 文件的后缀 + * @return 选择的文件的路径 + * 这里换用JFileChooser会卡死,不知道为什么 + */ + @JSBridge + public String showFileChooserWithFilter(final String des, final String filter) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + if (StringUtils.isNotEmpty(filter)) { + fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); + } + + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + /** + * 选择文件对话框 + * + * @param des 过滤文件描述 + * @param args 文件的后缀 + * @return 选择的文件的路径 + */ + @JSBridge + public String showFileChooserWithFilters(final String des, final Object args) { + RunnableFuture future = new FutureTask<>(new Callable() { + @Override + public String call() { + JFileChooser fileChooser = new JFileChooser(); + List filterList = new ArrayList<>(); + if (args instanceof String) { + filterList.add(GeneralUtils.objectToString(args)); + } else if (args instanceof JSArray) { + JSArray array = (JSArray)args; + for (int i = 0, len = array.length(); i < len; i ++) { + filterList.add(array.get(i).getStringValue()); + } + } + String[] filters = filterList.toArray(new String[0]); + if (ArrayUtils.isNotEmpty(filters)) { + FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); + fileChooser.setFileFilter(filter); + } + int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); + if (result == JFileChooser.APPROVE_OPTION) { + return fileChooser.getSelectedFile().getAbsolutePath(); + } + return null; + } + }); + SwingUtilities.invokeLater(future); + try { + return future.get(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + + ////////登录相关/////// + + /** + * 获取系统登录的用户名 + */ + @JSBridge + public String getLoginInfo(final JSFunction callback) { + registerLoginInfo(callback); + return MarketConfig.getInstance().getBbsUsername(); + } + + /** + * 系统登录注册 + * + * @param callback 回调函数 + */ + @JSBridge + public void registerLoginInfo(final JSFunction callback) { + JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); + String username = MarketConfig.getInstance().getBbsUsername(); + if (StringUtils.isEmpty(username)) { + jsCallback.execute(StringUtils.EMPTY); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } else { + jsCallback.execute(username); + EventDispatcher.fire(CertificateEvent.LOGIN, username); + } + } + + + /** + * 设计器端的用户登录 + * + * @param username 用户名 + * @param password 密码 + * @param callback 回调函数 + */ + @JSBridge + public void defaultLogin(String username, String password, final JSFunction callback) { + UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); + worker.execute(); + } + + /** + * 清除用户信息 + */ + public void clearUserInfo() { + MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); + FinePassportManager.getInstance().logout(); + EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); + } + + /** + * 打开论坛消息界面 + */ + @JSBridge + public void getPriviteMessage() { + try { + String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); + Desktop.getDesktop().browse(new URI(loginUrl)); + } catch (Exception exp) { + FineLoggerFactory.getLogger().info(exp.getMessage()); + } + } + + /** + * 忘记密码 + */ + @JSBridge + public void forgetHref() { + try { + Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); + } catch (Exception e) { + FineLoggerFactory.getLogger().info(e.getMessage()); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java b/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java new file mode 100644 index 000000000..a03fe1d8f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java @@ -0,0 +1,34 @@ +package com.fr.design.upm; + +import com.fr.design.dialog.BasicPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.stable.StableUtils; + +import javax.swing.*; +import java.awt.*; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + */ +public class UpmDialog extends UIDialog { + + private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); + + public UpmDialog(Frame frame, BasicPane pane) { + super(frame); + setUndecorated(true); + JPanel panel = (JPanel) getContentPane(); + panel.setLayout(new BorderLayout()); + add(pane, BorderLayout.CENTER); + setSize(DEFAULT_SHOP); + GUICoreUtils.centerWindow(this); + setResizable(false); + } + + @Override + public void checkValid() throws Exception { + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UPM.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java similarity index 70% rename from designer-base/src/main/java/com/fr/design/upm/UPM.java rename to designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index b8b95fab6..84e0ad5b7 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPM.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -1,26 +1,38 @@ package com.fr.design.upm; import com.fr.base.FRContext; +import com.fr.base.TemplateUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.mainframe.DesignerContext; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.workspace.Workspace; import com.fr.workspace.WorkspaceEvent; import javax.swing.*; import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; /** * @author richie * @version 10.0 * Created by richie on 2019-04-12 */ -public class UPM { +public class UpmFinder { - private static final String MAIN_RESOURCE_PATH = "/upm/plugin.html"; + private static final String UPM_DIR = "/upm"; + private static final String MAIN_RESOURCE_PATH = UPM_DIR + "/plugin_design.html"; public static String installHome = FRContext.getCommonOperator().getWebRootPath(); @@ -45,10 +57,14 @@ public class UPM { return "file:///" + StableUtils.pathJoin(installHome, MAIN_RESOURCE_PATH); } + public static UIDialog getDialog() { + return dialog; + } + public static void showUPMDialog() { - UPMPane upmPane = new UPMPane(); + UpmPane upmPane = new UpmPane(); if (dialog == null) { - dialog = new UPMDialog(DesignerContext.getDesignerFrame(), upmPane); + dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); } dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java new file mode 100644 index 000000000..1021f6175 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java @@ -0,0 +1,72 @@ +package com.fr.design.upm; + +import com.fr.base.TemplateUtils; +import com.fr.design.dialog.BasicPane; +import com.fr.design.ui.ModernUIPane; +import com.fr.design.upm.event.DownloadEvent; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; +import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.chromium.JSValue; +import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; +import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; + +import java.awt.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-12 + * Update Plugin Manager容器 + */ +public class UpmPane extends BasicPane { + + private ModernUIPane modernUIPane; + + @Override + protected String title4PopupWindow() { + return "UPM"; + } + + public UpmPane() { + setLayout(new BorderLayout()); + if (UpmFinder.checkUPMResourcesExist()) { + modernUIPane = new ModernUIPane.Builder<>() + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + } + }) + .withURL(UpmFinder.getMainResourcePath()) + .build(); + } else { + modernUIPane = new ModernUIPane.Builder<>() + .withComponent(WarnComponent.KEY) + .prepare(new ScriptContextAdapter() { + @Override + public void onScriptContextCreated(ScriptContextEvent event) { + JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); + window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + } + }).build(); + EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + @Override + public void on(Event event, String param) { + modernUIPane.redirect(UpmFinder.getMainResourcePath()); + } + }); + } + add(modernUIPane, BorderLayout.CENTER); + } + +} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmUtils.java b/designer-base/src/main/java/com/fr/design/upm/UpmUtils.java new file mode 100644 index 000000000..a74f0f616 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/UpmUtils.java @@ -0,0 +1,21 @@ +package com.fr.design.upm; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class UpmUtils { + + public static String[] findMatchedExtension(String... extensions) { + List list = new ArrayList<>(); + for (String ext : extensions) { + String[] arr = ext.split("\\."); + list.add(arr[arr.length - 1]); + } + return list.toArray(new String[0]); + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java b/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java new file mode 100644 index 000000000..571076844 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/event/CertificateEvent.java @@ -0,0 +1,12 @@ +package com.fr.design.upm.event; + +import com.fr.event.Event; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public enum CertificateEvent implements Event { + LOGIN,LOGOUT +} diff --git a/designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java b/designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java new file mode 100644 index 000000000..572f7b5f2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/exec/UpmBrowserExecutor.java @@ -0,0 +1,30 @@ +package com.fr.design.upm.exec; + +import com.fr.design.bridge.exec.JSExecutor; +import com.teamdev.jxbrowser.chromium.JSFunction; +import com.teamdev.jxbrowser.chromium.JSObject; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class UpmBrowserExecutor implements JSExecutor { + + public static UpmBrowserExecutor create(JSObject window, JSFunction callback) { + return new UpmBrowserExecutor(window, callback); + } + + private JSObject window; + private JSFunction callback; + + private UpmBrowserExecutor(JSObject window, JSFunction callback) { + this.window = window; + this.callback = callback; + } + + @Override + public void executor(String newValue) { + callback.invoke(window, newValue); + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java new file mode 100644 index 000000000..5a26c312f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java @@ -0,0 +1,27 @@ +package com.fr.design.upm.loader; + +import com.fr.decision.webservice.bean.plugin.store.ProjectInfoBean; +import com.fr.decision.webservice.v10.plugin.helper.category.impl.BaseResourceLoader; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-18 + */ +public class UpmDesignResourceLoader extends BaseResourceLoader { + + @Override + public String getPluginPath() { + return "upm/plugin_design.html"; + } + + @Override + public void checkResourceExist(ProjectInfoBean projectInfoBean) throws Exception { + + } + + @Override + public String getDownloadPath() throws Exception { + return "http://fanruan-market.oss-cn-shanghai.aliyuncs.com/upm/upm-10.0.zip"; + } +} diff --git a/designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java b/designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java new file mode 100644 index 000000000..4de519837 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/upm/task/UpmTaskWorker.java @@ -0,0 +1,52 @@ +package com.fr.design.upm.task; + +import com.fr.design.bridge.exec.JSCallback; +import com.fr.design.bridge.exec.JSUtils; +import com.fr.design.extra.Process; +import com.fr.design.extra.exe.Command; +import com.fr.design.extra.exe.Executor; +import com.fr.stable.StringUtils; + +import javax.swing.*; + +/** + * @author richie + * @version 10.0 + * Created by richie on 2019-04-17 + */ +public class UpmTaskWorker extends SwingWorker { + + private Executor executor; + private JSCallback callback; + + public UpmTaskWorker(final JSCallback callback, final Executor executor) { + this.executor = executor; + this.callback = callback; + } + + @Override + protected V doInBackground() throws Exception { + Command[] commands = executor.getCommands(); + for (Command command : commands) { + String message = command.getExecuteMessage(); + if (StringUtils.isNotBlank(message)) { + publish(message); + } + command.run(new Process() { + @Override + public void process(String s) { + if (StringUtils.isNotBlank(s)) { + publish(JSUtils.trimText(s)); + } + } + }); + } + return null; + } + + @Override + protected void done() { + String result = executor.getTaskFinishMessage(); + callback.execute(result); + } +} diff --git a/designer-base/src/main/resources/com/fr/design/upm/warn.js b/designer-base/src/main/resources/com/fr/design/upm/warn.js index f09b9b9ad..7b9d5d84a 100644 --- a/designer-base/src/main/resources/com/fr/design/upm/warn.js +++ b/designer-base/src/main/resources/com/fr/design/upm/warn.js @@ -1,11 +1,11 @@ window.onload = function () { let button = BI.createWidget({ type : "bi.button", - text : "点击我跳转到插件商店", + text : PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Resource_Warn"), level: 'common', height: 30, handler : function () { - PluginBridgeTest.startDownload(); + PluginHelper.startDownload(); } }); BI.createWidget({ diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java index 6f329c39d..7fe8b8ff8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -16,8 +16,12 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.mainframe.DesignerContext; +import com.fr.design.upm.event.CertificateEvent; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.event.Event; +import com.fr.event.EventDispatcher; +import com.fr.event.Listener; import com.fr.general.CloudCenter; import com.fr.general.ComparatorUtils; import com.fr.general.DateUtils; @@ -208,6 +212,18 @@ public class UserInfoLabel extends UILabel { updateInfoPane(); } }); + EventDispatcher.listen(CertificateEvent.LOGIN, new Listener() { + @Override + public void on(Event event, String text) { + setText(text); + } + }); + EventDispatcher.listen(CertificateEvent.LOGOUT, new Listener() { + @Override + public void on(Event event, String text) { + setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); + } + }); } private void clearLoginInformation() { From f3973fc6fe09ef060b73f933ff111785acf36fa8 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 18 Apr 2019 22:15:12 +0800 Subject: [PATCH 03/13] =?UTF-8?q?KERNEL-442=20=E6=8F=90=E4=BE=9B=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=BD=BF=E7=94=A8=E9=87=8D=E6=9E=84=E8=BF=87=E7=9A=84?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=AE=A1=E7=90=86=E5=99=A8=E5=BC=80=E5=85=B3?= =?UTF-8?q?=EF=BC=88=E5=9F=BA=E4=BA=8EFineUI=E5=92=8CTypeScript=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/upm/UpmBridge.java | 14 +++++++++++++- .../src/main/java/com/fr/design/upm/UpmPane.java | 9 --------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index 73e4d2f1a..8984e4191 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -2,6 +2,7 @@ package com.fr.design.upm; import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; +import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; import com.fr.design.bridge.exec.JSBridge; import com.fr.design.bridge.exec.JSCallback; import com.fr.design.extra.PluginOperateUtils; @@ -12,6 +13,7 @@ import com.fr.design.extra.exe.GetPluginFromStoreExecutor; import com.fr.design.extra.exe.PluginLoginExecutor; import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; import com.fr.design.extra.exe.SearchOnlineExecutor; +import com.fr.design.i18n.Toolkit; import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; @@ -59,10 +61,20 @@ public class UpmBridge { } public void startDownload() { - // do something..... + try { + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } EventDispatcher.fire(DownloadEvent.FINISH, "start"); } + @JSBridge + public String i18nText(String key) { + return Toolkit.i18nText(key); + } + @JSBridge public void closeWindow() { UpmFinder.closeWindow(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java index 1021f6175..ec0b542f4 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java @@ -1,25 +1,16 @@ package com.fr.design.upm; -import com.fr.base.TemplateUtils; import com.fr.design.dialog.BasicPane; import com.fr.design.ui.ModernUIPane; import com.fr.design.upm.event.DownloadEvent; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; -import com.fr.general.GeneralContext; -import com.fr.general.IOUtils; -import com.fr.stable.StringUtils; import com.teamdev.jxbrowser.chromium.JSValue; import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; import java.awt.*; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; /** * @author richie From 2f5f49dc0debd786859f37d997e7d2e132118515 Mon Sep 17 00:00:00 2001 From: richie Date: Thu, 18 Apr 2019 22:40:05 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=86=99=E6=AD=BB?= =?UTF-8?q?=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/loader/UpmDesignResourceLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java index 5a26c312f..93857dc8b 100644 --- a/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java +++ b/designer-base/src/main/java/com/fr/design/upm/loader/UpmDesignResourceLoader.java @@ -22,6 +22,6 @@ public class UpmDesignResourceLoader extends BaseResourceLoader { @Override public String getDownloadPath() throws Exception { - return "http://fanruan-market.oss-cn-shanghai.aliyuncs.com/upm/upm-10.0.zip"; + return "http://fanruan-market.oss-cn-shanghai.aliyuncs.com/upm/1.0/upm-10.0.zip"; } } From f11a5605c66567f462848b09ec0ddcc185bb20ce Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 11:19:01 +0800 Subject: [PATCH 05/13] =?UTF-8?q?KERNEL-442=20=E6=B2=A1=E6=9C=89=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=96=87=E4=BB=B6=E6=97=B6=E7=9A=84=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/UpmBridge.java | 33 +++++++--- .../main/java/com/fr/design/upm/UpmPane.java | 2 +- .../fr/design/upm/event/DownloadEvent.java | 2 +- .../main/resources/com/fr/design/upm/warn.js | 63 +++++++++++++++---- 4 files changed, 79 insertions(+), 21 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index 8984e4191..bc2fe0b03 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -18,6 +18,7 @@ import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; import com.fr.design.upm.task.UpmTaskWorker; +import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.general.CloudCenter; import com.fr.general.GeneralUtils; @@ -60,14 +61,30 @@ public class UpmBridge { this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } - public void startDownload() { - try { - UpmResourceLoader.INSTANCE.download(); - UpmResourceLoader.INSTANCE.install(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - EventDispatcher.fire(DownloadEvent.FINISH, "start"); + public void startDownload(final JSFunction callback) { + + new SwingWorker(){ + @Override + protected Void doInBackground() throws Exception { + callback.invoke(window, Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download_Start")); + UpmResourceLoader.INSTANCE.download(); + UpmResourceLoader.INSTANCE.install(); + return null; + } + + @Override + protected void done() { + try { + get(); + callback.invoke(window, Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download_Success")); + EventDispatcher.fire(DownloadEvent.SUCCESS, "success"); + } catch (Exception e) { + callback.invoke(window, Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download_Error")); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + EventDispatcher.fire(DownloadEvent.ERROR, "error"); + } + } + }.execute(); } @JSBridge diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java index ec0b542f4..3e4ccc581 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmPane.java @@ -50,7 +50,7 @@ public class UpmPane extends BasicPane { window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); } }).build(); - EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { @Override public void on(Event event, String param) { modernUIPane.redirect(UpmFinder.getMainResourcePath()); diff --git a/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java b/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java index 7ac53dd17..e07156b83 100644 --- a/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java +++ b/designer-base/src/main/java/com/fr/design/upm/event/DownloadEvent.java @@ -9,5 +9,5 @@ import com.fr.event.Event; */ public enum DownloadEvent implements Event { - FINISH + SUCCESS, ERROR } diff --git a/designer-base/src/main/resources/com/fr/design/upm/warn.js b/designer-base/src/main/resources/com/fr/design/upm/warn.js index 7b9d5d84a..1eb5fb640 100644 --- a/designer-base/src/main/resources/com/fr/design/upm/warn.js +++ b/designer-base/src/main/resources/com/fr/design/upm/warn.js @@ -1,20 +1,61 @@ window.onload = function () { - let button = BI.createWidget({ - type : "bi.button", - text : PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Resource_Warn"), + let label = BI.createWidget({ + type: "bi.label", + text: PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Resource_Warn"), + height: 30 + }); + let callback = function(text) { + download.setValue(text); + }; + let buttonOK = BI.createWidget({ + type: "bi.button", + text: PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Download"), level: 'common', height: 30, - handler : function () { - PluginHelper.startDownload(); + handler: function () { + PluginHelper.startDownload(callback); } }); + let buttonClose = BI.createWidget({ + type: "bi.button", + text: PluginHelper.i18nText("Fine-Design_Basic_Update_Plugin_Manager_Close"), + level: 'warning', + height: 30, + handler: function () { + PluginHelper.closeWindow(); + } + }); + + let download = BI.createWidget({ + type: "bi.label", + height: 30 + }); + let left = 300; + let top = 200; BI.createWidget({ - type:"bi.absolute", + type: "bi.absolute", element: "body", - items: [{ - el: button, - left: 100, - top: 100 - }] + items: [ + { + el: label, + left: left, + top: top + }, + { + el : buttonOK, + left : left, + top : top + 40 + }, + { + el : buttonClose, + left : left + 100, + top : top + 40 + }, + { + el : download, + left : left, + top : top + 80 + } + ] }); }; \ No newline at end of file From e16c65f0398f5c04e930632d06c2d485e5e21734 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 13:43:44 +0800 Subject: [PATCH 06/13] =?UTF-8?q?KERNEL-442=20=E4=B8=8D=E8=83=BD=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E8=A2=AB=E8=BF=AB?= =?UTF-8?q?=E6=94=B9=E4=B8=AA=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/UPMBridge.java | 390 ------------------ .../java/com/fr/design/upm/UpmFinder.java | 13 +- .../upm/{UpmBridge.java => UpmJSBridge.java} | 9 +- .../upm/{UpmPane.java => UpmModernPane.java} | 8 +- 4 files changed, 9 insertions(+), 411 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/upm/UPMBridge.java rename designer-base/src/main/java/com/fr/design/upm/{UpmBridge.java => UpmJSBridge.java} (98%) rename designer-base/src/main/java/com/fr/design/upm/{UpmPane.java => UpmModernPane.java} (92%) diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java b/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java deleted file mode 100644 index 8984e4191..000000000 --- a/designer-base/src/main/java/com/fr/design/upm/UPMBridge.java +++ /dev/null @@ -1,390 +0,0 @@ -package com.fr.design.upm; - -import com.fr.base.passport.FinePassportManager; -import com.fr.config.MarketConfig; -import com.fr.decision.webservice.v10.plugin.helper.category.impl.UpmResourceLoader; -import com.fr.design.bridge.exec.JSBridge; -import com.fr.design.bridge.exec.JSCallback; -import com.fr.design.extra.PluginOperateUtils; -import com.fr.design.extra.PluginUtils; -import com.fr.design.extra.exe.GetInstalledPluginsExecutor; -import com.fr.design.extra.exe.GetPluginCategoriesExecutor; -import com.fr.design.extra.exe.GetPluginFromStoreExecutor; -import com.fr.design.extra.exe.PluginLoginExecutor; -import com.fr.design.extra.exe.ReadUpdateOnlineExecutor; -import com.fr.design.extra.exe.SearchOnlineExecutor; -import com.fr.design.i18n.Toolkit; -import com.fr.design.upm.event.CertificateEvent; -import com.fr.design.upm.event.DownloadEvent; -import com.fr.design.upm.exec.UpmBrowserExecutor; -import com.fr.design.upm.task.UpmTaskWorker; -import com.fr.event.EventDispatcher; -import com.fr.general.CloudCenter; -import com.fr.general.GeneralUtils; -import com.fr.json.JSONObject; -import com.fr.log.FineLoggerFactory; -import com.fr.plugin.context.PluginMarker; -import com.fr.stable.ArrayUtils; -import com.fr.stable.StringUtils; -import com.teamdev.jxbrowser.chromium.Browser; -import com.teamdev.jxbrowser.chromium.JSArray; -import com.teamdev.jxbrowser.chromium.JSFunction; -import com.teamdev.jxbrowser.chromium.JSObject; - -import javax.swing.*; -import javax.swing.filechooser.FileNameExtensionFilter; -import java.awt.*; -import java.io.File; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.FutureTask; -import java.util.concurrent.RunnableFuture; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2019-04-12 - * 桥接Java和JavaScript的类 - */ -public class UpmBridge { - - public static UpmBridge getBridge(Browser browser) { - return new UpmBridge(browser); - } - - private JSObject window; - - private UpmBridge(Browser browser) { - this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); - } - - public void startDownload() { - try { - UpmResourceLoader.INSTANCE.download(); - UpmResourceLoader.INSTANCE.install(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - EventDispatcher.fire(DownloadEvent.FINISH, "start"); - } - - @JSBridge - public String i18nText(String key) { - return Toolkit.i18nText(key); - } - - @JSBridge - public void closeWindow() { - UpmFinder.closeWindow(); - } - - - @JSBridge - public boolean isDesigner() { - return true; - } - - @JSBridge - public void getPackInfo(final JSFunction callback) { - callback.invoke(window, StringUtils.EMPTY); - } - - /** - * 在线获取插件分类 - * - * @param callback 回调函数 - */ - @JSBridge - public void getPluginCategories(final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginCategoriesExecutor()); - task.execute(); - } - - /** - * 根据条件获取在线插件 - * - * @param info 插件信息 - * @param callback 回调函数 - */ - @JSBridge - public void getPluginFromStoreNew(String info, final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetPluginFromStoreExecutor(new JSONObject(info))); - task.execute(); - } - - /** - * 已安装插件检查更新 - */ - @JSBridge - public void readUpdateOnline(final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new ReadUpdateOnlineExecutor()); - task.execute(); - } - - /** - * 获取已经安装的插件的数组 - */ - @JSBridge - public void getInstalledPlugins(final JSFunction callback) { - UpmTaskWorker task = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new GetInstalledPluginsExecutor()); - task.execute(); - } - - /** - * 从插件服务器上更新选中的插件 - * - * @param pluginIDs 插件集合 - */ - @JSBridge - public void updatePluginOnline(Object pluginIDs, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - List pluginMarkerList = new ArrayList<>(); - if (pluginIDs instanceof String) { - pluginMarkerList.add(PluginUtils.createPluginMarker(pluginIDs.toString())); - } else if (pluginIDs instanceof JSArray) { - JSArray pluginInfos = (JSArray) pluginIDs; - for (int i = 0, len = pluginInfos.length(); i < len; i++) { - String value = pluginInfos.get(i).asString().getValue(); - pluginMarkerList.add(PluginUtils.createPluginMarker(value)); - } - } - PluginOperateUtils.updatePluginOnline(pluginMarkerList, jsCallback); - } - - /** - * 搜索在线插件 - * - * @param keyword 关键字 - */ - @JSBridge - public void searchPlugin(String keyword, final JSFunction callback) { - UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new SearchOnlineExecutor(keyword)); - worker.execute(); - } - - /** - * 从磁盘上选择插件安装包进行安装 - * - * @param filePath 插件包的路径 - */ - @JSBridge - public void installPluginFromDisk(final String filePath, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - File file = new File(filePath); - PluginOperateUtils.installPluginFromDisk(file, jsCallback); - } - - /** - * 卸载当前选中的插件 - * - * @param pluginInfo 插件信息 - */ - @JSBridge - public void uninstallPlugin(final String pluginInfo, final boolean isForce, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - PluginOperateUtils.uninstallPlugin(pluginInfo, isForce, jsCallback); - } - - /** - * 从插件服务器上安装插件 - * - * @param pluginInfo 插件的ID - * @param callback 回调函数 - */ - @JSBridge - public void installPluginOnline(final String pluginInfo, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - PluginMarker pluginMarker = PluginUtils.createPluginMarker(pluginInfo); - PluginOperateUtils.installPluginOnline(pluginMarker, jsCallback); - } - - /** - * 从磁盘上选择插件安装包进行插件升级 - * - * @param filePath 插件包的路径 - */ - public void updatePluginFromDisk(String filePath, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - File file = new File(filePath); - PluginOperateUtils.updatePluginFromDisk(file, jsCallback); - } - - /** - * 修改选中的插件的活跃状态 - * - * @param pluginID 插件ID - */ - @JSBridge - public void setPluginActive(String pluginID, final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - PluginOperateUtils.setPluginActive(pluginID, jsCallback); - } - - /** - * 选择文件对话框 - * - * @return 选择的文件的路径 - */ - @JSBridge - public String showFileChooser() { - return showFileChooserWithFilter(StringUtils.EMPTY, StringUtils.EMPTY); - } - - /** - * 选择文件对话框 - * - * @param des 过滤文件描述 - * @param filter 文件的后缀 - * @return 选择的文件的路径 - * 这里换用JFileChooser会卡死,不知道为什么 - */ - @JSBridge - public String showFileChooserWithFilter(final String des, final String filter) { - RunnableFuture future = new FutureTask<>(new Callable() { - @Override - public String call() { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - - if (StringUtils.isNotEmpty(filter)) { - fileChooser.setFileFilter(new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filter))); - } - - int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); - if (result == JFileChooser.APPROVE_OPTION) { - return fileChooser.getSelectedFile().getAbsolutePath(); - } - return null; - } - }); - SwingUtilities.invokeLater(future); - try { - return future.get(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - return null; - } - - /** - * 选择文件对话框 - * - * @param des 过滤文件描述 - * @param args 文件的后缀 - * @return 选择的文件的路径 - */ - @JSBridge - public String showFileChooserWithFilters(final String des, final Object args) { - RunnableFuture future = new FutureTask<>(new Callable() { - @Override - public String call() { - JFileChooser fileChooser = new JFileChooser(); - List filterList = new ArrayList<>(); - if (args instanceof String) { - filterList.add(GeneralUtils.objectToString(args)); - } else if (args instanceof JSArray) { - JSArray array = (JSArray)args; - for (int i = 0, len = array.length(); i < len; i ++) { - filterList.add(array.get(i).getStringValue()); - } - } - String[] filters = filterList.toArray(new String[0]); - if (ArrayUtils.isNotEmpty(filters)) { - FileNameExtensionFilter filter = new FileNameExtensionFilter(des, UpmUtils.findMatchedExtension(filters)); - fileChooser.setFileFilter(filter); - } - int result = fileChooser.showOpenDialog(UpmFinder.getDialog()); - if (result == JFileChooser.APPROVE_OPTION) { - return fileChooser.getSelectedFile().getAbsolutePath(); - } - return null; - } - }); - SwingUtilities.invokeLater(future); - try { - return future.get(); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - return null; - } - - ////////登录相关/////// - - /** - * 获取系统登录的用户名 - */ - @JSBridge - public String getLoginInfo(final JSFunction callback) { - registerLoginInfo(callback); - return MarketConfig.getInstance().getBbsUsername(); - } - - /** - * 系统登录注册 - * - * @param callback 回调函数 - */ - @JSBridge - public void registerLoginInfo(final JSFunction callback) { - JSCallback jsCallback = new JSCallback(UpmBrowserExecutor.create(window, callback)); - String username = MarketConfig.getInstance().getBbsUsername(); - if (StringUtils.isEmpty(username)) { - jsCallback.execute(StringUtils.EMPTY); - EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); - } else { - jsCallback.execute(username); - EventDispatcher.fire(CertificateEvent.LOGIN, username); - } - } - - - /** - * 设计器端的用户登录 - * - * @param username 用户名 - * @param password 密码 - * @param callback 回调函数 - */ - @JSBridge - public void defaultLogin(String username, String password, final JSFunction callback) { - UpmTaskWorker worker = new UpmTaskWorker<>(new JSCallback(UpmBrowserExecutor.create(window, callback)), new PluginLoginExecutor(username, password)); - worker.execute(); - } - - /** - * 清除用户信息 - */ - public void clearUserInfo() { - MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); - FinePassportManager.getInstance().logout(); - EventDispatcher.fire(CertificateEvent.LOGOUT, StringUtils.EMPTY); - } - - /** - * 打开论坛消息界面 - */ - @JSBridge - public void getPriviteMessage() { - try { - String loginUrl = CloudCenter.getInstance().acquireUrlByKind("bbs.default"); - Desktop.getDesktop().browse(new URI(loginUrl)); - } catch (Exception exp) { - FineLoggerFactory.getLogger().info(exp.getMessage()); - } - } - - /** - * 忘记密码 - */ - @JSBridge - public void forgetHref() { - try { - Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); - } catch (Exception e) { - FineLoggerFactory.getLogger().info(e.getMessage()); - } - } -} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index 84e0ad5b7..a74923577 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -1,28 +1,17 @@ package com.fr.design.upm; import com.fr.base.FRContext; -import com.fr.base.TemplateUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.mainframe.DesignerContext; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; -import com.fr.general.GeneralContext; -import com.fr.general.IOUtils; -import com.fr.log.FineLoggerFactory; import com.fr.stable.StableUtils; -import com.fr.stable.StringUtils; import com.fr.workspace.Workspace; import com.fr.workspace.WorkspaceEvent; import javax.swing.*; import java.io.File; -import java.io.FileInputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; /** * @author richie @@ -62,7 +51,7 @@ public class UpmFinder { } public static void showUPMDialog() { - UpmPane upmPane = new UpmPane(); + UpmModernPane upmPane = new UpmModernPane(); if (dialog == null) { dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/upm/UpmBridge.java rename to designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java index bc2fe0b03..af3fa4858 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java @@ -18,7 +18,6 @@ import com.fr.design.upm.event.CertificateEvent; import com.fr.design.upm.event.DownloadEvent; import com.fr.design.upm.exec.UpmBrowserExecutor; import com.fr.design.upm.task.UpmTaskWorker; -import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.general.CloudCenter; import com.fr.general.GeneralUtils; @@ -49,15 +48,15 @@ import java.util.concurrent.RunnableFuture; * Created by richie on 2019-04-12 * 桥接Java和JavaScript的类 */ -public class UpmBridge { +public class UpmJSBridge { - public static UpmBridge getBridge(Browser browser) { - return new UpmBridge(browser); + public static UpmJSBridge getBridge(Browser browser) { + return new UpmJSBridge(browser); } private JSObject window; - private UpmBridge(Browser browser) { + private UpmJSBridge(Browser browser) { this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java similarity index 92% rename from designer-base/src/main/java/com/fr/design/upm/UpmPane.java rename to designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java index 3e4ccc581..86bee5476 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java @@ -18,7 +18,7 @@ import java.awt.*; * Created by richie on 2019-04-12 * Update Plugin Manager容器 */ -public class UpmPane extends BasicPane { +public class UpmModernPane extends BasicPane { private ModernUIPane modernUIPane; @@ -27,7 +27,7 @@ public class UpmPane extends BasicPane { return "UPM"; } - public UpmPane() { + public UpmModernPane() { setLayout(new BorderLayout()); if (UpmFinder.checkUPMResourcesExist()) { modernUIPane = new ModernUIPane.Builder<>() @@ -35,7 +35,7 @@ public class UpmPane extends BasicPane { @Override public void onScriptContextCreated(ScriptContextEvent event) { JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); } }) .withURL(UpmFinder.getMainResourcePath()) @@ -47,7 +47,7 @@ public class UpmPane extends BasicPane { @Override public void onScriptContextCreated(ScriptContextEvent event) { JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); + window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); } }).build(); EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { From d2345cd070b9c72d6fbc57c85c23b720efe13660 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 13:45:07 +0800 Subject: [PATCH 07/13] =?UTF-8?q?KERNEL-442=20=E4=B8=8D=E8=83=BD=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E8=A2=AB=E8=BF=AB?= =?UTF-8?q?=E6=94=B9=E4=B8=AA=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/fr/design/upm/UPMPane.java | 2 +- .../upm/{UpmJSBridge.java => UpmBridge.java} | 8 +-- .../java/com/fr/design/upm/UpmFinder.java | 2 +- .../java/com/fr/design/upm/UpmModernPane.java | 63 ------------------- 4 files changed, 6 insertions(+), 69 deletions(-) rename designer-base/src/main/java/com/fr/design/upm/{UpmJSBridge.java => UpmBridge.java} (98%) delete mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java index ec0b542f4..3e4ccc581 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UPMPane.java @@ -50,7 +50,7 @@ public class UpmPane extends BasicPane { window.asObject().setProperty("PluginHelper", UpmBridge.getBridge(event.getBrowser())); } }).build(); - EventDispatcher.listen(DownloadEvent.FINISH, new Listener() { + EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { @Override public void on(Event event, String param) { modernUIPane.redirect(UpmFinder.getMainResourcePath()); diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java similarity index 98% rename from designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java rename to designer-base/src/main/java/com/fr/design/upm/UpmBridge.java index af3fa4858..3d0f28613 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmJSBridge.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmBridge.java @@ -48,15 +48,15 @@ import java.util.concurrent.RunnableFuture; * Created by richie on 2019-04-12 * 桥接Java和JavaScript的类 */ -public class UpmJSBridge { +public class UpmBridge { - public static UpmJSBridge getBridge(Browser browser) { - return new UpmJSBridge(browser); + public static UpmBridge getBridge(Browser browser) { + return new UpmBridge(browser); } private JSObject window; - private UpmJSBridge(Browser browser) { + private UpmBridge(Browser browser) { this.window = browser.executeJavaScriptAndReturnValue("window").asObject(); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index a74923577..3e012f545 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -51,7 +51,7 @@ public class UpmFinder { } public static void showUPMDialog() { - UpmModernPane upmPane = new UpmModernPane(); + UpmPane upmPane = new UpmPane(); if (dialog == null) { dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java deleted file mode 100644 index 86bee5476..000000000 --- a/designer-base/src/main/java/com/fr/design/upm/UpmModernPane.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.fr.design.upm; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.ui.ModernUIPane; -import com.fr.design.upm.event.DownloadEvent; -import com.fr.event.Event; -import com.fr.event.EventDispatcher; -import com.fr.event.Listener; -import com.teamdev.jxbrowser.chromium.JSValue; -import com.teamdev.jxbrowser.chromium.events.ScriptContextAdapter; -import com.teamdev.jxbrowser.chromium.events.ScriptContextEvent; - -import java.awt.*; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2019-04-12 - * Update Plugin Manager容器 - */ -public class UpmModernPane extends BasicPane { - - private ModernUIPane modernUIPane; - - @Override - protected String title4PopupWindow() { - return "UPM"; - } - - public UpmModernPane() { - setLayout(new BorderLayout()); - if (UpmFinder.checkUPMResourcesExist()) { - modernUIPane = new ModernUIPane.Builder<>() - .prepare(new ScriptContextAdapter() { - @Override - public void onScriptContextCreated(ScriptContextEvent event) { - JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); - } - }) - .withURL(UpmFinder.getMainResourcePath()) - .build(); - } else { - modernUIPane = new ModernUIPane.Builder<>() - .withComponent(WarnComponent.KEY) - .prepare(new ScriptContextAdapter() { - @Override - public void onScriptContextCreated(ScriptContextEvent event) { - JSValue window = event.getBrowser().executeJavaScriptAndReturnValue("window"); - window.asObject().setProperty("PluginHelper", UpmJSBridge.getBridge(event.getBrowser())); - } - }).build(); - EventDispatcher.listen(DownloadEvent.SUCCESS, new Listener() { - @Override - public void on(Event event, String param) { - modernUIPane.redirect(UpmFinder.getMainResourcePath()); - } - }); - } - add(modernUIPane, BorderLayout.CENTER); - } - -} From 80c2fdb8e5671e02b8520fd272518dc9a6d4edf6 Mon Sep 17 00:00:00 2001 From: richie Date: Fri, 19 Apr 2019 13:47:27 +0800 Subject: [PATCH 08/13] =?UTF-8?q?KERNEL-442=20=E4=B8=8D=E8=83=BD=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=A4=A7=E5=B0=8F=E5=86=99=EF=BC=8C=E8=A2=AB=E8=BF=AB?= =?UTF-8?q?=E6=94=B9=E4=B8=AA=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/upm/UpmDialog.java | 34 ------------------- .../java/com/fr/design/upm/UpmFinder.java | 4 +-- .../{UPMDialog.java => UpmShowDialog.java} | 4 +-- .../upm/{UPMPane.java => UpmShowPane.java} | 4 +-- 4 files changed, 6 insertions(+), 40 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/design/upm/UpmDialog.java rename designer-base/src/main/java/com/fr/design/upm/{UPMDialog.java => UpmShowDialog.java} (87%) rename designer-base/src/main/java/com/fr/design/upm/{UPMPane.java => UpmShowPane.java} (96%) diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java b/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java deleted file mode 100644 index a03fe1d8f..000000000 --- a/designer-base/src/main/java/com/fr/design/upm/UpmDialog.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.fr.design.upm; - -import com.fr.design.dialog.BasicPane; -import com.fr.design.dialog.UIDialog; -import com.fr.design.utils.gui.GUICoreUtils; -import com.fr.stable.StableUtils; - -import javax.swing.*; -import java.awt.*; - -/** - * @author richie - * @version 10.0 - * Created by richie on 2019-04-12 - */ -public class UpmDialog extends UIDialog { - - private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); - - public UpmDialog(Frame frame, BasicPane pane) { - super(frame); - setUndecorated(true); - JPanel panel = (JPanel) getContentPane(); - panel.setLayout(new BorderLayout()); - add(pane, BorderLayout.CENTER); - setSize(DEFAULT_SHOP); - GUICoreUtils.centerWindow(this); - setResizable(false); - } - - @Override - public void checkValid() throws Exception { - } -} diff --git a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java index 3e012f545..5b90d4330 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmFinder.java @@ -51,9 +51,9 @@ public class UpmFinder { } public static void showUPMDialog() { - UpmPane upmPane = new UpmPane(); + UpmShowPane upmPane = new UpmShowPane(); if (dialog == null) { - dialog = new UpmDialog(DesignerContext.getDesignerFrame(), upmPane); + dialog = new UpmShowDialog(DesignerContext.getDesignerFrame(), upmPane); } dialog.setVisible(true); } diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java b/designer-base/src/main/java/com/fr/design/upm/UpmShowDialog.java similarity index 87% rename from designer-base/src/main/java/com/fr/design/upm/UPMDialog.java rename to designer-base/src/main/java/com/fr/design/upm/UpmShowDialog.java index a03fe1d8f..704e01121 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMDialog.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmShowDialog.java @@ -13,11 +13,11 @@ import java.awt.*; * @version 10.0 * Created by richie on 2019-04-12 */ -public class UpmDialog extends UIDialog { +public class UpmShowDialog extends UIDialog { private static final Dimension DEFAULT_SHOP = new Dimension(900, 700); - public UpmDialog(Frame frame, BasicPane pane) { + public UpmShowDialog(Frame frame, BasicPane pane) { super(frame); setUndecorated(true); JPanel panel = (JPanel) getContentPane(); diff --git a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java b/designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java similarity index 96% rename from designer-base/src/main/java/com/fr/design/upm/UPMPane.java rename to designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java index 3e4ccc581..e64e5f02e 100644 --- a/designer-base/src/main/java/com/fr/design/upm/UPMPane.java +++ b/designer-base/src/main/java/com/fr/design/upm/UpmShowPane.java @@ -18,7 +18,7 @@ import java.awt.*; * Created by richie on 2019-04-12 * Update Plugin Manager容器 */ -public class UpmPane extends BasicPane { +public class UpmShowPane extends BasicPane { private ModernUIPane modernUIPane; @@ -27,7 +27,7 @@ public class UpmPane extends BasicPane { return "UPM"; } - public UpmPane() { + public UpmShowPane() { setLayout(new BorderLayout()); if (UpmFinder.checkUPMResourcesExist()) { modernUIPane = new ModernUIPane.Builder<>() From c89f013405bcfe5242cb7499f3f1070c9b6c2d04 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 19 Apr 2019 17:38:01 +0800 Subject: [PATCH 09/13] =?UTF-8?q?REPORT-16249=2010OEM=E7=9A=84=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E9=A1=B5=E6=9B=BF=E6=8D=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/fun/OemProcessor.java | 33 +++++++++++++++++++ .../design/fun/impl/AbstractOemProcessor.java | 25 ++++++++++++++ .../fr/design/mainframe/DesignerFrame.java | 12 +++++-- .../mainframe/toolbar/ToolBarMenuDock.java | 7 ++++ .../main/java/com/fr/start/OemActivator.java | 27 +++++++++++++++ .../main/java/com/fr/start/OemHandler.java | 18 ++++++++++ .../src/main/java/com/fr/start/OemImpl.java | 7 ++++ .../fr/start/module/PreStartActivator.java | 10 +++++- 8 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/fun/OemProcessor.java create mode 100644 designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java create mode 100644 designer-base/src/main/java/com/fr/start/OemActivator.java create mode 100644 designer-base/src/main/java/com/fr/start/OemHandler.java create mode 100644 designer-base/src/main/java/com/fr/start/OemImpl.java diff --git a/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java new file mode 100644 index 000000000..01e53c9c5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java @@ -0,0 +1,33 @@ +package com.fr.design.fun; + +import com.fr.design.menu.MenuDef; +import com.fr.start.SplashStrategy; + +import java.awt.image.BufferedImage; +import java.util.List; + +/** + * 设计器Oem接口 + */ +public interface OemProcessor { + /** + * 启动动画,如果不替换则返回null + * @return + */ + SplashStrategy createSplashStrategy(); + + /** + * 替换标题图标--DesignerFrame.initTitleIcon + * 如果不替换则返回null + * @return + */ + List createTitleIcon(); + + /** + * 处理设计器菜单(增删改) + * @param menuDefs 已加载的菜单 + * @return 新的菜单数组 + */ + MenuDef[] dealWithMenuDef(MenuDef[] menuDefs); + +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java new file mode 100644 index 000000000..d49bfdf24 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/fun/impl/AbstractOemProcessor.java @@ -0,0 +1,25 @@ +package com.fr.design.fun.impl; + +import com.fr.design.fun.OemProcessor; +import com.fr.design.menu.MenuDef; +import com.fr.start.SplashStrategy; + +import java.awt.image.BufferedImage; +import java.util.List; + +public abstract class AbstractOemProcessor implements OemProcessor{ + @Override + public MenuDef[] dealWithMenuDef(MenuDef[] menuDefs) { + return menuDefs; + } + + @Override + public List createTitleIcon() { + return null; + } + + @Override + public SplashStrategy createSplashStrategy() { + return null; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 55e07cc1c..397fd312a 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -24,6 +24,7 @@ import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.NewTemplatePane; import com.fr.design.file.SaveSomeTemplatePane; import com.fr.design.file.TemplateTreePane; +import com.fr.design.fun.OemProcessor; import com.fr.design.fun.TitlePlaceProcessor; import com.fr.design.fun.impl.AbstractTemplateTreeShortCutProvider; import com.fr.design.gui.ibutton.UIButton; @@ -57,6 +58,7 @@ import com.fr.stable.ProductConstants; import com.fr.stable.StringUtils; import com.fr.stable.image4j.codec.ico.ICODecoder; import com.fr.stable.project.ProjectConstants; +import com.fr.start.OemHandler; import com.fr.workspace.WorkContext; import com.fr.workspace.Workspace; import com.fr.workspace.connect.WorkspaceConnectionInfo; @@ -458,8 +460,14 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta try { @SuppressWarnings("unchecked") - List image = ICODecoder.read(DesignerFrame.class - .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); + OemProcessor oemProcessor = OemHandler.findOem(); + List image; + if (oemProcessor != null && oemProcessor.createTitleIcon() != null) { + image = oemProcessor.createTitleIcon(); + } else { + image = ICODecoder.read(DesignerFrame.class + .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); + } this.setIconImages(image); } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index ff31f0156..4459bd554 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -38,6 +38,7 @@ import com.fr.design.actions.server.PlatformManagerAction; import com.fr.design.actions.server.PluginManagerAction; import com.fr.design.file.NewTemplatePane; import com.fr.design.fun.MenuHandler; +import com.fr.design.fun.OemProcessor; import com.fr.design.fun.TableDataPaneProcessor; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; @@ -64,6 +65,7 @@ import com.fr.plugin.observer.PluginEventListener; import com.fr.plugin.observer.PluginEventType; import com.fr.stable.ArrayUtils; import com.fr.stable.StringUtils; +import com.fr.start.OemHandler; import com.fr.workspace.WorkContext; import javax.swing.JComponent; @@ -200,6 +202,11 @@ public abstract class ToolBarMenuDock { }; this.menus = menus(plus); + OemProcessor oemProcessor = OemHandler.findOem(); + if (oemProcessor != null) { + this.menus = oemProcessor.dealWithMenuDef(this.menus); + } + for (int i = 0; i < menus.length; i++) { menus[i].setHasRecMenu(true); UIMenu subMenu = menus[i].createJMenu(); diff --git a/designer-base/src/main/java/com/fr/start/OemActivator.java b/designer-base/src/main/java/com/fr/start/OemActivator.java new file mode 100644 index 000000000..6e3bba603 --- /dev/null +++ b/designer-base/src/main/java/com/fr/start/OemActivator.java @@ -0,0 +1,27 @@ +package com.fr.start; + +import com.fr.design.fun.OemProcessor; +import com.fr.module.Activator; +import com.fr.module.extension.Prepare; + +/** + * 设计器OEM注册 + */ +public class OemActivator extends Activator implements Prepare { + + @Override + public void start() { + } + + @Override + public void stop() { + + } + + @Override + public void prepare() { + // 加入Oem + setSingleton(OemProcessor.class, new OemImpl()); + } + +} diff --git a/designer-base/src/main/java/com/fr/start/OemHandler.java b/designer-base/src/main/java/com/fr/start/OemHandler.java new file mode 100644 index 000000000..ff56bc173 --- /dev/null +++ b/designer-base/src/main/java/com/fr/start/OemHandler.java @@ -0,0 +1,18 @@ +package com.fr.start; + +import com.fr.design.fun.OemProcessor; +import com.fr.module.Module; +import com.fr.module.ModuleContext; + +/** + * OEM处理中心 + */ +public class OemHandler { + public static OemProcessor findOem() { + Module oemModule = ModuleContext.getModule(OemActivator.class); + if (oemModule != null) { + return oemModule.getSingleton(OemProcessor.class); + } + return null; + } +} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/start/OemImpl.java b/designer-base/src/main/java/com/fr/start/OemImpl.java new file mode 100644 index 000000000..68bf767c8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/start/OemImpl.java @@ -0,0 +1,7 @@ +package com.fr.start; + +import com.fr.design.fun.impl.AbstractOemProcessor; + +public class OemImpl extends AbstractOemProcessor{ + +} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index 1dd95cf6a..9f6f75122 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -2,6 +2,7 @@ package com.fr.start.module; import com.fr.design.DesignerEnvManager; import com.fr.design.RestartHelper; +import com.fr.design.fun.OemProcessor; import com.fr.design.mainframe.templateinfo.TemplateInfoCollector; import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignerPort; @@ -123,7 +124,14 @@ public class PreStartActivator extends Activator { service.shutdown(); } - private static SplashStrategy createSplash() { + private SplashStrategy createSplash() { + OemProcessor oemProcessor = getSingleton(OemProcessor.class); + if (oemProcessor != null) { + SplashStrategy splashStrategy = oemProcessor.createSplashStrategy(); + if (splashStrategy != null) { + return splashStrategy; + } + } // 这里可以开接口加载自定义启动画面 if (OperatingSystem.isWindows()) { return new SplashFx(); From 154ef0b8ad75dd5b97418dcc1f4043b6cbf2e07a Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 23 Apr 2019 09:39:27 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E8=B7=9Fju=E8=AE=A8=E8=AE=BA=EF=BC=8COEM?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E8=BF=98=E6=98=AFStableFactory=E6=AF=94?= =?UTF-8?q?=E8=BE=83=E5=90=88=E9=80=82=E4=BA=8C=E5=BC=80.=E5=8F=A6?= =?UTF-8?q?=E5=A4=96=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8D=95=E8=8E=B7=EF=BC=8C=E8=A7=84=E9=81=BF=E5=BC=80=E6=94=BE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AD=98=E5=9C=A8=E7=9A=84=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=A3=8E=E9=99=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/fun/OemProcessor.java | 5 ++++ .../fr/design/mainframe/DesignerFrame.java | 13 ++++++--- .../mainframe/toolbar/ToolBarMenuDock.java | 16 ++++++++--- .../main/java/com/fr/start/OemActivator.java | 27 ------------------- .../main/java/com/fr/start/OemHandler.java | 10 +++---- .../fr/start/module/PreStartActivator.java | 10 +++++-- 6 files changed, 37 insertions(+), 44 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/start/OemActivator.java diff --git a/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java index 01e53c9c5..44acc1190 100644 --- a/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java +++ b/designer-base/src/main/java/com/fr/design/fun/OemProcessor.java @@ -10,8 +10,11 @@ import java.util.List; * 设计器Oem接口 */ public interface OemProcessor { + public static final String MARK_STRING = "OemProcessor"; + /** * 启动动画,如果不替换则返回null + * * @return */ SplashStrategy createSplashStrategy(); @@ -19,12 +22,14 @@ public interface OemProcessor { /** * 替换标题图标--DesignerFrame.initTitleIcon * 如果不替换则返回null + * * @return */ List createTitleIcon(); /** * 处理设计器菜单(增删改) + * * @param menuDefs 已加载的菜单 * @return 新的菜单数组 */ diff --git a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java index 397fd312a..04dab52b5 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java @@ -461,10 +461,15 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta try { @SuppressWarnings("unchecked") OemProcessor oemProcessor = OemHandler.findOem(); - List image; - if (oemProcessor != null && oemProcessor.createTitleIcon() != null) { - image = oemProcessor.createTitleIcon(); - } else { + List image = null; + if (oemProcessor != null) { + try { + image = oemProcessor.createTitleIcon(); + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + if (image == null) { image = ICODecoder.read(DesignerFrame.class .getResourceAsStream("/com/fr/base/images/oem/logo.ico")); } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 4459bd554..2577b6bd0 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -57,6 +57,7 @@ import com.fr.design.remote.action.RemoteDesignAuthManagerAction; import com.fr.design.utils.ThemeUtils; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginRuntime; import com.fr.plugin.manage.PluginFilter; @@ -202,11 +203,18 @@ public abstract class ToolBarMenuDock { }; this.menus = menus(plus); - OemProcessor oemProcessor = OemHandler.findOem(); - if (oemProcessor != null) { - this.menus = oemProcessor.dealWithMenuDef(this.menus); + try { + OemProcessor oemProcessor = OemHandler.findOem(); + if (oemProcessor != null) { + this.menus = oemProcessor.dealWithMenuDef(this.menus); + if (this.menus == null) { + this.menus = menus(plus); + } + } + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + this.menus = menus(plus); } - for (int i = 0; i < menus.length; i++) { menus[i].setHasRecMenu(true); UIMenu subMenu = menus[i].createJMenu(); diff --git a/designer-base/src/main/java/com/fr/start/OemActivator.java b/designer-base/src/main/java/com/fr/start/OemActivator.java deleted file mode 100644 index 6e3bba603..000000000 --- a/designer-base/src/main/java/com/fr/start/OemActivator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.fr.start; - -import com.fr.design.fun.OemProcessor; -import com.fr.module.Activator; -import com.fr.module.extension.Prepare; - -/** - * 设计器OEM注册 - */ -public class OemActivator extends Activator implements Prepare { - - @Override - public void start() { - } - - @Override - public void stop() { - - } - - @Override - public void prepare() { - // 加入Oem - setSingleton(OemProcessor.class, new OemImpl()); - } - -} diff --git a/designer-base/src/main/java/com/fr/start/OemHandler.java b/designer-base/src/main/java/com/fr/start/OemHandler.java index ff56bc173..b127e07f4 100644 --- a/designer-base/src/main/java/com/fr/start/OemHandler.java +++ b/designer-base/src/main/java/com/fr/start/OemHandler.java @@ -1,18 +1,14 @@ package com.fr.start; import com.fr.design.fun.OemProcessor; -import com.fr.module.Module; -import com.fr.module.ModuleContext; +import com.fr.stable.bridge.StableFactory; /** * OEM处理中心 */ public class OemHandler { + public static OemProcessor findOem() { - Module oemModule = ModuleContext.getModule(OemActivator.class); - if (oemModule != null) { - return oemModule.getSingleton(OemProcessor.class); - } - return null; + return StableFactory.getMarkedInstanceObjectFromClass(OemProcessor.MARK_STRING, OemProcessor.class); } } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java index 9f6f75122..3c255c936 100644 --- a/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/PreStartActivator.java @@ -15,6 +15,7 @@ import com.fr.stable.BuildContext; import com.fr.stable.OperatingSystem; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; +import com.fr.start.OemHandler; import com.fr.start.SplashContext; import com.fr.start.SplashStrategy; import com.fr.start.fx.SplashFx; @@ -125,9 +126,14 @@ public class PreStartActivator extends Activator { } private SplashStrategy createSplash() { - OemProcessor oemProcessor = getSingleton(OemProcessor.class); + OemProcessor oemProcessor = OemHandler.findOem(); if (oemProcessor != null) { - SplashStrategy splashStrategy = oemProcessor.createSplashStrategy(); + SplashStrategy splashStrategy = null; + try { + splashStrategy = oemProcessor.createSplashStrategy(); + } catch (Throwable e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } if (splashStrategy != null) { return splashStrategy; } From fb02413bf73e6342113b49da3b2af052a5126bca Mon Sep 17 00:00:00 2001 From: zack Date: Tue, 23 Apr 2019 09:50:02 +0800 Subject: [PATCH 11/13] rt --- designer-base/src/main/java/com/fr/start/OemImpl.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 designer-base/src/main/java/com/fr/start/OemImpl.java diff --git a/designer-base/src/main/java/com/fr/start/OemImpl.java b/designer-base/src/main/java/com/fr/start/OemImpl.java deleted file mode 100644 index 68bf767c8..000000000 --- a/designer-base/src/main/java/com/fr/start/OemImpl.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.fr.start; - -import com.fr.design.fun.impl.AbstractOemProcessor; - -public class OemImpl extends AbstractOemProcessor{ - -} \ No newline at end of file From ba83e2bdcc36f9c9a46d743d755de786e9142016 Mon Sep 17 00:00:00 2001 From: rinoux Date: Thu, 25 Apr 2019 13:44:58 +0800 Subject: [PATCH 12/13] =?UTF-8?q?BI-44084=20=E8=99=9A=E6=8B=9F=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E9=83=A8=E7=BD=B2=E6=97=B6=E7=9A=84appname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/onlineupdate/ui/dialog/RestoreResultDialog.java | 7 +++---- .../fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java index 680d3190d..6496b662c 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -1,6 +1,5 @@ package com.fr.design.onlineupdate.ui.dialog; -import com.fr.base.FRContext; import com.fr.design.RestartHelper; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; @@ -8,7 +7,7 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.onlineupdate.domain.UpdateConstants; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; -import com.fr.locale.InterProviderFactory; +import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; @@ -176,8 +175,8 @@ public class RestoreResultDialog extends JDialog { String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; for (String file : files) { map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java index 570042d4e..d9d7a0181 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -1,6 +1,5 @@ package com.fr.design.onlineupdate.ui.dialog; -import com.fr.base.FRContext; import com.fr.design.RestartHelper; import com.fr.design.constants.LayoutConstants; import com.fr.design.dialog.UIDialog; @@ -684,7 +683,7 @@ public class UpdateMainDialog extends UIDialog { for (String file : files) { try { IOUtils.copy( - new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), new File(StableUtils.pathJoin(todayBackupDir))); } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage()); @@ -725,8 +724,8 @@ public class UpdateMainDialog extends UIDialog { private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { for (String file : files) { map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, FRContext.getCommonOperator().getAppName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } From 11486cef0f9dcd742d9d811576e69586493441b4 Mon Sep 17 00:00:00 2001 From: rinoux Date: Thu, 25 Apr 2019 14:22:46 +0800 Subject: [PATCH 13/13] update --- .../design/onlineupdate/ui/dialog/RestoreResultDialog.java | 4 ++-- .../fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java index 6496b662c..fb840d95c 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/RestoreResultDialog.java @@ -175,8 +175,8 @@ public class RestoreResultDialog extends JDialog { String backupDir = UpdateConstants.DESIGNER_BACKUP_DIR; for (String file : files) { map.put(StableUtils.pathJoin(installHome, backupDir, jarRestoreDir, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } } } \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java index d9d7a0181..9438df33b 100644 --- a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java +++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java @@ -683,7 +683,7 @@ public class UpdateMainDialog extends UIDialog { for (String file : files) { try { IOUtils.copy( - new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), + new File(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)), new File(StableUtils.pathJoin(todayBackupDir))); } catch (IOException e) { FineLoggerFactory.getLogger().error(e.getMessage()); @@ -724,8 +724,8 @@ public class UpdateMainDialog extends UIDialog { private void putNewFilesToInstallEnv(String installHome, String[] files, Map map, java.util.List list) { for (String file : files) { map.put(StableUtils.pathJoin(installHome, UpdateConstants.DOWNLOAD_DIR, file), - StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); - list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.APP_FOLDER_NAME, ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); + list.add(StableUtils.pathJoin(installHome, UpdateConstants.APPS_FOLDER_NAME, ProductConstants.getAppFolderName(), ProjectConstants.WEBINF_NAME, ProjectConstants.LIB_NAME, file)); } }