Browse Source

Merging in latest from upstream (DESIGN/design:refs/heads/release/10.0)

* commit '6276ee84e4f7b1cd691b98975bf9964cb31bbdaa': (21 commits)
  REPORT-45460 帆软市场国际化标签设计器适配
  REPORT-44644 设计器接口开放 fix实现层级
  REPORT-44644 fix无用import
  REPORT-44644 设计器接口开发 fix
  REPORT-44644 添加判断是否存在接口
  REPORT-44644 fix调整名称
  REPORT-44644 设计器接口开放
  REPORT-44644 设计器接口开放
  标记点兼容
  REPORT-43744 【10.0.13】插件与jar包不匹配问题优化
  REPORT-45558【设计器埋点】process表reuseCmptList字段准确性确认
  梳理大数据模式中的标记点
  修改populate
  CHART-17494 修改点地图标记点
  REPORT-43744 【10.0.13】插件与jar包不匹配问题优化
  REPORT-43744 【10.0.13】插件与jar包不匹配问题优化
  REPORT-43744 【10.0.13】插件与jar包不匹配问题优化
  REPORT-43744 【10.0.13】插件与jar包不匹配问题优化
  REPORT-45402 插件管理-安装已经本地已经安装低版本的插件,点否不更新,还是会更新已安装的插件
  CHART-17231 默认不选中任何项
  ...
feature/big-screen
zheng 4 years ago
parent
commit
9411ba0d68
  1. 19
      designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java
  2. 50
      designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java
  3. 1
      designer-base/src/main/java/com/fr/design/extra/PluginUtils.java
  4. 11
      designer-base/src/main/java/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java
  5. 32
      designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java
  6. 27
      designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java
  7. 14
      designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java
  8. 27
      designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java
  9. 37
      designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java
  10. 12
      designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java
  11. 3
      designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java
  12. 4
      designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java
  13. 71
      designer-base/src/main/java/com/fr/design/file/TemplateResource.java
  14. 66
      designer-base/src/main/java/com/fr/design/file/TemplateResourceManager.java
  15. 21
      designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java
  16. 19
      designer-base/src/main/java/com/fr/design/file/impl/AbstractTemplateResource.java
  17. 52
      designer-base/src/main/java/com/fr/design/file/impl/DefaultTemplateResource.java
  18. 34
      designer-base/src/main/java/com/fr/design/fun/LocalResourceProvider.java
  19. 19
      designer-base/src/main/java/com/fr/design/fun/TemplateTreeDefineProcessor.java
  20. 23
      designer-base/src/main/java/com/fr/design/fun/impl/AbstractLocalResourceProvider.java
  21. 24
      designer-base/src/main/java/com/fr/design/fun/impl/AbstractTemplateTreeDefineProcessor.java
  22. 2
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java
  23. 4
      designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java
  24. 108
      designer-base/src/main/java/com/fr/env/PluginErrorRemindDialog.java
  25. 18
      designer-base/src/main/java/com/fr/file/FileNodeFILE.java
  26. 62
      designer-base/src/test/java/com/fr/design/EnvChangeEntranceTest.java
  27. 155
      designer-base/src/test/java/com/fr/design/extra/PluginOperateUtilsTest.java
  28. 23
      designer-base/src/test/java/com/fr/design/extra/PluginUtilsTest.java
  29. 170
      designer-chart/src/main/java/com/fr/van/chart/map/VanChartMapSeriesPane.java
  30. 3
      designer-chart/src/main/java/com/fr/van/chart/map/designer/other/VanChartMapConditionAttrContentPane.java
  31. 42
      designer-chart/src/main/java/com/fr/van/chart/map/designer/other/condition/item/VanChartAnchorMarkerConditionPane.java
  32. 26
      designer-chart/src/main/java/com/fr/van/chart/map/designer/other/condition/pane/VanChartAnchorPointMapConditionPane.java
  33. 64
      designer-chart/src/main/java/com/fr/van/chart/map/designer/style/series/VanChartMapAnchorMarkerPane.java
  34. 45
      designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java
  35. 33
      designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java
  36. 3
      designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java
  37. 1
      designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java
  38. 25
      designer-realize/src/test/java/com.fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManagerTest.java

19
designer-base/src/main/java/com/fr/design/EnvChangeEntrance.java

