Browse Source

Merge pull request #4443 in DESIGN/design from feature/10.0 to feature/x

* commit '431c093e2f9fb99fa08fca2fa414ed84d746cc59':
  REPORT-53036 组件复用-合入主版本-下滑出现的复用组件提示,蓝字预期是“复用组件”,现在是“组件复用”
  REPORT-51683 对象/classloader过滤缩略图 剪枝加速查找
  REPORT-52933 [阻止]修改log导出配置目录后,log一直为空
  无JIRA任务 designer打包引用混淆类
  REPORT-53022 本地组件库刷新后的排序问题
research/11.0
superman 4 years ago
parent
commit
c16fba56ae
  1. 27
      designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
  2. 3
      designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java
  3. 3
      designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java
  4. 2
      designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java
  5. 3
      designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java
  6. 1
      designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java
  7. 2
      designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppActivator.java
  8. 12
      designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java
  9. 138
      designer-realize/src/main/java/com/fr/design/mainframe/app/PluginRemote.java

27
designer-base/src/main/java/com/fr/design/DesignerEnvManager.java

@ -15,21 +15,19 @@ 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.design.file.HistoryTemplateListPane; import com.fr.design.file.HistoryTemplateListPane;
import com.fr.design.fun.DesignerPortProvider;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.locale.impl.ProductImproveMark; import com.fr.design.locale.impl.ProductImproveMark;
import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo; import com.fr.design.mainframe.reuse.ComponentReuseNotificationInfo;
import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.mainframe.vcs.VcsConfigManager;
import com.fr.design.notification.SnapChatConfig; import com.fr.design.notification.SnapChatConfig;
import com.fr.design.port.DesignerPortContext; import com.fr.design.port.DesignerPortContext;
import com.fr.design.update.push.DesignerPushUpdateConfigManager;
import com.fr.design.style.color.ColorSelectConfigManager; import com.fr.design.style.color.ColorSelectConfigManager;
import com.fr.design.update.push.DesignerPushUpdateConfigManager;
import com.fr.design.utils.DesignUtils; import com.fr.design.utils.DesignUtils;
import com.fr.design.utils.DesignerPort; import com.fr.design.utils.DesignerPort;
import com.fr.exit.DesignerExiter; import com.fr.exit.DesignerExiter;
import com.fr.file.FILEFactory; import com.fr.file.FILEFactory;
import com.fr.general.ComparatorUtils; import com.fr.general.ComparatorUtils;
import com.fr.general.FRLogFormatter;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.IOUtils; import com.fr.general.IOUtils;
import com.fr.general.SupportLocale; import com.fr.general.SupportLocale;
@ -37,15 +35,14 @@ import com.fr.general.locale.LocaleCenter;
import com.fr.general.locale.LocaleMark; import com.fr.general.locale.LocaleMark;
import com.fr.general.xml.GeneralXMLTools; import com.fr.general.xml.GeneralXMLTools;
import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerFactory;
import com.fr.log.LogHandler;
import com.fr.stable.CommonUtils; import com.fr.stable.CommonUtils;
import com.fr.stable.Constants; import com.fr.stable.Constants;
import com.fr.stable.CoreConstants; import com.fr.stable.CoreConstants;
import com.fr.stable.EnvChangedListener;
import com.fr.stable.ListMap; import com.fr.stable.ListMap;
import com.fr.stable.ProductConstants; import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.bridge.StableFactory;
import com.fr.stable.core.UUID; import com.fr.stable.core.UUID;
import com.fr.stable.project.ProjectConstants; import com.fr.stable.project.ProjectConstants;
import com.fr.stable.xml.XMLPrintWriter; import com.fr.stable.xml.XMLPrintWriter;
@ -53,6 +50,7 @@ import com.fr.stable.xml.XMLReadable;
import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLTools;
import com.fr.stable.xml.XMLWriter; import com.fr.stable.xml.XMLWriter;
import com.fr.stable.xml.XMLableReader; import com.fr.stable.xml.XMLableReader;
import com.fr.third.apache.log4j.FileAppender;
import com.fr.third.org.apache.commons.io.FilenameUtils; import com.fr.third.org.apache.commons.io.FilenameUtils;
import com.fr.workspace.WorkContext; import com.fr.workspace.WorkContext;
import com.fr.workspace.WorkContextCallback; import com.fr.workspace.WorkContextCallback;
@ -79,8 +77,6 @@ import java.util.ListIterator;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
/** /**
* The manager of Designer GUI. * The manager of Designer GUI.
@ -309,14 +305,23 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
calender.setTimeInMillis(System.currentTimeMillis()); calender.setTimeInMillis(System.currentTimeMillis());
String today = calender.get(Calendar.YEAR) + "-" + (calender.get(Calendar.MONTH) + 1) + "-" + calender.get(Calendar.DAY_OF_MONTH); String today = calender.get(Calendar.YEAR) + "-" + (calender.get(Calendar.MONTH) + 1) + "-" + calender.get(Calendar.DAY_OF_MONTH);
String fileName = StableUtils.pathJoin(logLocation, "fr_" + today + "_%g.log"); final String fileName = StableUtils.pathJoin(logLocation, "fr_" + today + "_%g.log");
if (!new File(fileName).exists()) { if (!new File(fileName).exists()) {
StableUtils.makesureFileExist(new File(fileName)); StableUtils.makesureFileExist(new File(fileName));
} }
Handler handler = new FileHandler(fileName, true); LogHandler handler = new LogHandler<FileAppender>() {
final FileAppender appender = new FileAppender(
new com.fr.third.apache.log4j.PatternLayout("%d{HH:mm:ss} %t %p [%c] %m%n"),
fileName
);
@Override
public FileAppender getHandler() {
return appender;
}
};
handler.setFormatter(new FRLogFormatter()); FineLoggerFactory.getLogger().addLogAppender(handler);
FineLoggerFactory.getLogger().addLogHandler(handler);
} catch (SecurityException e) { } catch (SecurityException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e); FineLoggerFactory.getLogger().error(e.getMessage(), e);
} catch (IOException e) { } catch (IOException e) {

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

@ -5,6 +5,8 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
/** /**
* classloader查找过滤器
*
* 过滤无需遍历的jdk class * 过滤无需遍历的jdk class
* *
* @author hades * @author hades
@ -26,6 +28,7 @@ public class ClassFilter implements Filter<String> {
FILTER_SET.add("java.awt.image.BufferedImage"); FILTER_SET.add("java.awt.image.BufferedImage");
FILTER_SET.add("sun.awt.AppContext"); FILTER_SET.add("sun.awt.AppContext");
FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); FILTER_SET.add("com.fr.poly.creator.ECBlockCreator");
FILTER_SET.add("com.fr.form.ui.ElementCaseImage");
} }
@Override @Override

3
designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java

@ -5,6 +5,8 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
/** /**
* 联动修改的类过滤器
*
* @author hades * @author hades
* @version 10.0 * @version 10.0
* Created by hades on 2021/5/31 * Created by hades on 2021/5/31
@ -24,6 +26,7 @@ public class ModClassFilter implements Filter<String> {
FILTER_SET.add("sun.awt.AppContext"); FILTER_SET.add("sun.awt.AppContext");
FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); FILTER_SET.add("com.fr.poly.creator.ECBlockCreator");
FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet"); FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet");
FILTER_SET.add("com.fr.form.ui.ElementCaseImage");
} }
@Override @Override

2
designer-form/src/main/java/com/fr/design/mainframe/ReuseTriggerPointManager.java

@ -177,7 +177,7 @@ public class ReuseTriggerPointManager {
private JPanel createReusePrompt(JForm jForm) { private JPanel createReusePrompt(JForm jForm) {
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane();
jPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse_Try_Prompt")), BorderLayout.WEST); jPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse_Try_Prompt")), BorderLayout.WEST);
UILabel reuseLabel = new UILabel(Toolkit.i18nText("Fine-Design_Component_Reuse")); UILabel reuseLabel = new UILabel(Toolkit.i18nText("Fine-Design_Share_Component"));
reuseLabel.addMouseListener(new MouseListener() { reuseLabel.addMouseListener(new MouseListener() {
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {

3
designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/GroupPane.java

@ -18,6 +18,7 @@ import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.form.share.SharableWidgetProvider; import com.fr.form.share.SharableWidgetProvider;
import com.fr.form.share.group.DefaultShareGroupManager; import com.fr.form.share.group.DefaultShareGroupManager;
import com.fr.form.share.Group; import com.fr.form.share.Group;
import com.fr.form.share.record.ShareWidgetInfoManager;
import com.fr.general.IOUtils; import com.fr.general.IOUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -100,6 +101,8 @@ class GroupPane extends JPanel {
searchByKeyword(keyWord); searchByKeyword(keyWord);
return; return;
} }
ShareWidgetInfoManager.getInstance().checkInstallCompInfo(elCaseBindInfoList);
sortType.sort(elCaseBindInfoList);
reCreateShowPane(elCaseBindInfoList); reCreateShowPane(elCaseBindInfoList);
expendGroup(needExpendGroup); expendGroup(needExpendGroup);
} }

1
designer-form/src/main/java/com/fr/design/mainframe/share/ui/local/LocalWidgetSelectPane.java

@ -73,7 +73,6 @@ public class LocalWidgetSelectPane extends AbstractWidgetSelectPane {
} else { } else {
showEmpty(); showEmpty();
} }
ShareWidgetInfoManager.getInstance().checkInstallCompInfo(providers);
} }
public Group getGroup() { public Group getGroup() {

2
designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppActivator.java

@ -20,6 +20,7 @@ public class DesignerAppActivator extends Activator implements Prepare {
for (App app : appList) { for (App app : appList) {
JTemplateFactory.register(app); JTemplateFactory.register(app);
} }
PluginRemote.getInstance().start();
} }
@Override @Override
@ -29,6 +30,7 @@ public class DesignerAppActivator extends Activator implements Prepare {
for (App app : appList) { for (App app : appList) {
JTemplateFactory.remove(app); JTemplateFactory.remove(app);
} }
PluginRemote.getInstance().stop();
} }
@Override @Override

12
designer-realize/src/main/java/com/fr/design/mainframe/app/DesignerAppUtils.java

@ -6,11 +6,11 @@ import com.fr.design.extra.exe.callback.InstallOnlineCallback;
import com.fr.design.extra.exe.callback.ModifyStatusCallback; import com.fr.design.extra.exe.callback.ModifyStatusCallback;
import com.fr.design.i18n.Toolkit; import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.app.PluginRemote.PluginStatus;
import com.fr.design.ui.util.UIUtil; import com.fr.design.ui.util.UIUtil;
import com.fr.locale.InterProviderFactory; import com.fr.locale.InterProviderFactory;
import com.fr.plugin.context.PluginMarker; import com.fr.plugin.context.PluginMarker;
import com.fr.plugin.context.PluginMarkerAdapter; import com.fr.plugin.context.PluginMarkerAdapter;
import com.fr.plugin.engine.remote.PluginRemoteSync;
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;
@ -130,21 +130,21 @@ public class DesignerAppUtils {
* @param pendingPlugins 待处理列表 * @param pendingPlugins 待处理列表
*/ */
public static void rearrange(Multimap<String, PluginMarkerAdapter> pendingPlugins) { public static void rearrange(Multimap<String, PluginMarkerAdapter> pendingPlugins) {
Map<String, PluginRemoteSync.PluginStatus> pluginRemoteStatusByIdIndex = PluginRemoteSync.getInstance().getPluginRemoteStatusByIdIndex(); Map<String, PluginStatus> pluginRemoteStatus = PluginRemote.getInstance().getPluginRemoteStatus();
Collection<PluginMarkerAdapter> unknownPlugins = pendingPlugins.get(TemplateIOErrorContextHolder.UNKNOWN_PLUGIN); Collection<PluginMarkerAdapter> unknownPlugins = pendingPlugins.get(TemplateIOErrorContextHolder.UNKNOWN_PLUGIN);
Collection<PluginMarkerAdapter> notInstall = pendingPlugins.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN); Collection<PluginMarkerAdapter> notInstall = pendingPlugins.get(TemplateIOErrorContextHolder.NOT_INSTALLED_PLUGIN);
Collection<PluginMarkerAdapter> disable = pendingPlugins.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN); Collection<PluginMarkerAdapter> disable = pendingPlugins.get(TemplateIOErrorContextHolder.DISABLE_PLUGIN);
unknownPlugins.removeIf(adapter -> pluginRemoteStatusByIdIndex.containsKey(adapter.getPluginID())); unknownPlugins.removeIf(adapter -> pluginRemoteStatus.containsKey(adapter.getPluginID()));
// 本地未启用名单不准确添加到一起之后重新分配 // 本地未启用名单不准确添加到一起之后重新分配
notInstall.addAll(disable); notInstall.addAll(disable);
disable.clear(); disable.clear();
// 从所有未安装中过滤远程未启用的,添加到未启用列表 // 从所有未安装中过滤远程未启用的,添加到未启用列表
disable.addAll(notInstall.stream().filter(plugin -> disable.addAll(notInstall.stream().filter(plugin ->
pluginRemoteStatusByIdIndex.containsKey(plugin.getPluginID()) pluginRemoteStatus.containsKey(plugin.getPluginID())
&& !pluginRemoteStatusByIdIndex.get(plugin.getPluginID()).isRunning()) && !pluginRemoteStatus.get(plugin.getPluginID()).isRunning())
.collect(Collectors.toList())); .collect(Collectors.toList()));
// 清理未安装中所有远程安装过的插件(包含启用和未启用) // 清理未安装中所有远程安装过的插件(包含启用和未启用)
notInstall.removeIf(adapter -> pluginRemoteStatusByIdIndex.containsKey(adapter.getPluginID())); notInstall.removeIf(adapter -> pluginRemoteStatus.containsKey(adapter.getPluginID()));
} }
/** /**

138
designer-realize/src/main/java/com/fr/design/mainframe/app/PluginRemote.java

@ -0,0 +1,138 @@
package com.fr.design.mainframe.app;
import com.fr.base.FRContext;
import com.fr.json.JSONArray;
import com.fr.json.JSONException;
import com.fr.json.JSONObject;
import com.fr.log.FineLoggerFactory;
import com.fr.plugin.context.PluginMarker;
import com.fr.stable.StringUtils;
import com.fr.value.AtomicClearableLazyValue;
import com.fr.workspace.WorkContext;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 获取远程插件情况定时刷新
*
* @author vito
* @version 10.0
* Created by vito on 2021/6/1
*/
public class PluginRemote {
private static final PluginRemote INSTANCE = new PluginRemote();
private final AtomicClearableLazyValue<Map<String, PluginStatus>> lazyValue = new AtomicClearableLazyValue<Map<String, PluginStatus>>() {
@NotNull
@Override
protected Map<String, PluginStatus> compute() {
return getRemoteStatus();
}
};
/**
* 时间间隔两分钟
*/
private static final int INTERVAL = 2;
private ScheduledExecutorService executor;
public static PluginRemote getInstance() {
return INSTANCE;
}
/**
* 获取远程插件状态
* @return 远程插件状态
*/
public Map<String, PluginStatus> getPluginRemoteStatus() {
return lazyValue.getValue();
}
private Map<String, PluginStatus> getRemoteStatus() {
JSONArray statusArray = FRContext.getCommonOperator().getPluginStatus();
JSONObject status;
String id;
String version;
boolean running;
Map<String, PluginStatus> statusMap = new HashMap<>();
for (int i = 0; i < statusArray.length(); i++) {
try {
status = statusArray.getJSONObject(i);
id = status.getString("id");
version = status.getString("version");
running = status.getBoolean("running");
if(StringUtils.isBlank(id)){
continue;
}
PluginStatus pluginStatus = PluginStatus.create(id, version, running);
if (pluginStatus != null) {
statusMap.put(id, pluginStatus);
}
} catch (JSONException e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
}
return statusMap;
}
public void start() {
// 远程环境下开始同步插件情况
if (!WorkContext.getCurrent().isLocal()) {
executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
lazyValue.drop();
lazyValue.getValue();
}, 0, INTERVAL, TimeUnit.MINUTES);
}
}
public void stop() {
if (executor != null) {
executor.shutdown();
executor = null;
lazyValue.drop();
}
}
public static class PluginStatus {
private final PluginMarker marker;
private final boolean running;
private PluginStatus(PluginMarker marker, boolean running) {
this.marker = marker;
this.running = running;
}
static PluginStatus create(String id, String version, boolean running) {
PluginMarker marker = PluginMarker.create(id, version);
if (marker != null && marker.valid()) {
return new PluginStatus(marker, running);
}
return null;
}
public PluginMarker getMarker() {
return marker;
}
public boolean isRunning() {
return running;
}
}
}
Loading…
Cancel
Save