From f9c4b5fe4470e1c437fda20c6caee8a124fdc37b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=B9=E7=A3=8A?= <294531121@qq.com> Date: Tue, 1 Jun 2021 11:22:42 +0800 Subject: [PATCH 01/18] =?UTF-8?q?REPORT-52933=20[=E9=98=BB=E6=AD=A2]?= =?UTF-8?q?=E4=BF=AE=E6=94=B9log=E5=AF=BC=E5=87=BA=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E5=90=8E=EF=BC=8Clog=E4=B8=80=E7=9B=B4?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/DesignerEnvManager.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java index b8951ea8ba..e5a8e7cf4f 100644 --- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java +++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java @@ -15,20 +15,18 @@ import com.fr.design.env.DesignerWorkspaceType; import com.fr.design.env.LocalDesignerWorkspaceInfo; import com.fr.design.env.RemoteDesignerWorkspaceInfo; import com.fr.design.file.HistoryTemplateListPane; -import com.fr.design.fun.DesignerPortProvider; import com.fr.design.i18n.Toolkit; import com.fr.design.locale.impl.ProductImproveMark; import com.fr.design.mainframe.vcs.VcsConfigManager; import com.fr.design.notification.SnapChatConfig; import com.fr.design.port.DesignerPortContext; -import com.fr.design.update.push.DesignerPushUpdateConfigManager; 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.DesignerPort; import com.fr.exit.DesignerExiter; import com.fr.file.FILEFactory; import com.fr.general.ComparatorUtils; -import com.fr.general.FRLogFormatter; import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import com.fr.general.SupportLocale; @@ -36,15 +34,14 @@ import com.fr.general.locale.LocaleCenter; import com.fr.general.locale.LocaleMark; import com.fr.general.xml.GeneralXMLTools; import com.fr.log.FineLoggerFactory; +import com.fr.log.LogHandler; import com.fr.stable.CommonUtils; import com.fr.stable.Constants; import com.fr.stable.CoreConstants; -import com.fr.stable.EnvChangedListener; import com.fr.stable.ListMap; import com.fr.stable.ProductConstants; import com.fr.stable.StableUtils; import com.fr.stable.StringUtils; -import com.fr.stable.bridge.StableFactory; import com.fr.stable.core.UUID; import com.fr.stable.project.ProjectConstants; import com.fr.stable.xml.XMLPrintWriter; @@ -52,6 +49,7 @@ import com.fr.stable.xml.XMLReadable; import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLWriter; 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.workspace.WorkContext; import com.fr.workspace.WorkContextCallback; @@ -78,8 +76,6 @@ import java.util.ListIterator; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; -import java.util.logging.FileHandler; -import java.util.logging.Handler; /** * The manager of Designer GUI. @@ -306,14 +302,23 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { calender.setTimeInMillis(System.currentTimeMillis()); 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()) { StableUtils.makesureFileExist(new File(fileName)); } - Handler handler = new FileHandler(fileName, true); + LogHandler handler = new LogHandler() { + 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().addLogHandler(handler); + FineLoggerFactory.getLogger().addLogAppender(handler); } catch (SecurityException e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } catch (IOException e) { From 0e1151ae8c94153b27fd04dd4feeb84ecba9da08 Mon Sep 17 00:00:00 2001 From: xiqiu Date: Tue, 1 Jun 2021 11:26:19 +0800 Subject: [PATCH 02/18] =?UTF-8?q?REPORT-52987=20=20=20=E4=BF=AE=E5=A4=8Dda?= =?UTF-8?q?taoperator=E7=9A=84=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98;?= =?UTF-8?q?=E9=A1=BA=E5=B8=A6=E4=BF=AE=E5=A4=8D=E5=8F=91=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E5=BC=95=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 03/18] =?UTF-8?q?REPORT-51683=20=E5=AF=B9=E8=B1=A1/classlo?= =?UTF-8?q?ader=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 c21154e1fc548994735bfaa7e26af3349730f82c Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Tue, 1 Jun 2021 18:18:32 +0800 Subject: [PATCH 04/18] =?UTF-8?q?REPORT-52928=20=E5=9F=8B=E7=82=B9?= =?UTF-8?q?=E5=8F=AA=E7=BB=9F=E8=AE=A1=E6=9C=89=E7=89=B9=E6=AE=8A=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/mainframe/JForm.java | 14 ------ .../fr/design/share/SharableInitManager.java | 16 ------ .../com/fr/design/share/SharableManager.java | 49 +++++++++++++++++++ .../design/share/utils/EffectItemUtils.java | 5 ++ .../main/java/com/fr/start/MainDesigner.java | 2 + .../fr/start/module/DesignerActivator.java | 4 +- 6 files changed, 58 insertions(+), 32 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/share/SharableManager.java diff --git a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java index c67280caa1..3ddc16c9c9 100644 --- a/designer-form/src/main/java/com/fr/design/mainframe/JForm.java +++ b/designer-form/src/main/java/com/fr/design/mainframe/JForm.java @@ -346,20 +346,6 @@ public class JForm extends JTemplate implements BaseJForm xCreators = ShareComponentUtils.getHelpConfigXCreatorList(root); - JSONArray helpConfigUseInfo = ComponentCollector.getInstance().getHelpConfigUseInfoWithTemplate(jt.getTarget().getTemplateID()); - for (XCreator xCreator : xCreators) { - if (helpConfigUseInfo.contains(ShareComponentUtils.getWidgetId(xCreator.toData()))) { - useCount++; - } - } - ComponentCollector.getInstance().collectHelpConfigInfo(jt.getTarget().getTemplateID(), xCreators.size(), useCount); - } - } }); diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java deleted file mode 100644 index a01068421c..0000000000 --- a/designer-realize/src/main/java/com/fr/design/share/SharableInitManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.fr.design.share; - -import com.fr.design.base.clipboard.ClipboardFilter; -import com.fr.design.mainframe.share.collect.SharableCollectorManager; -import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; -import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; -import com.fr.design.mainframe.share.util.SharableXMLUtils; - -public class SharableInitManager { - public static void start() { - SharableXMLUtils.registerSharableReadHelper(); - SharableCollectorManager.getInstance().execute(); - ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); - ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/share/SharableManager.java b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java new file mode 100644 index 0000000000..ba3b830643 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/share/SharableManager.java @@ -0,0 +1,49 @@ +package com.fr.design.share; + +import com.fr.design.base.clipboard.ClipboardFilter; +import com.fr.design.designer.creator.XCreator; +import com.fr.design.designer.creator.XLayoutContainer; +import com.fr.design.mainframe.JForm; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.mainframe.share.collect.ComponentCollector; +import com.fr.design.mainframe.share.collect.SharableCollectorManager; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; +import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; +import com.fr.design.mainframe.share.util.SharableXMLUtils; +import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.share.utils.EffectItemUtils; +import com.fr.json.JSONArray; + +import java.util.List; + +public class SharableManager { + public static void start() { + SharableXMLUtils.registerSharableReadHelper(); + SharableCollectorManager.getInstance().execute(); + ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); + ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); + } + + public static void saveTemplate(JTemplate jt) { + if (jt instanceof JForm) { + int showCount = 0; + int useCount = 0; + if (!jt.getProcessInfo().isTestTemplate()) { + JForm jForm = (JForm) jt; + XLayoutContainer root = jForm.getFormDesign().getRootComponent(); + List xCreators = ShareComponentUtils.getHelpConfigXCreatorList(root); + JSONArray helpConfigUseInfo = ComponentCollector.getInstance().getHelpConfigUseInfoWithTemplate(jForm.getTarget().getTemplateID()); + for (XCreator xCreator : xCreators) { + if (EffectItemUtils.hasEffectItem(xCreator.toData())) { + showCount ++; + if (helpConfigUseInfo.contains(ShareComponentUtils.getWidgetId(xCreator.toData()))) { + useCount++; + } + } + } + + ComponentCollector.getInstance().collectHelpConfigInfo(jForm.getTarget().getTemplateID(), showCount, useCount); + } + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java b/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java index 010828cf1f..99391d8c94 100644 --- a/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java +++ b/designer-realize/src/main/java/com/fr/design/share/utils/EffectItemUtils.java @@ -19,4 +19,9 @@ public class EffectItemUtils { } return effectItemGroupList; } + + public static boolean hasEffectItem(Widget widget) { + EffectItemGroup effectItemGroup = new EffectItemGroup(widget); + return effectItemGroup.getEffectItems().size() > 0; + } } diff --git a/designer-realize/src/main/java/com/fr/start/MainDesigner.java b/designer-realize/src/main/java/com/fr/start/MainDesigner.java index 5d39647714..389538b2b3 100644 --- a/designer-realize/src/main/java/com/fr/start/MainDesigner.java +++ b/designer-realize/src/main/java/com/fr/start/MainDesigner.java @@ -38,6 +38,7 @@ import com.fr.design.module.ChartEmptyDataStyleAction; import com.fr.design.module.ChartPreStyleAction; import com.fr.design.module.DesignModuleFactory; import com.fr.design.monitor.DesignerLifecycleMonitorContext; +import com.fr.design.share.SharableManager; import com.fr.design.utils.concurrent.ThreadFactoryBuilder; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.event.Event; @@ -235,6 +236,7 @@ public class MainDesigner extends BaseDesigner { jt.stopEditing(); jt.saveDirectly(); jt.requestFocus(); + SharableManager.saveTemplate(jt); } }); } diff --git a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java index e73e9387f6..ef3baffd4a 100644 --- a/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java +++ b/designer-realize/src/main/java/com/fr/start/module/DesignerActivator.java @@ -61,7 +61,7 @@ import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.parameter.FormParameterReader; import com.fr.design.parameter.ParameterPropertyPane; import com.fr.design.parameter.WorkBookParameterReader; -import com.fr.design.share.SharableInitManager; +import com.fr.design.share.SharableManager; import com.fr.design.share.ui.config.ShareConfigPane; import com.fr.design.share.ui.generate.ShareGeneratePane; import com.fr.design.update.actions.RecoverForDesigner; @@ -207,7 +207,7 @@ public class DesignerActivator extends Activator { designerRegister(); InformationCollector.getInstance().collectStartTime(); - SharableInitManager.start(); + SharableManager.start(); } private void createPluginListener() { From e1ba505b503bfabcec5e47eb1ebb3078f0531cde Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 10:37:05 +0800 Subject: [PATCH 05/18] =?UTF-8?q?REPORT-53156=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8C=E6=8E=A7=E4=BB=B6=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84=E5=9C=B0?= =?UTF-8?q?=E6=96=B9=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 06/18] =?UTF-8?q?REPORT-53157=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8C=E5=8D=95=E5=85=83=E6=A0=BC=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E5=BC=95=E7=94=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E7=9A=84?= =?UTF-8?q?=E5=9C=B0=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 557873b3e3348fa58a51cb76189ba75f2b3a88b9 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Wed, 2 Jun 2021 10:43:55 +0800 Subject: [PATCH 07/18] =?UTF-8?q?REPORT-52525=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E6=9F=A5=E8=AF=A2=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E5=A4=8D=E5=88=B6=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E5=90=8Esql=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 264 ++++++++++++++++++ .../tabledatapane/DBTableDataPane.java | 17 ++ .../design/dialog/link/MessageWithLink.java | 18 +- .../java/com/fr/design/gui/UILookAndFeel.java | 1 + .../fr/design/images/lookandfeel/TipIcon.png | Bin 0 -> 402 bytes .../fr/design/images/m_file/preview_sql.png | Bin 0 -> 366 bytes 6 files changed, 297 insertions(+), 3 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java create mode 100644 designer-base/src/main/resources/com/fr/design/images/lookandfeel/TipIcon.png create mode 100644 designer-base/src/main/resources/com/fr/design/images/m_file/preview_sql.png diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java new file mode 100644 index 0000000000..f0ed78c5ad --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -0,0 +1,264 @@ +package com.fr.design.data.datapane.preview.sql; + +import com.fr.base.Parameter; +import com.fr.base.ParameterHelper; +import com.fr.base.ParameterMapNameSpace; +import com.fr.data.impl.DBTableData; +import com.fr.data.impl.EscapeSqlHelper; +import com.fr.data.operator.DataOperator; +import com.fr.decision.webservice.v10.config.ConfigService; +import com.fr.design.dialog.DialogActionAdapter; +import com.fr.design.dialog.link.MessageWithLink; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.parameter.ParameterInputPane; +import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.plugin.injectable.PluginModule; +import com.fr.script.Calculator; +import com.fr.stable.ArrayUtils; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; +import com.fr.stable.fun.TableDataProvider; +import com.fr.stable.plugin.ExtraClassManagerProvider; +import com.fr.stable.script.NameSpace; + +import javax.swing.BorderFactory; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Highlighter; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Frame; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class PreviewPerformedSqlPane extends JDialog implements ActionListener { + + private JPanel topPanel; + private JPanel centerPanel; + private JPanel bottomPanel; + + private UILabel imageLabel; + + public PreviewPerformedSqlPane(Frame frame, String sql) { + this(frame, sql, null, null, false); + } + + public PreviewPerformedSqlPane(Frame frame, String sql, List selectedSpecialCharIndex, String[] selectedSpecialChar, boolean highlight) { + super(frame, true); + // 提示信息 + topPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + JPanel imagePanel = new JPanel(); + JPanel messagePanel; + + if (isShowSpecialCharSqlPane(selectedSpecialCharIndex)) { + imageLabel = new UILabel(UIManager.getIcon("OptionPane.warningIcon")); + MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), "https://help.fanruan.com/finereport/doc-view-2219.html", Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); + messagePanel = new JPanel(); + messagePanel.setLayout(FRGUIPaneFactory.createBorderLayout()); + messagePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); + messagePanel.add(message); + // 提示图标 + JPanel tipPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + UILabel tipLabel = new UILabel(UIManager.getIcon("OptionPane.tipIcon")); + StringBuilder textBuilder = new StringBuilder(); + textBuilder.append("").append(Toolkit.i18nText("Fine-Design_Basic_Processed_Special_Char")).append("
"); + for (String sChar : selectedSpecialChar) { + textBuilder.append(sChar).append("
"); + } + textBuilder.append(""); + tipLabel.setToolTipText(textBuilder.toString()); + tipPanel.add(tipLabel, BorderLayout.SOUTH); + topPanel.add(tipPanel, BorderLayout.EAST); + } else { + imageLabel = new UILabel(UIManager.getIcon("OptionPane.informationIcon")); + messagePanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); + JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql_Message")); + messagePanel.add(label); + } + imagePanel.add(imageLabel); + + topPanel.add(imagePanel, BorderLayout.WEST); + topPanel.add(messagePanel, BorderLayout.CENTER); + topPanel.setBorder(BorderFactory.createEmptyBorder(10,10,0,10)); + + //中间的SQL面板 + centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + centerPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); + JScrollPane scrollPane = new JScrollPane(); + JTextArea checkArea = new JTextArea(sql); + checkArea.setEditable(false); + checkArea.setCursor(new Cursor(Cursor.TEXT_CURSOR)); + if (highlight) { + Highlighter highLighter = checkArea.getHighlighter(); + DefaultHighlighter.DefaultHighlightPainter p = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE); + for (int[] specialCharIndex : selectedSpecialCharIndex) { + try { + highLighter.addHighlight(specialCharIndex[0], specialCharIndex[1], p); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + scrollPane.setViewportView(checkArea); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); + centerPanel.add(scrollPane); + + //底部的按钮面板 + UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); + okButton.addActionListener(this); + bottomPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); + bottomPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); + bottomPanel.add(okButton, BorderLayout.EAST); + + this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); + this.setResizable(false); + this.add(topPanel, BorderLayout.NORTH); + this.add(centerPanel, BorderLayout.CENTER); + this.add(bottomPanel, BorderLayout.SOUTH); + this.setSize(600, 400); + + GUICoreUtils.centerWindow(this); + } + + public static void previewPerformedSql(DBTableData tableData) { + Calculator calculator = Calculator.createCalculator(); + //参数 + ParameterProvider[] parameters = DataOperator.getInstance().getTableDataParameters(tableData); + if (ArrayUtils.isEmpty(parameters)) { + parameters = tableData.getParameters(Calculator.createCalculator()); + } + Map parameterMap = new HashMap<>(); + if (needInputParams(parameters)) { + showParaWindow(parameterMap, parameters); + } else { + for (ParameterProvider parameter : parameters) { + parameterMap.put(parameter.getName(), parameter.getValue()); + } + } + boolean showOriginSql = true; + for (ParameterProvider parameter : DataOperator.getInstance().getTableDataParameters(tableData)) { + if (parameterMap.containsKey(parameter.getName())) { + Object value = parameterMap.get(parameter.getName()); + if (value != null && !StringUtils.EMPTY.equals(value)) { + showOriginSql = false; + } + parameter.setValue(value); + } + } + String sql; + // 计算高亮文本位置 + List specialCharParamIndex = null; + boolean highlight = true; + if (showOriginSql) { + sql = tableData.getQuery(); + } else { + NameSpace ns = ParameterMapNameSpace.create(parameterMap); + calculator.pushNameSpace(ns); + Parameter[] paras = processParameters(tableData, calculator); + // 所有被转义参数的集合 + Set specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); + // 将参数转义等 + Set tableDataProviders = getTableDataProviders(); + for (TableDataProvider provider : tableDataProviders) { + provider.processParametersBeforeAnalyzeSQL(paras, calculator); + } + + if (!specialCharParam.isEmpty()) { + specialCharParamIndex = ParameterHelper.analyzeCurrentContextTableData4Template(tableData.getQuery(), paras, specialCharParam); + } + String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); + sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); + if (oldSql.length() != sql.length()) { + highlight = false; + } + } + // sql内容复制到剪切板 + StringSelection selection = new StringSelection(sql); + java.awt.Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, selection); + // 弹窗 + PreviewPerformedSqlPane pane; + if (isShowSpecialCharSqlPane(specialCharParamIndex)) { + pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql, specialCharParamIndex, ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar(), highlight); + } else { + pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql); + } + pane.setVisible(true); + } + + private static boolean isShowSpecialCharSqlPane(List specialCharParamIndex) { + return specialCharParamIndex != null && !specialCharParamIndex.isEmpty(); + } + + private static Parameter[] processParameters(DBTableData tableData, Calculator calculator) { + Collection parameters = tableData.getParameters(); + if (parameters.size() == 0) { + tableData.setParameters(ParameterHelper.analyze4Parameters(tableData.getQuery(), false)); + return new Parameter[0]; + } + return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters.toArray(new ParameterProvider[parameters.size()]))); + } + + private static String processExtraSQL(Parameter[] ps, String sql, Calculator ca, Set tableDataProviders) { + for (TableDataProvider provider : tableDataProviders) { + String newSql = provider.processTableDataSQL(ps, sql, ca); + if (StringUtils.isNotEmpty(newSql)) { + sql = newSql; + } + } + return sql; + } + + private static boolean needInputParams(ParameterProvider[] parameters) { + if (ArrayUtils.isNotEmpty(parameters)) { + return true; + } + for (ParameterProvider parameter : parameters) { + if (parameter.getValue() == null || StringUtils.EMPTY.equals(parameter.getValue())) { + return true; + } + } + return false; + } + + private static void showParaWindow(final Map parameterMap, ParameterProvider[] inParameters) { + final ParameterInputPane pPane = new ParameterInputPane(inParameters); + pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() { + @Override + public void doOk() { + parameterMap.putAll(pPane.update()); + } + }).setVisible(true); + } + + private static Set getTableDataProviders() { + ExtraClassManagerProvider classManagerProvider = PluginModule.getAgent(PluginModule.ExtraCore); + if (classManagerProvider == null) { + return new HashSet<>(); + } + return classManagerProvider.getArray(TableDataProvider.XML_TAG, EscapeSqlHelper.getInstance()); + } + + @Override + public void actionPerformed(ActionEvent e) { + this.dispose(); + } +} diff --git a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java index 6065d04859..fecf9c079e 100644 --- a/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java +++ b/designer-base/src/main/java/com/fr/design/data/tabledata/tabledatapane/DBTableDataPane.java @@ -16,6 +16,7 @@ import com.fr.design.constants.UIConstants; import com.fr.design.data.datapane.connect.ConnectionTableProcedurePane; import com.fr.design.data.datapane.connect.ConnectionTableProcedurePane.DoubleClickSelectedNodeOnTreeListener; import com.fr.design.data.datapane.preview.PreviewTablePane; +import com.fr.design.data.datapane.preview.sql.PreviewPerformedSqlPane; import com.fr.design.data.datapane.sqlpane.SQLEditPane; import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicPane; @@ -35,6 +36,7 @@ import com.fr.design.menu.ToolBarDef; import com.fr.design.utils.ParameterUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.ComparatorUtils; +import com.fr.general.IOUtils; import com.fr.general.sql.SqlUtils; import com.fr.log.FineLoggerFactory; import com.fr.script.Calculator; @@ -227,6 +229,7 @@ public class DBTableDataPane extends AbstractTableDataPane { // p:工具栏. ToolBarDef toolBarDef = new ToolBarDef(); toolBarDef.addShortCut(new PreviewAction()); + toolBarDef.addShortCut(new PreviewPerformedSQLAction()); toolBarDef.addShortCut(SeparatorDef.DEFAULT); toolBarDef.addShortCut(new EditPageQueryAction()); dbTableDataMenuHandler = ExtraDesignClassManager.getInstance().getSingle(DBTableDataMenuHandler.MARK_STRING); @@ -368,6 +371,20 @@ public class DBTableDataPane extends AbstractTableDataPane { } } + private class PreviewPerformedSQLAction extends UpdateAction { + + public PreviewPerformedSQLAction() { + this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); + this.setSmallIcon(IOUtils.readIcon("/com/fr/design/images/m_file/preview_sql.png")); + } + + @Override + public void actionPerformed(ActionEvent e) { + checkParameter(); + PreviewPerformedSqlPane.previewPerformedSql(DBTableDataPane.this.updateBean()); + } + } + private class EditPageQueryAction extends UpdateAction { public EditPageQueryAction() { this.setName(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Layer_Page_Report_Page_Query")); diff --git a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java index 889a0c3c9c..2541a1b638 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java +++ b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java @@ -3,13 +3,14 @@ package com.fr.design.dialog.link; import com.fr.design.gui.ilable.UILabel; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; + +import javax.swing.JEditorPane; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; import java.awt.Color; import java.awt.Desktop; import java.awt.Font; import java.net.URI; -import javax.swing.JEditorPane; -import javax.swing.event.HyperlinkEvent; -import javax.swing.event.HyperlinkListener; /** * 用来构建JOptionPane带超链的消息提示 @@ -35,6 +36,10 @@ public class MessageWithLink extends JEditorPane { this(message, linkName, link, color, LABEL.getFont()); } + public MessageWithLink(String frontMessage, String linkName, String link, String backMessage) { + this(frontMessage, linkName, link, backMessage, LABEL.getBackground(), LABEL.getFont()); + } + public MessageWithLink(String message, String linkName, String link, Color color, Font font) { super("text/html", "" + message + "" + linkName + "" + ""); initListener(link); @@ -42,6 +47,13 @@ public class MessageWithLink extends JEditorPane { setBorder(null); } + public MessageWithLink(String frontMessage, String linkName, String link, String backMessage, Color color, Font font) { + super("text/html", "" + frontMessage + "" + linkName + "" + backMessage + ""); + initListener(link); + setEditable(false); + setBorder(null); + } + protected void initListener(String link) { addHyperlinkListener(new HyperlinkListener() { @Override diff --git a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java index 4dbbc1af32..6d1a729d93 100644 --- a/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java +++ b/designer-base/src/main/java/com/fr/design/gui/UILookAndFeel.java @@ -177,6 +177,7 @@ public class UILookAndFeel extends MetalLookAndFeel { table.put("OptionPane.narrow.down", loadIcon("Icon_Narrow_Down_16x16.png", this)); table.put("OptionPane.warningIcon", loadIcon("WarningIcon.png", this)); table.put("OptionPane.questionIcon", loadIcon("QuestionIcon.png", this)); + table.put("OptionPane.tipIcon", loadIcon("TipIcon.png", this)); table.put("ScrollPane.border", new UIScrollPaneBorder()); table.put("ProgressBar.border", new UIProgressBarBorder()); table.put("Spinner.border", new UITextFieldBorder(new Insets(2, 2, 2, 2))); diff --git a/designer-base/src/main/resources/com/fr/design/images/lookandfeel/TipIcon.png b/designer-base/src/main/resources/com/fr/design/images/lookandfeel/TipIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9492502d1bc5501d78314e7be20685386d1414 GIT binary patch literal 402 zcmV;D0d4+?P)@j-@8M|`QYz<$8nYr%?2Xu0KoG1`xhd(AyQ2#<*VK^ z0x-6^ix{5)z-1KS#bD6uCW{M&QpK`p9{~1gVUuDP-Fl?r#Qc*1kf?!fI+qP}f zw62M;ks&FN{I+2j&q}E+y_s`<4uB|xSI@v9V&27ZypqI80mj@DL|PC+9O++n9A_QC z0x8>%dYyBAN`&ve?;WQA=WaKOpx)_tPx?Z}*ftTNl=4=uSF7%tWkE{_uaW^D{eEvT z48zY+fZrp6A%xh}>*aEJu2?L+3E|Dp1UPpeh`{iDZ{sguVuWeHScGYtI1L!v#2I63 w5n&SHVCEQyqs(!TGCkK(&X8P}=|4C73+o;05pf;-QUCw|07*qoM6N<$f-0J=WdHyG literal 0 HcmV?d00001 diff --git a/designer-base/src/main/resources/com/fr/design/images/m_file/preview_sql.png b/designer-base/src/main/resources/com/fr/design/images/m_file/preview_sql.png new file mode 100644 index 0000000000000000000000000000000000000000..ba62d487a8e85617bb710f4cf281094da4e17e7d GIT binary patch literal 366 zcmV-!0g?WRP)p^BJ}zQyn%^{9n@6h zIxMV=l`&RU&~P{Yb77O&+s#?XCd17A^Urs)9ML}yhxyUSOQ>_1+0DyxGt2cFtqY(% z@5is+-y{InCaO8WLRL?|-@7A{Ne;`JKn}p}xZvQPJ*CO@3 zYSHQ1ATr{?djH%YnA;n*p%FD{wuAsx`ONlg!|GjibOmNU5b*=z5koaIEi_QeF(<4D zfbIs6Pvi;mT7*9|09-?RK_n*v;1i7z10pvSp)a_vbOLYxNhXg%1c3Gi`--``#Lz9X zEQxx0g>&cJ);XSHv(mz%KM{=~uKtX-<1{}{M0*rmS5^IP2TxZ20^#auzg>*?-2eap M07*qoM6N<$f;Xm}2mk;8 literal 0 HcmV?d00001 From d35c06b20b1a9f34fecad57c9322a7864b101251 Mon Sep 17 00:00:00 2001 From: hades Date: Wed, 2 Jun 2021 16:37:12 +0800 Subject: [PATCH 08/18] =?UTF-8?q?REPORT-53159=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8Ctab=E4=B8=AD=E7=9A=84js=E5=BC=95?= =?UTF-8?q?=E7=94=A8=E5=A4=9A=E4=B8=AA=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=8F=AA?= =?UTF-8?q?=E4=BC=9A=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 09/18] =?UTF-8?q?REPORT-53163=20=E5=9B=BE=E8=A1=A8?= =?UTF-8?q?=E8=B6=85=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 aa72606df7fa7b50af53b20e6bc6b24628a2096e Mon Sep 17 00:00:00 2001 From: xiqiu Date: Wed, 2 Jun 2021 18:33:35 +0800 Subject: [PATCH 10/18] =?UTF-8?q?REPORT-52987=20=20=E4=BF=AE=E5=A4=8Dkerbe?= =?UTF-8?q?ros=E8=AE=A4=E8=AF=81=E4=B8=8B=E6=9A=B4=E9=9C=B2=E7=9A=84throwa?= =?UTF-8?q?ble=E5=92=8C=E9=A9=B1=E5=8A=A8=E5=8A=A0=E8=BD=BD=E4=BC=98?= =?UTF-8?q?=E5=85=88=E7=BA=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/data/datapane/connect/DatabaseConnectionPane.java | 4 ++-- 1 file changed, 2 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 18f4d94405..f3a97ffb1c 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 @@ -136,8 +136,8 @@ public abstract class DatabaseConnectionPane Date: Wed, 2 Jun 2021 21:20:25 +0800 Subject: [PATCH 11/18] =?UTF-8?q?REPORT-53169=20=E3=80=90=E6=99=BA?= =?UTF-8?q?=E8=83=BD=E8=81=94=E5=8A=A8=E3=80=91=E7=BB=84=E4=BB=B6=E6=8B=96?= =?UTF-8?q?=E5=85=A5=E6=97=B6=EF=BC=8C=E5=85=AC=E5=BC=8F=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E5=9C=B0=E6=96=B9=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E8=A2=AB=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)); + } + } + }; + +} From 2a8eda2ddba28314a2ea392dd43ee84c53c4b8a1 Mon Sep 17 00:00:00 2001 From: kuangshuai Date: Thu, 3 Jun 2021 15:10:25 +0800 Subject: [PATCH 12/18] =?UTF-8?q?REPORT-52928=20=E5=BF=AB=E6=8D=B7?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BD=BF=E7=94=A8=E5=9F=8B=E7=82=B9=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B2=A1=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/fr/design/share/ui/config/ShareConfigPane.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java index fa5606fe8f..81d91c4719 100644 --- a/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java +++ b/designer-realize/src/main/java/com/fr/design/share/ui/config/ShareConfigPane.java @@ -17,6 +17,7 @@ import com.fr.design.mainframe.DesignerFrame; import com.fr.design.mainframe.share.collect.ComponentCollector; import com.fr.design.mainframe.share.ui.base.PlaceholderTextArea; import com.fr.design.mainframe.share.util.ShareComponentUtils; +import com.fr.design.share.SharableManager; import com.fr.design.share.effect.EffectItemGroup; import com.fr.design.share.utils.EffectItemUtils; import com.fr.design.share.utils.ShareDialogUtils; @@ -201,6 +202,7 @@ public class ShareConfigPane extends BasicPane { } HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().saveTemplate(); ComponentCollector.getInstance().setHelpConfigUseInfo(ShareComponentUtils.getCurrentTemplateID(), ShareComponentUtils.getWidgetId(widget)); + SharableManager.saveTemplate(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate()); } }); dialog.setVisible(true); From ade05d9005e5a3c5e404b29a1398ed453fb0616f Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 3 Jun 2021 16:27:38 +0800 Subject: [PATCH 13/18] =?UTF-8?q?REPORT-53211=20&&=20REPORT-53208=20&&=20R?= =?UTF-8?q?EPORT-53209=20&&=20REPORT-53207=20=E5=87=A0=E4=B8=AA=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=85=AC=E5=BC=8F=E7=9A=84=E5=9C=BA=E6=99=AF=E6=9C=AA?= =?UTF-8?q?=E8=81=94=E5=8A=A8=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 | 10 ++ .../com/fr/design/mod/ContentReplaceUtil.java | 86 +++++++++++++++-- .../fr/design/mod/ContentReplacerCenter.java | 10 ++ .../impl/change/DSColumnContentChange.java | 6 +- .../CardSwitchButtonContentChange.java | 36 +++++++ .../formula/CellGUIAttrContentChange.java | 35 +++++++ .../formula/FunctionGrouperContentChange.java | 35 +++++++ .../formula/SelectCountContentChange.java | 35 +++++++ .../formula/WidgetTitleContentChange.java | 35 +++++++ ...SColumn4TableDataNameContentReplacer.java} | 5 +- .../DSColumn4WidgetNameContentReplacer.java | 19 ++++ .../mod/impl/repalce/FormulaReplacer.java | 96 +++++++++++++++++++ 12 files changed, 397 insertions(+), 11 deletions(-) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java rename designer-base/src/main/java/com/fr/design/mod/impl/repalce/{DSColumnContentReplacer.java => DSColumn4TableDataNameContentReplacer.java} (55%) create mode 100644 designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.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 7b20e60858..b70ea88b0a 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 @@ -10,12 +10,17 @@ 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.form.ui.CardSwitchButton; +import com.fr.form.ui.WidgetTitle; 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.CellGUIAttr; import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.cell.cellattr.core.group.FunctionGrouper; +import com.fr.report.cell.cellattr.core.group.SelectCount; import com.fr.stable.Filter; import java.util.HashSet; import java.util.Map; @@ -60,6 +65,11 @@ public class ContentObjectManager { set.add(FormulaHFElement.class.getName()); set.add(FormulaPresent.class.getName()); set.add(RichChar.class.getName()); + set.add(CardSwitchButton.class.getName()); + set.add(CellGUIAttr.class.getName()); + set.add(SelectCount.class.getName()); + set.add(WidgetTitle.class.getName()); + set.add(FunctionGrouper.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 64027a22c1..526280027f 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 @@ -51,26 +51,42 @@ public class ContentReplaceUtil { } } + /** + * 通过公式编辑框框输入的且带有"=" + * + * @param content + * @param oldName + * @param newName + * @return + */ 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 replaceFormulaContent4WidgetName0(content, oldName, newName); } 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 replaceFormulaContent4TableDataName0(content, oldName, newName); } return content; } + private static String replaceFormulaContent4WidgetName0(String content, String oldName, String newName) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + + private static String replaceFormulaContent4TableDataName0(String content, String oldName, String newName) { + content = getFormulaPureContent(content); + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return EQ_STRING + frFormulaTransformer.transform(content); + } + public static String getRichCharFormulaPureContent(String content) { if (content.startsWith(LEFT_BRACKET)) { return content.substring(LEFT_BRACKET.length() + 1, content.length() - 1); @@ -99,4 +115,58 @@ public class ContentReplaceUtil { return content; } + private static boolean isFormula(String content) { + return StringUtils.isNotEmpty(content) && content.startsWith(EQ_STRING); + } + + /** + * 适用于替换非显示使用的公式的地方 有可能只是文本 需要先判断下 + * 可通过使用位置是否使用公式编辑框区分 + * + * @param content + * @param oldName + * @param newName + * @return + */ + public static String replaceFormulaString4WidgetName(String content, String oldName, String newName) { + if (isFormula(content)) { + return replaceFormulaContent4WidgetName0(content, oldName, newName); + } + return content; + } + + public static String replaceFormulaString4TableDataName(String content, String oldName, String newName ) { + if (isFormula(content)) { + return replaceFormulaContent4TableDataName0(content, oldName, newName); + } + return content; + } + + /** + * 替换纯公式内容 无 "=" + * + * @param content + * @param oldName + * @param newName + * @return + */ + public static String replacePureFormula4WidgetName(String content, String oldName, String newName ) { + if (StringUtils.isNotEmpty(content)) { + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedWidget(oldName, newName); + return frFormulaTransformer.transform(content); + } + return content; + } + + public static String replacePureFormula4TableDataName(String content, String oldName, String newName ) { + if (StringUtils.isNotEmpty(content)) { + FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); + frFormulaTransformer.addRenamedDataset(oldName, newName); + return frFormulaTransformer.transform(content); + } + 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 597f59962b..cccc08c9af 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,7 +8,9 @@ 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.formula.CardSwitchButtonContentChange; import com.fr.design.mod.impl.change.formula.CellExpandAttrContentChange; +import com.fr.design.mod.impl.change.formula.CellGUIAttrContentChange; 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; @@ -18,7 +20,10 @@ 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.FunctionGrouperContentChange; import com.fr.design.mod.impl.change.formula.RichCharContentChange; +import com.fr.design.mod.impl.change.formula.SelectCountContentChange; +import com.fr.design.mod.impl.change.formula.WidgetTitleContentChange; import com.fr.event.Event; import com.fr.event.EventDispatcher; import com.fr.event.Listener; @@ -93,6 +98,11 @@ public class ContentReplacerCenter { contentChangeList.add(new FormulaHFElementContentChange()); contentChangeList.add(new FormulaPresentContentChange()); contentChangeList.add(new RichCharContentChange()); + contentChangeList.add(new CardSwitchButtonContentChange()); + contentChangeList.add(new CellGUIAttrContentChange()); + contentChangeList.add(new SelectCountContentChange()); + contentChangeList.add(new WidgetTitleContentChange()); + contentChangeList.add(new FunctionGrouperContentChange()); } 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 index be6e6e4ecb..4ca6276375 100644 --- 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 @@ -3,7 +3,8 @@ 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.design.mod.impl.repalce.DSColumn4TableDataNameContentReplacer; +import com.fr.design.mod.impl.repalce.DSColumn4WidgetNameContentReplacer; import com.fr.report.cell.cellattr.core.group.DSColumn; import java.util.HashMap; import java.util.Map; @@ -19,7 +20,8 @@ public class DSColumnContentChange implements ContentChange { public DSColumnContentChange() { map = new HashMap<>(); - map.put(ChangeItem.TABLE_DATA_NAME, new DSColumnContentReplacer()); + map.put(ChangeItem.TABLE_DATA_NAME, new DSColumn4TableDataNameContentReplacer()); + map.put(ChangeItem.WIDGET_NAME, new DSColumn4WidgetNameContentReplacer()); } @Override diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java new file mode 100644 index 0000000000..0f785892d9 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CardSwitchButtonContentChange.java @@ -0,0 +1,36 @@ +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.form.ui.CardSwitchButton; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class CardSwitchButtonContentChange implements ContentChange { + + + private final Map> map; + + public CardSwitchButtonContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CardSwitchButton4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CardSwitchButton4TableDataNameContentReplacer); + } + + @Override + public String type() { + return CardSwitchButton.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java new file mode 100644 index 0000000000..c969a1e059 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellGUIAttrContentChange.java @@ -0,0 +1,35 @@ +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.CellGUIAttr; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class CellGUIAttrContentChange implements ContentChange { + + private Map> map; + + public CellGUIAttrContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CellGUIAttr4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CellGUIAttr4TableDataNameContentReplacer); + } + + @Override + public String type() { + return CellGUIAttr.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java new file mode 100644 index 0000000000..33947c832b --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FunctionGrouperContentChange.java @@ -0,0 +1,35 @@ +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.group.FunctionGrouper; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class FunctionGrouperContentChange implements ContentChange { + + private final Map> map; + + public FunctionGrouperContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FunctionGrouper4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FunctionGrouper4TableDataNameContentReplacer); + } + + @Override + public String type() { + return FunctionGrouper.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java new file mode 100644 index 0000000000..705bfc51b3 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/SelectCountContentChange.java @@ -0,0 +1,35 @@ +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.group.SelectCount; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class SelectCountContentChange implements ContentChange { + + private final Map> map; + + public SelectCountContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.SelectCount4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.SelectCount4TableDataNameContentReplacer); + } + + @Override + public String type() { + return SelectCount.class.getName(); + } + + @Override + public Map> changeInfo() { + return map; + } +} diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java new file mode 100644 index 0000000000..f4d8ff764f --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/change/formula/WidgetTitleContentChange.java @@ -0,0 +1,35 @@ +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.form.ui.WidgetTitle; +import java.util.HashMap; +import java.util.Map; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class WidgetTitleContentChange implements ContentChange { + + private final Map> map; + + public WidgetTitleContentChange() { + map = new HashMap<>(); + map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.WidgetTitle4WidgetNameContentReplacer); + map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.WidgetTitle4TableDataNameContentReplacer); + } + + @Override + public String type() { + return WidgetTitle.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/DSColumn4TableDataNameContentReplacer.java similarity index 55% rename from designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java rename to designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4TableDataNameContentReplacer.java index a1c131f6b5..548e2f4ee0 100644 --- 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/DSColumn4TableDataNameContentReplacer.java @@ -1,5 +1,6 @@ package com.fr.design.mod.impl.repalce; +import com.fr.design.mod.ContentReplaceUtil; import com.fr.design.mod.ContentReplacer; import com.fr.general.ComparatorUtils; import com.fr.report.cell.cellattr.core.group.DSColumn; @@ -9,12 +10,14 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; * @version 10.0 * Created by hades on 2021/6/2 */ -public class DSColumnContentReplacer implements ContentReplacer { +public class DSColumn4TableDataNameContentReplacer implements ContentReplacer { @Override public void replace(DSColumn dsColumn, String oldName, String newName) { if (ComparatorUtils.equals(dsColumn.getDSName(), oldName)) { dsColumn.setDSName(newName); } + dsColumn.setResult(ContentReplaceUtil.replacePureFormula4TableDataName(dsColumn.getResult(), oldName, newName)); + dsColumn.setSortFormula(ContentReplaceUtil.replacePureFormula4TableDataName(dsColumn.getSortFormula(), oldName, newName)); } } diff --git a/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java new file mode 100644 index 0000000000..ec14187057 --- /dev/null +++ b/designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumn4WidgetNameContentReplacer.java @@ -0,0 +1,19 @@ +package com.fr.design.mod.impl.repalce; + +import com.fr.design.mod.ContentReplaceUtil; +import com.fr.design.mod.ContentReplacer; +import com.fr.report.cell.cellattr.core.group.DSColumn; + +/** + * @author hades + * @version 10.0 + * Created by hades on 2021/6/3 + */ +public class DSColumn4WidgetNameContentReplacer implements ContentReplacer { + + @Override + public void replace(DSColumn dsColumn, String oldName, String newName) { + dsColumn.setResult(ContentReplaceUtil.replacePureFormula4WidgetName(dsColumn.getResult(), oldName, newName)); + dsColumn.setSortFormula(ContentReplaceUtil.replacePureFormula4WidgetName(dsColumn.getSortFormula(), oldName, newName)); + } +} 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 index b571010a05..7ed57b284f 100644 --- 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 @@ -7,8 +7,13 @@ 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.form.ui.CardSwitchButton; +import com.fr.form.ui.WidgetTitle; import com.fr.report.cell.cellattr.CellExpandAttr; +import com.fr.report.cell.cellattr.CellGUIAttr; import com.fr.report.cell.cellattr.core.RichChar; +import com.fr.report.cell.cellattr.core.group.FunctionGrouper; +import com.fr.report.cell.cellattr.core.group.SelectCount; /** * 持有公式内容对象汇总 @@ -148,4 +153,95 @@ public class FormulaReplacer { } }; + /** + * 公式分组 + * + */ + public static final ContentReplacer FunctionGrouper4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FunctionGrouper functionGrouper, String oldName, String newName) { + functionGrouper.setFormulaContent(ContentReplaceUtil.replacePureFormula4TableDataName(functionGrouper.getFormulaContent(), oldName, newName)); + } + }; + + public static final ContentReplacer FunctionGrouper4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(FunctionGrouper functionGrouper, String oldName, String newName) { + functionGrouper.setFormulaContent(ContentReplaceUtil.replacePureFormula4WidgetName(functionGrouper.getFormulaContent(), oldName, newName)); + } + }; + + /** + * 结果集筛选 + */ + public static final ContentReplacer SelectCount4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(SelectCount selectCount, String oldName, String newName) { + selectCount.setFormulaCount(ContentReplaceUtil.replacePureFormula4TableDataName(selectCount.getFormulaCount(), oldName, newName)); + } + }; + public static final ContentReplacer SelectCount4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(SelectCount selectCount, String oldName, String newName) { + selectCount.setFormulaCount(ContentReplaceUtil.replacePureFormula4WidgetName(selectCount.getFormulaCount(), oldName, newName)); + } + }; + + /** + * tab块标题 + */ + public static final ContentReplacer CardSwitchButton4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CardSwitchButton cardSwitchButton, String oldName, String newName) { + cardSwitchButton.setText(ContentReplaceUtil.replaceFormulaString4TableDataName(cardSwitchButton.getText(), oldName, newName)); + } + }; + + public static final ContentReplacer CardSwitchButton4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CardSwitchButton cardSwitchButton, String oldName, String newName) { + cardSwitchButton.setText(ContentReplaceUtil.replaceFormulaString4WidgetName(cardSwitchButton.getText(), oldName, newName)); + } + }; + + /** + * 悬浮提示 + */ + public static final ContentReplacer CellGUIAttr4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellGUIAttr cellGUIAttr, String oldName, String newName) { + cellGUIAttr.setTooltipText(ContentReplaceUtil.replaceFormulaString4TableDataName(cellGUIAttr.getTooltipText(), oldName, newName)); + } + }; + + public static final ContentReplacer CellGUIAttr4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(CellGUIAttr cellGUIAttr, String oldName, String newName) { + cellGUIAttr.setTooltipText(ContentReplaceUtil.replaceFormulaString4WidgetName(cellGUIAttr.getTooltipText(), oldName, newName)); + } + }; + + /** + * 图表/报表块等标题 + */ + public static final ContentReplacer WidgetTitle4TableDataNameContentReplacer = new ContentReplacer() { + @Override + public void replace(WidgetTitle widgetTitle, String oldName, String newName) { + if (widgetTitle.getTextObject() instanceof String) { + String content = (String) widgetTitle.getTextObject(); + widgetTitle.setTextObject(ContentReplaceUtil.replaceFormulaString4TableDataName(content, oldName, newName)); + } + } + }; + + public static final ContentReplacer WidgetTitle4WidgetNameContentReplacer = new ContentReplacer() { + @Override + public void replace(WidgetTitle widgetTitle, String oldName, String newName) { + if (widgetTitle.getTextObject() instanceof String) { + String content = (String) widgetTitle.getTextObject(); + widgetTitle.setTextObject(ContentReplaceUtil.replaceFormulaString4WidgetName(content, oldName, newName)); + } + } + }; + } From fb3a33186e4895428fcdc6e513c03b84830dd4f4 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Thu, 3 Jun 2021 17:10:56 +0800 Subject: [PATCH 14/18] =?UTF-8?q?REPORT-53019=20=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E5=9B=BD=E9=99=85=E5=8C=96=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/check/CheckButton.java | 17 ++++++++++++++- .../mainframe/check/CheckFontInfoDialog.java | 21 +++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java index e55f9a4817..b2fc99359d 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java @@ -10,6 +10,7 @@ import com.fr.design.mainframe.JTemplate; import com.fr.design.worker.save.CallbackSaveWorker; import com.fr.file.FILE; import com.fr.file.FileNodeFILE; +import com.fr.general.GeneralContext; import com.fr.log.FineLoggerFactory; import com.fr.rpc.ExceptionHandler; import com.fr.rpc.RPCInvokerExceptionInfo; @@ -27,6 +28,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.util.Locale; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -194,7 +196,7 @@ public class CheckButton extends UIButton { dialog = new JDialog(); dialog.setTitle(Toolkit.i18nText("Fine_Designer_Check_Font")); dialog.setModal(true); - dialog.setSize(new Dimension(268, 118)); + dialog.setSize(new Dimension(getDialogWidth(), 118)); JPanel jp = new JPanel(); JPanel upPane = new JPanel(); JPanel downPane = new JPanel(); @@ -211,4 +213,17 @@ public class CheckButton extends UIButton { dialog.setResizable(false); dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(this)); } + + private int getDialogWidth() { + Locale locale = GeneralContext.getLocale(); + if (locale.equals(Locale.US)) { + return 305; + } else if (locale.equals(Locale.JAPAN)) { + return 280; + } else if (locale.equals(Locale.KOREA)) { + return 230; + } else { + return 250; + } + } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java index 0d5771a494..752bf12a57 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java @@ -52,7 +52,7 @@ public class CheckFontInfoDialog extends JDialog implements ActionListener { MessageWithLink linkMessage = new MessageWithLink(Toolkit.i18nText("Fine_Designer_Check_Font_Message"), Toolkit.i18nText("Fine_Designer_Check_Font_Install_Font"), CloudCenter.getInstance().acquireUrlByKind("help.install.font", "https://help.fanruan.com/finereport/doc-view-3999.html")); - linkMessage.setPreferredSize(new Dimension(380, 31)); + linkMessage.setPreferredSize(new Dimension(getPaneWidth(), 31)); messagePanel.add(linkMessage); // 查看详情按钮 @@ -89,11 +89,11 @@ public class CheckFontInfoDialog extends JDialog implements ActionListener { public void mouseClicked(MouseEvent e) { if (hiddenPanel.isVisible()) { hiddenPanel.setVisible(false); - CheckFontInfoDialog.this.setSize(new Dimension(380, 185)); + CheckFontInfoDialog.this.setSize(new Dimension(getPaneWidth(), 185)); detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); } else { - CheckFontInfoDialog.this.setSize(new Dimension(380, 280)); + CheckFontInfoDialog.this.setSize(new Dimension(getPaneWidth(), 280)); hiddenPanel.setVisible(true); detailLabel.setText(Toolkit.i18nText("Fine_Designer_Hide_Detail")); directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); @@ -114,11 +114,24 @@ public class CheckFontInfoDialog extends JDialog implements ActionListener { this.add(topPanel, BorderLayout.NORTH); this.add(hiddenPanel, BorderLayout.CENTER); this.add(bottomPanel, BorderLayout.SOUTH); - this.setSize(new Dimension(GeneralContext.getLocale().equals(Locale.US)? 400:380, 185)); + this.setSize(new Dimension(getPaneWidth(), 185)); GUICoreUtils.centerWindow(this); } + private int getPaneWidth() { + Locale locale = GeneralContext.getLocale(); + if (locale.equals(Locale.US)) { + return 630; + } else if (locale.equals(Locale.JAPAN)) { + return 610; + } else if (locale.equals(Locale.KOREA)) { + return 490; + } else { + return 385; + } + } + @Override public void actionPerformed(ActionEvent e) { this.dispose(); From 188c446450aef515c386bee7db08f2c3589d021b Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Fri, 4 Jun 2021 09:29:47 +0800 Subject: [PATCH 15/18] =?UTF-8?q?REPORT-52525=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E5=99=A8=E6=95=B0=E6=8D=AE=E9=9B=86=E6=9F=A5=E8=AF=A2=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=A2=9E=E5=8A=A0=E5=A4=8D=E5=88=B6=E4=BC=A0=E5=8F=82?= =?UTF-8?q?=E5=90=8Esql=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../preview/sql/PreviewPerformedSqlPane.java | 31 +++++++++++++------ .../design/dialog/link/MessageWithLink.java | 5 +-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java index f0ed78c5ad..2800e6f759 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/sql/PreviewPerformedSqlPane.java @@ -16,6 +16,9 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.DesignerContext; import com.fr.design.parameter.ParameterInputPane; import com.fr.design.utils.gui.GUICoreUtils; +import com.fr.general.CloudCenter; +import com.fr.general.GeneralContext; +import com.fr.log.FineLoggerFactory; import com.fr.plugin.injectable.PluginModule; import com.fr.script.Calculator; import com.fr.stable.ArrayUtils; @@ -43,10 +46,10 @@ import java.awt.Frame; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -71,11 +74,17 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { if (isShowSpecialCharSqlPane(selectedSpecialCharIndex)) { imageLabel = new UILabel(UIManager.getIcon("OptionPane.warningIcon")); - MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), "https://help.fanruan.com/finereport/doc-view-2219.html", Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); messagePanel = new JPanel(); messagePanel.setLayout(FRGUIPaneFactory.createBorderLayout()); messagePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); - messagePanel.add(message); + // 日韩取消超链,直接显示文字 + if (isNotShowLink()) { + JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql_Message") + Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention") + Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); + messagePanel.add(label); + } else { + MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), CloudCenter.getInstance().acquireConf(Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention_Help"), "https://help.fanruan.com/finereport/doc-view-2219.html"), Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); + messagePanel.add(message); + } // 提示图标 JPanel tipPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); UILabel tipLabel = new UILabel(UIManager.getIcon("OptionPane.tipIcon")); @@ -114,7 +123,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { try { highLighter.addHighlight(specialCharIndex[0], specialCharIndex[1], p); } catch (BadLocationException e) { - e.printStackTrace(); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } } @@ -139,12 +148,16 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { GUICoreUtils.centerWindow(this); } + private boolean isNotShowLink() { + return GeneralContext.getLocale().equals(Locale.JAPAN) || GeneralContext.getLocale().equals(Locale.KOREA); + } + public static void previewPerformedSql(DBTableData tableData) { Calculator calculator = Calculator.createCalculator(); //参数 ParameterProvider[] parameters = DataOperator.getInstance().getTableDataParameters(tableData); if (ArrayUtils.isEmpty(parameters)) { - parameters = tableData.getParameters(Calculator.createCalculator()); + parameters = tableData.getParameters(calculator); } Map parameterMap = new HashMap<>(); if (needInputParams(parameters)) { @@ -187,7 +200,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { } String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); - if (oldSql.length() != sql.length()) { + if (!StringUtils.equals(oldSql, sql)) { highlight = false; } } @@ -209,12 +222,12 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener { } private static Parameter[] processParameters(DBTableData tableData, Calculator calculator) { - Collection parameters = tableData.getParameters(); - if (parameters.size() == 0) { + ParameterProvider[] parameters = tableData.getParameters(); + if (parameters == null || parameters.length == 0) { tableData.setParameters(ParameterHelper.analyze4Parameters(tableData.getQuery(), false)); return new Parameter[0]; } - return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters.toArray(new ParameterProvider[parameters.size()]))); + return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters)); } private static String processExtraSQL(Parameter[] ps, String sql, Calculator ca, Set tableDataProviders) { diff --git a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java index 2541a1b638..f73ec77df5 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java +++ b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java @@ -41,10 +41,7 @@ public class MessageWithLink extends JEditorPane { } public MessageWithLink(String message, String linkName, String link, Color color, Font font) { - super("text/html", "" + message + "" + linkName + "" + ""); - initListener(link); - setEditable(false); - setBorder(null); + this(message, linkName, link, StringUtils.EMPTY, color, font); } public MessageWithLink(String frontMessage, String linkName, String link, String backMessage, Color color, Font font) { From d51c5b42fa3b658f4a367a24a8552711be541d98 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 4 Jun 2021 13:52:59 +0800 Subject: [PATCH 16/18] =?UTF-8?q?REPORT-53197=20&&=20REPORT-53195=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=9B=86=E5=90=8D=E7=A7=B0=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mod/ContentReplaceUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 526280027f..1d8e73e840 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 @@ -83,7 +83,7 @@ public class ContentReplaceUtil { private static String replaceFormulaContent4TableDataName0(String content, String oldName, String newName) { content = getFormulaPureContent(content); FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer(); - frFormulaTransformer.addRenamedWidget(oldName, newName); + frFormulaTransformer.addRenamedDataset(oldName, newName); return EQ_STRING + frFormulaTransformer.transform(content); } From f0b03de062cecc49182128667000d2ef6e35b323 Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Fri, 4 Jun 2021 14:53:19 +0800 Subject: [PATCH 17/18] =?UTF-8?q?REPORT-53019=20=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E5=9B=BD=E9=99=85=E5=8C=96=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=8D=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/check/CheckButton.java | 33 +++++-------------- .../mainframe/check/CheckFontInfoDialog.java | 25 +++----------- .../fr/design/i18n/dimension_en.properties | 4 +++ .../fr/design/i18n/dimension_ja_JP.properties | 4 +++ .../fr/design/i18n/dimension_ko_KR.properties | 4 +++ .../fr/design/i18n/dimension_zh.properties | 4 +++ .../fr/design/i18n/dimension_zh_TW.properties | 4 +++ 7 files changed, 34 insertions(+), 44 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java index b2fc99359d..7757ea2f42 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckButton.java @@ -4,13 +4,14 @@ import com.fr.base.BaseUtils; import com.fr.design.dialog.FineJOptionPane; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.DesignSizeI18nManager; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; import com.fr.design.worker.save.CallbackSaveWorker; import com.fr.file.FILE; import com.fr.file.FileNodeFILE; -import com.fr.general.GeneralContext; +import com.fr.general.IOUtils; import com.fr.log.FineLoggerFactory; import com.fr.rpc.ExceptionHandler; import com.fr.rpc.RPCInvokerExceptionInfo; @@ -22,13 +23,11 @@ import javax.swing.JDialog; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; -import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.util.Locale; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -42,7 +41,7 @@ public class CheckButton extends UIButton { private UILabel message; private UIButton okButton; private JDialog dialog; - private UILabel uiLabel; + private UILabel imageLabel; public CheckButton() { this.setIcon(BaseUtils.readIcon("/com/fr/design/images/buttonicon/check.png")); @@ -73,7 +72,7 @@ public class CheckButton extends UIButton { } if (set.isEmpty()) { okButton.setEnabled(true); - uiLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/correct.png")); + imageLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/correct.png")); message.setText("" + Toolkit.i18nText("Fine_Designer_Check_Font_Success") + ""); } else { if (dialog != null) { @@ -163,7 +162,6 @@ public class CheckButton extends UIButton { }); checkThread.execute(); dialog.setVisible(true); - dialog.dispose(); } }; @@ -173,7 +171,7 @@ public class CheckButton extends UIButton { @Override public Void callHandler(RPCInvokerExceptionInfo rpcInvokerExceptionInfo) { - uiLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/error.png")); + imageLabel.setIcon(BaseUtils.readIcon("com/fr/design/images/error.png")); message.setText("" + Toolkit.i18nText("Fine_Designer_Check_Font_Upgrade") + ""); okButton.setEnabled(true); return null; @@ -185,7 +183,7 @@ public class CheckButton extends UIButton { private void initDialogPane() { message = new UILabel(); message.setText(Toolkit.i18nText("Fine-Designer_Check_Font_Checking") + "..."); - uiLabel = new UILabel(); + imageLabel = new UILabel(); okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); okButton.setEnabled(false); okButton.addActionListener(new ActionListener() { @@ -196,13 +194,13 @@ public class CheckButton extends UIButton { dialog = new JDialog(); dialog.setTitle(Toolkit.i18nText("Fine_Designer_Check_Font")); dialog.setModal(true); - dialog.setSize(new Dimension(getDialogWidth(), 118)); + dialog.setSize(DesignSizeI18nManager.getInstance().i18nDimension(this.getClass().getName())); JPanel jp = new JPanel(); JPanel upPane = new JPanel(); JPanel downPane = new JPanel(); - uiLabel = new UILabel(BaseUtils.readIcon("com/fr/design/images/waiting.png")); + imageLabel = new UILabel(IOUtils.readIcon("com/fr/design/images/waiting.png")); upPane.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10)); - upPane.add(uiLabel); + upPane.add(imageLabel); upPane.add(message); downPane.setLayout(new FlowLayout(FlowLayout.CENTER, 6, 0)); downPane.add(okButton); @@ -213,17 +211,4 @@ public class CheckButton extends UIButton { dialog.setResizable(false); dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(this)); } - - private int getDialogWidth() { - Locale locale = GeneralContext.getLocale(); - if (locale.equals(Locale.US)) { - return 305; - } else if (locale.equals(Locale.JAPAN)) { - return 280; - } else if (locale.equals(Locale.KOREA)) { - return 230; - } else { - return 250; - } - } } diff --git a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java index 752bf12a57..0671ed1b63 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/check/CheckFontInfoDialog.java @@ -3,11 +3,11 @@ package com.fr.design.mainframe.check; import com.fr.design.dialog.link.MessageWithLink; import com.fr.design.gui.ibutton.UIButton; import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.DesignSizeI18nManager; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.general.CloudCenter; -import com.fr.general.GeneralContext; import com.fr.general.IOUtils; import javax.swing.BorderFactory; @@ -17,13 +17,11 @@ import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import java.awt.BorderLayout; -import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.Locale; /** * 字体缺失检测的具体结果对话框 @@ -52,7 +50,7 @@ public class CheckFontInfoDialog extends JDialog implements ActionListener { MessageWithLink linkMessage = new MessageWithLink(Toolkit.i18nText("Fine_Designer_Check_Font_Message"), Toolkit.i18nText("Fine_Designer_Check_Font_Install_Font"), CloudCenter.getInstance().acquireUrlByKind("help.install.font", "https://help.fanruan.com/finereport/doc-view-3999.html")); - linkMessage.setPreferredSize(new Dimension(getPaneWidth(), 31)); + linkMessage.setPreferredSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink")); messagePanel.add(linkMessage); // 查看详情按钮 @@ -89,11 +87,11 @@ public class CheckFontInfoDialog extends JDialog implements ActionListener { public void mouseClicked(MouseEvent e) { if (hiddenPanel.isVisible()) { hiddenPanel.setVisible(false); - CheckFontInfoDialog.this.setSize(new Dimension(getPaneWidth(), 185)); + CheckFontInfoDialog.this.setSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.mainframe.check.CheckFontInfoDialog.collapse")); detailLabel.setText(Toolkit.i18nText("Fine_Designer_Look_Detail")); directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.right")); } else { - CheckFontInfoDialog.this.setSize(new Dimension(getPaneWidth(), 280)); + CheckFontInfoDialog.this.setSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.mainframe.check.CheckFontInfoDialog.unfold")); hiddenPanel.setVisible(true); detailLabel.setText(Toolkit.i18nText("Fine_Designer_Hide_Detail")); directUiLabel.setIcon(UIManager.getIcon("OptionPane.narrow.down")); @@ -114,24 +112,11 @@ public class CheckFontInfoDialog extends JDialog implements ActionListener { this.add(topPanel, BorderLayout.NORTH); this.add(hiddenPanel, BorderLayout.CENTER); this.add(bottomPanel, BorderLayout.SOUTH); - this.setSize(new Dimension(getPaneWidth(), 185)); + this.setSize(DesignSizeI18nManager.getInstance().i18nDimension("com.fr.design.mainframe.check.CheckFontInfoDialog.collapse")); GUICoreUtils.centerWindow(this); } - private int getPaneWidth() { - Locale locale = GeneralContext.getLocale(); - if (locale.equals(Locale.US)) { - return 630; - } else if (locale.equals(Locale.JAPAN)) { - return 610; - } else if (locale.equals(Locale.KOREA)) { - return 490; - } else { - return 385; - } - } - @Override public void actionPerformed(ActionEvent e) { this.dispose(); diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties index 1cafa6d35d..23abf1ba42 100644 --- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties +++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_en.properties @@ -1 +1,5 @@ +com.fr.design.mainframe.check.CheckButton=305*118 +com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=630*185 +com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=630*31 +com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=630*280 com.fr.design.report.ReportColumnsPane=800*600 diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties index e69de29bb2..97c7a38b66 100644 --- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties +++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ja_JP.properties @@ -0,0 +1,4 @@ +com.fr.design.mainframe.check.CheckButton=280*118 +com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=610*185 +com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=610*31 +com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=610*280 \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties index e69de29bb2..4ebb3e1edc 100644 --- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties +++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_ko_KR.properties @@ -0,0 +1,4 @@ +com.fr.design.mainframe.check.CheckButton=230*118 +com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=490*185 +com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=490*31 +com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=490*280 \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties index 69c2fcef48..85eb5c5525 100644 --- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties +++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh.properties @@ -1 +1,5 @@ # \u9ED8\u8BA4\u4E3A\u7C7B\u7684\u5168\u9650\u5B9A\u540D\uFF08\u53EF\u81EA\u5B9A\u4E49key\uFF09= width * height +com.fr.design.mainframe.check.CheckButton=250*118 +com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=385*185 +com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=385*31 +com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=385*280 \ No newline at end of file diff --git a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties index e69de29bb2..d6bdbbc64a 100644 --- a/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties +++ b/designer-base/src/main/resources/com/fr/design/i18n/dimension_zh_TW.properties @@ -0,0 +1,4 @@ +com.fr.design.mainframe.check.CheckButton=250*118 +com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=385*185 +com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=385*31 +com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=385*280 \ No newline at end of file From c7e5f22acfccf44c58dfa246a6aabe15dfbc9da9 Mon Sep 17 00:00:00 2001 From: hades Date: Fri, 4 Jun 2021 15:20:18 +0800 Subject: [PATCH 18/18] =?UTF-8?q?REPORT-53216=20=E5=8A=A0=E9=80=9F?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=20=E8=BF=87=E6=BB=A4=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E8=AE=A1=E5=99=A8=E4=B8=AD=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/fr/design/mod/ModClassFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 7caa88ac49..a8df5fae68 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 @@ -17,6 +17,8 @@ public class ModClassFilter implements Filter { private static final Filter INSTANCE = new ModClassFilter(); + private static final String DESIGN_PREFIX = "com.fr.design"; + public static Filter getInstance() { return INSTANCE; } @@ -31,6 +33,6 @@ public class ModClassFilter implements Filter { @Override public boolean accept(String s) { - return FILTER_SET.contains(s); + return FILTER_SET.contains(s) || s.startsWith(DESIGN_PREFIX); } }