@ -1,6 +1,7 @@
package com.fr.design; package com.fr.design;
import com.fr.common.report.ReportState; import com.fr.common.report.ReportState;
import com.fr.decision.webservice.v10.plugin.helper.PluginErrorRemindHandler;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
@ -35,6 +36,7 @@ import com.fr.process.engine.core.FineProcessContext;
import com.fr.rpc.Result; import com.fr.rpc.Result;
import com.fr.stable.AssistUtils; import com.fr.stable.AssistUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.env.PluginErrorRemindDialog;
import com.fr.start.server.ServerTray; import com.fr.start.server.ServerTray;
import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContext;
import com.fr.workspace.WorkContextCallback; import com.fr.workspace.WorkContextCallback;
@ -144,6 +146,7 @@ public class EnvChangeEntrance {
template.refreshToolArea(); template.refreshToolArea();
} }
showServiceDialog(selectedEnv); showServiceDialog(selectedEnv);
pluginErrorRemind(selectedEnv);
} catch (WorkspaceAuthException | RegistEditionException e) { } catch (WorkspaceAuthException | RegistEditionException e) {
// String title = Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed"); // String title = Toolkit.i18nText("Fine-Design_Basic_Remote_Connect_Auth_Failed");
// String title = Toolkit.i18nText("Fine-Design_Basic_Lic_Does_Not_Support_Remote"); // String title = Toolkit.i18nText("Fine-Design_Basic_Lic_Does_Not_Support_Remote");
@ -297,6 +300,22 @@ public class EnvChangeEntrance {
} }
} }
/**
* 插件启动错误信息提示
* @param selectedEnv 选择的工作环境
*/
public void pluginErrorRemind(DesignerWorkspaceInfo selectedEnv) {
if (selectedEnv.getType() == DesignerWorkspaceType.Remote) {
return;
}
String content = PluginErrorRemindHandler.pluginErrorContent();
if (StringUtils.isNotEmpty(content)) {
PluginErrorRemindDialog dialog = new PluginErrorRemindDialog(DesignerContext.getDesignerFrame(), content);
dialog.setVisible(true);
}
}
/** /**
* 判断是否需要做版本验证判断依据为 * 判断是否需要做版本验证判断依据为
* 1选择的环境为远程环境 * 1选择的环境为远程环境

50
designer-base/src/main/java/com/fr/design/extra/PluginOperateUtils.java

@ -18,6 +18,7 @@ import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginContext;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;
import com.fr.plugin.context.PluginMarkerAdapter;
import com.fr.plugin.manage.PluginManager; import com.fr.plugin.manage.PluginManager;
import com.fr.plugin.manage.control.PluginControllerHelper; import com.fr.plugin.manage.control.PluginControllerHelper;
import com.fr.plugin.manage.control.PluginTask; import com.fr.plugin.manage.control.PluginTask;
@ -26,7 +27,8 @@ import com.fr.plugin.manage.control.PluginTaskResult;
import com.fr.plugin.view.PluginView; import com.fr.plugin.view.PluginView;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import java.io.File; import java.io.File;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.util.List; import java.util.List;
@ -38,11 +40,23 @@ import java.util.List;
public class PluginOperateUtils { public class PluginOperateUtils {
public static void installPluginOnline(final PluginMarker pluginMarker, JSCallback jsCallback) { public static void installPluginOnline(final PluginMarker pluginMarker, JSCallback jsCallback) {
PluginMarker marker = updateMarker2Online(pluginMarker);
//下载插件 //下载插件
PluginTask pluginTask = PluginTask.installTask(pluginMarker); PluginTask pluginTask = PluginTask.installTask(marker);
PluginControllerHelper.installOnline(pluginMarker, new InstallOnlineCallback(pluginTask, jsCallback)); PluginControllerHelper.installOnline(pluginMarker, new InstallOnlineCallback(pluginTask, jsCallback));
} }
public static PluginMarker updateMarker2Online(PluginMarker pluginMarker) {
try {
JSONObject latestPluginInfo = PluginUtils.getLatestPluginInfo(pluginMarker.getPluginID());
String pluginName = latestPluginInfo.getString("name");
return PluginMarkerAdapter.create(pluginMarker, pluginName);
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return pluginMarker;
}
public static void installPluginFromDisk(File zipFile, JSCallback jsCallback) { public static void installPluginFromDisk(File zipFile, JSCallback jsCallback) {
PluginManager.getController().install(zipFile, new InstallFromDiskCallback(zipFile, jsCallback)); PluginManager.getController().install(zipFile, new InstallFromDiskCallback(zipFile, jsCallback));
} }
@ -57,10 +71,11 @@ public class PluginOperateUtils {
public static void updatePluginOnline(PluginMarker pluginMarker, JSCallback jsCallback) { public static void updatePluginOnline(PluginMarker pluginMarker, JSCallback jsCallback) {
try { try {
JSONObject latestPluginInfo = PluginUtils.getLatestPluginInfo(pluginMarker.getPluginID()); JSONObject latestPluginInfo = PluginUtils.getLatestPluginInfo(pluginMarker.getPluginID());
String latestPluginVersion = (String) latestPluginInfo.get("version"); String latestPluginVersion = latestPluginInfo.getString("version");
PluginMarker toPluginMarker = PluginMarker.create(pluginMarker.getPluginID(), latestPluginVersion); String pluginName = latestPluginInfo.getString("name");
PluginMarker toPluginMarker = PluginMarkerAdapter.create(pluginMarker.getPluginID(), latestPluginVersion, pluginName);
//当前已经安装的相同ID插件marker //当前已经安装的相同ID插件marker
PluginMarker currentMarker = PluginUtils.getInstalledPluginMarkerByID(pluginMarker.getPluginID()); PluginMarker currentMarker = PluginMarkerAdapter.create(PluginUtils.getInstalledPluginMarkerByID(pluginMarker.getPluginID()), pluginName);
PluginTask pluginTask = PluginTask.updateTask(currentMarker, toPluginMarker); PluginTask pluginTask = PluginTask.updateTask(currentMarker, toPluginMarker);
PluginControllerHelper.updateOnline(currentMarker, toPluginMarker, new UpdateOnlineCallback(pluginTask, jsCallback)); PluginControllerHelper.updateOnline(currentMarker, toPluginMarker, new UpdateOnlineCallback(pluginTask, jsCallback));
} catch (Exception e) { } catch (Exception e) {
@ -128,6 +143,10 @@ public class PluginOperateUtils {
} }
public static void dealParams(StringBuilder url, String category, String seller, String fee, String scope) { public static void dealParams(StringBuilder url, String category, String seller, String fee, String scope) {
dealParams(url, category, seller, fee, StringUtils.EMPTY);
}
public static void dealParams(StringBuilder url, String category, String seller, String fee, String scope, String language) {
if (StringUtils.isNotBlank(category)) { if (StringUtils.isNotBlank(category)) {
url.append("cid=").append(category.split("-")[1]); url.append("cid=").append(category.split("-")[1]);
} else { } else {
@ -169,6 +188,9 @@ public class PluginOperateUtils {
url.append("&scope=").append(StringUtils.EMPTY); url.append("&scope=").append(StringUtils.EMPTY);
} }
} }
if (StringUtils.isNotBlank(language)) {
url.append("&language=").append(language.split("-")[1]);
}
} }
public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) { public static void getLoginInfo(JSCallback jsCallback, UILabel uiLabel) {
@ -203,16 +225,22 @@ public class PluginOperateUtils {
continue; continue;
} }
PluginMarker pluginMarker = pluginTask.getToMarker(); PluginMarker pluginMarker = pluginTask.getToMarker();
PluginContext pluginContext = PluginManager.getContext(pluginMarker); PluginContext pluginContext = PluginManager.getContext(pluginMarker.getPluginID());
if (pluginContext != null) { pluginInfo.append(getPluginName(pluginContext, pluginMarker)).append(PluginUtils.getMessageByErrorCode(pluginTaskResult.errorCode()));
pluginInfo.append(pluginContext.getName()).append(PluginUtils.getMessageByErrorCode(pluginTaskResult.errorCode()));
} else {
pluginInfo.append(pluginMarker.getPluginID()).append(PluginUtils.getMessageByErrorCode(pluginTaskResult.errorCode()));
}
} }
return pluginInfo.toString(); return pluginInfo.toString();
} }
private static String getPluginName(PluginContext pluginContext, PluginMarker pluginMarker) {
if (pluginContext != null) {
return pluginContext.getName();
}
else if (pluginMarker instanceof PluginMarkerAdapter) {
return ((PluginMarkerAdapter) pluginMarker).getPluginName();
}
return pluginMarker == null ? StringUtils.EMPTY : pluginMarker.getPluginID();
}
public static String getSwitchedInfo(PluginTaskResult result) { public static String getSwitchedInfo(PluginTaskResult result) {
StringBuilder pluginInfo = new StringBuilder(); StringBuilder pluginInfo = new StringBuilder();
List<PluginTaskResult> pluginTaskResults = result.asList(); List<PluginTaskResult> pluginTaskResults = result.asList();

1
designer-base/src/main/java/com/fr/design/extra/PluginUtils.java

@ -10,6 +10,7 @@ import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.PluginVerifyException; import com.fr.plugin.PluginVerifyException;
import com.fr.plugin.basic.version.Version; import com.fr.plugin.basic.version.Version;
import com.fr.plugin.basic.version.VersionIntervalType;
import com.fr.plugin.basic.version.VersionIntervalFactory; import com.fr.plugin.basic.version.VersionIntervalFactory;
import com.fr.plugin.context.PluginContext; import com.fr.plugin.context.PluginContext;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;

11
designer-base/src/main/java/com/fr/design/extra/exe/GetPluginFromStoreExecutor.java

@ -21,19 +21,26 @@ public class GetPluginFromStoreExecutor implements Executor {
private String seller; private String seller;
private String fee; private String fee;
private String scope; private String scope;
private String language;
public GetPluginFromStoreExecutor(JSONObject info) { public GetPluginFromStoreExecutor(JSONObject info) {
this.category = info.optString("categories"); this.category = info.optString("categories");
this.fee = info.optString("fee"); this.fee = info.optString("fee");
this.seller = info.optString("seller"); this.seller = info.optString("seller");
this.scope = info.optString("scope"); this.scope = info.optString("scope");
this.language = info.optString("language");
} }
public GetPluginFromStoreExecutor(String category, String seller, String fee, String scope) { public GetPluginFromStoreExecutor(String category, String seller, String fee, String scope) {
this(category, seller, fee, scope, StringUtils.EMPTY);
}
public GetPluginFromStoreExecutor(String category, String seller, String fee, String scope, String language) {
this.category = category; this.category = category;
this.seller = seller; this.seller = seller;
this.fee = fee; this.fee = fee;
this.scope = scope; this.scope = scope;
this.language = language;
} }
@Override @Override
@ -53,7 +60,7 @@ public class GetPluginFromStoreExecutor implements Executor {
@Override @Override
public void run(Process<String> process) { public void run(Process<String> process) {
String plistUrl = CloudCenter.getInstance().acquireUrlByKind("shop.plugin.plist"); String plistUrl = CloudCenter.getInstance().acquireUrlByKind("shop.plugin.plist");
boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee) && StringUtils.isEmpty(scope); boolean getRecommend = StringUtils.isEmpty(category) && StringUtils.isEmpty(seller) && StringUtils.isEmpty(fee) && StringUtils.isEmpty(scope) & StringUtils.isEmpty(language);
if (getRecommend) { if (getRecommend) {
result = PluginOperateUtils.getRecommendPlugins(); result = PluginOperateUtils.getRecommendPlugins();
return; return;
@ -62,7 +69,7 @@ public class GetPluginFromStoreExecutor implements Executor {
if (StringUtils.isNotBlank(plistUrl)) { if (StringUtils.isNotBlank(plistUrl)) {
StringBuilder url = new StringBuilder(); StringBuilder url = new StringBuilder();
url.append(plistUrl).append("?"); url.append(plistUrl).append("?");
PluginOperateUtils.dealParams(url, category, seller, fee, scope); PluginOperateUtils.dealParams(url, category, seller, fee, scope, language);
try { try {
HttpClient httpClient = new HttpClient(url.toString()); HttpClient httpClient = new HttpClient(url.toString());
httpClient.asGet(); httpClient.asGet();

32
designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallFromDiskCallback.java

@ -3,7 +3,7 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback; import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginOperateUtils;
import com.fr.design.extra.PluginUtils; import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;
@ -12,7 +12,6 @@ import com.fr.plugin.manage.PluginManager;
import com.fr.plugin.manage.control.PluginTask; import com.fr.plugin.manage.control.PluginTask;
import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.PluginTaskResult;
import javax.swing.*;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
@ -41,20 +40,21 @@ public class InstallFromDiskCallback extends AbstractPluginTaskCallback {
if (result.isSuccess()) { if (result.isSuccess()) {
String switchedInfo = PluginOperateUtils.getSwitchedInfo(result); String switchedInfo = PluginOperateUtils.getSwitchedInfo(result);
jsCallback.execute("success"); jsCallback.execute("success");
FineLoggerFactory.getLogger().info(pluginInfo + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo); String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo;
FineJOptionPane.showMessageDialog(null, pluginInfo + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo); FineLoggerFactory.getLogger().info(successInfo);
FineJOptionPane.showMessageDialog(null, successInfo);
} else if (result.errorCode() == PluginErrorCode.NeedDealWithPluginDependency) { } else if (result.errorCode() == PluginErrorCode.NeedDealWithPluginDependency) {
int rv = JOptionPane.showOptionDialog( int rv = FineJOptionPane.showOptionDialog(
null, null,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Dependence"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Dependence"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"),
JOptionPane.YES_NO_CANCEL_OPTION, FineJOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, FineJOptionPane.INFORMATION_MESSAGE,
null, null,
FineJOptionPane.OPTION_YES_NO_CANCEL, FineJOptionPane.OPTION_YES_NO_CANCEL,
null null
); );
if (rv == JOptionPane.NO_OPTION || rv == JOptionPane.CANCEL_OPTION || rv == JOptionPane.CLOSED_OPTION) { if (rv == FineJOptionPane.NO_OPTION || rv == FineJOptionPane.CANCEL_OPTION || rv == FineJOptionPane.CLOSED_OPTION) {
return; return;
} }
List<PluginTask> pluginTasks = result.getPreTasks(); List<PluginTask> pluginTasks = result.getPreTasks();
@ -64,24 +64,24 @@ public class InstallFromDiskCallback extends AbstractPluginTaskCallback {
} }
PluginManager.getController().install(zipFile, new InstallFromDiskCallback(zipFile, jsCallback)); PluginManager.getController().install(zipFile, new InstallFromDiskCallback(zipFile, jsCallback));
} else if(result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall){ } else if(result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall){
int rv = JOptionPane.showOptionDialog( int rv = FineJOptionPane.showOptionDialog(
null, null,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Install_Lower"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Install_Lower"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"),
JOptionPane.YES_NO_CANCEL_OPTION, FineJOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, FineJOptionPane.INFORMATION_MESSAGE,
null, null,
FineJOptionPane.OPTION_YES_NO_CANCEL, FineJOptionPane.OPTION_YES_NO_CANCEL,
null null
); );
if (rv == JOptionPane.NO_OPTION || rv == JOptionPane.CANCEL_OPTION || rv == JOptionPane.CLOSED_OPTION) { if (rv == FineJOptionPane.NO_OPTION || rv == FineJOptionPane.CANCEL_OPTION || rv == FineJOptionPane.CLOSED_OPTION) {
return; return;
} }
PluginOperateUtils.updatePluginFromDisk(zipFile, jsCallback); PluginOperateUtils.updatePluginFromDisk(zipFile, jsCallback);
}else { }else {
jsCallback.execute("failed"); jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed")); FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed"));
FineJOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed"), JOptionPane.ERROR_MESSAGE); FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
} }
} }
} }

27
designer-base/src/main/java/com/fr/design/extra/exe/callback/InstallOnlineCallback.java

@ -3,6 +3,7 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback; import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginOperateUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;
@ -11,8 +12,6 @@ import com.fr.plugin.manage.control.AbstractDealPreTaskCallback;
import com.fr.plugin.manage.control.PluginTask; import com.fr.plugin.manage.control.PluginTask;
import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.PluginTaskResult;
import javax.swing.*;
/** /**
* Created by ibm on 2017/5/26. * Created by ibm on 2017/5/26.
@ -38,28 +37,30 @@ public class InstallOnlineCallback extends AbstractDealPreTaskCallback {
if (result.isSuccess()) { if (result.isSuccess()) {
String switchedInfo = PluginOperateUtils.getSwitchedInfo(result); String switchedInfo = PluginOperateUtils.getSwitchedInfo(result);
jsCallback.execute("success"); jsCallback.execute("success");
FineLoggerFactory.getLogger().info(pluginInfo + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo); String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo;
FineJOptionPane.showMessageDialog(null, pluginInfo + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Success") + switchedInfo); FineLoggerFactory.getLogger().info(successInfo);
FineJOptionPane.showMessageDialog(null, successInfo);
} else if(result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall){ } else if(result.errorCode() == PluginErrorCode.HasLowerPluginWhenInstall){
int rv = JOptionPane.showOptionDialog( int rv = FineJOptionPane.showOptionDialog(
null, null,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Install_Lower"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Install_Lower"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"),
JOptionPane.YES_NO_CANCEL_OPTION, FineJOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, FineJOptionPane.INFORMATION_MESSAGE,
null, null,
FineJOptionPane.OPTION_YES_NO_CANCEL, FineJOptionPane.OPTION_YES_NO_CANCEL,
null null
); );
if (rv == JOptionPane.CANCEL_OPTION || rv == JOptionPane.CLOSED_OPTION) { if (rv == FineJOptionPane.NO_OPTION || rv == FineJOptionPane.CANCEL_OPTION || rv == FineJOptionPane.CLOSED_OPTION) {
jsCallback.execute("success");
return; return;
} }
PluginMarker pluginMarker = result.getCurrentTask().getMarker(); PluginMarker pluginMarker = result.getCurrentTask().getMarker();
PluginOperateUtils.updatePluginOnline(pluginMarker, jsCallback); PluginOperateUtils.updatePluginOnline(pluginMarker, jsCallback);
}else { } else {
jsCallback.execute("failed"); jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed")); FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Install_Failed"));
FineJOptionPane.showMessageDialog(null, pluginInfo, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), JOptionPane.ERROR_MESSAGE); FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
} }
} }

14
designer-base/src/main/java/com/fr/design/extra/exe/callback/ModifyStatusCallback.java

@ -2,12 +2,14 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback; import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginUtils; import com.fr.design.extra.PluginOperateUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.manage.control.PluginTaskCallback; import com.fr.plugin.manage.control.PluginTaskCallback;
import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.PluginTaskResult;
import javax.swing.*; import javax.swing.JOptionPane;
/** /**
* Created by ibm on 2017/5/27. * Created by ibm on 2017/5/27.
@ -22,12 +24,16 @@ public class ModifyStatusCallback implements PluginTaskCallback{
} }
@Override @Override
public void done(PluginTaskResult result) { public void done(PluginTaskResult result) {
String pluginInfo = PluginOperateUtils.getSuccessInfo(result);
if (result.isSuccess()) { if (result.isSuccess()) {
jsCallback.execute("success"); jsCallback.execute("success");
String modifyMessage = isActive ? com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Been_Disabled_Duplicate") : com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Plugin_Has_Been_Actived_Duplicate"); String modifyMessage = isActive ?
pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Has_Been_Disabled_Duplicate") :
pluginInfo + Toolkit.i18nText("Fine-Design_Plugin_Has_Been_Actived_Duplicate");
FineLoggerFactory.getLogger().info(modifyMessage);
FineJOptionPane.showMessageDialog(null, modifyMessage); FineJOptionPane.showMessageDialog(null, modifyMessage);
} else { } else {
FineJOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), JOptionPane.ERROR_MESSAGE); FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), JOptionPane.ERROR_MESSAGE);
} }
} }

27
designer-base/src/main/java/com/fr/design/extra/exe/callback/UninstallPluginCallback.java

@ -2,7 +2,8 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback; import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginUtils; import com.fr.design.extra.PluginOperateUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;
@ -10,8 +11,6 @@ import com.fr.plugin.error.PluginErrorCode;
import com.fr.plugin.manage.PluginManager; import com.fr.plugin.manage.PluginManager;
import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.PluginTaskResult;
import javax.swing.*;
/** /**
* Created by ibm on 2017/5/27. * Created by ibm on 2017/5/27.
*/ */
@ -25,29 +24,31 @@ public class UninstallPluginCallback extends AbstractPluginTaskCallback {
@Override @Override
public void done(PluginTaskResult result) { public void done(PluginTaskResult result) {
String pluginInfo = PluginOperateUtils.getSuccessInfo(result);
if (result.isSuccess()) { if (result.isSuccess()) {
jsCallback.execute("success"); jsCallback.execute("success");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Success")); String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Success");
FineJOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Success")); FineLoggerFactory.getLogger().info(successInfo);
FineJOptionPane.showMessageDialog(null, successInfo);
}else if (result.errorCode() == PluginErrorCode.NeedUninstallDependingPluginFirst) { }else if (result.errorCode() == PluginErrorCode.NeedUninstallDependingPluginFirst) {
int rv = JOptionPane.showOptionDialog( int rv = FineJOptionPane.showOptionDialog(
null, null,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Dependence"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Dependence"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"),
JOptionPane.YES_NO_CANCEL_OPTION, FineJOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, FineJOptionPane.INFORMATION_MESSAGE,
null, null,
FineJOptionPane.OPTION_YES_NO_CANCEL, FineJOptionPane.OPTION_YES_NO_CANCEL,
null null
); );
if (rv == JOptionPane.CANCEL_OPTION || rv == JOptionPane.CLOSED_OPTION) { if (rv == FineJOptionPane.CANCEL_OPTION || rv == FineJOptionPane.CLOSED_OPTION) {
return; return;
} }
PluginManager.getController().uninstall(pluginMarker, true, new UninstallPluginCallback(pluginMarker, jsCallback)); PluginManager.getController().uninstall(pluginMarker, true, new UninstallPluginCallback(pluginMarker, jsCallback));
} else { } else {
jsCallback.execute("failed"); jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Failed")); FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Delete_Failed"));
FineJOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), JOptionPane.ERROR_MESSAGE); FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
} }
} }
} }

