From 0e1151ae8c94153b27fd04dd4feeb84ecba9da08 Mon Sep 17 00:00:00 2001 From: xiqiu Date: Tue, 1 Jun 2021 11:26:19 +0800 Subject: [PATCH 1/7] =?UTF-8?q?REPORT-52987=20=20=20=E4=BF=AE=E5=A4=8Ddata?= =?UTF-8?q?operator=E7=9A=84=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98;=E9=A1=BA?= =?UTF-8?q?=E5=B8=A6=E4=BF=AE=E5=A4=8D=E5=8F=91=E7=8E=B0=E7=9A=84=E5=BC=95?= =?UTF-8?q?=E7=94=A8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connect/DatabaseConnectionPane.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java index 209f4ab7da..18f4d94405 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java @@ -6,7 +6,7 @@ package com.fr.design.data.datapane.connect; import com.fr.data.impl.Connection; import com.fr.data.impl.JDBCDatabaseConnection; import com.fr.data.impl.JNDIDatabaseConnection; -import com.fr.data.operator.DataOperator; +import com.fr.data.operator.DataOperatorProvider; import com.fr.data.solution.ExceptionSolutionSelector; import com.fr.data.solution.entity.DriverPage; import com.fr.data.solution.processor.ClassNotFoundExceptionSolutionProcessor; @@ -22,9 +22,12 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.scrollruler.ModLineBorder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.log.FineLoggerFactory; +import com.fr.rpc.ExceptionHandler; +import com.fr.rpc.RPCInvokerExceptionInfo; import com.fr.stable.ArrayUtils; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; +import com.fr.workspace.WorkContext; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -93,7 +96,26 @@ public abstract class DatabaseConnectionPane Date: Tue, 1 Jun 2021 11:46:34 +0800 Subject: [PATCH 2/7] =?UTF-8?q?REPORT-51683=20=E5=AF=B9=E8=B1=A1/classload?= =?UTF-8?q?er=E8=BF=87=E6=BB=A4=E7=BC=A9=E7=95=A5=E5=9B=BE=20=E5=89=AA?= =?UTF-8?q?=E6=9E=9D=E5=8A=A0=E9=80=9F=E6=9F=A5=E6=89=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/file/filter/ClassFilter.java | 3 +++ .../src/main/java/com/fr/design/mod/ModClassFilter.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java b/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java index c04d806345..6c998f4ef1 100644 --- a/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java +++ b/designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java @@ -5,6 +5,8 @@ import java.util.HashSet; import java.util.Set; /** + * classloader查找过滤器 + * * 过滤无需遍历的jdk class * * @author hades @@ -26,6 +28,7 @@ public class ClassFilter implements Filter { FILTER_SET.add("java.awt.image.BufferedImage"); FILTER_SET.add("sun.awt.AppContext"); FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); + FILTER_SET.add("com.fr.form.ui.ElementCaseImage"); } @Override 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 index 4bf02549a4..7caa88ac49 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java +++ b/designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java @@ -5,6 +5,8 @@ import java.util.HashSet; import java.util.Set; /** + * 联动修改的类过滤器 + * * @author hades * @version 10.0 * Created by hades on 2021/5/31 @@ -24,6 +26,7 @@ public class ModClassFilter implements Filter { FILTER_SET.add("sun.awt.AppContext"); FILTER_SET.add("com.fr.poly.creator.ECBlockCreator"); FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet"); + FILTER_SET.add("com.fr.form.ui.ElementCaseImage"); } @Override From e1ba505b503bfabcec5e47eb1ebb3078f0531cde Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 10:37:05 +0800 Subject: [PATCH 3/7] =?UTF-8?q?REPORT-53156=20=E3=80=90=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96=E5=85=A5?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=8E=A7=E4=BB=B6=E5=BC=95=E7=94=A8=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E5=9C=B0=E6=96=B9?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=8F=91=E7=94=9F=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 3 +- .../fr/design/mod/ContentReplacerCenter.java | 2 ++ .../change/NameTableDataContentChange.java | 34 +++++++++++++++++++ .../repalce/NameTableDataContentReplacer.java | 17 ++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.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 72ea9bb637..4d8f0cec1a 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 @@ -3,7 +3,7 @@ package com.fr.design.mod; import com.fr.base.Formula; import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; -import com.fr.design.file.filter.ClassFilter; +import com.fr.data.impl.NameTableData; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; @@ -41,6 +41,7 @@ public class ContentObjectManager { set.add(ChartHyperRelateCellLink.class.getName()); set.add(ChartHyperRelateFloatLink.class.getName()); set.add(VanChartHtmlLabel.class.getName()); + set.add(NameTableData.class.getName()); } public void searchObject(Object ob) { 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 3a18a6ea20..de690e623c 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.NameTableDataContentChange; import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; @@ -73,6 +74,7 @@ public class ContentReplacerCenter { contentChangeList.add(new FormulaContentChange()); contentChangeList.add(new JavaScriptContentChange()); contentChangeList.add(new VanChartHtmlLabelContentChange()); + contentChangeList.add(new NameTableDataContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java new file mode 100644 index 0000000000..a0a036cdfc --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java @@ -0,0 +1,34 @@ +package com.fr.design.mod.impl.change; + +import com.fr.data.impl.NameTableData; +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.NameTableDataContentReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class NameTableDataContentChange implements ContentChange { + + private final Map> map; + + public NameTableDataContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.TABLE_DATA_NAME, new NameTableDataContentReplacer()); + } + + @Override + public String type() { + return NameTableData.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java new file mode 100644 index 0000000000..eae4344d7e --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java @@ -0,0 +1,17 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.data.impl.NameTableData; +import com.fr.design.mod.ContentReplacer; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class NameTableDataContentReplacer implements ContentReplacer { + + @Override + public void replace(NameTableData nameTableData, String oldName, String newName) { + nameTableData.rename(oldName, newName); + } +} From a83d2616adcabee00396391e1003d4cbb25644e8 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 10:39:35 +0800 Subject: [PATCH 4/7] =?UTF-8?q?REPORT-53157=20=E3=80=90=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96=E5=85=A5?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=8D=95=E5=85=83=E6=A0=BC=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E5=9C=B0?= =?UTF-8?q?=E6=96=B9=E6=9C=AA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 4 +++ .../fr/design/mod/ContentReplacerCenter.java | 4 +++ .../impl/change/DSColumnContentChange.java | 34 +++++++++++++++++++ .../change/SimpleDSColumnContentChange.java | 34 +++++++++++++++++++ .../impl/repalce/DSColumnContentReplacer.java | 20 +++++++++++ .../SimpleDSColumnContentReplacer.java | 20 +++++++++++ .../mainframe/FormCreatorDropTarget.java | 7 ++++ 7 files changed, 123 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.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 4d8f0cec1a..bde02bfc26 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 @@ -3,10 +3,12 @@ package com.fr.design.mod; import com.fr.base.Formula; import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; +import com.fr.data.SimpleDSColumn; import com.fr.data.impl.NameTableData; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.Filter; import java.util.HashSet; import java.util.Map; @@ -42,6 +44,8 @@ public class ContentObjectManager { set.add(ChartHyperRelateFloatLink.class.getName()); set.add(VanChartHtmlLabel.class.getName()); set.add(NameTableData.class.getName()); + set.add(SimpleDSColumn.class.getName()); + set.add(DSColumn.class.getName()); } public void searchObject(Object ob) { 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 de690e623c..c8e459354b 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 @@ -6,9 +6,11 @@ import com.fr.design.mod.event.TableDataModifyEvent; import com.fr.design.mod.event.WidgetNameModifyEvent; import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; +import com.fr.design.mod.impl.change.DSColumnContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; import com.fr.design.mod.impl.change.NameTableDataContentChange; +import com.fr.design.mod.impl.change.SimpleDSColumnContentChange; import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; @@ -75,6 +77,8 @@ public class ContentReplacerCenter { contentChangeList.add(new JavaScriptContentChange()); contentChangeList.add(new VanChartHtmlLabelContentChange()); contentChangeList.add(new NameTableDataContentChange()); + contentChangeList.add(new SimpleDSColumnContentChange()); + contentChangeList.add(new DSColumnContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java new file mode 100644 index 0000000000..be6e6e4ecb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java @@ -0,0 +1,34 @@ +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.DSColumnContentReplacer; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class DSColumnContentChange implements ContentChange { + + private final Map> map; + + public DSColumnContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.TABLE_DATA_NAME, new DSColumnContentReplacer()); + } + + @Override + public String type() { + return DSColumn.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java new file mode 100644 index 0000000000..b85eb3a2fb --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java @@ -0,0 +1,34 @@ +package com.fr.design.mod.impl.change; + +import com.fr.data.SimpleDSColumn; +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.SimpleDSColumnContentReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class SimpleDSColumnContentChange implements ContentChange { + + private Map> map; + + public SimpleDSColumnContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.TABLE_DATA_NAME, new SimpleDSColumnContentReplacer()); + } + + @Override + public String type() { + return SimpleDSColumn.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java new file mode 100644 index 0000000000..a1c131f6b5 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java @@ -0,0 +1,20 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplacer; +import com.fr.general.ComparatorUtils; +import com.fr.report.cell.cellattr.core.group.DSColumn; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class DSColumnContentReplacer implements ContentReplacer { + + @Override + public void replace(DSColumn dsColumn, String oldName, String newName) { + if (ComparatorUtils.equals(dsColumn.getDSName(), oldName)) { + dsColumn.setDSName(newName); + } + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java new file mode 100644 index 0000000000..0aa9fdd3d6 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java @@ -0,0 +1,20 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.data.SimpleDSColumn; +import com.fr.design.mod.ContentReplacer; +import com.fr.general.ComparatorUtils; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class SimpleDSColumnContentReplacer implements ContentReplacer { + + @Override + public void replace(SimpleDSColumn simpleDSColumn, String oldName, String newName) { + if (ComparatorUtils.equals(simpleDSColumn.getDsName(), oldName)) { + simpleDSColumn.setDsName(newName); + } + } +} diff --git a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java index 1b89400645..01a46d25b7 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -5,6 +5,7 @@ import com.fr.base.chart.BaseChartCollection; import com.fr.chart.chartattr.ChartCollection; import com.fr.chartx.attr.ChartProvider; import com.fr.design.DesignModelAdapter; +import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.TableDataTreePane; import com.fr.design.designer.beans.AdapterBus; import com.fr.design.designer.beans.HoverPainter; @@ -34,6 +35,7 @@ import com.fr.stable.Constants; import com.fr.stable.StringUtils; import java.util.Collections; +import java.util.HashMap; import javax.swing.BorderFactory; import javax.swing.JWindow; import java.util.List; @@ -112,8 +114,13 @@ public class FormCreatorDropTarget extends DropTarget { tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true); //合并数据集之后,可能会有数据集名称变化,做一下联动 //共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集 + Map map = new HashMap<>(); for (Map.Entry entry : tdNameMap.entrySet()) { designer.getTarget().renameTableData(widget, entry.getKey(), entry.getValue()); + map.put(entry.getKey(), entry.getValue()); + } + if (!map.isEmpty()) { + DesignTableDataManager.fireDSChanged(map); } } EventDispatcher.fire(TableDataModifyEvent.INSTANCE, new ContentChangeItem(tdNameMap, widget, ChangeItem.TABLE_DATA_NAME)); From d35c06b20b1a9f34fecad57c9322a7864b101251 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 16:37:12 +0800 Subject: [PATCH 5/7] =?UTF-8?q?REPORT-53159=20=E3=80=90=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96=E5=85=A5?= =?UTF-8?q?=E6=97=B6=EF=BC=8Ctab=E4=B8=AD=E7=9A=84js=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=8F=AA=E4=BC=9A?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/mod/ContentReplaceUtil.java | 22 ++++++- .../fr/design/mod/ContentReplaceUtilTest.java | 65 +++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java 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 index 218c66fad2..708b0004ef 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -1,5 +1,8 @@ package com.fr.design.mod; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * @author hades * @version 10.0 @@ -10,7 +13,24 @@ 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)); + String oldNameUpper = oldName.toUpperCase(); + Matcher m = Pattern.compile(oldName + "|" + oldNameUpper).matcher(content); + StringBuilder sb = new StringBuilder(); + int last = 0; + while (m.find()) { + sb.append(content, last, m.start()); + if (oldNameUpper.equals(m.group())) { + // 处理大写情况 + sb.append(newName.toUpperCase()); + } else { + // 默认情况 + sb.append(newName); + } + last = m.end(); + } + sb.append(content.substring(last)); + + return sb.toString(); } private static String generateStr(String str) { diff --git a/designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java b/designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java new file mode 100644 index 0000000000..cf67c69b64 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java @@ -0,0 +1,65 @@ +package com.fr.design.mod; + +import junit.framework.TestCase; +import org.junit.Assert; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class ContentReplaceUtilTest extends TestCase { + + public void testReplaceContent() { + String text = "setTimeout(function() {\n" + + "\n" + + "\t$(\"div[widgetname=DATEEDITOR0]\").css({\n" + + "\n" + + "\t\t'opacity': '0.3'\n" + + "\n" + + "\t});\n" + + "\n" + + "}, 50);\n" + + "var a = \"dateEditor0\""; + String oldName = "dateEditor0"; + String newName = "dateEditor00"; + String result = "setTimeout(function() {\n" + + "\n" + + "\t$(\"div[widgetname=DATEEDITOR00]\").css({\n" + + "\n" + + "\t\t'opacity': '0.3'\n" + + "\n" + + "\t});\n" + + "\n" + + "}, 50);\n" + + "var a = \"dateEditor00\""; + Assert.assertEquals(result, ContentReplaceUtil.replaceContent(text, oldName, newName)); + + String text1 = "setInterval(function() {\n" + + "\t//获取当前body中tab的索引位置\n" + + " var aa = _g().getWidgetByName(\"tabpane00\").getShowIndex();\n" + + " //根据tab索引轮播tab块,索引从0开始,到最后一个tab块后跳转到第一个\n" + + "\tif(aa == TAB轮播-测试-2) {\n" + + " _g().getWidgetByName('tabpane00').showCardByIndex(0);\n" + + " } else {\n" + + "\n" + + " _g().getWidgetByName('tabpane00').showCardByIndex(aa + TAB轮播-测试-1);\n" + + " }\n" + + "}, TAB轮播-测试-2000);"; + String oldName1 = "tabpane00"; + String newName1 = "tabpane0"; + String result1 = "setInterval(function() {\n" + + "\t//获取当前body中tab的索引位置\n" + + " var aa = _g().getWidgetByName(\"tabpane0\").getShowIndex();\n" + + " //根据tab索引轮播tab块,索引从0开始,到最后一个tab块后跳转到第一个\n" + + "\tif(aa == TAB轮播-测试-2) {\n" + + " _g().getWidgetByName('tabpane0').showCardByIndex(0);\n" + + " } else {\n" + + "\n" + + " _g().getWidgetByName('tabpane0').showCardByIndex(aa + TAB轮播-测试-1);\n" + + " }\n" + + "}, TAB轮播-测试-2000);"; + Assert.assertEquals(result1, ContentReplaceUtil.replaceContent(text1, oldName1, newName1)); + } + +} \ No newline at end of file From 577bb9b9b3da9e0f443e35d539736313d74e1cc4 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 16:39:32 +0800 Subject: [PATCH 6/7] =?UTF-8?q?REPORT-53163=20=E5=9B=BE=E8=A1=A8=E8=B6=85?= =?UTF-8?q?=E9=93=BE=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 2 ++ .../fr/design/mod/ContentReplacerCenter.java | 2 ++ .../change/FormHyperlinkContentChange.java | 34 +++++++++++++++++++ .../repalce/FormHyperlinkContentReplacer.java | 20 +++++++++++ 4 files changed, 58 insertions(+) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.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 bde02bfc26..11da77ca87 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 @@ -5,6 +5,7 @@ import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; import com.fr.data.SimpleDSColumn; import com.fr.data.impl.NameTableData; +import com.fr.form.main.FormHyperlink; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; @@ -46,6 +47,7 @@ public class ContentObjectManager { set.add(NameTableData.class.getName()); set.add(SimpleDSColumn.class.getName()); set.add(DSColumn.class.getName()); + set.add(FormHyperlink.class.getName()); } public void searchObject(Object ob) { 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 c8e459354b..7a4acfdeb3 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 @@ -7,6 +7,7 @@ import com.fr.design.mod.event.WidgetNameModifyEvent; import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.DSColumnContentChange; +import com.fr.design.mod.impl.change.FormHyperlinkContentChange; import com.fr.design.mod.impl.change.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; import com.fr.design.mod.impl.change.NameTableDataContentChange; @@ -79,6 +80,7 @@ public class ContentReplacerCenter { contentChangeList.add(new NameTableDataContentChange()); contentChangeList.add(new SimpleDSColumnContentChange()); contentChangeList.add(new DSColumnContentChange()); + contentChangeList.add(new FormHyperlinkContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java new file mode 100644 index 0000000000..1ad89e1ad8 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java @@ -0,0 +1,34 @@ +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.FormHyperlinkContentReplacer; +import com.fr.form.main.FormHyperlink; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormHyperlinkContentChange implements ContentChange { + + private final Map> map; + + public FormHyperlinkContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, new FormHyperlinkContentReplacer()); + } + + @Override + public String type() { + return FormHyperlink.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java new file mode 100644 index 0000000000..9da4ee047a --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java @@ -0,0 +1,20 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplacer; +import com.fr.form.main.FormHyperlink; +import com.fr.general.ComparatorUtils; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormHyperlinkContentReplacer implements ContentReplacer { + + @Override + public void replace(FormHyperlink formHyperlink, String oldName, String newName) { + if (ComparatorUtils.equals(formHyperlink.getRelateEditorName(), oldName)) { + formHyperlink.setRelateEditorName(newName); + } + } +} From 6048b6569befa211bdecc37d7c7e25c943f3de51 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 21:20:25 +0800 Subject: [PATCH 7/7] =?UTF-8?q?REPORT-53169=20=E3=80=90=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96=E5=85=A5?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E5=85=AC=E5=BC=8F=E5=A4=9A=E4=B8=AA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E5=9C=B0=E6=96=B9=E4=B8=8D=E4=BC=9A=E8=A2=AB?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/design/mod/ContentObjectManager.java | 12 ++ .../com/fr/design/mod/ContentReplaceUtil.java | 62 +++++++ .../fr/design/mod/ContentReplacerCenter.java | 14 +- .../formula/CellExpandAttrContentChange.java | 37 +++++ .../FormulaConditionContentChange.java | 37 +++++ .../{ => formula}/FormulaContentChange.java | 9 +- .../FormulaDictionaryContentChange.java | 37 +++++ .../FormulaHFElementContentChange.java | 38 +++++ .../formula/FormulaPresentContentChange.java | 38 +++++ .../change/formula/RichCharContentChange.java | 37 +++++ .../Formula4TableDataNameContentReplacer.java | 22 --- .../Formula4WidgetNameContentReplacer.java | 21 --- .../mod/impl/repalce/FormulaReplacer.java | 151 ++++++++++++++++++ 13 files changed, 466 insertions(+), 49 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java rename designer-base/src/main/java/com/fr/design/mod/impl/change/{ => formula}/FormulaContentChange.java (65%) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java delete mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java delete mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.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 11da77ca87..7b20e60858 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 @@ -1,14 +1,20 @@ package com.fr.design.mod; import com.fr.base.Formula; +import com.fr.base.headerfooter.FormulaHFElement; +import com.fr.base.present.FormulaPresent; import com.fr.chart.web.ChartHyperRelateCellLink; import com.fr.chart.web.ChartHyperRelateFloatLink; import com.fr.data.SimpleDSColumn; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.impl.FormulaDictionary; import com.fr.data.impl.NameTableData; import com.fr.form.main.FormHyperlink; import com.fr.invoke.ClassHelper; import com.fr.js.JavaScriptImpl; import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.Filter; import java.util.HashSet; @@ -48,6 +54,12 @@ public class ContentObjectManager { set.add(SimpleDSColumn.class.getName()); set.add(DSColumn.class.getName()); set.add(FormHyperlink.class.getName()); + set.add(CellExpandAttr.class.getName()); + set.add(FormulaCondition.class.getName()); + set.add(FormulaDictionary.class.getName()); + set.add(FormulaHFElement.class.getName()); + set.add(FormulaPresent.class.getName()); + set.add(RichChar.class.getName()); } public void searchObject(Object ob) { 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 index 708b0004ef..64027a22c1 100644 --- a/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java +++ b/designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java @@ -1,5 +1,7 @@ package com.fr.design.mod; +import com.fr.parser.FRFormulaTransformer; +import com.fr.stable.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -12,6 +14,10 @@ public class ContentReplaceUtil { public static final String EQ_STRING = "="; + public static final String LEFT_BRACKET = "${"; + + public static final String RIGHT_BRACKET = "}"; + public static String replaceContent(String content, String oldName, String newName) { String oldNameUpper = oldName.toUpperCase(); Matcher m = Pattern.compile(oldName + "|" + oldNameUpper).matcher(content); @@ -37,4 +43,60 @@ public class ContentReplaceUtil { return "\"" + str + "\""; } + public static String getFormulaPureContent(String content) { + if (content.startsWith(EQ_STRING)) { + return content.substring(1); + } else { + return content; + } + } + + public static String replaceFormulaContent4WidgetName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + return content; + } + + public static String replaceFormulaContent4TableDataName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedDataset(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + return content; + } + + public static String getRichCharFormulaPureContent(String content) { + if (content.startsWith(LEFT_BRACKET)) { + return content.substring(LEFT_BRACKET.length() + 1, content.length() - 1); + } else { + return content; + } + } + + public static String replaceRichCharFormulaContent4TableDataName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getRichCharFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedDataset(oldName, newName); + return LEFT_BRACKET + EQ_STRING + frFormulaTransformer.transform(content) + RIGHT_BRACKET; + } + return content; + } + + public static String replaceRichCharFormulaContent4WidgetName(String content, String oldName, String newName) { + if (StringUtils.isNotEmpty(content)) { + content = getRichCharFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return LEFT_BRACKET + EQ_STRING + frFormulaTransformer.transform(content) + RIGHT_BRACKET; + } + return content; + } + } 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 7a4acfdeb3..597f59962b 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,11 +8,17 @@ import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange; import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange; import com.fr.design.mod.impl.change.DSColumnContentChange; import com.fr.design.mod.impl.change.FormHyperlinkContentChange; -import com.fr.design.mod.impl.change.FormulaContentChange; +import com.fr.design.mod.impl.change.formula.CellExpandAttrContentChange; +import com.fr.design.mod.impl.change.formula.FormulaConditionContentChange; +import com.fr.design.mod.impl.change.formula.FormulaContentChange; import com.fr.design.mod.impl.change.JavaScriptContentChange; import com.fr.design.mod.impl.change.NameTableDataContentChange; import com.fr.design.mod.impl.change.SimpleDSColumnContentChange; import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange; +import com.fr.design.mod.impl.change.formula.FormulaDictionaryContentChange; +import com.fr.design.mod.impl.change.formula.FormulaHFElementContentChange; +import com.fr.design.mod.impl.change.formula.FormulaPresentContentChange; +import com.fr.design.mod.impl.change.formula.RichCharContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -81,6 +87,12 @@ public class ContentReplacerCenter { contentChangeList.add(new SimpleDSColumnContentChange()); contentChangeList.add(new DSColumnContentChange()); contentChangeList.add(new FormHyperlinkContentChange()); + contentChangeList.add(new CellExpandAttrContentChange()); + contentChangeList.add(new FormulaConditionContentChange()); + contentChangeList.add(new FormulaDictionaryContentChange()); + contentChangeList.add(new FormulaHFElementContentChange()); + contentChangeList.add(new FormulaPresentContentChange()); + contentChangeList.add(new RichCharContentChange()); } private void onRename(List contentChangeItemList, List contentChangeList) { diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java new file mode 100644 index 0000000000..4204108c66 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +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.FormulaReplacer; +import com.fr.report.cell.cellattr.CellExpandAttr; +import java.util.HashMap; +import java.util.Map; + +/** + * 扩展后排序公式 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class CellExpandAttrContentChange implements ContentChange { + + private final Map> map; + + public CellExpandAttrContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CellExpandAttr4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CellExpandAttr4TableDataNameContentReplacer); + } + + @Override + public String type() { + return CellExpandAttr.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java new file mode 100644 index 0000000000..e67d5dfbde --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.data.condition.FormulaCondition; +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.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 公式条件 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormulaConditionContentChange implements ContentChange { + + private final Map> map; + + public FormulaConditionContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaCondition4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaCondition4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaCondition.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java similarity index 65% rename from designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java rename to designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java index de69b49d5a..d6edff530c 100644 --- a/designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java @@ -1,11 +1,10 @@ -package com.fr.design.mod.impl.change; +package com.fr.design.mod.impl.change.formula; import com.fr.base.Formula; 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.Formula4TableDataNameContentReplacer; -import com.fr.design.mod.impl.repalce.Formula4WidgetNameContentReplacer; +import com.fr.design.mod.impl.repalce.FormulaReplacer; import java.util.HashMap; import java.util.Map; @@ -20,8 +19,8 @@ public class FormulaContentChange implements ContentChange { public FormulaContentChange() { map = new HashMap<>(); - map.put(ChangeItem.WIDGET_NAME, new Formula4WidgetNameContentReplacer()); - map.put(ChangeItem.TABLE_DATA_NAME, new Formula4TableDataNameContentReplacer()); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.Formula4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.Formula4TableDataNameContentReplacer); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java new file mode 100644 index 0000000000..d0cd674efa --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.data.impl.FormulaDictionary; +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.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 数据字典——公式 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormulaDictionaryContentChange implements ContentChange { + + private final Map> map; + + public FormulaDictionaryContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaDictionary4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaDictionary4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaDictionary.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java new file mode 100644 index 0000000000..53ec9c34aa --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java @@ -0,0 +1,38 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.base.headerfooter.FormulaHFElement; +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.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 页面/页脚——公式 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ + +public class FormulaHFElementContentChange implements ContentChange { + + private final Map> map; + + public FormulaHFElementContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaHFElement4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaHFElement4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaHFElement.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java new file mode 100644 index 0000000000..eaca94c7a2 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java @@ -0,0 +1,38 @@ +package com.fr.design.mod.impl.change.formula; + +import com.fr.base.present.FormulaPresent; +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.FormulaReplacer; +import java.util.HashMap; +import java.util.Map; + +/** + * 公式形态 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ + +public class FormulaPresentContentChange implements ContentChange { + + private final Map> map; + + public FormulaPresentContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaPresent4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaPresent4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FormulaPresent.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java new file mode 100644 index 0000000000..45c06a3427 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java @@ -0,0 +1,37 @@ +package com.fr.design.mod.impl.change.formula; + +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.FormulaReplacer; +import com.fr.report.cell.cellattr.core.RichChar; +import java.util.HashMap; +import java.util.Map; + +/** + * 富文本 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class RichCharContentChange implements ContentChange { + + private final Map> map; + + public RichCharContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.RichChar4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.RichChar4TableDataNameContentReplacer); + } + + @Override + public String type() { + return RichChar.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 deleted file mode 100644 index 8f4dafa2a5..0000000000 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java +++ /dev/null @@ -1,22 +0,0 @@ -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 - * @version 10.0 - * Created by hades on 2021/5/28 - */ -public class Formula4TableDataNameContentReplacer implements ContentReplacer { - - @Override - public void replace(Formula formula, String oldName, String newName) { - FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedDataset(oldName, newName); - formula.setContent(ContentReplaceUtil.EQ_STRING + frFormulaTransformer.transform(formula.getPureContent())); - } - -} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java deleted file mode 100644 index 0e0e2e05fc..0000000000 --- a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java +++ /dev/null @@ -1,21 +0,0 @@ -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 - * @version 10.0 - * Created by hades on 2021/5/28 - */ -public class Formula4WidgetNameContentReplacer implements ContentReplacer { - - @Override - public void replace(Formula formula, String oldName, String newName) { - FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedWidget(oldName, newName); - formula.setContent(ContentReplaceUtil.EQ_STRING + frFormulaTransformer.transform(formula.getPureContent())); - } -} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java new file mode 100644 index 0000000000..b571010a05 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java @@ -0,0 +1,151 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.base.Formula; +import com.fr.base.headerfooter.FormulaHFElement; +import com.fr.base.present.FormulaPresent; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.impl.FormulaDictionary; +import com.fr.design.mod.ContentReplaceUtil; +import com.fr.design.mod.ContentReplacer; +import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.core.RichChar; + +/** + * 持有公式内容对象汇总 + * + * @author hades + * @version 10.0 + * Created by hades on 2021/6/2 + */ +public class FormulaReplacer { + + /** + * 扩展后排序公式 + */ + public static final ContentReplacer CellExpandAttr4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellExpandAttr cellExpandAttr, String oldName, String newName) { + cellExpandAttr.setSortFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(cellExpandAttr.getSortFormula(), oldName, newName)); + } + }; + + public static final ContentReplacer CellExpandAttr4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellExpandAttr cellExpandAttr, String oldName, String newName) { + cellExpandAttr.setSortFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(cellExpandAttr.getSortFormula(), oldName, newName)); + } + }; + + /** + * 典型单元格公式 + */ + public static final ContentReplacer Formula4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(Formula formula, String oldName, String newName) { + formula.setContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formula.getPureContent(), oldName, newName)); + } + }; + + + public static final ContentReplacer Formula4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(Formula formula, String oldName, String newName) { + formula.setContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formula.getPureContent(), oldName, newName)); + } + }; + + /** + * 公式条件 + */ + public static final ContentReplacer FormulaCondition4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaCondition formulaCondition, String oldName, String newName) { + formulaCondition.setFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaCondition.getFormula(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaCondition4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaCondition formulaCondition, String oldName, String newName) { + formulaCondition.setFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaCondition.getFormula(), oldName, newName)); + } + }; + + /** + * 数据字典——公式 + */ + + public static final ContentReplacer FormulaDictionary4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaDictionary formulaDictionary, String oldName, String newName) { + formulaDictionary.setExcuteFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaDictionary.getExcuteFormula(), oldName, newName)); + formulaDictionary.setProduceFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaDictionary.getProduceFormula(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaDictionary4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaDictionary formulaDictionary, String oldName, String newName) { + formulaDictionary.setExcuteFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaDictionary.getExcuteFormula(), oldName, newName)); + formulaDictionary.setProduceFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaDictionary.getProduceFormula(), oldName, newName)); + } + }; + + /** + * 页面/页脚——公式 + */ + + public static final ContentReplacer FormulaHFElement4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaHFElement formulaHFElement, String oldName, String newName) { + formulaHFElement.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaHFElement.getFormulaContent(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaHFElement4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaHFElement formulaHFElement, String oldName, String newName) { + formulaHFElement.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaHFElement.getFormulaContent(), oldName, newName)); + } + }; + + /** + * 公式形态 + */ + + public static final ContentReplacer FormulaPresent4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaPresent formulaPresent, String oldName, String newName) { + formulaPresent.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaPresent.getFormulaContent(), oldName, newName)); + } + }; + + public static final ContentReplacer FormulaPresent4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FormulaPresent formulaPresent, String oldName, String newName) { + formulaPresent.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaPresent.getFormulaContent(), oldName, newName)); + } + }; + + /** + * 富文本公式 + */ + public static final ContentReplacer RichChar4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(RichChar richChar, String oldName, String newName) { + if (richChar.isFormula()) { + richChar.setText(ContentReplaceUtil.replaceRichCharFormulaContent4TableDataName(richChar.getText(), oldName, newName)); + } + } + }; + + public static final ContentReplacer RichChar4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(RichChar richChar, String oldName, String newName) { + if (richChar.isFormula()) { + richChar.setText(ContentReplaceUtil.replaceRichCharFormulaContent4WidgetName(richChar.getText(), oldName, newName)); + } + } + }; + +}