From 268b20690ad2e2b793bdd699f808a6d87c0d2fff Mon Sep 17 00:00:00 2001 From: hades Date: Mon, 31 May 2021 11:01:51 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-51683=20=E3=80=9010.0.17=E3=80=91?= =?UTF-8?q?=E6=99=BA=E8=83=BD=E8=81=94=E5=8A=A8=E8=A2=AB=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 6 +++- .../com/fr/design/mod/ContentReplaceUtil.java | 20 +++++++++++ .../fr/design/mod/ContentReplacerCenter.java | 11 ++++-- .../com/fr/design/mod/ModClassFilter.java | 33 +++++++++++++++++ .../VanChartHtmlLabelContentChange.java | 35 +++++++++++++++++++ .../Formula4TableDataNameContentReplacer.java | 6 +++- .../Formula4WidgetNameContentReplacer.java | 6 +++- .../repalce/JavaScriptContentReplacer.java | 7 ++-- .../VanChartHtmlLabelContentReplacer.java | 22 ++++++++++++ .../designer/beans/models/ModelUtil.java | 5 ++- 10 files changed, 140 insertions(+), 11 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/VanChartHtmlLabelContentReplacer.java diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java index a9bdd5115..72ea9bb63 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java @@ -6,10 +6,12 @@ import com.fr.chart.web.ChartHyperRelateFloatLink; import com.fr.design.file.filter.ClassFilter; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; +import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.stable.Filter; import java.util.HashSet; import java.util.Map; import java.util.Set; +import org.jetbrains.annotations.Nullable; /** * 管理所有需要替换内容的对象 @@ -38,10 +40,11 @@ public class ContentObjectManager { set.add(JavaScriptImpl.class.getName()); set.add(ChartHyperRelateCellLink.class.getName()); set.add(ChartHyperRelateFloatLink.class.getName()); + set.add(VanChartHtmlLabel.class.getName()); } public void searchObject(Object ob) { - objectMap = ClassHelper.searchObject(ob, set, ClassFilter.getInstance()); + objectMap = ClassHelper.searchObject(ob, set, ModClassFilter.getInstance()); } public void searchObject(Object ob, Filter filter) { @@ -55,6 +58,7 @@ public class ContentObjectManager { objectMap = null; } + @Nullable public Map> getObjectMap() { return objectMap; } diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java new file mode 100644 index 000000000..218c66fad --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -0,0 +1,20 @@ +package com.fr.design.mod; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/31 + */ +public class ContentReplaceUtil { + + public static final String EQ_STRING = "="; + + public static String replaceContent(String content, String oldName, String newName) { + return content.replaceAll(generateStr(oldName), generateStr(newName)); + } + + private static String generateStr(String str) { + return "\"" + str + "\""; + } + +} diff --git a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java index 5359d87e5..3a18a6ea2 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java @@ -8,6 +8,7 @@ import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; +import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -42,6 +43,9 @@ public class ContentReplacerCenter { EventDispatcher.listen(WidgetNameModifyEvent.INSTANCE, new Listener() { @Override public void on(Event event, ContentChangeItem param) { + if (param.getChangeMap().isEmpty()) { + return; + } items.add(param); } }); @@ -52,7 +56,9 @@ public class ContentReplacerCenter { items.add(param); long start = System.currentTimeMillis(); ContentObjectManager.getInstance().searchObject(param.getObject()); - FineLoggerFactory.getLogger().debug("search object spend {} ", (System.currentTimeMillis() - start)); + FineLoggerFactory.getLogger().debug("search object spend {} ms", (System.currentTimeMillis() - start)); + FineLoggerFactory.getLogger().debug("search result: {}", ContentObjectManager.getInstance().getObjectMap() == null + ? null : ContentObjectManager.getInstance().getObjectMap().keySet()); List itemsCopy = new ArrayList<>(items); items.clear(); onRename(itemsCopy, contentChangeList); @@ -66,6 +72,7 @@ public class ContentReplacerCenter { contentChangeList.add(new ChartHyperRelateFloatLinkContentChange()); contentChangeList.add(new FormulaContentChange()); contentChangeList.add(new JavaScriptContentChange()); + contentChangeList.add(new VanChartHtmlLabelContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { @@ -82,7 +89,7 @@ public class ContentReplacerCenter { } } objectMap.clear(); - FineLoggerFactory.getLogger().debug("replace all content spend {} ", (System.currentTimeMillis() - start)); + FineLoggerFactory.getLogger().debug("replace all content spend {} ms", (System.currentTimeMillis() - start)); } } diff --git a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java new file mode 100644 index 000000000..4bf02549a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java @@ -0,0 +1,33 @@ +package com.fr.design.mod; + +import com.fr.stable.Filter; +import java.util.HashSet; +import java.util.Set; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/31 + */ +public class ModClassFilter implements Filter { + + private static final Set FILTER_SET = new HashSet<>(); + + private static final Filter INSTANCE = new ModClassFilter(); + + public static Filter getInstance() { + return INSTANCE; + } + + static { + FILTER_SET.add("java.awt.image.BufferedImage"); + FILTER_SET.add("sun.awt.AppContext"); + FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); + FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet"); + } + + @Override + public boolean accept(String s) { + return FILTER_SET.contains(s); + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java new file mode 100644 index 000000000..a51fd732d --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/VanChartHtmlLabelContentChange.java @@ -0,0 +1,35 @@ +package com.fr.design.mod.impl.change; + +import com.fr.design.mod.ContentChange; +import com.fr.design.mod.ContentReplacer; +import com.fr.design.mod.bean.ChangeItem; +import com.fr.design.mod.impl.repalce.VanChartHtmlLabelContentReplacer; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/5/31 + */ +public class VanChartHtmlLabelContentChange implements ContentChange { + + private final Map> map; + + public VanChartHtmlLabelContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new VanChartHtmlLabelContentReplacer()); + map.put(ChangeItem.TABLE_DATA_NAME, new VanChartHtmlLabelContentReplacer()); + } + + @Override + public String type() { + return VanChartHtmlLabel.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java index c08507229..8f4dafa2a 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java @@ -1,7 +1,9 @@ package com.fr.design.mod.impl.repalce; import com.fr.base.Formula; +import com.fr.design.mod.ContentReplaceUtil; import com.fr.design.mod.ContentReplacer; +import com.fr.parser.FRFormulaTransformer; /** * @author hades @@ -12,7 +14,9 @@ public class Formula4TableDataNameContentReplacer implements ContentReplacer { + + @Override + public void replace(VanChartHtmlLabel vanChartHtmlLabel, String oldName, String newName) { + if (StringUtils.isNotEmpty(vanChartHtmlLabel.getCustomText())) { + vanChartHtmlLabel.setCustomText( + ContentReplaceUtil.replaceContent(vanChartHtmlLabel.getCustomText(), oldName, newName)); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java index 062ec7480..10e672f58 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/ModelUtil.java @@ -34,7 +34,10 @@ abstract class ModelUtil { Map renameMap = new HashMap<>(); for (XCreator target : nameRelatedCreators) { String uniqueName = uniqueName(form, target, duplicated); - renameMap.put(target.toData().getWidgetName(), uniqueName); + String oldName = target.toData().getWidgetName(); + if (StringUtils.isNotEmpty(oldName)) { + renameMap.put(oldName, uniqueName); + } target.resetCreatorName(uniqueName); } EventDispatcher.fire(WidgetNameModifyEvent.INSTANCE, new ContentChangeItem(renameMap, xCreator.toData(), ChangeItem.WIDGET_NAME));