37
designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateFromDiskCallback.java

@ -3,7 +3,7 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback; import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginOperateUtils;
import com.fr.design.extra.PluginUtils; import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;
@ -12,7 +12,6 @@ import com.fr.plugin.manage.PluginManager;
import com.fr.plugin.manage.control.PluginTask; import com.fr.plugin.manage.control.PluginTask;
import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.PluginTaskResult;
import javax.swing.*;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
@ -37,22 +36,24 @@ public class UpdateFromDiskCallback extends AbstractPluginTaskCallback {
@Override @Override
public void done(PluginTaskResult result) { public void done(PluginTaskResult result) {
String pluginInfo = PluginOperateUtils.getSuccessInfo(result);
if (result.isSuccess()) { if (result.isSuccess()) {
jsCallback.execute("success"); jsCallback.execute("success");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Success")); String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Success");
FineJOptionPane.showMessageDialog(null, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Success")); FineLoggerFactory.getLogger().info(successInfo);
FineJOptionPane.showMessageDialog(null, successInfo);
} else if (result.errorCode() == PluginErrorCode.NeedDealWithPluginDependency) { } else if (result.errorCode() == PluginErrorCode.NeedDealWithPluginDependency) {
int rv = JOptionPane.showOptionDialog( int rv = FineJOptionPane.showOptionDialog(
null, null,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Dependence"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Dependence"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"),
JOptionPane.YES_NO_CANCEL_OPTION, FineJOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, FineJOptionPane.INFORMATION_MESSAGE,
null, null,
FineJOptionPane.OPTION_YES_NO_CANCEL, FineJOptionPane.OPTION_YES_NO_CANCEL,
null null
); );
if (rv == JOptionPane.NO_OPTION || rv == JOptionPane.CANCEL_OPTION || rv == JOptionPane.CLOSED_OPTION) { if (rv == FineJOptionPane.NO_OPTION || rv == FineJOptionPane.CANCEL_OPTION || rv == FineJOptionPane.CLOSED_OPTION) {
return; return;
} }
List<PluginTask> pluginTasks = result.getPreTasks(); List<PluginTask> pluginTasks = result.getPreTasks();
@ -62,24 +63,24 @@ public class UpdateFromDiskCallback extends AbstractPluginTaskCallback {
} }
PluginManager.getController().update(zipFile, new UpdateFromDiskCallback(zipFile, jsCallback)); PluginManager.getController().update(zipFile, new UpdateFromDiskCallback(zipFile, jsCallback));
} else if(result.errorCode() == PluginErrorCode.NoPluginToUpdate){ } else if(result.errorCode() == PluginErrorCode.NoPluginToUpdate){
int rv = JOptionPane.showOptionDialog( int rv = FineJOptionPane.showOptionDialog(
null, null,
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_No_Plugin_Update"), Toolkit.i18nText("Fine-Design_Basic_Plugin_No_Plugin_Update"),
com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"),
JOptionPane.YES_NO_CANCEL_OPTION, FineJOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, FineJOptionPane.INFORMATION_MESSAGE,
null, null,
FineJOptionPane.OPTION_YES_NO_CANCEL, FineJOptionPane.OPTION_YES_NO_CANCEL,
null null
); );
if (rv == JOptionPane.NO_OPTION || rv == JOptionPane.CANCEL_OPTION || rv == JOptionPane.CLOSED_OPTION) { if (rv == FineJOptionPane.NO_OPTION || rv == FineJOptionPane.CANCEL_OPTION || rv == FineJOptionPane.CLOSED_OPTION) {
return; return;
} }
PluginOperateUtils.installPluginFromDisk(zipFile, jsCallback); PluginOperateUtils.installPluginFromDisk(zipFile, jsCallback);
}else { }else {
jsCallback.execute("failed"); jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Failed")); FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Failed"));
FineJOptionPane.showMessageDialog(null, PluginUtils.getMessageByErrorCode(result.errorCode()), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), JOptionPane.ERROR_MESSAGE); FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
} }
} }
} }

12
designer-base/src/main/java/com/fr/design/extra/exe/callback/UpdateOnlineCallback.java

@ -3,14 +3,13 @@ package com.fr.design.extra.exe.callback;
import com.fr.design.bridge.exec.JSCallback; import com.fr.design.bridge.exec.JSCallback;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.extra.PluginOperateUtils; import com.fr.design.extra.PluginOperateUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.manage.control.AbstractDealPreTaskCallback; import com.fr.plugin.manage.control.AbstractDealPreTaskCallback;
import com.fr.plugin.manage.control.PluginTask; import com.fr.plugin.manage.control.PluginTask;
import com.fr.plugin.manage.control.PluginTaskResult; import com.fr.plugin.manage.control.PluginTaskResult;
import javax.swing.*;
/** /**
* Created by ibm on 2017/5/26. * Created by ibm on 2017/5/26.
*/ */
@ -33,12 +32,13 @@ public class UpdateOnlineCallback extends AbstractDealPreTaskCallback {
String pluginInfo = PluginOperateUtils.getSuccessInfo(result); String pluginInfo = PluginOperateUtils.getSuccessInfo(result);
if (result.isSuccess()) { if (result.isSuccess()) {
jsCallback.execute("success"); jsCallback.execute("success");
FineLoggerFactory.getLogger().info(pluginInfo + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Success")); String successInfo = pluginInfo + Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Success");
FineJOptionPane.showMessageDialog(null,pluginInfo + com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Success")); FineLoggerFactory.getLogger().info(successInfo);
FineJOptionPane.showMessageDialog(null, successInfo);
} else { } else {
jsCallback.execute("failed"); jsCallback.execute("failed");
FineLoggerFactory.getLogger().info(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Failed")); FineLoggerFactory.getLogger().info(Toolkit.i18nText("Fine-Design_Basic_Plugin_Update_Failed"));
FineJOptionPane.showMessageDialog(null, pluginInfo, com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), JOptionPane.ERROR_MESSAGE); FineJOptionPane.showMessageDialog(null, pluginInfo, Toolkit.i18nText("Fine-Design_Basic_Plugin_Warning"), FineJOptionPane.ERROR_MESSAGE);
} }
} }
} }

3
designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java

@ -2,7 +2,6 @@ package com.fr.design.file;
import com.fr.base.chart.chartdata.CallbackEvent; import com.fr.base.chart.chartdata.CallbackEvent;
import com.fr.base.io.BaseBook; import com.fr.base.io.BaseBook;
import com.fr.design.DesignModelAdapter;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.base.mode.DesignModeContext; import com.fr.design.base.mode.DesignModeContext;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
@ -23,7 +22,6 @@ import com.fr.stable.CoreConstants;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.third.org.apache.commons.io.FilenameUtils;
import javax.swing.SwingUtilities;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@ -441,4 +439,5 @@ public class HistoryTemplateListCache implements CallbackEvent {
} }
}); });
} }
} }

4
designer-base/src/main/java/com/fr/design/file/MutilTempalteTabPane.java

@ -18,8 +18,6 @@ import com.fr.general.ComparatorUtils;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.stable.Constants; import com.fr.stable.Constants;
import com.fr.third.javax.annotation.Nonnull; import com.fr.third.javax.annotation.Nonnull;
import com.fr.workspace.WorkContext;
import com.fr.workspace.server.lock.TplOperator;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.ButtonModel; import javax.swing.ButtonModel;
@ -707,7 +705,7 @@ public class MutilTempalteTabPane extends JComponent {
// 只有是环境内的文件,才执行释放锁 // 只有是环境内的文件,才执行释放锁
if (file != null && file.isEnvFile()) { if (file != null && file.isEnvFile()) {
// release lock // release lock
WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(file.getPath()); TemplateResourceManager.getResource().closeTemplate(file.getPath());
} }
} }

71
designer-base/src/main/java/com/fr/design/file/TemplateResource.java

@ -0,0 +1,71 @@
package com.fr.design.file;
import com.fr.common.annotations.Open;
import com.fr.file.FILE;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 模板资源操作可操作模板及模板目录
*
* @author hades
* @version 10.0
* Created by hades on 2020/12/23
*/
@Open
public interface TemplateResource {
/**
* 读取模板
* @param path
* @return
* @throws Exception
*/
InputStream readTemplate(String path) throws Exception;
/**
* 保存模板
* @param file
* @return
* @throws Exception
*/
OutputStream saveTemplate(FILE file) throws Exception;
/**
* 删除某个目录/某个模板
* @param file
* @return
*/
boolean delete(FILE file);
/**
* 关闭模板
* @param path
* @return
*/
boolean closeTemplate(String path);
/**
* 重命名模板/目录
* @param from
* @param to
* @return
*/
boolean rename(String from, String to);
/**
* 模板/目录是否存在
* @param path
* @return
*/
boolean exist(String path);
/**
* 创建目录
* @param path
* @return
*/
boolean mkdir(String path);
}

66
designer-base/src/main/java/com/fr/design/file/TemplateResourceManager.java

@ -0,0 +1,66 @@
package com.fr.design.file;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.file.impl.DefaultTemplateResource;
import com.fr.design.fun.LocalResourceProvider;
import com.fr.design.mainframe.DesignerFrameFileDealerPane;
import com.fr.design.ui.util.UIUtil;
import com.fr.file.filetree.FileNodes;
import com.fr.file.filetree.LocalFileNodes;
import com.fr.plugin.injectable.PluginModule;
import com.fr.plugin.manage.PluginFilter;
import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
import com.fr.plugin.observer.PluginEventType;
import com.fr.plugin.observer.PluginListenerRegistration;
import com.fr.workspace.WorkContext;
import com.fr.workspace.engine.base.FineObjectPool;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/12/23
*/
public class TemplateResourceManager {
private static final TemplateResource DEFAULT_OPERATION = new DefaultTemplateResource();
private static TemplateResource OPERATION = DEFAULT_OPERATION;
static {
PluginFilter filter = pluginContext -> pluginContext.contain(PluginModule.ExtraDesign, LocalResourceProvider.XML_TAG);
PluginListenerRegistration.getInstance().listen(PluginEventType.AfterStop, new PluginEventListener() {
@Override
public void on(PluginEvent event) {
registerOperation(new DefaultTemplateResource());
FineObjectPool.getInstance().getLocalPool().put(FileNodes.class, new LocalFileNodes());
UIUtil.invokeLaterIfNeeded(() -> DesignerFrameFileDealerPane.getInstance().refresh());
}
}, filter);
PluginListenerRegistration.getInstance().listen(PluginEventType.AfterRun, new PluginEventListener() {
@Override
public void on(PluginEvent event) {
LocalResourceProvider provider = ExtraDesignClassManager.getInstance().getSingle(LocalResourceProvider.XML_TAG);
if (provider != null && WorkContext.getCurrent().isLocal()) {
registerOperation(provider.createResourceOperation());
FineObjectPool.getInstance().getLocalPool().put(FileNodes.class, provider.createFileNodes());
UIUtil.invokeLaterIfNeeded(() -> DesignerFrameFileDealerPane.getInstance().refresh());
}
}
}, filter);
}
private static void registerOperation(TemplateResource operation) {
OPERATION = operation;
}
public static TemplateResource getResource() {
if (OPERATION == null) {
return DEFAULT_OPERATION;
}
return OPERATION;
}
}

21
designer-base/src/main/java/com/fr/design/file/TemplateTreePane.java

@ -4,7 +4,9 @@
package com.fr.design.file; package com.fr.design.file;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.design.ExtraDesignClassManager;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.fun.TemplateTreeDefineProcessor;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.itree.filetree.TemplateFileTree; import com.fr.design.gui.itree.filetree.TemplateFileTree;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode; import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
@ -23,12 +25,11 @@ import com.fr.stable.CoreConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContext;
import com.fr.workspace.server.lock.TplOperator;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager; import javax.swing.ToolTipManager;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode; import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath; import javax.swing.tree.TreePath;
@ -87,6 +88,16 @@ public class TemplateTreePane extends JPanel implements FileOperations {
} }
} }
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isRightMouseButton(e)) {
TemplateTreeDefineProcessor processor = ExtraDesignClassManager.getInstance().getSingle(TemplateTreeDefineProcessor.XML_TAG);
if (processor != null) {
processor.rightClickAction(e);
}
}
}
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
if (toolBarStateChangeListener != null) { if (toolBarStateChangeListener != null) {
@ -182,7 +193,7 @@ public class TemplateTreePane extends JPanel implements FileOperations {
@Override @Override
public boolean mkdir(String path) { public boolean mkdir(String path) {
return WorkContext.getWorkResource().createDirectory(path); return TemplateResourceManager.getResource().mkdir(path);
} }
/** /**
@ -325,7 +336,7 @@ public class TemplateTreePane extends JPanel implements FileOperations {
if (node instanceof FileNode) { if (node instanceof FileNode) {
FileNodeFILE nodeFILE = new FileNodeFILE((FileNode) node); FileNodeFILE nodeFILE = new FileNodeFILE((FileNode) node);
if (nodeFILE.exists()) { if (nodeFILE.exists()) {
if (WorkContext.getCurrent().get(TplOperator.class).delete(nodeFILE.getPath())) { if (TemplateResourceManager.getResource().delete(nodeFILE)) {
HistoryTemplateListCache.getInstance().deleteFile(nodeFILE); HistoryTemplateListCache.getInstance().deleteFile(nodeFILE);
} else { } else {
success = false; success = false;
@ -427,7 +438,7 @@ public class TemplateTreePane extends JPanel implements FileOperations {
try { try {
// 接收的是WEB-INF下的路径 // 接收的是WEB-INF下的路径
return WorkContext.getCurrent().get(TplOperator.class).rename(from, to); return TemplateResourceManager.getResource().rename(from, to);
} catch (Exception e) { } catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
return false; return false;

19
designer-base/src/main/java/com/fr/design/file/impl/AbstractTemplateResource.java

@ -0,0 +1,19 @@
package com.fr.design.file.impl;
import com.fr.design.file.TemplateResource;
import com.fr.file.FILE;
import com.fr.workspace.WorkContext;
import com.fr.workspace.server.lock.TplOperator;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/12/23
*/
public abstract class AbstractTemplateResource implements TemplateResource {
}

52
designer-base/src/main/java/com/fr/design/file/impl/DefaultTemplateResource.java

@ -0,0 +1,52 @@
package com.fr.design.file.impl;
import com.fr.file.FILE;
import com.fr.workspace.WorkContext;
import com.fr.workspace.server.lock.TplOperator;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/12/23
*/
public class DefaultTemplateResource extends AbstractTemplateResource {
@Override
public InputStream readTemplate(String path) throws Exception {
return new ByteArrayInputStream(WorkContext.getCurrent().get(TplOperator.class).readAndLockFile(path));
}
@Override
public OutputStream saveTemplate(FILE file) throws Exception {
return file.asOutputStream();
}
@Override
public boolean closeTemplate(String path) {
return WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(path);
}
@Override
public boolean delete(FILE file) {
return WorkContext.getCurrent().get(TplOperator.class).delete(file.getPath());
}
@Override
public boolean rename(String from, String to) {
return WorkContext.getCurrent().get(TplOperator.class).rename(from, to);
}
@Override
public boolean exist(String path) {
return WorkContext.getWorkResource().exist(path);
}
@Override
public boolean mkdir(String path) {
return WorkContext.getWorkResource().createDirectory(path);
}
}

34
designer-base/src/main/java/com/fr/design/fun/LocalResourceProvider.java

@ -0,0 +1,34 @@
package com.fr.design.fun;
import com.fr.design.file.TemplateResource;
import com.fr.file.filetree.FileNodes;
import com.fr.stable.fun.mark.Immutable;
/**
* 本地资源操作插件接口
*
* @author hades
* @version 10.0
* Created by hades on 2020/12/22
*/
public interface LocalResourceProvider extends Immutable {
String XML_TAG = "LocalResourceProvider";
int CURRENT_LEVEL = 1;
/**
* eg: DefaultResourceOperation
*
* @return 目录/模板的各种操作
*/
TemplateResource createResourceOperation();
/**
* eg: LocalFileNodes
*
* @return 构建目录树的方式
*/
FileNodes createFileNodes();
}

19
designer-base/src/main/java/com/fr/design/fun/TemplateTreeDefineProcessor.java

@ -0,0 +1,19 @@
package com.fr.design.fun;
import com.fr.stable.fun.mark.Immutable;
import java.awt.event.MouseEvent;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/12/14
*/
public interface TemplateTreeDefineProcessor extends Immutable {
String XML_TAG = "TemplateTreeDefineProcessor";
int CURRENT_LEVEL = 1;
void rightClickAction(MouseEvent mouseEvent);
}

23
designer-base/src/main/java/com/fr/design/fun/impl/AbstractLocalResourceProvider.java

@ -0,0 +1,23 @@
package com.fr.design.fun.impl;
import com.fr.design.fun.LocalResourceProvider;
import com.fr.stable.fun.mark.API;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/12/22
*/
@API(level = LocalResourceProvider.CURRENT_LEVEL)
public abstract class AbstractLocalResourceProvider implements LocalResourceProvider {
@Override
public int currentAPILevel() {
return CURRENT_LEVEL;
}
@Override
public int layerIndex() {
return DEFAULT_LAYER_INDEX;
}
}

24
designer-base/src/main/java/com/fr/design/fun/impl/AbstractTemplateTreeDefineProcessor.java

@ -0,0 +1,24 @@
package com.fr.design.fun.impl;
import com.fr.design.fun.TemplateTreeDefineProcessor;
import com.fr.stable.fun.mark.API;
/**
* @author hades
* @version 10.0
* Created by hades on 2020/12/21
*/
@API(level = TemplateTreeDefineProcessor.CURRENT_LEVEL)
public abstract class AbstractTemplateTreeDefineProcessor implements TemplateTreeDefineProcessor {
@Override
public int currentAPILevel() {
return CURRENT_LEVEL;
}
@Override
public int layerIndex() {
return DEFAULT_LAYER_INDEX;
}
}

2
designer-base/src/main/java/com/fr/design/mainframe/DesignerFrameFileDealerPane.java

@ -17,7 +17,6 @@ import com.fr.design.file.FileToolbarStateChangeListener;
import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.file.HistoryTemplateListCache;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.MutilTempalteTabPane; import com.fr.design.file.MutilTempalteTabPane;
import com.fr.design.file.SaveSomeTemplatePane;
import com.fr.design.file.TemplateTreePane; import com.fr.design.file.TemplateTreePane;
import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
@ -58,7 +57,6 @@ import javax.swing.JDialog;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
import java.awt.BorderLayout; import java.awt.BorderLayout;

4
designer-base/src/main/java/com/fr/design/mainframe/JTemplate.java

@ -3,7 +3,6 @@ package com.fr.design.mainframe;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.base.Parameter; import com.fr.base.Parameter;
import com.fr.base.ScreenResolution;
import com.fr.base.io.BaseBook; import com.fr.base.io.BaseBook;
import com.fr.base.iofile.attr.DesignBanCopyAttrMark; import com.fr.base.iofile.attr.DesignBanCopyAttrMark;
import com.fr.base.iofile.attr.TemplateIdAttrMark; import com.fr.base.iofile.attr.TemplateIdAttrMark;
@ -24,6 +23,7 @@ import com.fr.design.designer.TargetComponent;
import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.FineJOptionPane;
import com.fr.design.dialog.InformationWarnPane; import com.fr.design.dialog.InformationWarnPane;
import com.fr.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.file.TemplateResourceManager;
import com.fr.design.file.TemplateTreePane; import com.fr.design.file.TemplateTreePane;
import com.fr.design.fun.DesignerFrameUpButtonProvider; import com.fr.design.fun.DesignerFrameUpButtonProvider;
import com.fr.design.fun.MenuHandler; import com.fr.design.fun.MenuHandler;
@ -813,7 +813,7 @@ public abstract class JTemplate<T extends BaseBook, U extends BaseUndoState<?>>
return false; return false;
} }
try { try {
this.getTarget().export(editingFILE.asOutputStream()); this.getTarget().export(TemplateResourceManager.getResource().saveTemplate(editingFILE));
} catch (Exception e) { } catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage(), "Save Error", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), e.getMessage(), "Save Error", JOptionPane.ERROR_MESSAGE);

108
designer-base/src/main/java/com/fr/env/PluginErrorRemindDialog.java vendored

@ -0,0 +1,108 @@
package com.fr.env;
import com.fr.design.actions.server.PluginManagerAction;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.general.FRFont;
import com.fr.general.GeneralContext;
import com.fr.general.IOUtils;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
/**
* 插件启动失败提示窗
*/
public class PluginErrorRemindDialog extends JDialog implements ActionListener {
public PluginErrorRemindDialog(Frame parent, String areaText) {
super(parent, true);
//上面的标签面板
JPanel topPanel = FRGUIPaneFactory.createBorderLayout_L_Pane();
JPanel imagePanel = new JPanel();
Icon icon = IOUtils.readIcon("com/fr/design/images/warnings/warning5.png");
JLabel imageLabel = new JLabel();
imageLabel.setIcon(icon);
imagePanel.add(imageLabel);
imagePanel.setPreferredSize(new Dimension(130, 100));
JPanel verticalPanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true);
JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Plugin_Error_Remind_Title"));
label.setFont(FRFont.getInstance().applySize(18).applyStyle(1));
label.setPreferredSize(new Dimension(650, 100));
verticalPanel.add(label);
topPanel.add(imagePanel, BorderLayout.WEST);
topPanel.add(verticalPanel, BorderLayout.CENTER);
topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
//中间的文本域面板
JPanel centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane();
centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
centerPanel.setPreferredSize(new Dimension(480, 320));
JTextArea checkArea = new JTextArea(areaText);
checkArea.setEnabled(false);
centerPanel.add(checkArea, BorderLayout.CENTER);
UIButton cancelButton = new UIButton(Toolkit.i18nText("Fine-Design_Plugin_Error_Remind_Not_Deal_With"));
UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Plugin_Error_Remind_Deal_With"));
cancelButton.addActionListener(this);
okButton.addActionListener(new PluginManagerActionAdapter(this));
// 按钮
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
buttonPanel.add(cancelButton);
buttonPanel.add(okButton);
this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"));
this.setResizable(false);
this.add(topPanel, BorderLayout.NORTH);
this.add(centerPanel, BorderLayout.CENTER);
this.add(buttonPanel, BorderLayout.SOUTH);
this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US) ? 750 : 600, 500));
GUICoreUtils.centerWindow(this);
}
@Override
public void actionPerformed(ActionEvent e) {
this.dispose();
}
private static class PluginManagerActionAdapter extends PluginManagerAction {
private JDialog jDialog;
public PluginManagerActionAdapter(JDialog jDialog) {
this.jDialog = jDialog;
}
@Override
public void actionPerformed(ActionEvent e) {
this.jDialog.dispose();
super.actionPerformed(e);
}
}
}

18
designer-base/src/main/java/com/fr/file/FileNodeFILE.java

@ -2,6 +2,7 @@ package com.fr.file;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.design.file.TemplateResourceManager;
import com.fr.io.FineEncryptUtils; import com.fr.io.FineEncryptUtils;
import com.fr.base.io.XMLEncryptUtils; import com.fr.base.io.XMLEncryptUtils;
import com.fr.design.file.NodeAuthProcessor; import com.fr.design.file.NodeAuthProcessor;
@ -22,10 +23,8 @@ import com.fr.workspace.WorkContext;
import com.fr.workspace.Workspace; import com.fr.workspace.Workspace;
import com.fr.workspace.WorkspaceEvent; import com.fr.workspace.WorkspaceEvent;
import com.fr.workspace.resource.WorkResourceTempRenameStream; import com.fr.workspace.resource.WorkResourceTempRenameStream;
import com.fr.workspace.server.lock.TplOperator;
import javax.swing.*; import javax.swing.*;
import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Arrays; import java.util.Arrays;
@ -324,7 +323,7 @@ public class FileNodeFILE implements FILE {
} }
try { try {
return WorkContext.getWorkResource().exist(node.getEnvPath()); return TemplateResourceManager.getResource().exist(node.getEnvPath());
} catch (Exception e) { } catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
return false; return false;
@ -379,14 +378,11 @@ public class FileNodeFILE implements FILE {
if (!envPath.startsWith(ProjectConstants.REPORTLETS_NAME)) { if (!envPath.startsWith(ProjectConstants.REPORTLETS_NAME)) {
return null; return null;
} }
InputStream in = new ByteArrayInputStream( InputStream in = TemplateResourceManager.getResource().readTemplate(
WorkContext.getCurrent().get(TplOperator.class).readAndLockFile( StableUtils.pathJoin(
StableUtils.pathJoin( ProjectConstants.REPORTLETS_NAME,
ProjectConstants.REPORTLETS_NAME, envPath.substring(ProjectConstants.REPORTLETS_NAME.length() + 1)
envPath.substring(ProjectConstants.REPORTLETS_NAME.length() + 1) ));
)
)
);
return envPath.endsWith(".cpt") || envPath.endsWith(".frm") return envPath.endsWith(".cpt") || envPath.endsWith(".frm")
? XMLEncryptUtils.decodeInputStream(EncryptUtils.decodeInputStream(FineEncryptUtils.decode(in))) : in; ? XMLEncryptUtils.decodeInputStream(EncryptUtils.decodeInputStream(FineEncryptUtils.decode(in))) : in;

62
designer-base/src/test/java/com/fr/design/EnvChangeEntranceTest.java

@ -1,10 +1,12 @@
package com.fr.design; package com.fr.design;
import com.fr.decision.webservice.v10.plugin.helper.PluginErrorRemindHandler;
import com.fr.design.env.DesignerWorkspaceInfo; import com.fr.design.env.DesignerWorkspaceInfo;
import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.DesignerWorkspaceType;
import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.LocalDesignerWorkspaceInfo;
import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo;
import com.fr.env.CheckServiceDialog; import com.fr.env.CheckServiceDialog;
import com.fr.env.PluginErrorRemindDialog;
import com.fr.invoke.Reflect; import com.fr.invoke.Reflect;
import com.fr.workspace.connect.WorkspaceConnectionInfo; import com.fr.workspace.connect.WorkspaceConnectionInfo;
import com.fr.workspace.engine.channel.http.FunctionalHttpRequest; import com.fr.workspace.engine.channel.http.FunctionalHttpRequest;
@ -16,13 +18,19 @@ import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunner;
import java.awt.Frame;
/** /**
* @author: Maksim * @author: Maksim
* @Date: Created in 2020/3/5 * @Date: Created in 2020/3/5
* @Description: * @Description:
*/ */
@RunWith(PowerMockRunner.class) @RunWith(PowerMockRunner.class)
@PrepareForTest({FunctionalHttpRequest.class,EnvChangeEntrance.class,CheckServiceDialog.class, DesignerEnvManager.class}) @PrepareForTest({FunctionalHttpRequest.class,
EnvChangeEntrance.class,
CheckServiceDialog.class,
DesignerEnvManager.class,
PluginErrorRemindHandler.class})
public class EnvChangeEntranceTest { public class EnvChangeEntranceTest {
@Test @Test
@ -44,17 +52,15 @@ public class EnvChangeEntranceTest {
EasyMock.expect(request.getServerBranch()).andReturn(remoteBranch); EasyMock.expect(request.getServerBranch()).andReturn(remoteBranch);
CheckServiceDialog dialog = EasyMock.mock(CheckServiceDialog.class); CheckServiceDialog dialog = EasyMock.mock(CheckServiceDialog.class);
PowerMock.expectNew(CheckServiceDialog.class, EasyMock.anyObject(), EasyMock.anyObject(), EasyMock.anyObject(), EasyMock.anyObject()).andReturn(dialog); PowerMock.expectNew(CheckServiceDialog.class, EasyMock.anyObject(Frame.class), EasyMock.anyString(), EasyMock.anyString(), EasyMock.anyString()).andReturn(dialog);
EasyMock.replay(request); EasyMock.replay(request, selectedEnv, connectionInfo);
EasyMock.replay(selectedEnv);
EasyMock.replay(connectionInfo);
PowerMock.replayAll(); PowerMock.replayAll();
entrance.showServiceDialog(selectedEnv); entrance.showServiceDialog(selectedEnv);
Assert.assertTrue(true);
}catch (Exception e){ }catch (Exception e){
Assert.assertTrue(false); Assert.fail();
} }
} }
@ -94,10 +100,44 @@ public class EnvChangeEntranceTest {
DesignerWorkspaceInfo info3 = LocalDesignerWorkspaceInfo.create("name", "path"); DesignerWorkspaceInfo info3 = LocalDesignerWorkspaceInfo.create("name", "path");
DesignerWorkspaceInfo info4 = null; DesignerWorkspaceInfo info4 = null;
Assert.assertFalse((boolean) Reflect.on(entrance).call("isNotRememberPwd", info1).get()); Assert.assertFalse(Reflect.on(entrance).call("isNotRememberPwd", info1).get());
Assert.assertTrue((boolean) Reflect.on(entrance).call("isNotRememberPwd", info2).get()); Assert.assertTrue(Reflect.on(entrance).call("isNotRememberPwd", info2).get());
Assert.assertFalse((boolean) Reflect.on(entrance).call("isNotRememberPwd", info3).get()); Assert.assertFalse(Reflect.on(entrance).call("isNotRememberPwd", info3).get());
Assert.assertFalse((boolean) Reflect.on(entrance).call("isNotRememberPwd", info4).get()); Assert.assertFalse(Reflect.on(entrance).call("isNotRememberPwd", info4).get());
} }
@Test
public void testPluginErrorRemind() throws Exception {
try {
DesignerWorkspaceInfo selectedEnv = EasyMock.mock(DesignerWorkspaceInfo.class);
EasyMock.expect(selectedEnv.getType()).andReturn(DesignerWorkspaceType.Remote).once();
EasyMock.expect(selectedEnv.getType()).andReturn(DesignerWorkspaceType.Local).times(2);
PowerMock.mockStatic(PluginErrorRemindHandler.class);
EasyMock.expect(PluginErrorRemindHandler.pluginErrorContent()).andReturn("").once();
EasyMock.expect(PluginErrorRemindHandler.pluginErrorContent()).andReturn("111").once();
PluginErrorRemindDialog dialog = EasyMock.mock(PluginErrorRemindDialog.class);
PowerMock.expectNew(PluginErrorRemindDialog.class, EasyMock.anyObject(Frame.class), EasyMock.anyString()).andReturn(dialog).once();
dialog.setVisible(true);
EasyMock.expectLastCall();
EasyMock.replay(selectedEnv, dialog);
PowerMock.replayAll();
EnvChangeEntrance entrance = EnvChangeEntrance.getInstance();
entrance.pluginErrorRemind(selectedEnv);
entrance.pluginErrorRemind(selectedEnv);
entrance.pluginErrorRemind(selectedEnv);
EasyMock.verify(selectedEnv, dialog);
PowerMock.verifyAll();
} catch (Exception e) {
Assert.fail();
}
}
} }

155
designer-base/src/test/java/com/fr/design/extra/PluginOperateUtilsTest.java

@ -0,0 +1,155 @@
package com.fr.design.extra;
import com.fr.invoke.Reflect;
import com.fr.json.JSONObject;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.context.PluginMarker;
import com.fr.plugin.context.PluginMarkerAdapter;
import com.fr.plugin.error.PluginErrorCode;
import com.fr.plugin.manage.PluginManager;
import com.fr.plugin.manage.control.PluginTask;
import com.fr.plugin.manage.control.PluginTaskResult;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.util.ArrayList;
import java.util.List;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/12/17
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({PluginManager.class, PluginUtils.class})
public class PluginOperateUtilsTest {
@Test
public void testGetSuccessInfo() {
PluginTaskResult pluginTaskResult = EasyMock.mock(PluginTaskResult.class);
PluginTaskResult pluginTaskResult1 = EasyMock.mock(PluginTaskResult.class);
PluginTaskResult pluginTaskResult2 = EasyMock.mock(PluginTaskResult.class);
List<PluginTaskResult> pluginTaskResults1 = new ArrayList<>();
pluginTaskResults1.add(pluginTaskResult1);
List<PluginTaskResult> pluginTaskResults2 = new ArrayList<>();
pluginTaskResults2.add(pluginTaskResult1);
pluginTaskResults2.add(pluginTaskResult2);
PluginMarker pluginMarker1 = PluginMarker.create("plugin-1", "1.0");
PluginMarker pluginMarker2 = PluginMarkerAdapter.create("plugin-2", "2.0", "name-2");
PluginTask pluginTask1 = PluginTask.installTask(pluginMarker1);
PluginTask pluginTask2 = PluginTask.installTask(pluginMarker2);
EasyMock.expect(pluginTaskResult.asList()).andReturn(pluginTaskResults1).times(2);
EasyMock.expect(pluginTaskResult.asList()).andReturn(pluginTaskResults2).times(2);
EasyMock.expect(pluginTaskResult1.getCurrentTask()).andReturn(pluginTask1).anyTimes();
EasyMock.expect(pluginTaskResult2.getCurrentTask()).andReturn(pluginTask2).anyTimes();
EasyMock.expect(pluginTaskResult1.errorCode()).andReturn(PluginErrorCode.BelowSystem).anyTimes();
EasyMock.expect(pluginTaskResult2.errorCode()).andReturn(PluginErrorCode.BeyondSystem).anyTimes();
PluginContext plugin1 = EasyMock.mock(PluginContext.class);
PluginContext plugin2 = EasyMock.mock(PluginContext.class);
EasyMock.expect(plugin1.getName()).andReturn("context-1").anyTimes();
EasyMock.expect(plugin2.getName()).andReturn("context-2").anyTimes();
PowerMock.mockStatic(PluginManager.class);
EasyMock.expect(PluginManager.getContext(pluginMarker1.getPluginID()))
.andReturn(plugin1).once().andReturn(null).once().andReturn(plugin1).once().andReturn(null).once();
EasyMock.expect(PluginManager.getContext(pluginMarker2.getPluginID()))
.andReturn(plugin2).once().andReturn(null).once();
EasyMock.replay(pluginTaskResult, pluginTaskResult1, pluginTaskResult2, plugin1, plugin2);
PowerMock.replayAll();
// 1个
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "context-1Fine-Core_Plugin_Error_BelowSystem");
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "plugin-1Fine-Core_Plugin_Error_BelowSystem");
// 2个
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "context-1Fine-Core_Plugin_Error_BelowSystem\ncontext-2Fine-Core_Plugin_Error_BeyondSystem");
Assert.assertEquals(PluginOperateUtils.getSuccessInfo(pluginTaskResult), "plugin-1Fine-Core_Plugin_Error_BelowSystem\nname-2Fine-Core_Plugin_Error_BeyondSystem");
EasyMock.verify(pluginTaskResult, pluginTaskResult1, pluginTaskResult2, plugin1, plugin2);
PowerMock.verifyAll();
}
@Test
public void testGetPluginName() {
PluginContext pluginContext = EasyMock.mock(PluginContext.class);
EasyMock.expect(pluginContext.getName()).andReturn("pluginContext").once();
PluginMarker pluginMarker1 = PluginMarker.create("id-1", "1");
PluginMarker pluginMarker2 = PluginMarkerAdapter.create("id-2", "2", "name-2");
EasyMock.replay(pluginContext);
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", null, null).get(), "");
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", pluginContext, pluginMarker1).get(), "pluginContext");
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", null, pluginMarker1).get(), "id-1");
Assert.assertEquals(Reflect.on(PluginOperateUtils.class).call("getPluginName", null, pluginMarker2).get(), "name-2");
EasyMock.verify(pluginContext);
}
@Test
public void testUpdateMarker2Online() {
try {
PluginMarker pluginMarker = PluginMarker.create("plugin-1", "1.0");
String pluginJson = "{\"id\": plugin-1,\"name\": \"图表(新特性)\",\"version\": \"8.6.16\"}";
JSONObject object = new JSONObject(pluginJson);
PowerMock.mockStatic(PluginUtils.class);
EasyMock.expect(PluginUtils.getLatestPluginInfo("plugin-1")).andReturn(object).once();
EasyMock.expect(PluginUtils.getLatestPluginInfo("plugin-1")).andThrow(new NullPointerException()).once();
PowerMock.replayAll();
PluginMarker marker1 = PluginOperateUtils.updateMarker2Online(pluginMarker);
PluginMarker marker2 = PluginOperateUtils.updateMarker2Online(pluginMarker);
Assert.assertTrue(marker1 instanceof PluginMarkerAdapter);
Assert.assertEquals(marker1.getPluginID(), "plugin-1");
Assert.assertEquals(marker1.getVersion(), "1.0");
Assert.assertEquals(((PluginMarkerAdapter) marker1).getPluginName(), "图表(新特性)");
Assert.assertEquals(marker2, pluginMarker);
PowerMock.verifyAll();
} catch (Exception e) {
Assert.fail();
}
}
@Test
public void testUpdatePluginOnline() {
try {
PluginMarker pluginMarker = PluginMarker.create("plugin-1", "1.0");
String pluginJson = "{\"id\": plugin-1,\"name\": \"图表(新特性)\",\"version\": \"8.6.16\"}";
JSONObject object = new JSONObject(pluginJson);
PowerMock.mockStatic(PluginUtils.class);
EasyMock.expect(PluginUtils.getLatestPluginInfo("plugin-1")).andReturn(object).once();
EasyMock.expect(PluginUtils.getInstalledPluginMarkerByID("plugin-1")).andReturn(pluginMarker).once();
PowerMock.replayAll();
PluginOperateUtils.updatePluginOnline(pluginMarker, null);
PowerMock.verifyAll();
} catch (Exception e) {
Assert.fail();
}
}
}

23
designer-base/src/test/java/com/fr/design/extra/PluginUtilsTest.java

@ -0,0 +1,23 @@
package com.fr.design.extra;
import com.fr.invoke.Reflect;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/12/18
*/
public class PluginUtilsTest {
@Test
public void testIsCompatibleCurrentEnv() {
Assert.assertFalse(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "~9.0").get());
Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "9.0").get());
Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "9~").get());
Assert.assertTrue(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "10").get());
Assert.assertFalse(Reflect.on(PluginUtils.class).call("isCompatibleCurrentEnv", "11").get());
}
}

170
designer-chart/src/main/java/com/fr/van/chart/map/VanChartMapSeriesPane.java

@ -37,6 +37,7 @@ import com.fr.van.chart.designer.component.marker.VanChartImageMarkerPane;
import com.fr.van.chart.designer.other.VanChartInteractivePane; import com.fr.van.chart.designer.other.VanChartInteractivePane;
import com.fr.van.chart.designer.style.series.VanChartColorValueSeriesPane; import com.fr.van.chart.designer.style.series.VanChartColorValueSeriesPane;
import com.fr.van.chart.designer.style.series.VanChartEffectPane; import com.fr.van.chart.designer.style.series.VanChartEffectPane;
import com.fr.van.chart.map.designer.style.series.VanChartMapAnchorMarkerPane;
import com.fr.van.chart.map.designer.style.series.VanChartMapScatterMarkerPane; import com.fr.van.chart.map.designer.style.series.VanChartMapScatterMarkerPane;
import com.fr.van.chart.map.line.VanChartCurvePane; import com.fr.van.chart.map.line.VanChartCurvePane;
import com.fr.van.chart.map.line.VanChartLineMapEffectPane; import com.fr.van.chart.map.line.VanChartLineMapEffectPane;
@ -61,16 +62,24 @@ import java.awt.event.ItemListener;
* 地图-系列界面 * 地图-系列界面
*/ */
public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane { public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
private static final String AREA_STRING = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Region"); private static final String AREA_STRING = Toolkit.i18nText("Fine-Design_Chart_Region");
private static final String POINT_STRING = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Point"); private static final String POINT_STRING = Toolkit.i18nText("Fine-Design_Chart_Point");
private static final String LINE_STRING = com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Flow"); private static final String LINE_STRING = Toolkit.i18nText("Fine-Design_Chart_Flow");
private static final String[] MARKER_TYPES = new String[]{MapMarkerType.DEFAULT.toLocalString(), private static final String[] MARKER_TYPES = new String[]{MapMarkerType.ANCHOR.toLocalString(),
MapMarkerType.COMMON.toLocalString(), MapMarkerType.BUBBLE.toLocalString(), MapMarkerType.IMAGE.toLocalString()}; MapMarkerType.COMMON.toLocalString(), MapMarkerType.BUBBLE.toLocalString(), MapMarkerType.IMAGE.toLocalString()};
private static final String[] LARGE_MARKER_TYPES = new String[]{MapMarkerType.DEFAULT.toLocalString(), private static final String[] LARGE_MARKER_TYPES = new String[]{MapMarkerType.ANCHOR.toLocalString(),
MapMarkerType.COMMON.toLocalString(), MapMarkerType.BUBBLE.toLocalString()}; MapMarkerType.COMMON.toLocalString(), MapMarkerType.BUBBLE.toLocalString()};
private static final String[] COMPATIBLE_MARKER_TYPES = new String[]{MapMarkerType.DEFAULT.toLocalString(),
MapMarkerType.ANCHOR.toLocalString(), MapMarkerType.COMMON.toLocalString(),
MapMarkerType.BUBBLE.toLocalString(), MapMarkerType.IMAGE.toLocalString()};
private static final String[] COMPATIBLE_LARGE_MARKER_TYPES = new String[]{MapMarkerType.DEFAULT.toLocalString(),
MapMarkerType.ANCHOR.toLocalString(), MapMarkerType.COMMON.toLocalString(),
MapMarkerType.BUBBLE.toLocalString()};
//custom //custom
private UIButtonGroup<Integer> areaPointAndLineGroup; private UIButtonGroup<Integer> areaPointAndLineGroup;
@ -85,9 +94,15 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
//point //point
private UIComboBox markerTypeCom; private UIComboBox markerTypeCom;
private VanChartMapAnchorMarkerPane anchorMarkerPane;
private VanChartMapScatterMarkerPane commonMarkerPane; private VanChartMapScatterMarkerPane commonMarkerPane;
private VanChartBubblePane bubblePane; private VanChartBubblePane bubblePane;
private VanChartImageMarkerPane imageMarkerPane; private VanChartImageMarkerPane imageMarkerPane;
private CardLayout markerTypeLayout;
private JPanel markerContentPane;
private UINumberDragPane pointAlphaPane; private UINumberDragPane pointAlphaPane;
private VanChartEffectPane pointEffectPane; private VanChartEffectPane pointEffectPane;
@ -147,7 +162,7 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
checkLineMapLarge(); checkLineMapLarge();
} }
}); });
JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Large_Model"), lineMapLargeDataModelGroup); JPanel panel = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Large_Model"), lineMapLargeDataModelGroup);
return createLargeDataModelPane(panel); return createLargeDataModelPane(panel);
} }
@ -162,14 +177,11 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
if (pointEffectPane != null) { if (pointEffectPane != null) {
GUICoreUtils.setEnabled(pointEffectPane, !largeModel); GUICoreUtils.setEnabled(pointEffectPane, !largeModel);
} }
if (markerTypeCom != null) {
Object selectedItem = markerTypeCom.getSelectedItem(); VanChartMapPlot mapPlot = (VanChartMapPlot) plot;
markerTypeCom.setModel(new DefaultComboBoxModel(largeModel ? LARGE_MARKER_TYPES : MARKER_TYPES)); refreshMarkerComboboxModel(mapPlot);
if (ComparatorUtils.equals(MapMarkerType.IMAGE.toLocalString(), selectedItem) && largeModel) { if (largeModel) {
markerTypeCom.setSelectedItem(MapMarkerType.COMMON.toLocalString()); checkLargeModelPlotSelectedItem(mapPlot);
} else {
markerTypeCom.setSelectedItem(selectedItem);
}
} }
} }
@ -182,6 +194,56 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
} }
} }
private void checkLargeModelPlotSelectedItem(VanChartMapPlot plot) {
String selected = plot.getMapMarkerType().toLocalString();
if (ComparatorUtils.equals(MapMarkerType.IMAGE.toLocalString(), selected)) {
markerTypeCom.setSelectedItem(MapMarkerType.COMMON.toLocalString());
} else {
markerTypeCom.setSelectedItem(selected);
}
}
private boolean shouldRefreshComboboxModel(VanChartMapPlot plot) {
if (markerTypeCom == null) {
return false;
}
MapMarkerType selectedType = plot.getMapMarkerType();
DefaultComboBoxModel model = (DefaultComboBoxModel) markerTypeCom.getModel();
if (selectedType == MapMarkerType.DEFAULT) {
return model.getIndexOf(MapMarkerType.DEFAULT.toLocalString()) < 0;
}
return model.getIndexOf(MapMarkerType.DEFAULT.toLocalString()) > -1;
}
private void refreshMarkerComboboxModel(VanChartMapPlot plot) {
if (largeModel(plot)) {
if (plot.getMapMarkerType() == MapMarkerType.DEFAULT) {
markerTypeCom.setModel(new DefaultComboBoxModel<>(COMPATIBLE_LARGE_MARKER_TYPES));
} else {
markerTypeCom.setModel(new DefaultComboBoxModel<>(LARGE_MARKER_TYPES));
}
} else {
if (plot.getMapMarkerType() == MapMarkerType.DEFAULT) {
markerTypeCom.setModel(new DefaultComboBoxModel<>(COMPATIBLE_MARKER_TYPES));
} else {
markerTypeCom.setModel(new DefaultComboBoxModel<>(MARKER_TYPES));
}
}
String selected = plot.getMapMarkerType().toLocalString();
markerTypeCom.setSelectedItem(selected);
if (markerTypeLayout != null && markerContentPane != null) {
markerTypeLayout.show(markerContentPane, selected);
}
}
@Override @Override
protected JPanel getContentPane(boolean custom) { protected JPanel getContentPane(boolean custom) {
JPanel panel = new JPanel(new BorderLayout()); JPanel panel = new JPanel(new BorderLayout());
@ -272,7 +334,7 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
Component[][] components = new Component[][]{ Component[][] components = new Component[][]{
new Component[]{getColorPane(MapType.AREA)}, new Component[]{getColorPane(MapType.AREA)},
new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Border"), borderWithAlphaPane)}, new Component[]{TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Border"), borderWithAlphaPane)},
}; };
return TableLayoutHelper.createTableLayoutPane(components, row, col); return TableLayoutHelper.createTableLayoutPane(components, row, col);
@ -357,28 +419,29 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
private Component createCurvePane() { private Component createCurvePane() {
curvePane = new VanChartCurvePane(); curvePane = new VanChartCurvePane();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Curve"), curvePane); return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Curve"), curvePane);
} }
private Component createAnimationPane() { private Component createAnimationPane() {
lineMapEffectPane = new VanChartLineMapEffectPane(); lineMapEffectPane = new VanChartLineMapEffectPane();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Animation"), lineMapEffectPane); return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Animation"), lineMapEffectPane);
} }
//不透明度 //不透明度
private JPanel createPointAlphaPane() { private JPanel createPointAlphaPane() {
pointAlphaPane = new UINumberDragPane(0, 100); pointAlphaPane = new UINumberDragPane(0, 100);
return TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Alpha"), pointAlphaPane); return TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Report_Alpha"), pointAlphaPane);
} }
private JPanel createPointEffectPane() { private JPanel createPointEffectPane() {
pointEffectPane = new VanChartEffectPane(); pointEffectPane = new VanChartEffectPane();
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Animation"), pointEffectPane); return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Animation"), pointEffectPane);
} }
private JPanel createMarkerComPane() { private JPanel createMarkerComPane() {
markerTypeCom = new UIComboBox(MARKER_TYPES); markerTypeCom = new UIComboBox(COMPATIBLE_MARKER_TYPES);
anchorMarkerPane = new VanChartMapAnchorMarkerPane();
commonMarkerPane = new VanChartMapScatterMarkerPane(); commonMarkerPane = new VanChartMapScatterMarkerPane();
commonMarkerPane.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER); commonMarkerPane.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER);
bubblePane = new VanChartBubblePane() { bubblePane = new VanChartBubblePane() {
@ -396,31 +459,34 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
}; };
imageMarkerPane = new VanChartImageMarkerPane(); imageMarkerPane = new VanChartImageMarkerPane();
final JPanel[] panes = new JPanel[]{new JPanel(), commonMarkerPane, bubblePane, imageMarkerPane}; final JPanel[] panes = new JPanel[]{new JPanel(), anchorMarkerPane, commonMarkerPane, bubblePane, imageMarkerPane};
final CardLayout cardLayout = new CardLayout();
final JPanel cardPane = new JPanel(cardLayout) { markerTypeLayout = new CardLayout();
markerContentPane = new JPanel(markerTypeLayout) {
@Override @Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return panes[markerTypeCom.getSelectedIndex()].getPreferredSize(); int index = MapMarkerType.parse((String) markerTypeCom.getSelectedItem()).ordinal();
return panes[index].getPreferredSize();
} }
}; };
for (int i = 0, len = MARKER_TYPES.length; i < len; i++) { for (int i = 0, len = COMPATIBLE_MARKER_TYPES.length; i < len; i++) {
cardPane.add(panes[i], MARKER_TYPES[i]); markerContentPane.add(panes[i], COMPATIBLE_MARKER_TYPES[i]);
} }
markerTypeCom.addItemListener(new ItemListener() { markerTypeCom.addItemListener(new ItemListener() {
@Override @Override
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
cardLayout.show(cardPane, MARKER_TYPES[markerTypeCom.getSelectedIndex()]); markerTypeLayout.show(markerContentPane, (String) markerTypeCom.getSelectedItem());
} }
}); });
JPanel northPane = TableLayout4VanChartHelper.createGapTableLayoutPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Point_Style"), markerTypeCom); JPanel northPane = TableLayout4VanChartHelper.createGapTableLayoutPane(Toolkit.i18nText("Fine-Design_Chart_Point_Style"), markerTypeCom);
JPanel markerPane = new JPanel(new BorderLayout(0, 6)); JPanel markerPane = new JPanel(new BorderLayout(0, 6));
markerPane.add(northPane, BorderLayout.NORTH); markerPane.add(northPane, BorderLayout.NORTH);
markerPane.add(cardPane, BorderLayout.CENTER); markerPane.add(markerContentPane, BorderLayout.CENTER);
return TableLayout4VanChartHelper.createExpandablePaneWithTitle(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Chart_Marker"), markerPane); return TableLayout4VanChartHelper.createExpandablePaneWithTitle(Toolkit.i18nText("Fine-Design_Chart_Marker"), markerPane);
} }
private JPanel createCustomPane(Plot plot) { private JPanel createCustomPane(Plot plot) {
@ -500,9 +566,16 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
} }
public void populateBean(Plot plot) { public void populateBean(Plot plot) {
if (plot != null && plot instanceof VanChartMapPlot) { if (plot instanceof VanChartMapPlot) {
VanChartMapPlot mapPlot = (VanChartMapPlot) plot;
if (markerTypeCom != null) { if (markerTypeCom != null) {
markerTypeCom.setSelectedItem(((VanChartMapPlot) plot).getMapMarkerType().toLocalString());
if (shouldRefreshComboboxModel(mapPlot)) {
refreshMarkerComboboxModel(mapPlot);
}
markerTypeCom.setSelectedItem(mapPlot.getMapMarkerType().toLocalString());
} }
if (nullValueColorBox != null) { if (nullValueColorBox != null) {
//TODO Bjorn 地图空值背景自动 //TODO Bjorn 地图空值背景自动
@ -513,29 +586,35 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
} }
nullValueColorBox.setSelectObject(((VanChartMapPlot) plot).getNullValueColor()); nullValueColorBox.setSelectObject(((VanChartMapPlot) plot).getNullValueColor());
checkNullValueButton();*/ checkNullValueButton();*/
nullValueColorBox.setSelectObject(((VanChartMapPlot) plot).getNullValueColor()); nullValueColorBox.setSelectObject(mapPlot.getNullValueColor());
} }
//大数据模式 恢复用注释。下面3行删除。 //大数据模式 恢复用注释。下面3行删除。
if (lineMapLargeDataModelGroup != null) { if (lineMapLargeDataModelGroup != null) {
lineMapLargeDataModelGroup.setSelectedItem(((VanChartMapPlot) plot).getLineMapDataProcessor()); lineMapLargeDataModelGroup.setSelectedItem(mapPlot.getLineMapDataProcessor());
} }
} }
super.populateBean(plot); super.populateBean(plot);
} }
public void updateBean(Plot plot) { public void updateBean(Plot plot) {
if (plot != null && plot instanceof VanChartMapPlot) { if (plot instanceof VanChartMapPlot) {
VanChartMapPlot mapPlot = (VanChartMapPlot) plot;
if (markerTypeCom != null) { if (markerTypeCom != null) {
((VanChartMapPlot) plot).setMapMarkerType(MapMarkerType.parseInt(markerTypeCom.getSelectedIndex())); mapPlot.setMapMarkerType(MapMarkerType.parse((String) markerTypeCom.getSelectedItem()));
if (shouldRefreshComboboxModel(mapPlot)) {
refreshMarkerComboboxModel(mapPlot);
}
} }
if (nullValueColorBox != null) { if (nullValueColorBox != null) {
//TODO Bjorn 地图空值背景自动 //TODO Bjorn 地图空值背景自动
//((VanChartMapPlot) plot).setAutoNullValue(nullValueAuto.getSelectedIndex() == 0); //((VanChartMapPlot) plot).setAutoNullValue(nullValueAuto.getSelectedIndex() == 0);
((VanChartMapPlot) plot).setNullValueColor(nullValueColorBox.getSelectObject()); mapPlot.setNullValueColor(nullValueColorBox.getSelectObject());
} }
//大数据模式 恢复用注释。下面3行删除。 //大数据模式 恢复用注释。下面3行删除。
if (lineMapLargeDataModelGroup != null) { if (lineMapLargeDataModelGroup != null) {
((VanChartMapPlot) plot).setLineMapDataProcessor(lineMapLargeDataModelGroup.getSelectedItem()); mapPlot.setLineMapDataProcessor(lineMapLargeDataModelGroup.getSelectedItem());
} }
} }
super.updateBean(plot); super.updateBean(plot);
@ -587,6 +666,10 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
} }
VanChartAttrMarker attrMarker = defaultAttr.getExisted(VanChartAttrMarker.class); VanChartAttrMarker attrMarker = defaultAttr.getExisted(VanChartAttrMarker.class);
if (anchorMarkerPane != null) {
anchorMarkerPane.populateBean(attrMarker);
}
if (commonMarkerPane != null) { if (commonMarkerPane != null) {
commonMarkerPane.populateBean(attrMarker); commonMarkerPane.populateBean(attrMarker);
} }
@ -669,11 +752,16 @@ public class VanChartMapSeriesPane extends VanChartColorValueSeriesPane {
VanChartAttrBubble attrBubble = defaultAttr.getExisted(VanChartAttrBubble.class); VanChartAttrBubble attrBubble = defaultAttr.getExisted(VanChartAttrBubble.class);
defaultAttr.remove(attrBubble); defaultAttr.remove(attrBubble);
if (markerTypeCom != null) { if (markerTypeCom != null) {
if (markerTypeCom.getSelectedIndex() == 1) { String selected = (String) markerTypeCom.getSelectedItem();
MapMarkerType markerType = MapMarkerType.parse(selected);
if (markerType == MapMarkerType.ANCHOR) {
defaultAttr.addDataSeriesCondition(anchorMarkerPane.updateBean());
} else if (markerType == MapMarkerType.COMMON) {
defaultAttr.addDataSeriesCondition(commonMarkerPane.updateBean()); defaultAttr.addDataSeriesCondition(commonMarkerPane.updateBean());
} else if (markerTypeCom.getSelectedIndex() == 2) { } else if (markerType == MapMarkerType.BUBBLE) {
defaultAttr.addDataSeriesCondition(bubblePane.updateBean()); defaultAttr.addDataSeriesCondition(bubblePane.updateBean());
} else if (markerTypeCom.getSelectedIndex() == 3) { } else if (markerType == MapMarkerType.IMAGE) {
defaultAttr.addDataSeriesCondition(imageMarkerPane.updateBean()); defaultAttr.addDataSeriesCondition(imageMarkerPane.updateBean());
} }
} }

3
designer-chart/src/main/java/com/fr/van/chart/map/designer/other/VanChartMapConditionAttrContentPane.java

@ -9,6 +9,7 @@ import com.fr.plugin.chart.type.MapType;
import com.fr.van.chart.designer.other.VanChartConditionAttrContentPane; import com.fr.van.chart.designer.other.VanChartConditionAttrContentPane;
import com.fr.van.chart.map.designer.VanMapAreaAndPointGroupPane; import com.fr.van.chart.map.designer.VanMapAreaAndPointGroupPane;
import com.fr.van.chart.map.designer.VanMapAreaPointAndLineGroupPane; import com.fr.van.chart.map.designer.VanMapAreaPointAndLineGroupPane;
import com.fr.van.chart.map.designer.other.condition.pane.VanChartAnchorPointMapConditionPane;
import com.fr.van.chart.map.designer.other.condition.pane.VanChartBubblePointMapConditionPane; import com.fr.van.chart.map.designer.other.condition.pane.VanChartBubblePointMapConditionPane;
import com.fr.van.chart.map.designer.other.condition.pane.VanChartCommonPointMapConditionPane; import com.fr.van.chart.map.designer.other.condition.pane.VanChartCommonPointMapConditionPane;
import com.fr.van.chart.map.designer.other.condition.pane.VanChartDefaultPointMapConditionPane; import com.fr.van.chart.map.designer.other.condition.pane.VanChartDefaultPointMapConditionPane;
@ -99,6 +100,8 @@ public class VanChartMapConditionAttrContentPane extends VanChartConditionAttrCo
private Class<? extends ConditionAttributesPane> getPointMapConditionClassPane(VanChartMapPlot plot) { private Class<? extends ConditionAttributesPane> getPointMapConditionClassPane(VanChartMapPlot plot) {
MapMarkerType mapMarkerType = plot.getMapMarkerType(); MapMarkerType mapMarkerType = plot.getMapMarkerType();
switch (mapMarkerType){ switch (mapMarkerType){
case ANCHOR:
return VanChartAnchorPointMapConditionPane.class;
case COMMON: case COMMON:
return VanChartCommonPointMapConditionPane.class; return VanChartCommonPointMapConditionPane.class;
case BUBBLE: case BUBBLE:

42
designer-chart/src/main/java/com/fr/van/chart/map/designer/other/condition/item/VanChartAnchorMarkerConditionPane.java

@ -0,0 +1,42 @@
package com.fr.van.chart.map.designer.other.condition.item;
import com.fr.chart.base.DataSeriesCondition;
import com.fr.design.condition.ConditionAttributesPane;
import com.fr.design.i18n.Toolkit;
import com.fr.plugin.chart.base.VanChartAttrMarker;
import com.fr.van.chart.designer.other.condition.item.AbstractNormalMultiLineConditionPane;
import com.fr.van.chart.map.designer.style.series.VanChartMapAnchorMarkerPane;
import javax.swing.JPanel;
public class VanChartAnchorMarkerConditionPane extends AbstractNormalMultiLineConditionPane {
private VanChartMapAnchorMarkerPane anchorMarkerPane;
public VanChartAnchorMarkerConditionPane(ConditionAttributesPane conditionAttributesPane) {
super(conditionAttributesPane);
}
protected String getItemLabelString() {
return Toolkit.i18nText("Fine-Design_Chart_Marker");
}
protected JPanel initContentPane() {
anchorMarkerPane = new VanChartMapAnchorMarkerPane();
return anchorMarkerPane;
}
public String nameForPopupMenuItem() {
return Toolkit.i18nText("Fine-Design_Chart_Marker");
}
public void populate(DataSeriesCondition condition) {
if (condition instanceof VanChartAttrMarker) {
anchorMarkerPane.populateBean((VanChartAttrMarker) condition);
}
}
public DataSeriesCondition update() {
return anchorMarkerPane.updateBean();
}
}

26
designer-chart/src/main/java/com/fr/van/chart/map/designer/other/condition/pane/VanChartAnchorPointMapConditionPane.java

@ -0,0 +1,26 @@
package com.fr.van.chart.map.designer.other.condition.pane;
import com.fr.chart.chartattr.Plot;
import com.fr.plugin.chart.attr.EffectHelper;
import com.fr.plugin.chart.base.AttrEffect;
import com.fr.plugin.chart.base.AttrFloatColor;
import com.fr.plugin.chart.base.VanChartAttrMarker;
import com.fr.van.chart.designer.other.condition.item.VanChartEffectConditionPane;
import com.fr.van.chart.designer.other.condition.item.VanChartFloatColorConditionPane;
import com.fr.van.chart.map.designer.other.condition.item.VanChartAnchorMarkerConditionPane;
public class VanChartAnchorPointMapConditionPane extends VanChartMapConditionPane {
public VanChartAnchorPointMapConditionPane(Plot plot) {
super(plot);
}
protected void addDiffAction() {
classPaneMap.put(VanChartAttrMarker.class, new VanChartAnchorMarkerConditionPane(this));
if (addLabelOrEffectAction()) {
addLabelAction();
classPaneMap.put(AttrFloatColor.class, new VanChartFloatColorConditionPane(this));
classPaneMap.put(AttrEffect.class, new VanChartEffectConditionPane(this, EffectHelper.getScatterPlotDefaultEffect()));
}
}
}

64
designer-chart/src/main/java/com/fr/van/chart/map/designer/style/series/VanChartMapAnchorMarkerPane.java

@ -0,0 +1,64 @@
package com.fr.van.chart.map.designer.style.series;
import com.fr.design.beans.BasicBeanPane;
import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.ispinner.UISpinner;
import com.fr.design.i18n.Toolkit;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.plugin.chart.base.VanChartAttrMarker;
import com.fr.plugin.chart.marker.type.MarkerType;
import com.fr.van.chart.designer.TableLayout4VanChartHelper;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Component;
public class VanChartMapAnchorMarkerPane extends BasicBeanPane<VanChartAttrMarker> {
private UISpinner anchorSize;
public VanChartMapAnchorMarkerPane() {
anchorSize = new UISpinner(0, Double.MAX_VALUE, 0.5, 28);
Component[][] components = new Component[][]{
new Component[]{new UILabel(Toolkit.i18nText("Fine-Design_Chart_Size")), anchorSize}
};
double p = TableLayout.PREFERRED;
double f = TableLayout.FILL;
double e = TableLayout4VanChartHelper.SECOND_EDIT_AREA_WIDTH;
double[] row = {p};
double[] col = {f, e};
JPanel content = TableLayoutHelper.createTableLayoutPane(components, row, col);
content.setBorder(TableLayout4VanChartHelper.SECOND_EDIT_AREA_BORDER);
this.setLayout(new BorderLayout());
this.add(content, BorderLayout.CENTER);
}
public void populateBean(VanChartAttrMarker marker) {
if (marker == null) {
marker = new VanChartAttrMarker();
marker.setCommon(false);
marker.setMarkerType(MarkerType.MARKER_AUTO);
}
this.anchorSize.setValue(marker.getAnchorSize());
}
public VanChartAttrMarker updateBean() {
VanChartAttrMarker marker = new VanChartAttrMarker();
marker.setCommon(false);
marker.setMarkerType(MarkerType.MARKER_AUTO);
marker.setAnchorSize(this.anchorSize.getValue());
return marker;
}
protected String title4PopupWindow() {
return "anchorMarker";
}
}

45
designer-form/src/main/java/com/fr/design/mainframe/template/info/JFormProcessInfo.java

@ -10,7 +10,10 @@ import com.fr.form.main.WidgetUtil;
import com.fr.form.ui.AbstractBorderStyleWidget; import com.fr.form.ui.AbstractBorderStyleWidget;
import com.fr.form.ui.BaseChartEditor; import com.fr.form.ui.BaseChartEditor;
import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.CardSwitchButton;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.ElementCaseEditorProvider; import com.fr.form.ui.ElementCaseEditorProvider;
import com.fr.form.ui.LayoutBorderStyle;
import com.fr.form.ui.PaddingMargin;
import com.fr.form.ui.Widget; import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout; import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WLayout; import com.fr.form.ui.container.WLayout;
@ -18,7 +21,6 @@ import com.fr.general.ComparatorUtils;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.report.cell.DefaultTemplateCellElement; import com.fr.report.cell.DefaultTemplateCellElement;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -94,23 +96,40 @@ public class JFormProcessInfo extends TemplateProcessInfo<Form> {
private boolean hasTestECReport() { private boolean hasTestECReport() {
ElementCaseEditorProvider[] elementCaseEditorProviders = this.template.getElementCases(); ElementCaseEditorProvider[] elementCaseEditorProviders = this.template.getElementCases();
for (ElementCaseEditorProvider elementCaseEditorProvider : elementCaseEditorProviders) { for (ElementCaseEditorProvider elementCaseEditorProvider : elementCaseEditorProviders) {
FormElementCaseProvider elementCase = elementCaseEditorProvider.getElementCase(); if (isTestECReport(elementCaseEditorProvider)) {
Iterator it = elementCase.cellIterator();
if (!it.hasNext()) {
return true; return true;
} }
while (it.hasNext()) {
DefaultTemplateCellElement ce = (DefaultTemplateCellElement) it.next();
Object value = ce.getValue();
if (isTestCell(value, ce.getStyle())) {
return true;
}
}
} }
return false; return false;
} }
private boolean isTestECReport(ElementCaseEditorProvider elementCaseEditorProvider) {
FormElementCaseProvider elementCase = elementCaseEditorProvider.getElementCase();
if (!isTestElementCaseEditor((ElementCaseEditor) elementCaseEditorProvider)) {
return false;
}
Iterator it = elementCase.cellIterator();
if (!it.hasNext()) {
return true;
}
while (it.hasNext()) {
DefaultTemplateCellElement ce = (DefaultTemplateCellElement) it.next();
Object value = ce.getValue();
if (!isTestCell(value, ce.getStyle())) {
return false;
}
}
return true;
}
private boolean isTestElementCaseEditor(ElementCaseEditor editor) {
return editor.getToolBars().length == 0 && editor.getListenerSize() == 0
&& ComparatorUtils.equals(editor.getBorderStyle(), new LayoutBorderStyle())
&& ComparatorUtils.equals(editor.getMargin(), new PaddingMargin())
&& editor.getBackground() == null;
}
private boolean hasTestChart() { private boolean hasTestChart() {
final boolean[] hasTestChart = {false}; final boolean[] hasTestChart = {false};
Form.traversalWidget(this.template.getContainer(), new WidgetGather() { Form.traversalWidget(this.template.getContainer(), new WidgetGather() {
@ -226,7 +245,7 @@ public class JFormProcessInfo extends TemplateProcessInfo<Form> {
private void addComponentRemoveInfo(JSONObject jsonObject) { private void addComponentRemoveInfo(JSONObject jsonObject) {
String componentID = jsonObject.getString("componentID"); String componentID = jsonObject.getString("componentID");
if (componentID == null){ if (componentID == null) {
return; return;
} }
JSONObject info = componentProcessInfoMap.get(componentID); JSONObject info = componentProcessInfoMap.get(componentID);

33
designer-form/src/test/java/com/fr/design/mainframe/template/info/JFormProcessInfoTest.java

@ -1,5 +1,6 @@
package com.fr.design.mainframe.template.info; package com.fr.design.mainframe.template.info;
import com.fr.base.background.ColorBackground;
import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.chartattr.ChartCollection;
import com.fr.form.main.Form; import com.fr.form.main.Form;
import com.fr.form.ui.CardSwitchButton; import com.fr.form.ui.CardSwitchButton;
@ -21,6 +22,8 @@ import com.fr.report.worksheet.FormElementCase;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import java.awt.Color;
/** /**
* Created by kerry on 2020-05-08 * Created by kerry on 2020-05-08
*/ */
@ -35,14 +38,36 @@ public class JFormProcessInfoTest {
wFitLayout.addWidget(editor); wFitLayout.addWidget(editor);
form.setContainer(wFitLayout); form.setContainer(wFitLayout);
JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form); JFormProcessInfo jFormProcessInfo = new JFormProcessInfo(form);
boolean result1 = Reflect.on(jFormProcessInfo).call("hasTestECReport").get(); boolean result = Reflect.on(jFormProcessInfo).call("hasTestECReport").get();
Assert.assertTrue(result1); Assert.assertTrue(result);
elementCase.addCellElement(new DefaultTemplateCellElement()); elementCase.addCellElement(new DefaultTemplateCellElement());
boolean result2 = Reflect.on(jFormProcessInfo).call("hasTestECReport").get(); result = Reflect.on(jFormProcessInfo).call("hasTestECReport").get();
Assert.assertTrue(result2); Assert.assertTrue(result);
DefaultTemplateCellElement templateCellElement = new DefaultTemplateCellElement();
templateCellElement.setValue(123);
elementCase.addCellElement(templateCellElement);
result = Reflect.on(jFormProcessInfo).call("hasTestECReport").get();
Assert.assertFalse(result);
elementCase.removeCellElement(templateCellElement);
result = Reflect.on(jFormProcessInfo).call("hasTestECReport").get();
Assert.assertTrue(result);
editor.setBackground(ColorBackground.getInstance(Color.WHITE));
result = Reflect.on(jFormProcessInfo).call("hasTestECReport").get();
Assert.assertFalse(result);
editor.setBackground(null);
result = Reflect.on(jFormProcessInfo).call("hasTestECReport").get();
Assert.assertTrue(result);
} }
@Test @Test
public void testHasTestChart() { public void testHasTestChart() {
Form form = new Form(); Form form = new Form();

3
designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManager.java

@ -11,15 +11,14 @@ import com.fr.design.mainframe.alphafine.search.manager.fun.AlphaFineSearchProvi
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.http.HttpToolbox; import com.fr.general.http.HttpToolbox;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONException;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.plugin.basic.version.Version; import com.fr.plugin.basic.version.Version;
import com.fr.plugin.basic.version.VersionIntervalType;
import com.fr.plugin.basic.version.VersionIntervalFactory; import com.fr.plugin.basic.version.VersionIntervalFactory;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.EncodeConstants; import com.fr.stable.EncodeConstants;
import java.io.IOException;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;

1
designer-realize/src/main/java/com/fr/start/module/DesignerWorkspaceProvider.java

@ -71,6 +71,7 @@ public class DesignerWorkspaceProvider extends Activator {
} catch (Exception e) { } catch (Exception e) {
FineLoggerFactory.getLogger().warn("Check Service Failed"); FineLoggerFactory.getLogger().warn("Check Service Failed");
} }
EnvChangeEntrance.getInstance().pluginErrorRemind(selectEnv);
} }
}); });
} }

25
designer-realize/src/test/java/com.fr/design/mainframe/alphafine/search/manager/impl/PluginSearchManagerTest.java

@ -0,0 +1,25 @@
package com.fr.design.mainframe.alphafine.search.manager.impl;
import com.fr.invoke.Reflect;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Lucian.Chen
* @version 10.0
* Created by Lucian.Chen on 2020/12/17
*/
public class PluginSearchManagerTest {
@Test
public void testIsCompatibleCurrentEnv() {
Assert.assertFalse(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "~9.0").get());
Assert.assertTrue(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "9.0").get());
Assert.assertTrue(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "9~").get());
Assert.assertTrue(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "10").get());
Assert.assertFalse(Reflect.on(PluginSearchManager.class).call("isCompatibleCurrentEnv", "11").get());
}
}
Loading…
Cancel
Save