From 9ed353d15eae73778329633a9db1f377dd165802 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:44:56 +0800 Subject: [PATCH 01/17] =?UTF-8?q?REPORT-75998=20=E5=9B=BD=E9=99=85?= =?UTF-8?q?=E5=8C=96=E3=80=81=E8=8F=9C=E5=8D=95=E6=8F=92=E5=85=A5=E3=80=81?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/toolbar/ToolBarMenuDock.java | 8 +++++++ .../fr/design/module/DesignModuleFactory.java | 7 ++++++ .../com/fr/design/actions/NewFormAction.java | 2 +- .../designer/beans/models/SelectionModel.java | 23 +++++++++++++++++++ .../main/java/com/fr/design/fit/NewJForm.java | 4 ++-- 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java index 6aabb9ff5..6a83a159b 100644 --- a/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java +++ b/designer-base/src/main/java/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java @@ -60,6 +60,7 @@ import com.fr.design.menu.MenuDef; import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.ShortCut; import com.fr.design.menu.ToolBarDef; +import com.fr.design.module.DesignModuleFactory; import com.fr.design.os.impl.SupportOSImpl; import com.fr.design.remote.action.RemoteDesignAuthManagerAction; import com.fr.design.update.actions.SoftwareUpdateAction; @@ -579,6 +580,13 @@ public abstract class ToolBarMenuDock { } shortCuts.add(new AboutAction()); + try { + if (DesignModuleFactory.getITReplaceAction() != null) { + shortCuts.add((ShortCut) DesignModuleFactory.getITReplaceAction().newInstance()); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } return shortCuts.toArray(new ShortCut[0]); } diff --git a/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java b/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java index 5ff882f64..ab751296d 100644 --- a/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java +++ b/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java @@ -47,6 +47,7 @@ public class DesignModuleFactory { private Class autoChartDialogClass; private Class chartPropertyPaneClass; private Class newFormAction; + private Class ITReplaceAction; private Class formParaDesigner; private Class paraPropertyPane; private Class formHierarchyPaneCls; @@ -116,6 +117,12 @@ public class DesignModuleFactory { public static Class getNewFormAction() { return instance.newFormAction; } + public static void registerReplaceActionClass(Class r){ + instance.ITReplaceAction = r; + } + public static Class getITReplaceAction(){ + return instance.ITReplaceAction; + } public static void registerParaPropertyPaneClass(Class p) { instance.paraPropertyPane = p; diff --git a/designer-form/src/main/java/com/fr/design/actions/NewFormAction.java b/designer-form/src/main/java/com/fr/design/actions/NewFormAction.java index 5ce51b673..aa50c13f6 100644 --- a/designer-form/src/main/java/com/fr/design/actions/NewFormAction.java +++ b/designer-form/src/main/java/com/fr/design/actions/NewFormAction.java @@ -43,7 +43,7 @@ public class NewFormAction extends UpdateAction { @Override public KeyStroke getKeyStroke() { - return KeyStroke.getKeyStroke(KeyEvent.VK_F, DEFAULT_MODIFIER); + return null; } }; } diff --git a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java index 997af89c7..f75e08d72 100644 --- a/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java +++ b/designer-form/src/main/java/com/fr/design/designer/beans/models/SelectionModel.java @@ -131,6 +131,29 @@ public class SelectionModel { } } + /** + * 用于强制定位所需组件,不对布局组件的顶层布局进行编辑判定,即使上层未展开或者未处于编辑状态依然可以强制跳转到对应的子组件 + * @param comp 设计组件 + */ + public void selectACreator4ITLocation(XCreator comp) { + // 如果父层是scale和title两个专属容器,返回其父层,组件本身是不让被选中的 + if (comp != designer.getRootComponent() && comp != designer.getParaComponent()) { + dealParentContainer(comp); + } + if (selection.removeSelectedCreator(comp) || selection.addSelectedCreator(comp)) { + designer.getEditListenerTable().fireCreatorModified(comp, DesignerEvent.CREATOR_SELECTED); + designer.repaint(); + } + } + + private void dealParentContainer(XCreator comp) { + XCreator parentContainer = (XCreator) comp.getParent(); + if (parentContainer != null) { + comp = parentContainer.isDedicateContainer() || comp instanceof XCardSwitchButton ? parentContainer : comp; + } + + } + /** * 将所选组件剪切到剪切板上 */ diff --git a/designer-form/src/main/java/com/fr/design/fit/NewJForm.java b/designer-form/src/main/java/com/fr/design/fit/NewJForm.java index 314097bcf..62c38ca22 100644 --- a/designer-form/src/main/java/com/fr/design/fit/NewJForm.java +++ b/designer-form/src/main/java/com/fr/design/fit/NewJForm.java @@ -243,7 +243,7 @@ public class NewJForm extends JForm { return; } if (xCreator instanceof XElementCase) { - getFormDesign().getSelectionModel().selectACreator(xCreator); + getFormDesign().getSelectionModel().selectACreator4ITLocation(xCreator); xCreator.startEditing(); if (getElementCaseDesign() != null) { getElementCaseDesign().navigate(trl); @@ -251,7 +251,7 @@ public class NewJForm extends JForm { } else { tabChanged(FORM_TAB); getFormDesign().getSelectionModel().reset(); - getFormDesign().getSelectionModel().selectACreator(xCreator); + getFormDesign().getSelectionModel().selectACreator4ITLocation(xCreator); } }, XCreator.class); } From 0a34ba980ad853b23ad9d2f0cbbef72a053c6eda Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:51:16 +0800 Subject: [PATCH 02/17] =?UTF-8?q?REPORT-75998=20=E4=B8=BB=E8=A6=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E3=80=81=E8=A1=A5=E5=85=85=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E3=80=81=E9=97=AA=E7=83=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/replace/action/SearchAction.java | 23 ++++++++++ .../actions/replace/action/ShowValue.java | 30 +++++++++++++ .../action/content/formula/SearchFormula.java | 23 ++++++++++ .../formula/cell/SearchCellFormula.java | 34 ++++++++++++++ .../formula/data/SearchDataFormula.java | 22 +++++++++ .../floatelement/SearchFloatFormula.java | 33 ++++++++++++++ .../highlight/SearchHighlightFormula.java | 20 +++++++++ .../condition/SearchConditionFormula.java | 23 ++++++++++ .../highlight/javascript/SearchJSFormula.java | 33 ++++++++++++++ .../template/SearchTemplateFormula.java | 32 +++++++++++++ .../formula/widget/DictionaryAction.java | 23 ++++++++++ .../formula/widget/SearchWidgetFormula.java | 42 +++++++++++++++++ .../content/widget/SearchFrmWidget.java | 24 ++++++++++ .../replace/info/DealWithInfoValue.java | 45 +++++++++++++++++++ .../fr/design/actions/replace/info/Info.java | 39 ++++++++++++++++ .../mainframe/ReportComponentComposite.java | 5 ++- .../fr/start/module/DesignerActivator.java | 2 + 17 files changed, 451 insertions(+), 2 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java new file mode 100644 index 000000000..3d44d92e6 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java @@ -0,0 +1,23 @@ +package com.fr.design.actions.replace.action; + +import com.fr.design.actions.replace.info.Info; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-11 + */ +public interface SearchAction { + + /** + * 搜索模板,获取信息列表 + * + * @param jTemplate 指定搜索的模板 + * @return 对应的Info信息列表 + */ + ArrayList search4Infos(JTemplate jTemplate); + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java new file mode 100644 index 000000000..8ee365b2e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java @@ -0,0 +1,30 @@ +package com.fr.design.actions.replace.action; + +import com.fr.design.actions.replace.info.Info; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ +public interface ShowValue { + + /** + * 获取搜索结果 + * @param jTemplate + * @return + */ + ArrayList showSearchValue(JTemplate jTemplate); + + /** + * 对搜索结果进行过滤 + * @param str + * @param arrayList + * @return + */ + ArrayList addMatchResult(String str,ArrayList arrayList); + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java new file mode 100644 index 000000000..49b5b8198 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java @@ -0,0 +1,23 @@ +package com.fr.design.actions.replace.action.content.formula; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; + + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public interface SearchFormula extends SearchAction { + /** + * 获取公式 + * + * @param formulaInfos 存储公式信息的列表 + * @param content ITContent的数据结构 + */ + void searchFormula(ArrayList formulaInfos, ITContent content); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java new file mode 100644 index 000000000..80811f33f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java @@ -0,0 +1,34 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * 查找单元格中可能存在的公式 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public interface SearchCellFormula extends SearchFormula { + + /** + * 查找单元格可能存在的共有的公式 + * + * @param jTemplate 指定搜索模板 + * @param formulaInfos 要存储对应信息列表的数据结构 + */ + void searchFormulaFromCell(JTemplate jTemplate, ArrayList formulaInfos); + + /** + * 查找不同单元格内容类型各自可能存在的公式 + * + * @param formulaInfos + * @param content + */ + void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java new file mode 100644 index 000000000..4d93f604b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java @@ -0,0 +1,22 @@ +package com.fr.design.actions.replace.action.content.formula.data; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-26 + */ +public interface SearchDataFormula extends SearchFormula { + /** + * 从数据集类型中去获取公式 + * @param jTemplate + * @param fomulaInfos + */ + void searchFormulaFromData(JTemplate jTemplate, ArrayList fomulaInfos); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java new file mode 100644 index 000000000..6e5db9fee --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java @@ -0,0 +1,33 @@ +package com.fr.design.actions.replace.action.content.formula.floatelement; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.FloatInfo; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public interface SearchFloatFormula extends SearchFormula { + + /** + * 查找悬浮元素可能存在的共有的公式 + * + * @param floatInfo FloatInfo信息 + * @param formulaInfos 要存储对应信息列表的数据结构 + */ + void searchFormulaFromFloat(ArrayList formulaInfos, FloatInfo floatInfo); + + /** + * 查找不同悬浮元素内容类型各自可能存在的公式 + * + * @param formulaInfos 要存储对应信息列表的数据结构 + * @param floatInfo FloatInfo信息 + */ + void searchFormulaFromFloatType(ArrayList formulaInfos, FloatInfo floatInfo); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java new file mode 100644 index 000000000..7a787901c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java @@ -0,0 +1,20 @@ +package com.fr.design.actions.replace.action.content.formula.highlight; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.report.cell.cellattr.highlight.HighlightAction; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public interface SearchHighlightFormula extends SearchFormula { + + //处理条件属性中各种属性 + void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction); + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java new file mode 100644 index 000000000..00f71b75f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java @@ -0,0 +1,23 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.condition; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.general.data.Condition; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public interface SearchConditionFormula { + /** + * 从条件相关对象中获取公式 + * @param formulaInfos + * @param content + * @param condition + */ + void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java new file mode 100644 index 000000000..ccbf8d1b7 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java @@ -0,0 +1,33 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.js.JavaScript; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public interface SearchJSFormula extends SearchHighlightFormula { + + /** + * 对各种类型的JS分别处理,获取各自其他地方的公式 + * @param formulaInfos + * @param content + * @param javaScript + */ + void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript); + + /** + * 从超链中的参数获取公式 + * @param formulaInfos + * @param content + * @param javaScript + */ + void addFormulaInfosFromJSPara(ArrayList formulaInfos, ITContent content, JavaScript javaScript); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java new file mode 100644 index 000000000..169bc5dc3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java @@ -0,0 +1,32 @@ +package com.fr.design.actions.replace.action.content.formula.template; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public interface SearchTemplateFormula extends SearchFormula { + + /** + * 搜索全局水印中的公式 + * @param jTemplate + * @param formulaInfos + * @param content + */ + void searchTemplateWaterMarkFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content); + + /** + * 搜索全局参数中的公式 + * @param jTemplate + * @param formulaInfos + * @param content + */ + void searchTemplateParaFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java new file mode 100644 index 000000000..f5a7610b9 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java @@ -0,0 +1,23 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.data.Dictionary; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ +public interface DictionaryAction { + + /** + * 从数据字典中获取公式 + * @param content + * @param formulaInfos + * @param dictionary + */ + void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java new file mode 100644 index 000000000..1064dee36 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java @@ -0,0 +1,42 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.form.ui.Widget; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public interface SearchWidgetFormula extends SearchFormula { + + /** + * 从WidgetInfos列表中搜索所有公式 + * + * @param widgetInfo 对应的Info信息列表 + * @param formulaInfos 要存储进去的公式信息列表 + */ + void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList formulaInfos); + + /** + * 从控件的不同类型中获取公式 + * + * @param content 对应的ITContent数据结构 + * @param formulaInfos 要存储进去的公式信息列表 + */ + void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos); + + /** + * 从控件值中获取公式 + * + * @param content 对应的ITContent数据结构 + * @param formulaInfos 要存储进去的公式信息列表 + */ + void searchFormulaFromWidgetValue(ITContent content, ArrayList formulaInfos); + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java new file mode 100644 index 000000000..95aa3c11c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java @@ -0,0 +1,24 @@ +package com.fr.design.actions.replace.action.content.widget; + +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WLayout; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-29 + */ +public interface SearchFrmWidget { + + /** + * 将决策报表的控件加入数组中 + * @param content ITContent信息 + * @param widget 对应的控件 + * @return + */ + ArrayList addFrmWidget2Array(ITContent content, Widget widget); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java new file mode 100644 index 000000000..ecde8d185 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java @@ -0,0 +1,45 @@ +package com.fr.design.actions.replace.info; + +import com.fr.design.actions.replace.info.base.ITContent; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 处理信息 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-23 + */ +public interface DealWithInfoValue { + + /** + * 获取存储的值 + * + * @param o 用于替换的replaceObject + * @return 返回便于处理的HashMap(不同类型可能会存在多个需要存储的数据,eg:控件名 & 水印) + */ + HashMap getValue(Object... o); + + + /** + * 替换时调用的方法,设置值 + * + * @param info 用于获取值和设置值 + * @param findStr 要被替换的字符串 + * @param replaceStr 用于替换的字符串 + * @param operatorArray 存储内容类替换所要操作的所有位置(Pair<起始位置,结束位置>) + */ + void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray); + + + /** + * 获取用于展示给用户的值 + * + * @param info 信息 + * @return 返回用于展示的字符串 + */ + String getInfoShowStr(Info info); +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java new file mode 100644 index 000000000..9b318a217 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java @@ -0,0 +1,39 @@ +package com.fr.design.actions.replace.info; + +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.stable.StringUtils; + + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public interface Info extends DealWithInfoValue{ + + /** + * 获取ITContent + * @return + */ + ITContent getContent(); + + + /** + * 更新旧值 + * @param oldShowStr + * @param lastSearchStr + */ + default void updateOldStr(String oldShowStr, String lastSearchStr){ + this.getContent().setOldShowStr(oldShowStr); + this.getContent().setLastSearchStr(lastSearchStr); + } + + /** + * 校验正确性(是否被修改) + * @return + */ + default Boolean checkValid(){ + //todo 完善所有类型的校验 + return true; + }; +} diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/ReportComponentComposite.java b/designer-realize/src/main/java/com/fr/design/mainframe/ReportComponentComposite.java index d0f6a114d..a14573c6e 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/ReportComponentComposite.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/ReportComponentComposite.java @@ -2,6 +2,7 @@ package com.fr.design.mainframe; import com.fr.base.ScreenResolution; import com.fr.base.TRL; +import com.fr.design.actions.replace.ui.ITReplaceMainDialog; import com.fr.design.base.mode.DesignModeContext; import com.fr.design.designer.EditingState; import com.fr.design.event.RemoveListener; @@ -140,8 +141,8 @@ public class ReportComponentComposite extends JComponent implements RemoveListen Grid grid = centerCardPane.editingComponet.elementCasePane.getGrid(); this.centerCardPane.editingComponet.elementCasePane.getGrid().addMouseWheelListener(new ReportComponentCompositeMouseWheelHandler(this)); - - if (!grid.hasFocus() && grid.isRequestFocusEnabled()) { + //!ITReplaceMainDialog.isITReplaceFlag()用于解决查找替换面板闪烁问题 + if (!grid.hasFocus() && grid.isRequestFocusEnabled() && !ITReplaceMainDialog.isITReplaceFlag()) { grid.requestFocus(); } } 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 b69eda799..92d1fc6a4 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 @@ -31,6 +31,7 @@ import com.fr.design.actions.insert.flot.ChartFloatAction; import com.fr.design.actions.insert.flot.FormulaFloatAction; import com.fr.design.actions.insert.flot.ImageFloatAction; import com.fr.design.actions.insert.flot.TextBoxFloatAction; +import com.fr.design.actions.replace.ITReplaceAction; import com.fr.design.bridge.DesignToolbarProvider; import com.fr.design.constants.DesignerLaunchStatus; import com.fr.design.env.DesignerWorkspaceLoader; @@ -466,6 +467,7 @@ public class DesignerActivator extends Activator implements Prepare { StableFactory.registerMarkedObject(DesignToolbarProvider.STRING_MARKED, WidgetToolBarPane.getInstance()); DesignModuleFactory.registerNewFormActionClass(NewFormAction.class); + DesignModuleFactory.registerReplaceActionClass(ITReplaceAction.class); DesignModuleFactory.registerFormParaDesignerClass(FormParaDesigner.class); DesignModuleFactory.registerParaPropertyPaneClass(ParameterPropertyPane.class); DesignModuleFactory.registerFormHierarchyPaneClass(FormHierarchyTreePane.class); From e340676c63907335b137b2c6b27e2326356274aa Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:54:48 +0800 Subject: [PATCH 03/17] =?UTF-8?q?REPORT-75998=20=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB=E3=80=81UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/replace/ITReplaceAction.java | 63 ++++ .../actions/replace/ui/ITComboBoxEditor.java | 113 ++++++ .../replace/ui/ITReplaceMainDialog.java | 246 ++++++++++++ .../replace/ui/ITReplaceNorthPanel.java | 352 ++++++++++++++++++ .../replace/ui/ITReplaceSouthPanel.java | 44 +++ .../replace/ui/ITReplaceWestPanel.java | 45 +++ .../actions/replace/ui/ITTableButton.java | 102 +++++ .../actions/replace/ui/ITTableEditor.java | 225 +++++++++++ .../actions/replace/ui/ITTableEditorPane.java | 265 +++++++++++++ .../actions/replace/utils/SearchJSUtils.java | 256 +++++++++++++ .../actions/replace/utils/ShowValueUtils.java | 91 +++++ 11 files changed, 1802 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java new file mode 100644 index 000000000..1a9f67bb8 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ITReplaceAction.java @@ -0,0 +1,63 @@ +package com.fr.design.actions.replace; + +import com.fr.design.actions.UpdateAction; +import com.fr.design.dialog.UIDialog; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.i18n.Toolkit; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.menu.MenuKeySet; +import com.fr.design.actions.replace.ui.ITReplaceMainDialog; +import com.fr.design.utils.gui.GUICoreUtils; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +import static com.fr.design.gui.syntax.ui.rtextarea.RTADefaultInputMap.DEFAULT_MODIFIER; + +/** + * 将全局查找替换选项插入帮助菜单底部 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-10 + */ +public class ITReplaceAction extends UpdateAction { + public ITReplaceAction() { + this.setMenuKeySet(IT_REPLACE); + this.setName(getMenuKeySet().getMenuName()); + this.setMnemonic(getMenuKeySet().getMnemonic()); + this.setAccelerator(getMenuKeySet().getKeyStroke()); + } + + private static final MenuKeySet IT_REPLACE = new MenuKeySet() { + @Override + public char getMnemonic() { + return 'I'; + } + + @Override + public String getMenuName() { + return Toolkit.i18nText("Fine-Design_Replace_Title"); + } + + @Override + public KeyStroke getKeyStroke() { + return KeyStroke.getKeyStroke(KeyEvent.VK_F, DEFAULT_MODIFIER); + } + }; + + /** + * 点击选项后的行为 + * + * @param event + */ + public void actionPerformed(ActionEvent event) { + ITReplaceMainDialog mainFrame = ITReplaceMainDialog.getInstance(); + mainFrame.setVisible(true); + + } + +} + diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java new file mode 100644 index 000000000..93a6f2894 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java @@ -0,0 +1,113 @@ +package com.fr.design.actions.replace.ui; + +import com.fr.design.gui.itextfield.UITextField; +import com.fr.general.ComparatorUtils; +import com.fr.stable.Constants; +import com.fr.stable.StringUtils; + +import javax.swing.plaf.basic.BasicComboBoxEditor; +import java.awt.*; +import java.awt.event.ActionListener; +import java.lang.reflect.Method; + +/** + * 渲染带有默认值的ComboBox + * UIComboBox中设置默认值会整体上移,需要自己重新实现一个 + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-02 + */ +public class ITComboBoxEditor extends BasicComboBoxEditor { + protected UITextField textField; + private Object oldValue; + + /** + * 构造时重新设置一下TextField的上边距 + */ + public ITComboBoxEditor() { + textField = new UITextField(){ + @Override + public Insets getInsets() { + return new Insets(4, 4, 0, 4); + } + }; + textField.setRectDirection(Constants.RIGHT); + } + + @Override + public Component getEditorComponent() { + return textField; + } + + /** + * 设置选项 + * @param anObject 选项 + */ + @Override + public void setItem(Object anObject) { + if (anObject != null) { + + textField.setText(anObject.toString()); + oldValue = anObject; + } else { + textField.setText(StringUtils.EMPTY); + } + + } + + /** + * 获取选项 + * @return 选项 + * + */ + @Override + public Object getItem() { + Object newValue = textField.getText(); + if (oldValue != null && !(oldValue instanceof String)) { + // The original value is not a string. Should return the value in it's + // original type. + if(ComparatorUtils.equals(newValue,oldValue.toString())) { + return oldValue; + } else { + // Must take the value from the textField and get the value and cast it to the new type. + Class cls = oldValue.getClass(); + try { + Method method = cls.getMethod("valueOf", new Class[]{String.class}); + newValue = method.invoke(oldValue, new Object[]{textField.getText()}); + } catch (Exception ex) { + // Fail silently and return the newValue (a String object) + } + } + } + return newValue; + + } + + /** + * 选择所有 + */ + @Override + public void selectAll() { + textField.selectAll(); + textField.requestFocus(); + } + + /** + * 添加监听 + * @param l 监听 + */ + @Override + public void addActionListener(ActionListener l) { + textField.addActionListener(l); + } + + /** + * 移除监听 + * @param l 监听 + */ + @Override + public void removeActionListener(ActionListener l) { + textField.removeActionListener(l); + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java new file mode 100644 index 000000000..d5fccede4 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java @@ -0,0 +1,246 @@ +package com.fr.design.actions.replace.ui; + + +import com.fr.design.actions.replace.action.ShowSearchResultAction; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.design.data.DesignTableDataManager; +import com.fr.design.data.datapane.TableDataPaneListPane; +import com.fr.design.dialog.FineJOptionPane; +import com.fr.design.dialog.UIDialog; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.DesignerContext; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.TableDataConfig; +import com.fr.general.GeneralUtils; +import com.fr.main.impl.WorkBook; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 主面板 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-10 + */ +public class ITReplaceMainDialog extends UIDialog { + ArrayList searchResultList = new ArrayList<>(); + private static boolean ITReplaceFlag = false; + private static volatile ITReplaceMainDialog instance = null; + private static String templateID; + private static int selectCount; + private ITReplaceNorthPanel northPane; + private ITReplaceSouthPanel southPanel; + private ITReplaceWestPanel westPanel; + + private ITReplaceMainDialog() { + super(DesignerContext.getDesignerFrame()); + init(); + } + + /** + * 初始化 + */ + public void init() { + setTitle(Toolkit.i18nText("Fine-Design_Replace_Title")); + initFrame(); + fitScreen(); + ITReplaceFlag = true; + } + + /** + * DCL + * + * @return 面板 + */ + public static ITReplaceMainDialog getInstance() { + if (instance == null) { + synchronized (ITReplaceMainDialog.class) { + if (instance == null) { + instance = new ITReplaceMainDialog(); + } + } + } + instance.fitScreen(); + return instance; + } + + + /** + * 适配屏幕 + */ + public void fitScreen() { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + int height = 385; + int width = jTemplate.getWidth(); + Point point = jTemplate.getLocationOnScreen(); + setModal(false); + setMaximumSize(new Dimension(jTemplate.getWidth(), jTemplate.getHeight())); + setMinimumSize(new Dimension(jTemplate.getWidth(), 240)); + setSize(width, height); + setLocation(new Point(point.x, point.y + jTemplate.getHeight() / 2 + jTemplate.getHeight() / 2 - 385)); + + northPane.fitScreen(0, 0, jTemplate.getWidth()); + } + + + /** + * 创建面板 + */ + public void initFrame() { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + northPane = new ITReplaceNorthPanel(); + southPanel = new ITReplaceSouthPanel(); + westPanel = new ITReplaceWestPanel(); + + northPane.fitScreen(0, 0, jTemplate.getWidth()); + + JPanel center = new JPanel(new BorderLayout()); + + northPane.getFindInputCombobox().setEditable(true); + northPane.getReplaceInputCombobox().setEditable(false); + + + ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).setPlaceholder(Toolkit.i18nText("Fine-Design_Replace_Search_Input")); + ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setPlaceholder(Toolkit.i18nText("Fine-Design_Replace_Input")); + ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + search(); + String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(); + if (!StringUtils.isEmpty(searchStr)) { + ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setEditable(true); + northPane.getReplaceInputCombobox().setEditable(true); + } else { + ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setEditable(false); + northPane.getReplaceInputCombobox().setEditable(false); + } + } + }); + ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + replace(); + } + + + }); + center.add(northPane.getUpPanel(), BorderLayout.NORTH); + center.add(southPanel.getTableEditorPane(), BorderLayout.CENTER); + add(westPanel.getLeftJpanel(), BorderLayout.WEST); + //主体部分 + add(center, BorderLayout.CENTER); + center.setVisible(true); + } + + /** + * 替换 + */ + private void replace() { + if (isITReplaceValid() && checkTemplateChanged(searchResultList)) { + String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(); + String replaceStr = ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).getText(); + + + for (Info info : searchResultList) { + if (info.getContent().isSelected()) { + info.setValue(info, searchStr, replaceStr, info.getContent().getOperatorArray()); + ShowValueUtils.updateHighlight(info, replaceStr); + } + } + southPanel.getTableEditorPane().update(); + northPane.refreshReplaceInputComboBoxItems(); + ITTableEditorPane.getEditTable().repaint(); + HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().fireTargetModified(true); + + + } else { + Object[] options = new Object[]{Toolkit.i18nText("Fine-Design_Replace_Search_Again"), Toolkit.i18nText("Fine-Engine_Basic_Cancel")}; + int optionSelected = FineJOptionPane.showOptionDialog( + ITReplaceMainDialog.this, + Toolkit.i18nText("Fine-Design_Replace_Message"), + Toolkit.i18nText("Fine-Design_Basic_Tool_Tips"), + JOptionPane.YES_NO_CANCEL_OPTION, + JOptionPane.ERROR_MESSAGE, + null, + options, // 如果传null, 则按钮为 optionType 类型所表示的按钮(也就是确认对话框) + options[0] + ); + //如果选择了重新查找,则再查找一遍 + if (optionSelected == 0) { + search(); + } + } + } + + private Boolean checkTemplateChanged(ArrayList searchResultList) { + for (Info info : searchResultList) { + if (!info.checkValid()) { + return false; + } + } + return true; + } + + + /** + * 可行性判定(模板是否可用、是否是同个模板) + * + * @return 检查无误则返回true + */ + public boolean isITReplaceValid() { + if (JTemplate.isValid(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate())) { + return StringUtils.equals(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget().getTemplateID(), templateID); + } else return false; + + } + + public static void setITReplaceFlag(boolean ITReplaceFlag) { + ITReplaceMainDialog.ITReplaceFlag = ITReplaceFlag; + } + + public static boolean isITReplaceFlag() { + return ITReplaceFlag; + } + + /** + * 搜索 + */ + public void search() { + ITTableEditor itTableEditor = southPanel.getItTableEditor(); + if (JTemplate.isValid(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate())) { + JTemplate jTemplate = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate(); + templateID = HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget().getTemplateID(); + itTableEditor.clear(); + ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem())); + if (searchAction != null) { + searchResultList = searchAction.addMatchResult(((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(), searchAction.showSearchValue(jTemplate)); + itTableEditor.add(searchResultList); + northPane.getResultLabel().setText("" + Toolkit.i18nText("Fine-Design_Replace_Search_Finish") + "" + searchResultList.size() + "" + Toolkit.i18nText("Fine-Design_Replace_Result")); + } + itTableEditor.fireTableDataChanged(); + northPane.refreshFindInputComboBoxItems(); + } else { + //todo + } + } + + /** + * 检测结果是否合法 + */ + @Override + public void checkValid() throws Exception { + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java new file mode 100644 index 000000000..781b053f7 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java @@ -0,0 +1,352 @@ +package com.fr.design.actions.replace.ui; + +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.ibutton.UIRadioButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itextfield.UITextField; +import com.fr.design.i18n.Toolkit; +import com.fr.stable.StringUtils; + + +import javax.swing.ComboBoxEditor; +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import java.awt.Dimension; +import java.util.ArrayList; +import java.util.Collections; + +/** + * 上面板 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-01 + */ +public class ITReplaceNorthPanel { + private JPanel upPanel; + private UILabel findLabel; + private UILabel rangeLabel; + private UILabel resultLabel; + private UIComboBox findCombobox; + private UIComboBox rangeCombobox; + private JCheckBox matchRadioButton; + + private UIComboBox findInputCombobox; + private UIComboBox replaceInputCombobox; + + private UIButton replaceButton; + private UIButton searchButton; + + private static int FIND_LABEL_X, FIND_LABEL_Y, FIND_LABEL_WIDTH, FIND_LABEL_HEIGHT; + private static int FIND_COMBOBOX_X, FIND_COMBOBOX_Y, FIND_COMBOBOX_WIDTH, FIND_COMBOBOX_HEIGHT; + private static int RANGE_LABEL_X, RANGE_LABEL_Y, RANGE_LABEL_WIDTH, RANGE_LABEL_HEIGHT; + private static int RANGE_COMBOBOX_X, RANGE_COMBOBOX_Y, RANGE_COMBOBOX_WIDTH, RANGE_COMBOBOX_HEIGHT; + private static int MATCH_X, MATCH_Y, MATCH_WIDTH, MATCH_HEIGHT; + private static int RESULT_LABEL_X, RESULT_LABEL_Y, RESULT_LABEL_WIDTH, RESULT_LABEL_HEIGHT; + private static int FIND_INPUT_COMBOBOX_X, FIND_INPUT_COMBOBOX_Y, FIND_INPUT_COMBOBOX_WIDTH, FIND_INPUT_COMBOBOX_HEIGHT; + private static int REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT; + private static int REPLACE_BUTTON_X, REPLACE_BUTTON_Y, REPLACE_BUTTON_WIDTH, REPLACE_BUTTON_HEIGHT; + private static int SEARCH_BUTTON_X, SEARCH_BUTTON_Y, SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT; + private static int BUTTON_GAP; + + public static ArrayList findItems = new ArrayList<>(); + public static ArrayList findInputItems = new ArrayList<>(); + public static ArrayList replaceInputItems = new ArrayList<>(); + + static { + findItems.add(Toolkit.i18nText("Fine-Design_Basic_Cell")); + findItems.add(Toolkit.i18nText("Fine-Design_Replace_JS")); + findItems.add("SQL"); + findItems.add(Toolkit.i18nText("Fine-Design_Basic_Float_Element")); + findItems.add(Toolkit.i18nText("Fine-Design_Replace_Component")); + findItems.add(Toolkit.i18nText("Fine-Design_Basic_Widget")); + findItems.add(Toolkit.i18nText("Fine-Design_Basic_Formula")); + } + + public ITReplaceNorthPanel() { + upPanel = new JPanel(null); + + findLabel = new UILabel(Toolkit.i18nText("Fine-Design_Replace_Search_Element")); + rangeLabel = new UILabel(Toolkit.i18nText("Fine-Design_Replace_Search_Range")); + resultLabel = new UILabel(); + + String[] rangeItems = new String[]{Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Current")}; + String[] replaceInputItems = new String[]{""}; + findCombobox = new UIComboBox(findItems.toArray()); + rangeCombobox = new UIComboBox(rangeItems); + findInputCombobox = new UIComboBox(findInputItems.toArray()) { + @Override + public void setEditor(ComboBoxEditor comboBoxEditor) { + super.setEditor(new ITComboBoxEditor()); + } + }; + replaceInputCombobox = new UIComboBox(replaceInputItems) { + @Override + public void setEditor(ComboBoxEditor comboBoxEditor) { + super.setEditor(new ITComboBoxEditor()); + } + }; + matchRadioButton = new JCheckBox(Toolkit.i18nText("Fine-Design_Replace_WildCard")); + + replaceButton = new UIButton(Toolkit.i18nText("Fine-Design_Replace_Button")); + searchButton = new UIButton(Toolkit.i18nText("Fine-Design_Search_Button")); + + setLimitSize(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getWidth()); + + upPanel.add(findLabel); + upPanel.add(rangeLabel); + upPanel.add(resultLabel); + upPanel.add(findCombobox); + upPanel.add(rangeCombobox); + upPanel.add(findInputCombobox); + upPanel.add(replaceInputCombobox); + upPanel.add(matchRadioButton); + upPanel.add(replaceButton); + upPanel.add(searchButton); + } + + /** + * 限制尺寸 + * + * @param width + */ + public void setLimitSize(int width) { + upPanel.setMaximumSize(new Dimension(width, 161)); + upPanel.setMinimumSize(new Dimension(width, 161)); + upPanel.setPreferredSize(new Dimension(width, 161)); + } + + + /** + * 适配屏幕 + * + * @param x + * @param y + * @param templateWidth + */ + public void fitScreen(int x, int y, int templateWidth) { + + setFindLabelBounds(x, y, templateWidth); + setRangeLabelBounds(x, y, templateWidth); + setResultLabelBounds(x, y, templateWidth); + + setFindComboboxBounds(x, y, templateWidth); + setRangeComboboxBounds(x, y, templateWidth); + setFindInputComboboxBounds(x, y, templateWidth); + setReplaceInputComboboxBounds(x, y, templateWidth); + + setUIRadioButtonBounds(x, y, templateWidth); + setReplaceButtonBounds(x, y, templateWidth); + setSearchButtonBounds(x, y, templateWidth); + + } + + + /** + * 刷新输入框 + */ + public void refreshFindInputComboBoxItems() { + String text = ((UITextField) (this.getFindInputCombobox().getEditor().getEditorComponent())).getText(); + if(!StringUtils.isEmpty(text)){ + if (findInputItems.contains(text)) { + Collections.swap(findInputItems, 0, findInputItems.indexOf(text)); + } else { + if (findInputItems.size() >= 5) { + findInputItems.remove(4); + findInputItems.add(0, text); + } else { + findInputItems.add(0, text); + } + } + this.getFindInputCombobox().refreshBoxItems(ITReplaceNorthPanel.findInputItems); + ((UITextField) (this.getFindInputCombobox().getEditor().getEditorComponent())).setText(text); + } + } + + /** + * 刷新替换框 + */ + public void refreshReplaceInputComboBoxItems(){ + String text = ((UITextField) (this.getReplaceInputCombobox().getEditor().getEditorComponent())).getText(); + if(!StringUtils.isEmpty(text)){ + if (replaceInputItems.contains(text)) { + Collections.swap(replaceInputItems, 0, replaceInputItems.indexOf(text)); + } else { + if (replaceInputItems.size() >= 5) { + replaceInputItems.remove(4); + replaceInputItems.add(0, text); + } else { + replaceInputItems.add(0, text); + } + } + this.getFindInputCombobox().refreshBoxItems(ITReplaceNorthPanel.replaceInputItems); + ((UITextField) (this.getReplaceInputCombobox().getEditor().getEditorComponent())).setText(text); + } + } + + + private void setSearchButtonBounds(int x, int y, int templateWidth) { + BUTTON_GAP = templateWidth / 90; + SEARCH_BUTTON_WIDTH = templateWidth / 30; + + SEARCH_BUTTON_HEIGHT = 25; + SEARCH_BUTTON_Y = RESULT_LABEL_Y; + SEARCH_BUTTON_X = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - REPLACE_BUTTON_WIDTH * 2 - BUTTON_GAP; + searchButton.setBounds(SEARCH_BUTTON_X, SEARCH_BUTTON_Y, SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT); + } + + private void setReplaceButtonBounds(int x, int y, int templateWidth) { + BUTTON_GAP = templateWidth / 90; + REPLACE_BUTTON_WIDTH = templateWidth / 30; + REPLACE_BUTTON_HEIGHT = 25; + REPLACE_BUTTON_Y = RESULT_LABEL_Y; + REPLACE_BUTTON_X = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - REPLACE_BUTTON_WIDTH; + replaceButton.setBounds(REPLACE_BUTTON_X, REPLACE_BUTTON_Y, REPLACE_BUTTON_WIDTH, REPLACE_BUTTON_HEIGHT); + } + + private void setReplaceInputComboboxBounds(int x, int y, int templateWidth) { + REPLACE_INPUT_COMBOBOX_X = x + templateWidth / 2 + templateWidth / 30; + REPLACE_INPUT_COMBOBOX_Y = y + 55; + REPLACE_INPUT_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 30 * 2; + REPLACE_INPUT_COMBOBOX_HEIGHT = 25; + replaceInputCombobox.setBounds(REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT); + } + + private void setFindInputComboboxBounds(int x, int y, int templateWidth) { + FIND_INPUT_COMBOBOX_X = x + templateWidth / 60; + FIND_INPUT_COMBOBOX_Y = y + 55; + FIND_INPUT_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 30 * 2; + FIND_INPUT_COMBOBOX_HEIGHT = 25; + findInputCombobox.setBounds(FIND_INPUT_COMBOBOX_X, FIND_INPUT_COMBOBOX_Y, FIND_INPUT_COMBOBOX_WIDTH, FIND_INPUT_COMBOBOX_HEIGHT); + } + + private void setUIRadioButtonBounds(int x, int y, int templateWidth) { + MATCH_X = x + templateWidth / 60; + MATCH_Y = y + 90; + MATCH_WIDTH = templateWidth; + MATCH_HEIGHT = 25; + matchRadioButton.setBounds(MATCH_X, MATCH_Y, MATCH_WIDTH, MATCH_HEIGHT); + } + + + private void setRangeComboboxBounds(int x, int y, int templateWidth) { + RANGE_COMBOBOX_X = x + templateWidth / 2 + templateWidth / 15 + templateWidth / 60; + RANGE_COMBOBOX_Y = y + 20; + RANGE_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 60; + RANGE_COMBOBOX_HEIGHT = 25; + rangeCombobox.setBounds(RANGE_COMBOBOX_X, RANGE_COMBOBOX_Y, RANGE_COMBOBOX_WIDTH, RANGE_COMBOBOX_HEIGHT); + } + + + private void setFindComboboxBounds(int x, int y, int templateWidth) { + FIND_COMBOBOX_X = x + templateWidth / 30 * 2; + FIND_COMBOBOX_Y = y + 20; + FIND_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 60; + FIND_COMBOBOX_HEIGHT = 25; + findCombobox.setBounds(FIND_COMBOBOX_X, FIND_COMBOBOX_Y, FIND_COMBOBOX_WIDTH, FIND_COMBOBOX_HEIGHT); + } + + + private void setResultLabelBounds(int x, int y, int templateWidth) { + RESULT_LABEL_X = FIND_LABEL_X; + RESULT_LABEL_Y = y + 125; + RESULT_LABEL_WIDTH = templateWidth; + RESULT_LABEL_HEIGHT = 25; + resultLabel.setBounds(RESULT_LABEL_X, RESULT_LABEL_Y, RESULT_LABEL_WIDTH, RESULT_LABEL_HEIGHT); + + } + + private void setRangeLabelBounds(int x, int y, int templateWidth) { + RANGE_LABEL_X = x + templateWidth / 2 + templateWidth / 30; + RANGE_LABEL_Y = y + 20; + RANGE_LABEL_WIDTH = FIND_LABEL_WIDTH; + RANGE_LABEL_HEIGHT = 25; + rangeLabel.setBounds(RANGE_LABEL_X, RANGE_LABEL_Y, RANGE_LABEL_WIDTH, RANGE_LABEL_HEIGHT); + + } + + private void setFindLabelBounds(int x, int y, int templateWidth) { + FIND_LABEL_X = x + templateWidth / 60; + FIND_LABEL_Y = y + 20; + FIND_LABEL_WIDTH = templateWidth / 20; + FIND_LABEL_HEIGHT = 25; + findLabel.setBounds(FIND_LABEL_X, FIND_LABEL_Y, FIND_LABEL_WIDTH, FIND_LABEL_HEIGHT); + } + + public JPanel getUpPanel() { + return upPanel; + } + + public void setUpPanel(JPanel upPanel) { + this.upPanel = upPanel; + } + + public UILabel getFindLabel() { + return findLabel; + } + + public void setFindLabel(UILabel findLabel) { + this.findLabel = findLabel; + } + + public UILabel getRangeLabel() { + return rangeLabel; + } + + public void setRangeLabel(UILabel rangeLabel) { + this.rangeLabel = rangeLabel; + } + + public UILabel getResultLabel() { + return resultLabel; + } + + public void setResultLabel(UILabel resultLabel) { + this.resultLabel = resultLabel; + } + + public UIComboBox getFindCombobox() { + return findCombobox; + } + + public void setFindCombobox(UIComboBox findCombobox) { + this.findCombobox = findCombobox; + } + + public UIComboBox getRangeCombobox() { + return rangeCombobox; + } + + public void setRangeCombobox(UIComboBox rangeCombobox) { + this.rangeCombobox = rangeCombobox; + } + + public JCheckBox getMatchRadioButton() { + return matchRadioButton; + } + + public void setMatchRadioButton(JCheckBox checkBox) { + this.matchRadioButton = checkBox; + } + + public UIComboBox getFindInputCombobox() { + return findInputCombobox; + } + + public void setFindInputCombobox(UIComboBox findInputCombobox) { + this.findInputCombobox = findInputCombobox; + } + + public UIComboBox getReplaceInputCombobox() { + return replaceInputCombobox; + } + + public void setReplaceInputCombobox(UIComboBox replaceInputCombobox) { + this.replaceInputCombobox = replaceInputCombobox; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java new file mode 100644 index 000000000..0d31bfc35 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java @@ -0,0 +1,44 @@ +package com.fr.design.actions.replace.ui; + +import javax.swing.RowSorter; +import javax.swing.table.TableRowSorter; +import java.awt.Color; +import java.awt.Dimension; + +/** + * 下面板 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-05 + */ +public class ITReplaceSouthPanel { + ITTableEditorPane tableEditorPane; + ITTableEditor itTableEditor; + + public ITReplaceSouthPanel() { + itTableEditor = new ITTableEditor(); + tableEditorPane = new ITTableEditorPane<>(itTableEditor); + RowSorter sorter = new TableRowSorter(itTableEditor); + tableEditorPane.getEditTable().setRowSorter(sorter); + tableEditorPane.getEditTable().setSelectionBackground(new Color(217, 235, 254)); + tableEditorPane.getEditTable().setRowHeight(tableEditorPane.getEditTable().getRowHeight() / 2 + tableEditorPane.getEditTable().getRowHeight()); + tableEditorPane.makeFace(tableEditorPane.getEditTable()); + } + + public ITTableEditorPane getTableEditorPane() { + return tableEditorPane; + } + + public void setTableEditorPane(ITTableEditorPane tableEditorPane) { + this.tableEditorPane = tableEditorPane; + } + + public ITTableEditor getItTableEditor() { + return itTableEditor; + } + + public void setItTableEditor(ITTableEditor itTableEditor) { + this.itTableEditor = itTableEditor; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java new file mode 100644 index 000000000..8fc69f043 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java @@ -0,0 +1,45 @@ +package com.fr.design.actions.replace.ui; + +import com.fr.design.gui.ibutton.UIToggleButton; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.i18n.Toolkit; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import java.awt.Color; +import java.awt.GridLayout; + +/** + * 左侧面板 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-05 + */ +public class ITReplaceWestPanel { + JPanel leftJpanel; + + public ITReplaceWestPanel() { + + leftJpanel = new JPanel(new GridLayout(15, 1, 0, 0)); + UIToggleButton contentButton = new UIToggleButton(Toolkit.i18nText("Fine-Design_Basic_Templates_Content")); + contentButton.setSelected(true); + contentButton.setBorderPainted(false); + UIToggleButton settingButton = new UIToggleButton("//"); + settingButton.setBorderPainted(false); + leftJpanel.add(contentButton); + leftJpanel.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, new Color(218, 218, 221))); + leftJpanel.add(settingButton); + for (int i = 0; i < 13; i++) { + leftJpanel.add(new UILabel("")); + } + } + + public JPanel getLeftJpanel() { + return leftJpanel; + } + + public void setLeftJpanel(JPanel leftJpanel) { + this.leftJpanel = leftJpanel; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java new file mode 100644 index 000000000..45ebc651b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java @@ -0,0 +1,102 @@ +package com.fr.design.actions.replace.ui; + +import com.fr.base.TRL; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icombobox.UIComboBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.mainframe.JTemplate; +import com.fr.general.GeneralUtils; +import com.fr.stable.StringUtils; +import org.omg.Messaging.SYNC_WITH_TRANSPORT; + +import javax.swing.*; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; + +import static com.fr.design.actions.replace.ui.ITTableEditorPane.getEditTable; + +/** + * 放进表格中的定位按钮 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-23 + */ +public class ITTableButton extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { + + private UIButton paraButton; + + public ITTableButton() { + paraButton = new UIButton("定位 "); + paraButton.setVisible(true); + paraButton.setBorderPainted(false); + paraButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + ITContent content = (ITContent) getEditTable().getValueAt(getEditTable().getEditingRow(), 7); + if (!StringUtils.isEmpty(GeneralUtils.objectToString(content.getTrlString()))) { + ITReplaceMainDialog.setITReplaceFlag(true); + HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().navigate(new TRL(GeneralUtils.objectToString(content.getTrlString()))); + } + ITReplaceMainDialog.setITReplaceFlag(false); + } + }); + + + } + + /** + * 获取Editor的Component(编辑状态下) + * + * @param table 表格 + * @param value 传递的值 + * @param isSelected 是否选中 + * @param row 行 + * @param column 列 + * @return paraButton + */ + @Override + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + return paraButton; + } + + + /** + * 获取Renderer的Component(正常状态下) + * + * @param table 表格 + * @param value 传递的值 + * @param isSelected 是否选中 + * @param row 行 + * @param column 列 + * @return paraButton + */ + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + return paraButton; + } + + @Override + public Object getCellEditorValue() { + return null; + } + + public UIButton getParaButton() { + return paraButton; + } + + public void setParaButton(UIButton paraButton) { + this.paraButton = paraButton; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java new file mode 100644 index 000000000..babbc81ce --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java @@ -0,0 +1,225 @@ +package com.fr.design.actions.replace.ui; + +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.ReplaceObject; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itableeditorpane.UITableEditAction; +import com.fr.design.gui.itableeditorpane.UITableModelAdapter; +import com.fr.design.i18n.Toolkit; +import com.fr.form.ui.CheckBox; +import com.fr.function.INDEX; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ + +public class ITTableEditor extends UITableModelAdapter { + + public ITTableEditor() { + super(new String[]{ + " ", + Toolkit.i18nText("Fine-Design_Replace_Search_Content"), + Toolkit.i18nText("Fine-Design_Replace_Template_Name"), + Toolkit.i18nText("Fine-Design_Replace_Sheet_Name"), + Toolkit.i18nText("Fine-Design_Replace_Block_Name"), + Toolkit.i18nText("Fine-Design_Replace_Location"), + Toolkit.i18nText("Fine-Design_Replace_Location_Info"), + Toolkit.i18nText("Fine-Design_Replace_Operator"), + }); + + //this.createTable().getColumnModel().getColumn(4).setMaxWidth(60); + this.setColumnClass(new Class[]{ + Boolean.class, + UILabel.class, + UILabel.class, + UILabel.class, + UILabel.class, + UILabel.class, + UILabel.class, + ITTableButton.class, + + }); + this.setDefaultEditor(ITTableButton.class, new ITTableButton()); + this.setDefaultRenderer(ITTableButton.class, new ITTableButton()); + + this.createTable().getColumnModel().getColumn(7).setMaxWidth(50); + this.createTable().getColumnModel().getColumn(0).setMaxWidth(50); + + } + + /** + * 获取指定单元格的值 + * + * @param rowIndex + * @param columnIndex + * @return + */ + @Nullable + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + ITContent content = (ITContent) this.getList().get(rowIndex); + ChooseIndex chooseIndex = ChooseIndex.match(columnIndex); + if (chooseIndex != null) { + return chooseIndex.returnContentObject(content); + } + return null; + + } + + /** + * 设置单元格能否编辑 + * + * @param row 行 + * @param col 列 + * @return + */ + @Override + public boolean isCellEditable(int row, int col) { + return col == 7 || col == 0; + } + + /** + * 创建Action + * + * @return UITableEditAction + */ + @Override + public UITableEditAction[] createAction() { + return new UITableEditAction[0]; + } + + /** + * 添加数据 + * + * @param arrayList + */ + public void add(ArrayList arrayList) { + for (Info info : arrayList) { + addRow(info.getContent()); + fireTableDataChanged(); + } + } + + public enum ChooseIndex { + /** + * 第一列,返回选中情况 + */ + INDEX_0(0) { + @Override + public Object returnContentObject(ITContent content) { + return content.isSelected(); + } + }, + + /** + * 第二列,展示内容 + */ + INDEX_1(1) { + @Override + public Object returnContentObject(ITContent content) { + return content.getShowStr(); + } + }, + /** + * 第三列,展示模板名 + */ + INDEX_2(2) { + @Override + public Object returnContentObject(ITContent content) { + return " " + content.getTemplateName(); + } + }, + + /** + * 第四列,展示Sheet + */ + INDEX_3(3) { + @Override + public Object returnContentObject(ITContent content) { + return " " + content.getSheetName(); + } + }, + + /** + * 第五列,展示块名、组件名 + */ + INDEX_4(4) { + @Override + public Object returnContentObject(ITContent content) { + return " " + content.getBlockName(); + } + }, + + /** + * 第六列,展示位置 + */ + INDEX_5(5) { + @Override + public Object returnContentObject(ITContent content) { + return " " + content.getShowObject(); + } + }, + + /** + * 第七列,展示路径 + */ + INDEX_6(6) { + @Override + public Object returnContentObject(ITContent content) { + return " " + content.getOtherPos(); + } + }, + + /** + * 第八列,展示定位按钮 + */ + INDEX_7(7) { + @Override + public Object returnContentObject(ITContent content) { + return content; + } + }; + + int index; + + ChooseIndex(int index) { + this.index = index; + } + + /** + * 匹配列 + * + * @param index 列序号 + * @return 选中的列 + */ + @Nullable + public static ChooseIndex match(int index) { + ChooseIndex[] values = ChooseIndex.values(); + for (ChooseIndex value : values) { + if (value.index == index) { + return value; + } + } + return null; + } + + /** + * 返回对应列的对应内容 + * + * @param content 存储信息的数据结构 + * @return Object + */ + @Nullable + public Object returnContentObject(ITContent content) { + return null; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java new file mode 100644 index 000000000..90d5c3f2b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java @@ -0,0 +1,265 @@ +package com.fr.design.actions.replace.ui; + +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.border.UIRoundedBorder; +import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.BasicPane; +import com.fr.design.gui.icheckbox.UICheckBox; +import com.fr.design.gui.icontainer.UIScrollPane; +import com.fr.design.gui.ilable.UILabel; +import com.fr.design.gui.itableeditorpane.UITableEditAction; +import com.fr.design.gui.itableeditorpane.UITableModelAdapter; +import com.fr.design.layout.FRGUIPaneFactory; +import com.fr.design.mainframe.share.ui.base.MouseClickListener; +import com.fr.stable.StringUtils; + +import javax.swing.*; +import javax.swing.table.*; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.List; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ +public class ITTableEditorPane extends BasicPane { + + public static JTable editTable; + private UITableModelAdapter tableModel; + private String leftLabelName; + private JPanel buttonPane; + + public ITTableEditorPane(UITableModelAdapter model) { + this.tableModel = model; + this.initComponent(model.createAction()); + //((DefaultCellEditor) editTable.getCellEditor()).setClickCountToStart(1); + editTable.setGridColor(new Color(218, 218, 221)); + + } + + + /** + * 初始化 + * + * @param action + */ + private void initComponent(UITableEditAction[] action) { + this.setLayout(FRGUIPaneFactory.createBorderLayout()); + JPanel pane = new JPanel(new BorderLayout(4, 4)); + this.add(pane, BorderLayout.CENTER); + UILabel l = new UILabel(leftLabelName); + editTable = tableModel.createTable(); + editTable.getTableHeader().setBackground(UIConstants.DEFAULT_BG_RULER); + editTable.addMouseListener(new MouseClickListener() { + @Override + public void mouseClicked(MouseEvent e) { + int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); + int col = ((JTable) e.getSource()).columnAtPoint(e.getPoint()); + if (col == 0) { + ITContent content = (ITContent) editTable.getValueAt(row, 7); + if (content.isSelected()) { + content.setSelected(false); + editTable.setValueAt(content.isSelected(), row, col); + } else { + content.setSelected(true); + editTable.setValueAt(content.isSelected(), row, col); + } + } + + } + }); + UIScrollPane scrollPane = new UIScrollPane(editTable); + scrollPane.setBorder(new UIRoundedBorder(UIConstants.TITLED_BORDER_COLOR, 1, UIConstants.ARC)); + pane.add(scrollPane, BorderLayout.CENTER); + + + } + + public UITableModelAdapter getTableModel() { + return tableModel; + } + + @Override + protected String title4PopupWindow() { + return StringUtils.EMPTY; + } + + + /** + * 表头渲染 + */ + public static class ITHeaderRenderer implements TableCellRenderer { + JTableHeader tableHeader; + final JCheckBox selectBox; + + public ITHeaderRenderer(JTable table) { + this.tableHeader = table.getTableHeader(); + selectBox = new JCheckBox(); + selectBox.setSelected(true); + tableHeader.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() > 0) { + //获得选中列 + int selectColumn = tableHeader.columnAtPoint(e.getPoint()); + if (selectColumn == 0) { + boolean value = !selectBox.isSelected(); + selectBox.setSelected(value); + selectAllOrNull(value); + tableHeader.repaint(); + table.repaint(); + } + } + } + }); + } + + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, int column) { + tableHeader = table.getTableHeader(); + tableHeader.setReorderingAllowed(false); + String valueStr = (String) value; + JLabel label = new JLabel(valueStr); + label.setHorizontalAlignment(SwingConstants.LEFT); + selectBox.setHorizontalAlignment(SwingConstants.CENTER); + selectBox.setBorderPainted(true); + JComponent component = (column == 0) ? selectBox : label; + component.setForeground(tableHeader.getForeground()); + component.setBackground(tableHeader.getBackground()); + component.setFont(tableHeader.getFont()); + component.setBorder(UIManager.getBorder("TableHeader.cellBorder")); + return component; + } + } + + + /** + * 设置表头属性 + * + * @param table + */ + public static void makeFace(JTable table) { + Dimension size = table.getTableHeader().getPreferredSize(); + size.height = 26;//设置新的表头高度 + + table.getTableHeader().setBackground(new Color(232, 232, 233)); + + table.getTableHeader().setPreferredSize(size); + + table.getTableHeader().setDefaultRenderer(new ITHeaderRenderer(table)); + } + + /** + * 选中全部 + * + * @param value + */ + public static void selectAllOrNull(Boolean value) { + for (int i = 0; i < getEditTable().getRowCount(); i++) { + ((ITContent) (getEditTable().getValueAt(i, 7))).setSelected(value); + } + } + + /** + * 填充数据 + * + * @param objs + */ + public void populate(T[] objs) { + tableModel.clear(); + if (objs == null) { + return; + } + for (T obj : objs) { + tableModel.addRow(obj); + } + this.tableModel.fireTableDataChanged(); + if (objs.length > 0) { + this.editTable.getSelectionModel().setSelectionInterval(0, 0); + } + } + + /** + * 更新列表内的数据 + * + * @return + */ + public java.util.List update() { + tableModel.stopCellEditing(); + return tableModel.getList(); + } + + /** + * 更新数据来源 + * + * @param list + */ + public void update(List list) { + tableModel.stopCellEditing(); + tableModel.setList(list); + } + + /** + * 获取选中行号 + * + * @return + */ + public int getSelectedRow() { + return this.editTable.getSelectedRow(); + } + + /** + * 获取选中列号 + * + * @return + */ + public int getSelectedColumn() { + return this.editTable.getSelectedColumn(); + } + + /** + * 获取面板 + * + * @return + */ + public JPanel getbuttonPane() { + return buttonPane; + } + + /** + * 停止编辑 + */ + public void stopEditing() { + tableModel.stopCellEditing(); + } + + + /** + * 设置表头是否可以改变大小 + */ + public void setHeaderResizing(boolean resizingAllowed) { + editTable.getTableHeader().setResizingAllowed(resizingAllowed); + } + + /** + * 获取表格 + * + * @return + */ + public static JTable getEditTable() { + return editTable; + } + + public void setEditTable(JTable editTable) { + this.editTable = editTable; + } + + +} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java new file mode 100644 index 000000000..1acfbce88 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java @@ -0,0 +1,256 @@ +package com.fr.design.actions.replace.utils; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartglyph.ConditionAttr; +import com.fr.chart.chartglyph.ConditionCollection; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.form.event.Listener; +import com.fr.form.ui.Widget; +import com.fr.general.GeneralUtils; +import com.fr.js.JavaScript; +import com.fr.js.JavaScriptImpl; +import com.fr.js.NameJavaScript; +import com.fr.js.NameJavaScriptGroup; +import com.fr.plugin.chart.attr.plot.VanChartPlot; +import com.fr.plugin.chart.base.AttrTooltip; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.plugin.chart.vanchart.VanChart; +import com.fr.report.cell.Elem; +import javafx.util.Pair; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-11 + */ +public class SearchJSUtils { + + /** + * 从Listener中获取JS + */ + public static void searchJSFromListener(ArrayList jsInfos, ITContent content) { + JavaScript javaScript = ((Listener) (content.getReplaceObject())).getAction(); + if (javaScript instanceof JavaScriptImpl) { + ITContent newContent = content.copy(); + newContent.getContentObject().setJs(javaScript); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + } + } + + /** + * 获取HtmlLabel数组 + * + * @param collection + * @return + */ + public static ArrayList> getHtmlLabel(ChartCollection collection) { + ArrayList> arrayList = new ArrayList<>(); + addHtmlLabel2Array(arrayList, collection); + return arrayList; + } + + /** + * 获取图表-样式-标签、图表-样式-提示以及图表-特效-条件显示中的HtmlLabel并加入数组 + * + * @param arrayList + * @param collection + */ + private static void addHtmlLabel2Array(ArrayList> arrayList, ChartCollection collection) { + for (int i = 0; i < collection.getChartCount(); i++) { + VanChart chart = ((VanChart) collection.getChart(i)); + int size = chart.getPlot().getConditionCollection().getConditionAttrSize(); + ConditionCollection conditionCollection = chart.getPlot().getConditionCollection(); + addAttrLabelHtmlLabel(chart, arrayList); + for (int j = 0; j < size; j++) { + searchConditionCollection(arrayList, conditionCollection.getConditionAttr(j)); + } + } + } + + /** + * 将图表-样式-标签以及图表-样式-提示中的HtmlLabel加入数组 + * + * @param chart + * @param arrayList + */ + private static void addAttrLabelHtmlLabel(VanChart chart, ArrayList> arrayList) { + VanChartPlot plot = chart.getPlot(); + addAttrToolTipCondition2Array(plot, arrayList); + if (isAttrLabelExist(plot)) { + addAttrLabelDetail2Array(plot, arrayList); + addAttrSecondLabelDetail2Array(plot, arrayList); + + } + + } + + private static void addAttrToolTipCondition2Array(VanChartPlot plot, ArrayList> arrayList) { + if (plot.getAttrTooltipFromConditionCollection() != null && ((AttrTooltip) plot.getAttrTooltipFromConditionCollection()).isEnable() && plot.getAttrTooltipFromConditionCollection() instanceof AttrTooltip) { + arrayList.add(new Pair<>(((AttrTooltip) plot.getAttrTooltipFromConditionCollection()).getContent().getHtmlLabel(), + Toolkit.i18nText("Fine-Design_Chart_Tooltip") + "-" + Toolkit.i18nText("Fine-Design_Basic_Custom"))); + } + } + + private static void addAttrLabelDetail2Array(VanChartPlot plot, ArrayList> arrayList) { + if (plot.getAttrLabelFromConditionCollection() != null + && plot.getAttrLabelFromConditionCollection().getAttrLabelDetail() != null + && plot.getAttrLabelFromConditionCollection().getAttrLabelDetail().getContent().getHtmlLabel() != null) { + arrayList.add(new Pair<>(plot.getAttrLabelFromConditionCollection().getAttrLabelDetail().getContent().getHtmlLabel(), Toolkit.i18nText("Fine-Design_Chart_Value_Label"))); + } + } + + private static void addAttrSecondLabelDetail2Array(VanChartPlot plot, ArrayList> arrayList) { + if (plot.getAttrLabelFromConditionCollection() != null + && plot.getAttrLabelFromConditionCollection().getSecondLabelDetail() != null + && plot.getAttrLabelFromConditionCollection().getSecondLabelDetail().getContent().getHtmlLabel() != null) { + arrayList.add(new Pair<>(plot.getAttrLabelFromConditionCollection().getSecondLabelDetail().getContent().getHtmlLabel(), Toolkit.i18nText("Fine-Design_Chart_Category_Label"))); + } + } + + private static boolean isAttrLabelExist(VanChartPlot plot) { + return plot.getAttrLabelFromConditionCollection() != null && plot.getAttrLabelFromConditionCollection().isEnable(); + } + + /** + * 将图表-特效-条件显示中的HtmlLabel加入数组 + * + * @param arrayList + * @param conditionAttr + */ + private static void searchConditionCollection(ArrayList> arrayList, ConditionAttr conditionAttr) { + int conditionSize = conditionAttr.getDataSeriesConditionCount(); + for (int t = 0; t < conditionSize; t++) { + if (conditionAttr.getDataSeriesCondition(t) instanceof AttrTooltip) { + arrayList.add(new Pair<>(((AttrTooltip) conditionAttr.getDataSeriesCondition(t)).getContent().getHtmlLabel(), + Toolkit.i18nText("Fine-Design_Chart_Animation_Special") + "-" + Toolkit.i18nText("Fine-Design_Chart_Condition_Display"))); + } + + } + } + + /** + * 获取图表-特效-交互属性中的JS + * + * @param chartCollection + * @return + */ + public static ArrayList getNameJavaScript(ChartCollection chartCollection) { + ArrayList nameJavaScriptArrayList = new ArrayList<>(); + for (int i = 0; i < chartCollection.getChartCount(); i++) { + VanChart chart = ((VanChart) chartCollection.getChart(i)); + NameJavaScriptGroup nameJavaScriptGroup = chart.getPlot().getHotHyperLink(); + addNameJavaScript2Array(nameJavaScriptArrayList, nameJavaScriptGroup); + + } + return nameJavaScriptArrayList; + } + + private static void addNameJavaScript2Array(ArrayList nameJavaScriptArrayList, NameJavaScriptGroup nameJavaScriptGroup) { + if (isNameJavaScriptGroupExist(nameJavaScriptGroup)) { + for (int j = 0; j < nameJavaScriptGroup.size(); j++) { + if (nameJavaScriptGroup.getNameHyperlink(j).getJavaScript() instanceof JavaScriptImpl) { + nameJavaScriptArrayList.add(nameJavaScriptGroup.getNameHyperlink(j)); + } + } + } + } + + private static boolean isNameJavaScriptGroupExist(NameJavaScriptGroup nameJavaScriptGroup) { + return nameJavaScriptGroup != null; + } + + /** + * 添加JSInfo到列表 + * + * @param jsInfos + * @param jsInfo + */ + public static void addJSInfos(ArrayList jsInfos, JSInfo jsInfo) { + jsInfo.setContent(jsInfo.getContent().copy()); + jsInfos.add(jsInfo); + } + + + /** + * 从HtmlLabel去获取JS + * 从图表-样式-标签以及图表-特效-条件显示获取JSInfo + * + * @param content + * @param htmlLabels + * @param jsInfos + */ + public static void addJSInfosFromHtmlLabel(ITContent content, ArrayList> htmlLabels, ArrayList jsInfos) { + if (!htmlLabels.isEmpty()) { + for (Pair pair : htmlLabels) { + ITContent newContent = content.copy(); + newContent.getContentObject().setHtmlLabel((VanChartHtmlLabel) pair.getKey()); + newContent.addOtherPos(GeneralUtils.objectToString(pair.getValue())); + newContent.setReplaceObject(pair.getKey()); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + } + } + } + + /** + * 从NameJS类型里面拿JS + * + * @param content + * @param nameJavaScripts + * @param jsInfos + */ + public static void addJSInfosFromNameJS(ITContent content, ArrayList nameJavaScripts, ArrayList jsInfos) { + if (!nameJavaScripts.isEmpty()) { + for (NameJavaScript nameJS : nameJavaScripts) { + ITContent newContent = content.copy(); + newContent.getContentObject().setNameJavaScript(nameJS); + newContent.setReplaceObject(nameJS); + newContent.addOtherPos(nameJS.getName()); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + + } + } + } + + /** + * 从超级链接里面拿JS + * + * @param elem + * @param jsInfos + * @param content + */ + public static void addJSInfosFromHyperLink(Elem elem, ArrayList jsInfos, ITContent content) { + if (elem.getNameHyperlinkGroup() != null) { + for (int j = 0; j < elem.getNameHyperlinkGroup().size(); j++) { + if ((elem.getNameHyperlinkGroup().getNameHyperlink(j).getJavaScript()) instanceof JavaScriptImpl) { + ITContent newContent = content.copy(); + newContent.getContentObject().setNameJavaScript(elem.getNameHyperlinkGroup().getNameHyperlink(j)); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Hyperlink")); + newContent.setReplaceObject(elem.getNameHyperlinkGroup().getNameHyperlink(j)); + newContent.addOtherPos(elem.getNameHyperlinkGroup().getNameHyperlink(j).getName()); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + } + } + } + } + + /** + * 从Action中拿JS + * + * @param jsInfos + * @param content + */ + public static void selectJSAction(ArrayList jsInfos, ITContent content) { + for (int i = 0; i < ((Widget) (content.getReplaceObject())).getListenerSize(); i++) { + Listener listener = ((Widget) (content.getReplaceObject())).getListener(i); + ITContent newContent = content.copy(); + newContent.getContentObject().setListener(listener); + newContent.addOtherPos(listener.getName()); + newContent.setReplaceObject(listener); + SearchJSUtils.searchJSFromListener(jsInfos, newContent); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java new file mode 100644 index 000000000..91d2473a6 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java @@ -0,0 +1,91 @@ +package com.fr.design.actions.replace.utils; + + +import com.fr.design.actions.replace.info.DealWithInfoValue; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.third.org.apache.poi.hssf.record.formula.functions.Int; +import javafx.util.Pair; +import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; +import java.util.regex.Pattern; + +/** + * 用来处理展示内容的工具类(截取、高亮) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-23 + */ +public class ShowValueUtils { + + /** + * 获取除内容外其他一次性展示所有的内容(名称、水印...) + * + * @param str + * @param searchStr + * @return + */ + public static String getCommonString(String str, String searchStr) { + if (StringUtils.isEmpty(searchStr)) { + return str; + } else { + return "
" + + replaceAll(str, searchStr, "" + searchStr + "") + + "
"; + } + } + + /** + * 可以替换括号的replaceAll + * + * @param str 原字符串 + * @param regex 要被替换的内容 + * @param replacement 要用来替换进去的内容 + * @return 替换后的字符串 + */ + public static String replaceAll(String str, String regex, String replacement) { + return str.replaceAll(Pattern.quote(regex), replacement); + } + + + /** + * 获取匹配的字符串的位置(开始位置,结束位置) + * + * @param str 原字符串 + * @param find 要查找的内容 + * @return 存储匹配的字符串的位置的列表 + */ + public static ArrayList> getStringStartAndEndIndex(String str, String find) { + ArrayList> pairs = new ArrayList<>(); + int frontLength = 0;//定义该变量用于记录匹配元素前面的长度 + StringBuffer result = new StringBuffer(); + if (StringUtils.isEmpty(find)) { + return pairs; + } + while (str.contains(find)) {//只要该str字符串中有匹配的元素,才进行以下操作 + int index = str.indexOf(find);//定义该变量用于记录匹配的元素在当前字符串的位置 + pairs.add(new Pair<>(index + frontLength, index + frontLength + find.length())); + frontLength += (index + find.length()); + str = str.substring(index + find.length());//将字符串中匹配元素的前面部分及其本身截取,留下后面的部分 + + } + return pairs; + } + + /** + * 更新高亮状态 + * + * @param info + * @param replaceStr + */ + public static void updateHighlight(Info info, String replaceStr) { + String s = info.getInfoShowStr(info); + s = ShowValueUtils.replaceAll(s, info.getContent().getLastSearchStr(), "" + replaceStr + ""); + info.getContent().setShowStr( + "
" + s + "
" + ); + + } +} From 31d7caf8bc0bb8e61af209cd09ff6660f6705f09 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:55:31 +0800 Subject: [PATCH 04/17] =?UTF-8?q?REPORT-75998=20=E4=B8=BB=E8=A6=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/actions/replace/info/CellInfo.java | 357 ++++++++++++++++++ .../actions/replace/info/ComponentInfo.java | 72 ++++ .../actions/replace/info/FloatInfo.java | 114 ++++++ .../actions/replace/info/FormulaInfo.java | 71 ++++ .../design/actions/replace/info/JSInfo.java | 81 ++++ .../actions/replace/info/ReplaceObject.java | 217 +++++++++++ .../design/actions/replace/info/SQLInfo.java | 64 ++++ .../actions/replace/info/WidgetInfo.java | 103 +++++ .../replace/info/base/ContentObject.java | 232 ++++++++++++ .../actions/replace/info/base/ITContent.java | 244 ++++++++++++ 10 files changed, 1555 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java new file mode 100644 index 000000000..aff0a56fd --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java @@ -0,0 +1,357 @@ +package com.fr.design.actions.replace.info; + +import com.fr.base.Formula; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartattr.Title; +import com.fr.design.actions.replace.action.ShowValue; +import com.fr.design.actions.replace.action.content.widget.FrmWidgetType; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.design.write.submit.DBManipulationPane; +import com.fr.form.ui.Widget; +import com.fr.general.GeneralUtils; +import com.fr.general.ImageWithSuffix; +import com.fr.general.data.TableDataColumn; +import com.fr.invoke.Reflect; +import com.fr.main.impl.LinkWorkBookTemplate; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.FloatElement; +import com.fr.report.cell.cellattr.core.RichChar; +import com.fr.report.cell.cellattr.core.RichText; +import com.fr.report.cell.cellattr.core.SubReport; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.cell.painter.BiasTextPainter; +import com.fr.stable.AssistUtils; +import com.fr.stable.StringUtils; +import javafx.util.Pair; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +/** + * 返回:查找内容(匹配词高亮)、模板名称、所在sheet、分布组件、单元格位置、操作 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-11 + */ +public class CellInfo implements Info { + private ITContent content; + private int cellChartIndex = -1; + private boolean chartExist = false; + + public CellInfo(ITContent content) { + this.content = content; + } + + @Override + public ITContent getContent() { + return content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + + /** + * 获取单元格的值(不对图表进行处理,如果是图表类型在展示阶段特殊处理) + * + * @param o 用于替换的replaceObject + * @return + */ + @Override + public HashMap getValue(Object... o) { + HashMap stringHashMap = new HashMap<>(); + CellElement cellElement = (((CellElement) (this.getContent().getReplaceObject()))); + if (cellElement.getValue() != null && !this.isChartExist()) { + CellValueType cellValueType = CellValueType.match(cellElement.getValue().getClass().getSimpleName()); + if (cellValueType != null) { + cellValueType.addValue2Map(cellElement.getValue(), stringHashMap); + } else { + stringHashMap.put("content", GeneralUtils.objectToString(cellElement.getValue())); + } + } + return stringHashMap; + } + + /** + * 对不同类型的值进行设置与替换 + * + * @param info 用于获取值和设置值 + * @param findStr 要被替换的字符串 + * @param replaceStr 用于替换的字符串 + * @param operatorArray 存储内容类替换所要操作的所有位置(Pair<起始位置,结束位置>) + */ + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + CellElement cellElement = (((CellElement) (this.getContent().getReplaceObject()))); + if (this.isChartExist() && this.getCellChartIndex() != -1) { + ChartCollection chartCollection = (ChartCollection) ((CellElement) this.getContent().getReplaceObject()).getValue(); + Title title = chartCollection.getChart(this.getCellChartIndex()).getTitle(); + if (title.getTextObject() instanceof Formula) { + Formula formula = (Formula) title.getTextObject(); + updateOldStr(formula.getContent(), findStr); + formula.setContent(ShowValueUtils.replaceAll(formula.getContent(), findStr, replaceStr)); + } else { + updateOldStr(GeneralUtils.objectToString(title.getTextObject()), findStr); + title.setTextObject(ShowValueUtils.replaceAll(GeneralUtils.objectToString(title.getTextObject()), findStr, replaceStr)); + } + } else { + CellValueType cellValueType = CellValueType.match(cellElement.getValue().getClass().getSimpleName()); + if (cellValueType != null) { + cellValueType.setValue(this, cellElement.getValue(), findStr, replaceStr); + } else { + updateOldStr(GeneralUtils.objectToString(cellElement.getValue()), findStr); + cellElement.setValue(ShowValueUtils.replaceAll(GeneralUtils.objectToString(cellElement.getValue()), findStr, replaceStr)); + } + + } + } + + public int getCellChartIndex() { + return cellChartIndex; + } + + public void setCellChartIndex(int cellChartIndex) { + this.cellChartIndex = cellChartIndex; + } + + public boolean isChartExist() { + return chartExist; + } + + public void setChartExist(boolean chartExist) { + this.chartExist = chartExist; + } + + /** + * 复制一份CellInfo,防止引用传递问题 + * + * @return + */ + public CellInfo copy() { + ITContent content = this.getContent().copy(); + CellInfo cellInfo = new CellInfo(content); + cellInfo.setCellChartIndex(this.getCellChartIndex()); + cellInfo.setChartExist(this.isChartExist()); + return cellInfo; + } + + /** + * 获取展示的字符串 + * + * @param info 信息 + * @return + */ + @Override + public String getInfoShowStr(Info info) { + return this.getContent().getOldShowStr(); + } + + @Override + public Boolean checkValid() { + CellElement cellElement = (((CellElement) (this.getContent().getReplaceObject()))); + String newValue; + if (this.isChartExist() && this.getCellChartIndex() != -1) { + newValue = getChartCheckValue(); + } else { + CellValueType cellValueType = CellValueType.match(cellElement.getValue().getClass().getSimpleName()); + if (cellValueType != null) { + newValue = cellValueType.getCheckValue(this); + } else { + newValue = GeneralUtils.objectToString(cellElement.getValue()); + } + } + return StringUtils.equals(newValue, this.getContent().getOldShowStr()); + } + + private String getChartCheckValue() { + ChartCollection chartCollection = (ChartCollection) ((CellElement) this.getContent().getReplaceObject()).getValue(); + Title title = chartCollection.getChart(this.getCellChartIndex()).getTitle(); + if (title.getTextObject() instanceof Formula) { + Formula formula = (Formula) title.getTextObject(); + return formula.getContent(); + } else { + return GeneralUtils.objectToString(title.getTextObject()); + } + } + + /** + * 单元格的值的类型 + */ + public enum CellValueType { + /** + * 数据列类型(目前只对数据集的名称进行修改,对于其中的列名暂不支持修改) + */ + DS_COLUMN("DSColumn") { + @Override + public void setValue(CellInfo cellInfo, Object o, String findStr, String replaceStr) { + cellInfo.updateOldStr(GeneralUtils.objectToString(((DSColumn) o).getDSName()), findStr); + ((DSColumn) o).setDSName(ShowValueUtils.replaceAll(((DSColumn) o).getDSName(), findStr, replaceStr)); + } + + @Override + public void addValue2Map(Object o, HashMap map) { + map.put("content", ((DSColumn) o).getDSName()); + } + + @Override + public String getCheckValue(Info info) { + CellElement o = (CellElement) info.getContent().getReplaceObject(); + return ((DSColumn) o.getValue()).getDSName(); + } + }, + + /** + * 富文本形式 + * 为了不破坏富文本的格式,暂时不对样式不同的文本进行连接替换,每个样式不同的文本都是一个独立的个体 + */ + RICH_TEXT("RichText") { + @Override + public void setValue(CellInfo cellInfo, Object o, String findStr, String replaceStr) { + cellInfo.updateOldStr(GeneralUtils.objectToString(((RichText) o).getContent()), findStr); + Iterator it = ((RichText) o).charIterator(); + while (it.hasNext()) { + RichChar richChar = it.next(); + richChar.setText(ShowValueUtils.replaceAll(richChar.getText(), findStr, replaceStr)); + } + } + + @Override + public void addValue2Map(Object o, HashMap map) { + map.put("content", ((RichText) o).getContent()); + } + + @Override + public String getCheckValue(Info info) { + CellElement o = (CellElement) info.getContent().getReplaceObject(); + return ((RichText) o.getValue()).getContent(); + } + }, + + /** + * 公式类型 + */ + FORMULA("Formula") { + @Override + public void setValue(CellInfo cellInfo, Object o, String findStr, String replaceStr) { + cellInfo.updateOldStr(GeneralUtils.objectToString(o), findStr); + ((Formula) o).setContent(ShowValueUtils.replaceAll(((Formula) o).getContent(), findStr, replaceStr)); + } + + @Override + public String getCheckValue(Info info) { + CellElement o = (CellElement) info.getContent().getReplaceObject(); + return ((Formula) o.getValue()).getContent(); + } + }, + + /** + * 子报表类型(目前支持修改路径) + */ + SUB_REPORT("SubReport") { + @Override + public void setValue(CellInfo cellInfo, Object o, String findStr, String replaceStr) { + LinkWorkBookTemplate workBookTemplate = (LinkWorkBookTemplate) ((SubReport) o).getPackee(); + cellInfo.updateOldStr(workBookTemplate.getTemplatePath(), findStr); + workBookTemplate.setTemplatePath(ShowValueUtils.replaceAll(workBookTemplate.getTemplatePath(), findStr, replaceStr)); + } + + @Override + public void addValue2Map(Object o, HashMap map) { + LinkWorkBookTemplate workBookTemplate = (LinkWorkBookTemplate) ((SubReport) o).getPackee(); + map.put("content", GeneralUtils.objectToString(workBookTemplate.getTemplatePath())); + } + + @Override + public String getCheckValue(Info info) { + CellElement o = (CellElement) info.getContent().getReplaceObject(); + LinkWorkBookTemplate workBookTemplate = (LinkWorkBookTemplate) ((SubReport) o.getValue()).getPackee(); + return GeneralUtils.objectToString(workBookTemplate.getTemplatePath()); + } + }, + + /** + * 斜线类型 + */ + BIAS_TEXT_PAINTER("BiasTextPainter") { + @Override + public void setValue(CellInfo cellInfo, Object o, String findStr, String replaceStr) { + cellInfo.updateOldStr(((BiasTextPainter) o).getText(), findStr); + ((BiasTextPainter) o).setText(ShowValueUtils.replaceAll(((BiasTextPainter) o).getText(), findStr, replaceStr)); + } + + @Override + public void addValue2Map(Object o, HashMap map) { + map.put("content", ((BiasTextPainter) o).getText()); + } + + @Override + public String getCheckValue(Info info) { + CellElement o = (CellElement) info.getContent().getReplaceObject(); + return ((BiasTextPainter) o.getValue()).getText(); + } + }; + + + String name; + + CellValueType(String name) { + this.name = name; + } + + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static CellValueType match(String name) { + CellValueType[] values = CellValueType.values(); + for (CellValueType value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } + + /** + * 设置值 + * + * @param cellInfo + * @param o + * @param findStr + * @param replaceStr + */ + public void setValue(CellInfo cellInfo, Object o, String findStr, String replaceStr) { + } + + /** + * 将值加到Map中 + * + * @param o + * @param map + */ + public void addValue2Map(Object o, HashMap map) { + map.put("content", GeneralUtils.objectToString(o)); + } + + public String getCheckValue(Info info) { + return StringUtils.EMPTY; + } + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java new file mode 100644 index 000000000..3bcaf5323 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java @@ -0,0 +1,72 @@ +package com.fr.design.actions.replace.info; + +import com.fr.design.actions.replace.action.content.component.ComponentType; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.form.ui.Widget; +import com.fr.stable.StringUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-29 + */ +public class ComponentInfo implements Info { + private ITContent content; + + public ComponentInfo(ITContent content) { + this.content = content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public HashMap getValue(Object... o) { + HashMap hashMap = new HashMap<>(); + if (this.content.getReplaceObject() != null && this.content.getReplaceObject() instanceof Widget) { + hashMap.put("content", ((Widget) this.content.getReplaceObject()).getWidgetName()); + } + return hashMap; + } + + @Override + public ITContent getContent() { + return content; + } + + + /** + * 这边设置值其实就是修改组件的名称,要注意的就是如果是layout的情况下有些需要对其外面封装的对象也进行名称的修改 + * + * @param info 用于获取值和设置值 + * @param findStr 要被替换的字符串 + * @param replaceStr 用于替换的字符串 + * @param operatorArray 存储内容类替换所要操作的所有位置(Pair<起始位置,结束位置>) + */ + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + ComponentType componentType = ComponentType.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (componentType != null) { + componentType.setValue(info, findStr, replaceStr, operatorArray); + } + } + + /** + * 获取展示的信息 + * + * @param info 信息 + * @return + */ + @Override + public String getInfoShowStr(Info info) { + if (this.content.getReplaceObject() != null && this.content.getReplaceObject() instanceof Widget) { + return ((Widget) this.content.getReplaceObject()).getWidgetName(); + } + return StringUtils.EMPTY; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java new file mode 100644 index 000000000..8010fea81 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java @@ -0,0 +1,114 @@ +package com.fr.design.actions.replace.info; + +import com.fr.base.Formula; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartattr.Title; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.general.GeneralUtils; +import com.fr.report.cell.FloatElement; +import com.fr.stable.AssistUtils; +import com.fr.stable.StringUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-15 + */ +public class FloatInfo implements Info { + private ITContent content; + private int floatChartIndex = -1; + private boolean chartExist = false; + + public FloatInfo(ITContent content) { + this.content = content; + } + + @Override + public ITContent getContent() { + return content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + public int getFloatChartIndex() { + return floatChartIndex; + } + + public void setFloatChartIndex(int charIndex) { + this.floatChartIndex = charIndex; + } + + public boolean isChartExist() { + return chartExist; + } + + public void setChartExist(boolean chartExist) { + this.chartExist = chartExist; + } + + @Override + public HashMap getValue(Object... o) { + HashMap hashMap = new HashMap<>(); + FloatElement floatElement = (((FloatElement) (this.getContent().getReplaceObject()))); + if (!this.isChartExist()) { + hashMap.put("content", GeneralUtils.objectToString(floatElement.getValue())); + } + return hashMap; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + if (this.isChartExist() && this.getFloatChartIndex() != -1) { + ChartCollection chartCollection = (ChartCollection) ((FloatElement) this.getContent().getReplaceObject()).getValue(); + Title title = chartCollection.getChart(this.getFloatChartIndex()).getTitle(); + if (title.getTextObject() instanceof Formula) { + Formula formula = (Formula) title.getTextObject(); + updateOldStr(formula.getContent(), findStr); + formula.setContent(ShowValueUtils.replaceAll(formula.getContent(), findStr, replaceStr)); + } else { + updateOldStr(GeneralUtils.objectToString(title.getTextObject()), findStr); + title.setTextObject(ShowValueUtils.replaceAll(GeneralUtils.objectToString(title.getTextObject()), findStr, replaceStr)); + } + } else { + FloatElement floatElement = ((FloatElement) this.getContent().getReplaceObject()); + if (floatElement.getValue() instanceof Formula) { + Formula formula = (Formula) floatElement.getValue(); + updateOldStr(formula.getContent(), findStr); + formula.setContent(ShowValueUtils.replaceAll(formula.getContent(), findStr, replaceStr)); + } else { + updateOldStr(GeneralUtils.objectToString(floatElement.getValue()), findStr); + floatElement.setValue(ShowValueUtils.replaceAll(GeneralUtils.objectToString(floatElement.getValue()), findStr, replaceStr)); + } + } + } + + @Override + public String getInfoShowStr(Info info) { + return this.getContent().getOldShowStr(); + } + + /** + * 复制 + * @return + */ + public FloatInfo copy() { + ITContent content = this.getContent().copy(); + FloatInfo floatInfo = new FloatInfo(content); + floatInfo.setFloatChartIndex(this.getFloatChartIndex()); + floatInfo.setChartExist(this.isChartExist()); + return floatInfo; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java new file mode 100644 index 000000000..f45689655 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java @@ -0,0 +1,71 @@ +package com.fr.design.actions.replace.info; + + +import com.fr.data.impl.FormulaDictionary; +import com.fr.design.actions.replace.action.content.formula.FormulaReplaceObject; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.stable.StringUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class FormulaInfo implements Info{ + private ITContent content; + + public FormulaInfo(ITContent content) { + this.content = content; + } + @Override + public ITContent getContent() { + return content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public HashMap getValue(Object... o){ + HashMap map = new HashMap<>(); + //这边比较特殊,存的都是FormulaDictionary ,特殊判断一下 + if (this.content.getOtherPos().contains("数据字典-公式类型-显示值")){ + map.put("content",((FormulaDictionary)this.getContent().getReplaceObject()).getExcuteFormula()); + } else if (this.content.getOtherPos().contains("数据字典-公式类型-实际值")){ + map.put("content",((FormulaDictionary)this.getContent().getReplaceObject()).getProduceFormula()); + } else { + map = getCommonValue(); + } + return map; + } + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + FormulaReplaceObject formulaReplaceObject = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (formulaReplaceObject != null){ + formulaReplaceObject.setValue(this , findStr , replaceStr, operatorArray); + } + } + + @Override + public String getInfoShowStr(Info info) { + FormulaReplaceObject formulaReplaceObject = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (formulaReplaceObject != null){ + return formulaReplaceObject.getInfoShowStr(info); + } + return StringUtils.EMPTY; + } + + private HashMap getCommonValue(){ + FormulaReplaceObject o = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if(o != null){ + return o.getValue(this.content.getReplaceObject()); + } + return new HashMap<>(); + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java new file mode 100644 index 000000000..23e6a9b3b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java @@ -0,0 +1,81 @@ +package com.fr.design.actions.replace.info; + + +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.stable.AssistUtils; +import com.fr.stable.StringUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-11 + */ +public class JSInfo implements Info { + private ITContent content; + private boolean contentFlag = true; + + public JSInfo(ITContent content) { + this.content = content; + } + + @Override + public ITContent getContent() { + return content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public HashMap getValue(Object... object) { + ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (o != null) { + return o.getValue(this.content.getReplaceObject()); + } + return new HashMap<>(); + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (o != null) { + o.setValue(this, findStr, replaceStr, this.getContent().getOperatorArray()); + } + + } + + @Override + public String getInfoShowStr(Info info) { + return info.getContent().getOldShowStr(); + } + + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + public JSInfo copy() { + ITContent content = this.getContent().copy(); + JSInfo jsInfo = new JSInfo(content); + jsInfo.setContentFlag(this.isContent()); + return jsInfo; + } + + public boolean isContent() { + return contentFlag; + } + + public void setContentFlag(boolean contentFlag) { + this.contentFlag = contentFlag; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java new file mode 100644 index 000000000..9918abec4 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java @@ -0,0 +1,217 @@ +package com.fr.design.actions.replace.info; + +import com.fr.data.impl.DBTableData; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.form.event.Listener; +import com.fr.js.JavaScriptImpl; +import com.fr.js.NameJavaScript; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.stable.StringUtils; +import javafx.util.Pair; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 处理所存储的不同类型的对象(除了Formula外的其他对象) + * 此处对象是ITContent中用于直接查找内容与替换内容的操作对象 + * Formula要处理的对象太多而且会和其他类型有重叠,所以单独开一个类放 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-23 + */ +public enum ReplaceObject implements DealWithInfoValue { + /** + * NameJavaScript——JS + */ + NAME_JAVA_SCRIPT("NameJavaScript") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((NameJavaScript) o[0]).getName())) { + map.put("name", ((NameJavaScript) o[0]).getName()); + } + if (!StringUtils.isEmpty(((JavaScriptImpl) (((NameJavaScript) o[0]).getJavaScript())).getContent())) { + map.put("content", ((JavaScriptImpl) (((NameJavaScript) o[0]).getJavaScript())).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + if (((JSInfo) info).isContent()) { + JavaScriptImpl javaScript = (JavaScriptImpl) ((NameJavaScript) (info.getContent().getReplaceObject())).getJavaScript(); + info.updateOldStr(javaScript.getContent(), findStr); + javaScript.setContent(ShowValueUtils.replaceAll(javaScript.getContent(), findStr, replaceStr)); + } else { + NameJavaScript javaScript = ((NameJavaScript) (info.getContent().getReplaceObject())); + info.updateOldStr(javaScript.getName(), findStr); + javaScript.setName(javaScript.getName().replaceAll(findStr, replaceStr)); + } + } + + @Override + public String getInfoShowStr(Info info) { + if (((JSInfo) info).isContent()) { + JavaScriptImpl javaScript = (JavaScriptImpl) ((NameJavaScript) (info.getContent().getReplaceObject())).getJavaScript(); + return javaScript.getContent(); + } else { + NameJavaScript javaScript = ((NameJavaScript) (info.getContent().getReplaceObject())); + return javaScript.getName(); + } + } + }, + /** + * Listener——JS + */ + LISTENER("Listener") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Listener) o[0]).getName())) { + map.put("name", ((Listener) o[0]).getName()); + } + if (!StringUtils.isEmpty(((JavaScriptImpl) (((Listener) o[0]).getAction())).getContent())) { + map.put("content", ((JavaScriptImpl) (((Listener) o[0]).getAction())).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + if (((JSInfo) info).isContent()) { + if (operatorArray.size() > 0) { + JavaScriptImpl javaScript = (JavaScriptImpl) ((Listener) (info.getContent().getReplaceObject())).getAction(); + info.updateOldStr(javaScript.getContent(), findStr); + javaScript.setContent(ShowValueUtils.replaceAll(javaScript.getContent(), findStr, replaceStr)); + + } + } else { + Listener listener = ((Listener) ((info.getContent().getReplaceObject()))); + listener.setName(listener.getName().replaceAll(findStr, replaceStr)); + } + } + + @Override + public String getInfoShowStr(Info info) { + if (((JSInfo) info).isContent()) { + JavaScriptImpl javaScript = (JavaScriptImpl) ((Listener) (info.getContent().getReplaceObject())).getAction(); + return javaScript.getContent(); + } else { + Listener listener = ((Listener) (info.getContent().getReplaceObject())); + return listener.getName(); + } + } + }, + /** + * VanChartHtmlLabel——JS + */ + VAN_CHART_HTML_LABEL("VanChartHtmlLabel") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((VanChartHtmlLabel) o[0]).getCustomText())) { + map.put("content", ((VanChartHtmlLabel) o[0]).getCustomText()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + if (((JSInfo) info).isContent()) { + if (operatorArray.size() > 0) { + VanChartHtmlLabel htmlLabel = ((VanChartHtmlLabel) (info.getContent().getReplaceObject())); + StringBuilder stringBuilder = new StringBuilder(htmlLabel.getCustomText()); + info.updateOldStr(htmlLabel.getCustomText(), findStr); + htmlLabel.setCustomText(ShowValueUtils.replaceAll(htmlLabel.getCustomText(), findStr, replaceStr)); + } + } + } + + @Override + public String getInfoShowStr(Info info) { + VanChartHtmlLabel htmlLabel = ((VanChartHtmlLabel) (info.getContent().getReplaceObject())); + return htmlLabel.getCustomText(); + } + }, + /** + * JavaScriptImpl——JS + */ + JAVA_SCRIPT_IMPL("JavaScriptImpl") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((JavaScriptImpl) o[0]).getContent())) { + map.put("content", ((JavaScriptImpl) o[0]).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + JavaScriptImpl javaScript = (JavaScriptImpl) (info.getContent().getReplaceObject()); + info.updateOldStr(javaScript.getContent(), findStr); + javaScript.setContent(ShowValueUtils.replaceAll(javaScript.getContent(), findStr, replaceStr)); + } + + @Override + public String getInfoShowStr(Info info) { + JavaScriptImpl javaScript = (JavaScriptImpl) (info.getContent().getReplaceObject()); + return javaScript.getContent(); + } + }, + /** + * DBTableData——SQL + */ + DB_TABLE_DATA("DBTableData") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((DBTableData) o[0]).getQuery())) { + map.put("content", ((DBTableData) o[0]).getQuery()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + DBTableData dbTableData = (DBTableData) info.getContent().getReplaceObject(); + info.updateOldStr(dbTableData.getQuery(), findStr); + dbTableData.setQuery(ShowValueUtils.replaceAll(dbTableData.getQuery(), findStr, replaceStr)); + } + + @Override + public String getInfoShowStr(Info info) { + return info.getInfoShowStr(info); + } + }; + + + String name; + + ReplaceObject(String name) { + this.name = name; + } + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static ReplaceObject match(String name) { + ReplaceObject[] values = ReplaceObject.values(); + for (ReplaceObject value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java new file mode 100644 index 000000000..cf40e52ca --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java @@ -0,0 +1,64 @@ +package com.fr.design.actions.replace.info; + +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.stable.AssistUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-16 + */ +public class SQLInfo implements Info { + private ITContent content; + + public SQLInfo(ITContent content) { + this.content = content; + } + + @Override + public ITContent getContent() { + return content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public HashMap getValue(Object... objects) { + ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (o != null) { + return o.getValue(this.content.getReplaceObject()); + } + return new HashMap<>(); + } + + public SQLInfo copy() { + ITContent content = this.getContent().copy(); + return new SQLInfo(content); + } + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); + if (o != null) { + o.setValue(this, findStr, replaceStr, operatorArray); + } + } + + @Override + public String getInfoShowStr(Info info) { + return this.getContent().getOldShowStr(); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java new file mode 100644 index 000000000..3c313cc46 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java @@ -0,0 +1,103 @@ +package com.fr.design.actions.replace.info; + +import com.fr.design.actions.replace.action.content.widget.FrmWidgetType; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.form.ui.WaterMark; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.stable.AssistUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-16 + */ +public class WidgetInfo implements Info, DealWithInfoValue { + private ITContent content; + private boolean waterMarkFlag = true; + + public WidgetInfo(ITContent content) { + this.content = content; + } + + @Override + public ITContent getContent() { + return content; + } + + public void setContent(ITContent content) { + this.content = content; + } + + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + Widget widget = (Widget) this.content.getReplaceObject(); + if (widget instanceof WScaleLayout) { + widget = ((CRBoundsWidget) ((WScaleLayout) widget).getWidget(0)).getWidget(); + } + if (widget.getWidgetName() != null) { + map.put("name", widget.getWidgetName()); + } + if (widget instanceof WaterMark && (((WaterMark) widget).getWaterMark() != null)) { + map.put("waterMark", ((WaterMark) widget).getWaterMark()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Widget widget = ((Widget) (this.content.getReplaceObject())); + if (this.getContent().isFrm()) { + FrmWidgetType widgetType = FrmWidgetType.match(widget.getClass().getSimpleName()); + if (widgetType != null) { + widgetType.setValue(info, findStr, replaceStr, this.getContent().getOperatorArray()); + } + } else { + if (isWaterMark()) { + updateOldStr(((WaterMark) widget).getWaterMark(), findStr); + ((WaterMark) widget).setWaterMark(ShowValueUtils.replaceAll(((WaterMark) widget).getWaterMark(), findStr, replaceStr)); + } else { + updateOldStr(widget.getWidgetName(), findStr); + widget.setWidgetName(ShowValueUtils.replaceAll(widget.getWidgetName(), findStr, replaceStr)); + } + } + + } + + @Override + public String getInfoShowStr(Info info) { + return this.getContent().getOldShowStr(); + } + + public WidgetInfo copy(WidgetInfo widgetInfo) { + ITContent content = widgetInfo.getContent().copy(); + return new WidgetInfo(content); + } + + public boolean isWaterMark() { + return waterMarkFlag; + } + + public void setWaterMarkFlag(boolean waterMarkFlag) { + this.waterMarkFlag = waterMarkFlag; + } + + public boolean isReplaceObjectExist() { + return content != null && content.getReplaceObject() != null; + } + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java new file mode 100644 index 000000000..74adc8e01 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java @@ -0,0 +1,232 @@ +package com.fr.design.actions.replace.info.base; + +import com.fr.base.Formula; +import com.fr.chartx.constant.ChartKeyCst; +import com.fr.data.impl.DBTableData; +import com.fr.form.event.Listener; +import com.fr.form.ui.Widget; +import com.fr.general.data.Condition; +import com.fr.js.JavaScript; +import com.fr.js.NameJavaScript; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.FloatElement; +import com.fr.report.core.sort.sortexpression.FormulaSortExpression; +import com.fr.report.core.sort.sortexpression.SortExpression; +import com.fr.stable.AssistUtils; +import com.teamdev.jxbrowser.deps.org.checkerframework.checker.units.qual.C; + +/** + * 存储用于定位内容的对象(便于定位) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-16 + */ +public class ContentObject { + //todo 可能没用,考虑废除掉 + private CellElement cell; + private JavaScript js; + private NameJavaScript nameJavaScript; + private VanChartHtmlLabel htmlLabel; + private Widget widget; + private Listener listener; + private FloatElement floatElement; + private Formula formula; + private Condition condition; + private FormulaSortExpression sortExpression; + private DBTableData dbTableData; + + public ContentObject() { + this.cell = null; + this.js = null; + this.nameJavaScript = null; + this.htmlLabel = null; + this.widget = null; + this.listener = null; + this.floatElement = null; + this.formula = null; + this.condition = null; + this.sortExpression = null; + this.dbTableData = null; + } + + public ContentObject newContentObject(ContentObject contentObject) { + ContentObject newContent = new ContentObject(); + newContent.copyCellElement(contentObject); + newContent.copyFloatElement(contentObject); + newContent.copyHtmlLabel(contentObject); + newContent.copyJavaScript(contentObject); + newContent.copyListener(contentObject); + newContent.copyNameJavaScript(contentObject); + newContent.copyWidget(contentObject); + newContent.copyFormula(contentObject); + newContent.copyCondition(contentObject); + newContent.copySortExpression(contentObject); + newContent.copyDBTableData(contentObject); + return newContent; + } + + public void copyCellElement(ContentObject contentObject) { + if (contentObject.getCell() != null) { + this.setCell(contentObject.getCell()); + } + } + + public void copyJavaScript(ContentObject contentObject) { + if (contentObject.getJs() != null) { + this.setJs(contentObject.getJs()); + } + } + + public void copyNameJavaScript(ContentObject contentObject) { + if (contentObject.getNameJavaScript() != null) { + this.setNameJavaScript(contentObject.getNameJavaScript()); + } + } + + public void copyHtmlLabel(ContentObject contentObject) { + if (contentObject.getHtmlLabel() != null) { + this.setHtmlLabel(contentObject.getHtmlLabel()); + } + } + + public void copyListener(ContentObject contentObject) { + if (contentObject.getListener() != null) { + this.setListener(contentObject.getListener()); + } + } + + public void copyFloatElement(ContentObject contentObject) { + if (contentObject.getFloatElement() != null) { + this.setFloatElement(contentObject.getFloatElement()); + } + } + + public void copyWidget(ContentObject contentObject) { + if (contentObject.getWidget() != null) { + this.setWidget(contentObject.getWidget()); + } + } + + public void copyFormula(ContentObject contentObject) { + if (contentObject.getFormula() != null) { + this.setFormula(contentObject.getFormula()); + } + } + + public void copyCondition(ContentObject contentObject) { + if (contentObject.getCondition() != null) { + this.setCondition(contentObject.getCondition()); + } + } + + public void copySortExpression(ContentObject contentObject) { + if (contentObject.getSortExpression() != null) { + this.setSortExpression(contentObject.getSortExpression()); + } + } + + public void copyDBTableData(ContentObject contentObject) { + if (contentObject.getDbTableData() != null) { + this.setDbTableData(contentObject.getDbTableData()); + } + } + + public DBTableData getDbTableData() { + return dbTableData; + } + + public void setDbTableData(DBTableData dbTableData) { + this.dbTableData = dbTableData; + } + + public FormulaSortExpression getSortExpression() { + return sortExpression; + } + + public void setSortExpression(FormulaSortExpression sortExpression) { + this.sortExpression = sortExpression; + } + + public Condition getCondition() { + return condition; + } + + public void setCondition(Condition condition) { + this.condition = condition; + } + + public Formula getFormula() { + return formula; + } + + public void setFormula(Formula formula) { + this.formula = formula; + } + + public CellElement getCell() { + return cell; + } + + public void setCell(CellElement cell) { + this.cell = cell; + } + + public JavaScript getJs() { + return js; + } + + public void setJs(JavaScript js) { + this.js = js; + } + + public NameJavaScript getNameJavaScript() { + return nameJavaScript; + } + + public void setNameJavaScript(NameJavaScript nameJavaScript) { + this.nameJavaScript = nameJavaScript; + } + + public VanChartHtmlLabel getHtmlLabel() { + return htmlLabel; + } + + public void setHtmlLabel(VanChartHtmlLabel htmlLabel) { + this.htmlLabel = htmlLabel; + } + + public Widget getWidget() { + return widget; + } + + public void setWidget(Widget widget) { + this.widget = widget; + } + + public Listener getListener() { + return listener; + } + + public void setListener(Listener listener) { + this.listener = listener; + } + + public FloatElement getFloatElement() { + return floatElement; + } + + public void setFloatElement(FloatElement floatElement) { + this.floatElement = floatElement; + } + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + public boolean isNameJSExist() { + return this.nameJavaScript != null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java new file mode 100644 index 000000000..79b7c9199 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java @@ -0,0 +1,244 @@ +package com.fr.design.actions.replace.info.base; + +import com.fr.design.actions.replace.info.DealWithInfoValue; +import com.fr.stable.AssistUtils; +import com.fr.stable.StringUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * 主要的存储信息的数据结构 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-11 + */ +public class ITContent implements Cloneable { + private String sheetID; + private String sheetName; + private String templateName; + private String blockName; + //一些不好定位的位置先用字符串展示出来就好 + private String otherPos; + //用于后续跳转相关的对象信息 + private ContentObject contentObject; + //用于操作替换相关的对象(通过此属性获取所需的对象) + private Object replaceObject; + //用于展示给用户的位置 + private Object showObject; + //用于展示内容 + private String showStr; + //存储展示前的旧值 + private String oldShowStr; + //存储上一次搜索的string + private String lastSearchStr; + //由于我们TRL是一次性的,这边存字符串到时候new一个即可 + private String trlString; + //为操作字符串提供操作位置的定位信息,Pair中存储的是开始操作的索引以及结束操作的索引 + private ArrayList> operatorArray; + //是否是决策报表——用于判断一些决策报表的特殊操作(比如决策报表控件在设置值时要多设置几个地方,一层套一层) + private boolean frmFlag = false; + //是否被选中 + private boolean selected = true; + + + public ITContent() { + this.sheetID = StringUtils.EMPTY; + this.sheetName = StringUtils.EMPTY; + this.blockName = StringUtils.EMPTY; + this.templateName = StringUtils.EMPTY; + this.otherPos = StringUtils.EMPTY; + this.replaceObject = StringUtils.EMPTY; + this.contentObject = new ContentObject(); + this.showObject = StringUtils.EMPTY; + this.showStr = StringUtils.EMPTY; + this.oldShowStr = StringUtils.EMPTY; + this.lastSearchStr = StringUtils.EMPTY; + this.trlString = StringUtils.EMPTY; + this.operatorArray = new ArrayList<>(); + } + + + /** + * 复制 + * @return + */ + public ITContent copy() { + ITContent result = new ITContent(); + result.setSheetID(this.getSheetID()); + result.setSheetName(this.getSheetName()); + result.setTemplateName(this.getTemplateName()); + result.setBlockName(this.getBlockName()); + result.addOtherPos(this.getOtherPos()); + result.setReplaceObject(this.getReplaceObject()); + result.setContentObject(this.getContentObject().newContentObject(getContentObject())); + result.setShowObject(this.getShowObject()); + result.setTrlString(this.getTrlString()); + result.setShowStr(this.getShowStr()); + result.setOldShowStr(this.getOldShowStr()); + result.setLastSearchStr(this.getLastSearchStr()); + result.setOperatorArray(this.getOperatorArray()); + result.setFrmFlag(this.isFrm()); + return result; + } + + public ContentObject getContentObject() { + return contentObject; + } + + public void setContentObject(ContentObject contentObject) { + this.contentObject = contentObject; + } + + public Object getReplaceObject() { + return replaceObject; + } + + public void setReplaceObject(Object replaceObject) { + this.replaceObject = replaceObject; + } + + public String getSheetID() { + return sheetID; + } + + public void setSheetID(String sheetID) { + this.sheetID = sheetID; + } + + public String getSheetName() { + return sheetName; + } + + public void setSheetName(String sheetName) { + this.sheetName = sheetName; + } + + public String getTemplateName() { + return templateName; + } + + public void setTemplateName(String templateName) { + this.templateName = templateName; + } + + public String getBlockName() { + return blockName; + } + + public void setBlockName(String blockName) { + this.blockName = blockName; + } + + public String getOtherPos() { + return otherPos; + } + + public Object getShowObject() { + return showObject; + } + + public String getShowStr() { + return showStr; + } + + public void setShowStr(String showStr) { + this.showStr = showStr; + } + + public String getTrlString() { + return trlString; + } + + public void setTrlString(String trlString) { + this.trlString = trlString; + } + + public void setShowObject(Object showObject) { + this.showObject = showObject; + } + + /** + * 添加位置信息 + * @param otherPoses + */ + public void addOtherPos(String... otherPoses) { + for (String otherPos : otherPoses) { + if (this.otherPos != null && !StringUtils.isEmpty(this.otherPos)) { + this.otherPos = this.otherPos + "-" + otherPos; + } else { + this.otherPos = otherPos; + } + } + } + + /** + * 添加跳转路径 + * @param trlString + */ + public void addTRL(String trlString) { + if (!StringUtils.isEmpty(trlString)) { + if (this.trlString != null && !StringUtils.isEmpty(this.trlString)) { + this.trlString = this.trlString + ":" + trlString; + } else { + this.trlString = trlString; + } + } + + } + + public ArrayList> getOperatorArray() { + return operatorArray; + } + + public void setOperatorArray(ArrayList> operatorArray) { + this.operatorArray = operatorArray; + } + + public void setOtherPos(String otherPos) { + this.otherPos = otherPos; + } + + public boolean isSelected() { + return selected; + } + + public void setSelected(boolean selected) { + this.selected = selected; + } + + public boolean isFrm() { + return frmFlag; + } + + public void setFrmFlag(boolean frmFlag) { + this.frmFlag = frmFlag; + } + + public String getOldShowStr() { + return oldShowStr; + } + + public void setOldShowStr(String oldShowStr) { + this.oldShowStr = oldShowStr; + } + + public String getLastSearchStr() { + return lastSearchStr; + } + + public void setLastSearchStr(String lastSearchStr) { + this.lastSearchStr = lastSearchStr; + } + + + @Override + public String toString() { + return AssistUtils.toString(this); + } + + +} From 82be344119711efe1ee65f7fe8cf1e10382d9ae1 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:56:41 +0800 Subject: [PATCH 05/17] =?UTF-8?q?REPORT-75998=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E3=80=81=E7=BB=84=E4=BB=B6=E3=80=81?= =?UTF-8?q?=E6=82=AC=E6=B5=AE=E5=85=83=E7=B4=A0=E3=80=81SQL=E3=80=81?= =?UTF-8?q?=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/ShowSearchResultAction.java | 388 ++++++++++++++++++ .../action/content/cell/SearchCellAction.java | 192 +++++++++ .../content/component/ComponentType.java | 316 ++++++++++++++ .../component/SearchComponentAction.java | 142 +++++++ .../floatelement/SearchFloatAction.java | 104 +++++ .../action/content/sql/SearchSQLAction.java | 107 +++++ .../action/content/widget/FrmWidgetType.java | 186 +++++++++ .../content/widget/SearchWidgetAction.java | 166 ++++++++ 8 files changed, 1601 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java new file mode 100644 index 000000000..acf430a91 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java @@ -0,0 +1,388 @@ +package com.fr.design.actions.replace.action; + + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.content.cell.SearchCellAction; +import com.fr.design.actions.replace.action.content.component.SearchComponentAction; +import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; +import com.fr.design.actions.replace.action.content.formula.SearchFormulaAction; +import com.fr.design.actions.replace.action.content.js.SearchJSAction; +import com.fr.design.actions.replace.action.content.sql.SearchSQLAction; +import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; +import com.fr.design.actions.replace.info.*; +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.general.GeneralUtils; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.FloatElement; +import com.fr.third.org.apache.poi.hssf.record.formula.functions.Int; +import javafx.util.Pair; +import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ +public enum ShowSearchResultAction implements ShowValue { + /** + * 搜索单元格 + */ + CELL(Toolkit.i18nText("Fine-Design_Basic_Cell")) { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchCellAction(jTemplate).getCellInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList cellInfos = new ArrayList<>(); + for (Info info : arrayList) { + if (((CellInfo) info).isChartExist()) { + CellElement cellElement = (CellElement) info.getContent().getReplaceObject(); + ChartCollection chartCollection = (ChartCollection) cellElement.getValue(); + for (int i = 0; i < chartCollection.getChartCount(); i++) { + String titleName = GeneralUtils.objectToString(chartCollection.getChart(i).getTitle().getTextObject()); + if (titleName.contains(str)) { + CellInfo cellInfo = ((CellInfo) info).copy(); + cellInfo.setCellChartIndex(i); + cellInfo.getContent().addOtherPos( + Toolkit.i18nText("Fine-Design_Replace_Chart_Title"), + chartCollection.getChartName(i), + titleName + ); + setShowInfo(cellInfo, titleName, str); + cellInfos.add(cellInfo); + } + } + } else { + HashMap stringHashMap = info.getValue(); + String content = stringHashMap.getOrDefault("content", StringUtils.EMPTY); + if (content.contains(str) && !StringUtils.isEmpty(content)) { + info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); + info.getContent().setOldShowStr(content); + info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); + info.getContent().setSelected(true); + cellInfos.add((CellInfo) info); + } + } + } + return cellInfos; + } + + private void setShowInfo(CellInfo cellInfo, String titleName, String str) { + cellInfo.getContent().setShowStr(ShowValueUtils.getCommonString(titleName, str)); + cellInfo.getContent().setOldShowStr(titleName); + cellInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(titleName, str)); + cellInfo.getContent().setSelected(true); + } + }, + /** + * 搜索JS事件 + */ + JS(Toolkit.i18nText("Fine-Design_Replace_JS")) { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchJSAction(jTemplate).getJsInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList jsInfos = new ArrayList<>(); + HashMap stringHashMap = new HashMap<>(); + for (Info info : arrayList) { + stringHashMap = info.getValue(); + if (StringUtils.isEmpty(str)) { + if (!StringUtils.isEmpty(stringHashMap.getOrDefault("content", StringUtils.EMPTY))) { + JSInfo contentJSInfo = ((JSInfo) info).copy(); + contentJSInfo.getContent().setShowStr(stringHashMap.get("content")); + contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content")); + contentJSInfo.getContent().setSelected(true); + contentJSInfo.setContentFlag(true); + jsInfos.add(contentJSInfo); + } + if (!StringUtils.isEmpty(stringHashMap.getOrDefault("name", StringUtils.EMPTY))) { + JSInfo nameJSInfo = ((JSInfo) info).copy(); + nameJSInfo.getContent().setShowStr(stringHashMap.get("name")); + nameJSInfo.getContent().setOldShowStr(stringHashMap.get("name")); + nameJSInfo.getContent().setSelected(true); + nameJSInfo.setContentFlag(false); + jsInfos.add(nameJSInfo); + } + } else { + searchMap4JS(stringHashMap, jsInfos, ((JSInfo) info), str); + //searchMap4JSContent(stringHashMap, jsInfos, ((JSInfo) info), str); + } + + } + return jsInfos; + } + + private void searchMap4JS(HashMap stringHashMap, ArrayList jsInfos, JSInfo info, String str) { + if (stringHashMap.containsKey("name") && !StringUtils.isEmpty(stringHashMap.get("name"))) { + String name = stringHashMap.get("name"); + if (name.contains(str)) { + JSInfo nameJSInfo = info.copy(); + nameJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); + nameJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str)); + nameJSInfo.getContent().setOldShowStr(stringHashMap.get("name")); + nameJSInfo.setContentFlag(false); + nameJSInfo.getContent().setSelected(true); + jsInfos.add(nameJSInfo); + } + } + if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) { + String content = stringHashMap.get("content"); + if (content.contains(str)) { + JSInfo contentJSInfo = info.copy(); + contentJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); + contentJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); + contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content")); + contentJSInfo.setContentFlag(true); + contentJSInfo.getContent().setSelected(true); + jsInfos.add(contentJSInfo); + } + } + } + }, + /** + * 搜索SQL + */ + SQL("SQL") { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchSQLAction(jTemplate).getSqlInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList sqlInfos = new ArrayList<>(); + HashMap stringHashMap = new HashMap<>(); + for (Info info : arrayList) { + stringHashMap = ((SQLInfo) info).getValue(); + if (StringUtils.isEmpty(str)) { + info.getContent().setShowStr(stringHashMap.get("content")); + info.getContent().setOldShowStr(stringHashMap.get("content")); + info.getContent().setSelected(true); + sqlInfos.add((SQLInfo) info); + } else { + searchMap4SQLContent(stringHashMap, sqlInfos, ((SQLInfo) info), str); + } + + } + return sqlInfos; + } + + private void searchMap4SQLContent(HashMap stringHashMap, ArrayList sqlInfos, SQLInfo info, String str) { + if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) { + String content = stringHashMap.get("content"); + if (content.contains(str)) { + SQLInfo contentJSInfo = info.copy(); + contentJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); + contentJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); + contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content")); + contentJSInfo.getContent().setSelected(true); + sqlInfos.add(contentJSInfo); + } + } + } + + private void updateOperaotrArray(int index, int preLength, int strLength, SQLInfo sqlInfo) { + ArrayList> pairs = new ArrayList<>(); + pairs.add(new Pair<>(index + preLength, index + preLength + strLength)); + sqlInfo.getContent().setOperatorArray(pairs); + } + }, + /** + * 搜索悬浮元素 + */ + FLOAT(Toolkit.i18nText("Fine-Design_Basic_Float_Element")) { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchFloatAction(jTemplate).getFloatInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList floatInfos = new ArrayList<>(); + for (Info info : arrayList) { + FloatElement floatElement = ((FloatElement) (info.getContent().getReplaceObject())); + //如果存的是图表,就要特殊处理 + if (((FloatInfo) info).isChartExist()) { + ChartCollection chartCollection = (ChartCollection) floatElement.getValue(); + for (int i = 0; i < chartCollection.getChartCount(); i++) { + String titleName = GeneralUtils.objectToString(chartCollection.getChart(i).getTitle().getTextObject()); + if (titleName.contains(str)) { + FloatInfo floatInfo = ((FloatInfo) info).copy(); + floatInfo.setFloatChartIndex(i); + floatInfo.getContent().addOtherPos( + Toolkit.i18nText("Fine-Design_Replace_Chart_Title"), + chartCollection.getChartName(i), + titleName); + setShowInfo(floatInfo, titleName, str); + floatInfos.add(floatInfo); + } + } + } else { + if (GeneralUtils.objectToString(floatElement.getValue()).contains(str)) { + FloatInfo floatInfo = ((FloatInfo) info).copy(); + setShowInfo(floatInfo, GeneralUtils.objectToString(floatElement.getValue()), str); + floatInfos.add(floatInfo); + } + } + } + return floatInfos; + } + + private void setShowInfo(FloatInfo floatInfo, String value, String str) { + floatInfo.getContent().setOldShowStr(value); + floatInfo.getContent().setShowStr(ShowValueUtils.getCommonString(value, str)); + floatInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(value, str)); + floatInfo.getContent().setSelected(true); + } + }, + /** + * 搜索组件 + */ + COMPONENT(Toolkit.i18nText("Fine-Design_Replace_Component")) { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchComponentAction(jTemplate).getComponentInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList componentInfos = new ArrayList<>(); + HashMap stringHashMap = new HashMap<>(); + for (Info info : arrayList) { + stringHashMap = info.getValue(info.getContent().getReplaceObject()); + searchMap4Component(stringHashMap, componentInfos, ((ComponentInfo) info), str); + } + return componentInfos; + } + + private void searchMap4Component(HashMap stringHashMap, ArrayList componentInfos, ComponentInfo info, String str) { + if (stringHashMap.containsKey("content")) { + String content = stringHashMap.get("content"); + if (content.contains(str)) { + info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); + info.getContent().setOldShowStr(stringHashMap.get("content")); + info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); + info.getContent().setSelected(true); + componentInfos.add(info); + } + } + } + }, + /** + * 搜索控件 + */ + WIDGET(Toolkit.i18nText("Fine-Design_Basic_Widget")) { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchWidgetAction(jTemplate).getWidgetInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList widgetInfos = new ArrayList<>(); + HashMap stringHashMap = new HashMap<>(); + for (Info info : arrayList) { + stringHashMap = info.getValue(); + searchMap4Widget(stringHashMap, widgetInfos, ((WidgetInfo) info), str); + } + return widgetInfos; + } + + private void searchMap4Widget(HashMap stringHashMap, ArrayList widgetInfos, WidgetInfo info, String str) { + if (stringHashMap.containsKey("name")) { + String name = stringHashMap.get("name"); + if (!StringUtils.isEmpty(name) && name.contains(str)) { + WidgetInfo nameInfo = info.copy(info); + nameInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); + nameInfo.getContent().setOldShowStr(stringHashMap.get("name")); + nameInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str)); + nameInfo.getContent().setSelected(true); + nameInfo.setWaterMarkFlag(false); + widgetInfos.add(nameInfo); + } + } + if (stringHashMap.containsKey("waterMark")) { + String waterMark = stringHashMap.get("waterMark"); + if (!StringUtils.isEmpty(waterMark) && waterMark.contains(str)) { + WidgetInfo widgetInfo = info.copy(info); + widgetInfo.getContent().setShowStr(ShowValueUtils.getCommonString(waterMark, str)); + widgetInfo.getContent().setOldShowStr(stringHashMap.get("waterMark")); + widgetInfo.getContent().setShowObject(widgetInfo.getContent().getShowObject() + "水印"); + widgetInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(waterMark, str)); + widgetInfo.getContent().setSelected(true); + widgetInfo.setWaterMarkFlag(true); + widgetInfos.add(widgetInfo); + } + } + } + }, + /** + * 搜索公式 + */ + FORMULA(Toolkit.i18nText("Fine-Design_Basic_Formula")) { + @Override + public ArrayList showSearchValue(JTemplate jTemplate) { + return new SearchFormulaAction(jTemplate).getFormulaInfos(); + } + + @Override + public ArrayList addMatchResult(String str, ArrayList arrayList) { + ArrayList formulaInfos = new ArrayList<>(); + HashMap stringHashMap = new HashMap<>(); + for (Info info : arrayList) { + stringHashMap = info.getValue(); + searchMap4Formula(stringHashMap, formulaInfos, ((FormulaInfo) info), str); + } + return formulaInfos; + } + + private void searchMap4Formula(HashMap stringHashMap, ArrayList formulaInfos, FormulaInfo info, String str) { + if (stringHashMap.containsKey("content")) { + String name = stringHashMap.get("content"); + if (name.contains(str)) { + info.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); + info.getContent().setOldShowStr(stringHashMap.get("content")); + info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str)); + info.getContent().setSelected(true); + formulaInfos.add(info); + } + } + } + }; + + + String name; + + ShowSearchResultAction(String name) { + this.name = name; + } + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static ShowSearchResultAction match(String name) { + ShowSearchResultAction[] values = ShowSearchResultAction.values(); + for (ShowSearchResultAction value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java new file mode 100644 index 000000000..12f73a33f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java @@ -0,0 +1,192 @@ +package com.fr.design.actions.replace.action.content.cell; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.component.SearchComponentAction; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.DealWithInfoValue; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.design.actions.replace.info.CellInfo; +import com.fr.form.main.Form; +import com.fr.form.ui.ElementCaseEditor; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.*; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.general.GeneralUtils; +import com.fr.main.impl.WorkBook; +import com.fr.report.cell.CellElement; +import com.fr.report.elementcase.ElementCase; +import com.fr.report.poly.PolyECBlock; +import com.fr.report.report.Report; +import com.fr.stable.AssistUtils; +import javafx.util.Pair; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +/** + * 获取有内容的单元格相关信息 + * + * tips:这边报表分为两块——决策报表(dealForm)和普通报表(dealWorkBook),二者最后都会归于ElementCase + * 决策报表:虽然分为绝对布局和自适应布局,但是单元格可能存在的地方只有report ,二者对它(report)的处理是统一的,都属于WTitleLayout,因此没必要划分两种布局 + * 普通报表:获取elementCase拿到cellIterator遍历即可 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-11 + */ +public class SearchCellAction implements SearchAction { + private ArrayList cellInfos; + + /** + * 构造时会搜索单元格,设置对应的单元格列表信息 + * @param jTemplate 要搜索的报表对象 + */ + public SearchCellAction(JTemplate jTemplate){ + setCellInfos(search4Infos(jTemplate)); + } + + + public ArrayList getCellInfos() { + return cellInfos; + } + + public void setCellInfos(ArrayList cellInfos) { + this.cellInfos = cellInfos; + } + + + /** + * 搜索对应的信息 + * @param jTemplate 要搜索的报表对象 + * @return 返回单元格信息Array + */ + @Override + public ArrayList search4Infos(JTemplate jTemplate){ + if (jTemplate.getTarget() instanceof Form){ + return dealForm(jTemplate); + + } else if (jTemplate.getTarget() instanceof WorkBook){ + return dealWorkBook(jTemplate); + } + return new ArrayList<>(); + } + + + /** + * 处理决策报表 + * 流程:dealForm——>getCellInfosFromBoundsWidget——>getCellInfoFromElementCase + * @param jTemplate 要搜索的报表对象 + * @return 返回单元格信息Array + */ + private ArrayList dealForm(JTemplate jTemplate) { + ArrayList result = new ArrayList<>(); + SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate); + for (ComponentInfo info : searchComponentAction.getComponentInfos()){ + ITContent content = info.getContent().copy(); + getCellInfosFromBoundsWidget(result,content, (Widget) info.getContent().getReplaceObject()); + + } + return result; + } + + /** + * 从组件信息中获取到的layout中的BoundsWidget中获取真正的报表块,并且将信息添加到列表中 + * @param result 要操作的Array + * @param content 存储查找替换相关信息的类 + * @param widget 控件和组件的最高层接口 + */ + private void getCellInfosFromBoundsWidget(ArrayList result, ITContent content, Widget widget) { + //report在两种布局中都属于WTitleLayout + if (widget instanceof WTitleLayout){ + for (int i = 0 ; i < ((WTitleLayout) widget).getWidgetCount() ; i++){ + //这里它又套了一层BoundsWidget + if (((CRBoundsWidget)((WTitleLayout) widget).getWidget(i)).getWidget() instanceof ElementCaseEditor){ + ElementCaseEditor editor = (ElementCaseEditor) ((CRBoundsWidget)((WTitleLayout) widget).getWidget(i)).getWidget(); + ITContent newContent = content.copy(); + getCellInfoFromElementCase((ElementCase) editor.getElementCase(),result,newContent); + } + } + } + + } + + /** + * 处理普通报表 + * @param jTemplate 要搜索的报表对象 + * @return 对应信息Array + */ + private ArrayList dealWorkBook(JTemplate jTemplate) { + WorkBook workBook = (WorkBook) jTemplate.getTarget(); + ArrayList result = new ArrayList<>(); + for (int i = 0 ; i < workBook.getReportCount() ; i++){ + Report report = workBook.getReport(i); + ITContent content = new ITContent(); + content.setSheetID(String.valueOf(i)); + content.setSheetName(workBook.getReportName(i)); + content.setTemplateName(jTemplate.getTemplateName()); + content.addTRL(jTemplate.getTemplateName()); + getCellInfoFromReport(report,result, content); + } + return result; + } + + /** + * 处理普通报表的sheet + * @param report sheet + * @param result 要操作的信息Array + * @param content 存储查找替换相关信息的类 + */ + private void getCellInfoFromReport(Report report, ArrayList result,ITContent content){ + + if (report != null){ + Iterator it = report.iteratorOfElementCase(); + while (it.hasNext()){ + ITContent newContent =content.copy(); + ElementCase elementCase = (ElementCase) it.next(); + getCellInfoFromElementCase(elementCase,result, newContent); + } + } + } + + + private void getCellInfoFromElementCase(ElementCase elementCase, ArrayList result,ITContent content){ + Iterator cellIterator = elementCase.cellIterator(); + while (cellIterator.hasNext()){ + ITContent newContent = content.copy(); + CellElement cell = (CellElement) cellIterator.next(); + newContent.getContentObject().setCell(cell); + newContent.setReplaceObject(cell); + //单元格 + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Cell") +cell); + newContent.setShowObject(cell); + newContent.addTRL(newContent.getSheetID()); + if (elementCase instanceof PolyECBlock){ + newContent.setBlockName(((PolyECBlock)elementCase).getBlockName()); + newContent.addTRL(((PolyECBlock)elementCase).getBlockName()); + } + newContent.addTRL(GeneralUtils.objectToString(cell)); + CellInfo cellInfo = new CellInfo(newContent); + if (cell.getValue() instanceof ChartCollection){ + cellInfo.setChartExist(true); + } + result.add(cellInfo); + } + } + + + /** + * 对应的单元格信息列表是否有内容 + * @return 判断的布尔值 + */ + public boolean isCellInfosExist(){ + return this.getCellInfos().size() > 0; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java new file mode 100644 index 000000000..4f63e1402 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java @@ -0,0 +1,316 @@ +package com.fr.design.actions.replace.action.content.component; + +import com.fr.design.actions.replace.action.content.widget.FrmWidgetType; +import com.fr.design.actions.replace.action.content.widget.SearchFrmWidget; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.DealWithInfoValue; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WCardLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.container.cardlayout.WCardTagLayout; +import com.fr.form.ui.container.cardlayout.WCardTitleLayout; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.stable.StringUtils; +import javafx.util.Pair; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 决策报表组件类型 + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-08 + */ +public enum ComponentType implements DealWithInfoValue{ + + /** + * WCardMainBorderLayout属于Tab块组件中的最外层——默认命名方式为tablayout0的类型 + * WCardMainBorderLayout里面放两个,一个WCardTitleLayout,一个WCardLayout + * 处理该类型时需要先将该对象加入我们的组件列表中,再对其包含的内容进行递归处理 + * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 + */ + W_CARD_MAIN_BORDER_LAYOUT("WCardMainBorderLayout"){ + @Override + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + super.addComponent2Array(componentInfos, bodyContent, widget); + ITContent content = bodyContent.copy(); + content.addOtherPos(widget.getWidgetName()); + for (int i = 0 ; i < ((WCardMainBorderLayout)widget).getWidgetCount() ; i ++){ + Widget cardLayoutWidget = ((WCardMainBorderLayout)widget).getWidget(i); + if (cardLayoutWidget instanceof WCardTitleLayout){ + for (int j = 0 ; j <((WCardTitleLayout) cardLayoutWidget).getWidgetCount() ; j++){ + if (((WCardTitleLayout) cardLayoutWidget).getWidget(j) instanceof WCardTagLayout){ + content.addOtherPos(((WCardTitleLayout) cardLayoutWidget).getWidget(j).getWidgetName()); + } + } + } + } + searchLayout4Component(componentInfos,content,((WCardMainBorderLayout)widget)); + } + }, + /** + * WCardTitleLayout里面两个,一个CardAddButton——不必处理,一个WCardTagLayout——默认命名方式为tabpane0的类型 + * 处理该类型时不用对该对象进行处理,直接对其包含的内容进行递归处理即可 + */ + W_CARD_TITLE_LAYOUT("WCardTitleLayout"){ + @Override + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + searchLayout4Component(componentInfos,bodyContent,(WCardTitleLayout) widget); + } + }, + /** + * 对于WCardLayout 里面就是放的WTabFitLayout——tab00、tab10 + * 处理该类型时不用对该对象进行处理,直接对其包含的内容进行递归处理即可 + */ + W_CARD_LAYOUT("WCardLayout"){ + @Override + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + searchLayout4Component(componentInfos,bodyContent,(WCardLayout) widget); + } + }, + /** + * WCardTagLayout——默认命名方式为tabpane0的类型 + * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 + */ + W_CARD_TAG_LAYOUT("WCardTagLayout"){ + @Override + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + super.addComponent2Array(componentInfos, bodyContent, widget); + searchLayout4Component(componentInfos,bodyContent,(WCardTagLayout) widget); + } + }, + /** + * WAbsoluteLayout属于绝对布局块 + * 处理该类型时需要先将该对象加入我们的组件列表中,再对其包含的内容进行递归处理 + * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 + */ + W_ABSOLUTE_LAYOUT("WAbsoluteLayout"){ + @Override + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + super.addComponent2Array(componentInfos, bodyContent, widget); + serachCRBoundsWidget4Component(componentInfos,bodyContent,(WAbsoluteLayout) widget); + } + }, + /** + * WTabFitLayout——里面放的是命名方式为tab00、tab10的tab块,在该块内部可以递归存放所有决策报表组件 + * 处理该类型时需要先将该对象加入我们的组件列表中,再对其包含的内容进行递归处理 + * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 + */ + W_TAB_FIT_LAYOUT("WTabFitLayout"){ + @Override + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + super.addComponent2Array(componentInfos, bodyContent, widget); + serachCRBoundsWidget4Component(componentInfos,bodyContent,(WTabFitLayout) widget); + } + }, + /** + * 自适应布局下报表块和图表的存储方式 + * TIP:该类型对其设置组件名时需要对内外层进行setWidgetName,设计器右侧上方和右侧下方面板中的组件名称不会同步更改 + */ + W_TITLE_LAYOUT("WTitleLayout"){ + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + if (replaceObject instanceof WTitleLayout){ + WTitleLayout titleLayout = (WTitleLayout) replaceObject; + info.updateOldStr(titleLayout.getWidgetName(),findStr); + titleLayout.setWidgetName(ShowValueUtils.replaceAll(titleLayout.getWidgetName(),findStr,replaceStr)); + CRBoundsWidget crBoundsWidget = ((CRBoundsWidget)titleLayout.getWidget(0)); + crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(),findStr,replaceStr)); + } + } + }, + + /** + * 自适应布局下:下拉框控件、下拉复选框控件、日期控件、数字控件、下拉树控件、密码控件都属于该类型 + * TIP:该类型对其设置组件名时需要对内外层进行setWidgetName,设计器右侧上方和右侧下方面板中的组件名称不会同步更改 + */ + W_SCALE_LAYOUT("WScaleLayout"){ + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + if (replaceObject instanceof WScaleLayout){ + WScaleLayout scaleLayout = (WScaleLayout) replaceObject; + info.updateOldStr(scaleLayout.getWidgetName(),findStr); + scaleLayout.setWidgetName(ShowValueUtils.replaceAll(scaleLayout.getWidgetName(),findStr,replaceStr)); + CRBoundsWidget crBoundsWidget = ((CRBoundsWidget)scaleLayout.getWidget(0)); + crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(),findStr,replaceStr)); + } + } + }, + /** + * 绝对布局:文本控件 + */ + TEXT_EDITOR("TextEditor"), + + /** + * 自适应布局和绝对布局:标签控件 + */ + LABEL("Label"), + + /** + * 自适应布局和绝对布局:按钮控件 + */ + FREE_BUTTON("FreeButton"), + + /** + * 下绝对布局:拉框控件 + */ + COMBO_BOX("ComboBox"), + + /** + * 绝对布局:下拉复选框控件 + */ + COMBO_CHECK_BOX("ComboCheckBox"), + + /** + * 绝对布局:日期控件 + */ + DATE_EDITOR("DateEditor"), + + /** + * 绝对布局:数字控件 + */ + NUMBER_EDITOR("NumberEditor"), + + /** + * 绝对布局:下拉树控件 + */ + TREE_COMBO_BOX_EDITOR("TreeComboBoxEditor"), + + /** + * 自适应布局和绝对布局:单选按钮组控件 + */ + RADIO_GROUP("RadioGroup"), + + /** + * 自适应布局和绝对布局:复选按钮组控件 + */ + CHECK_BOX_GROUP("CheckBoxGroup"), + + /** + * 自适应布局和绝对布局:查询按钮 + */ + FORM_SUBMIT_BUTTON("FormSubmitButton"), + + /** + * 自适应布局和绝对布局:文本域控件 + */ + TEXT_AREA("TextArea"), + + /** + * 绝对布局:密码控件 + */ + PASS_WORD("Password"), + + /** + * 自适应布局和绝对布局:复选按钮控件 + */ + CHECK_BOX("CheckBox"), + + /** + * 自适应布局和绝对布局:视图树 + */ + TREE_EDITOR("TreeEditor"), + + /** + * 自适应布局和绝对布局:文件控件 + */ + MULTI_FILE_EDITOR("MultiFileEditor"); + + + String name; + ComponentType(String name) { + this.name = name; + } + + @Nullable + public static ComponentType match(String name){ + ComponentType[] values = ComponentType.values(); + for (ComponentType value : values) { + if(value.name.equals(name)){ + return value; + } + } + return null; + } + + public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + componentInfos.add(new ComponentInfo(getComponentContent(bodyContent,widget))); + } + + public ITContent getComponentContent(ITContent componentContent,Widget widget){ + ITContent content = componentContent.copy(); + content.setReplaceObject(widget); + String widgetName = widget.getWidgetName(); + if (!(widget instanceof WCardTagLayout)){ + content.addOtherPos(widgetName); + } + content.setBlockName(widgetName); + content.setShowObject(widgetName); + content.addTRL(widgetName); + return content; + } + + public void searchLayout4Component(ArrayList componentInfos, ITContent bodyContent, WLayout layout){ + for (int i = 0 ; i < layout.getWidgetCount() ; i ++){ + ComponentType componentType = ComponentType.match(layout.getWidget(i).getClass().getSimpleName()); + if (componentType != null){ + componentType.addComponent2Array(componentInfos, bodyContent, layout.getWidget(i)); + } + } + } + + public void serachCRBoundsWidget4Component(ArrayList componentInfos, ITContent bodyContent, WLayout layout){ + for (int i = 0 ; i < layout.getWidgetCount() ; i ++){ + //这边会套一层CRBoundsWidget + ComponentType componentType = ComponentType.match(((CRBoundsWidget)(layout.getWidget(i))).getWidget().getClass().getSimpleName()); + if (componentType != null){ + ITContent content = bodyContent.copy(); + content.addOtherPos(layout.getWidgetName()); + componentType.addComponent2Array(componentInfos, content, ((CRBoundsWidget)(layout.getWidget(i))).getWidget()); + } + } + } + + + @Override + public HashMap getValue(Object... o) { + HashMap hashMap = new HashMap<>(); + if (o != null && o[0] instanceof Widget){ + hashMap.put("content", ((Widget) o[0]).getWidgetName()); + } + return hashMap; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + if (replaceObject instanceof Widget){ + Widget widget = ((Widget) replaceObject); + info.updateOldStr(widget.getWidgetName(),findStr); + widget.setWidgetName(widget.getWidgetName().replaceAll(findStr,replaceStr)); + } + } + + @Override + public String getInfoShowStr(Info info) { + if (info instanceof ComponentInfo && info.getContent().getReplaceObject() instanceof Widget){ + return ((Widget) info.getContent().getReplaceObject()).getWidgetName(); + } + return StringUtils.EMPTY; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java new file mode 100644 index 000000000..70f4ea419 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java @@ -0,0 +1,142 @@ +package com.fr.design.actions.replace.action.content.component; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.main.Form; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WAbsoluteLayout; +import com.fr.form.ui.container.WCardLayout; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; +import com.fr.form.ui.container.cardlayout.WCardTagLayout; +import com.fr.form.ui.container.cardlayout.WCardTitleLayout; +import com.fr.form.ui.container.cardlayout.WTabFitLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.stable.StringUtils; +import com.teamdev.jxbrowser.deps.org.checkerframework.checker.units.qual.C; + +import java.util.ArrayList; + +/** + * 获取决策报表组件 + * TIPS:组件只在决策报表中,只用考虑决策报表Form,分为para和body两部分来处理 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-29 + */ +public class SearchComponentAction implements SearchAction { + + private ArrayList componentInfos; + + + public ArrayList getComponentInfos() { + return componentInfos; + } + + public void setComponentInfos(ArrayList componentInfos) { + this.componentInfos = componentInfos; + } + + /** + * 构造时会搜索组件,设置对应的组件列表信息 + * @param jTemplate 要搜索的模板 + */ + public SearchComponentAction(JTemplate jTemplate) { + setComponentInfos(search4Infos(jTemplate)); + } + + /** + * 搜索决策报表参数面板以及body面板两个地方的组件 + * @param jTemplate 要搜索的模板 + * @return 组件信息Array + */ + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList componentInfos = new ArrayList<>(); + if (jTemplate.getTarget() instanceof Form) { + Form form = (Form) jTemplate.getTarget(); + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + content.addTRL(jTemplate.getTemplateName()); + content.setFrmFlag(true); + //参数面板 + dealPara(componentInfos, content, form.getParaContainer()); + //body面板 + dealBody(componentInfos, content, form.getBody()); + } + return componentInfos; + } + + private void dealBody(ArrayList componentInfos, ITContent content, Widget body) { + if (body instanceof WLayout) { + ITContent bodyContent = content.copy(); + bodyContent.addOtherPos(body.getWidgetName()); + //单独处理一下body组件 + dealBodyContainer(componentInfos, bodyContent, (WLayout) body); + //处理body的子组件 + searchBodyComponent(componentInfos, bodyContent, body); + //searchBodyComponent(); + } + } + + private void searchBodyComponent(ArrayList componentInfos, ITContent bodyContent, Widget body) { + for (int i = 0 ; i < ((WLayout) body).getWidgetCount(); i++){ + //body下面的每个控件都会有一层BoundsWidget,为了兼容用了CRBoundsWidget,boundsWidget.getWidget()里面才是真正我们需要的widget + CRBoundsWidget boundsWidget = (CRBoundsWidget) ((WLayout) body).getWidget(i); + ComponentType componentType = ComponentType.match(boundsWidget.getWidget().getClass().getSimpleName()); + if (componentType != null){ + componentType.addComponent2Array(componentInfos,bodyContent,boundsWidget.getWidget()); + } + } + } + + private void dealBodyContainer(ArrayList componentInfos, ITContent bodyContent, WLayout body) { + ITContent content = bodyContent.copy(); + content.setReplaceObject(body); + dealContent(content, body.getWidgetName()); + //WParameterLayout + componentInfos.add(new ComponentInfo(content)); + } + + private void dealPara(ArrayList componentInfos, ITContent content, WLayout paraContainer) { + if (paraContainer != null) { + ITContent paraContent = content.copy(); + paraContent.addOtherPos(paraContainer.getWidgetName()); + //单独处理一下para组件 + dealParaContainer(componentInfos, paraContent, paraContainer); + //处理para的子组件 + searchParaComponent(componentInfos, paraContent, paraContainer); + } + } + + private void searchParaComponent(ArrayList componentInfos, ITContent paraContent, WLayout paraContainer) { + for (int i = 0; i < paraContainer.getWidgetCount(); i++) { + ITContent content = paraContent.copy(); + String widgetName = ((CRBoundsWidget) (paraContainer.getWidget(i))).getWidget().getWidgetName(); + content.addOtherPos(widgetName); + content.setReplaceObject(((CRBoundsWidget) (paraContainer.getWidget(i))).getWidget()); + dealContent(content, widgetName); + componentInfos.add(new ComponentInfo(content)); + + } + } + + //单独处理WParameterLayout组件 + private void dealParaContainer(ArrayList componentInfos, ITContent content, WLayout paraContainer) { + ITContent paraContent = content.copy(); + paraContent.setReplaceObject(paraContainer); + dealContent(paraContent, paraContainer.getWidgetName()); + //WParameterLayout + componentInfos.add(new ComponentInfo(paraContent)); + } + + + private void dealContent(ITContent content, String widgetName) { + content.setBlockName(widgetName); + content.setShowObject(widgetName); + content.addTRL(widgetName); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java new file mode 100644 index 000000000..c3bd741e0 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java @@ -0,0 +1,104 @@ +package com.fr.design.actions.replace.action.content.floatelement; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.FloatInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.main.impl.WorkBook; +import com.fr.report.cell.FloatElement; +import com.fr.report.elementcase.ElementCase; +import com.fr.report.poly.PolyECBlock; +import com.fr.report.report.Report; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * 查找悬浮元素的信息 + * + * 由于决策报表没有悬浮元素,因此不用考虑决策报表,只需要考虑普通报表即可 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-16 + */ +public class SearchFloatAction implements SearchAction { + private ArrayList floatInfos; + + /** + * 构造时会搜索悬浮元素,设置对应的悬浮元素信息列表 + * @param jTemplate 指定搜索的模板 + */ + public SearchFloatAction(JTemplate jTemplate){ setFloatInfos(search4Infos(jTemplate));} + + /** + * 查找悬浮元素信息,只需要考虑普通报表 + * @param jTemplate 指定搜索模板 + * @return 悬浮元素信息列表 + */ + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList result = new ArrayList<>(); + if (jTemplate.getTarget() instanceof WorkBook){ + WorkBook workBook = (WorkBook) jTemplate.getTarget(); + for (int i = 0 ; i < workBook.getReportCount() ; i++){ + Report report = workBook.getReport(i); + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + content.setSheetID(String.valueOf(i)); + content.setSheetName(workBook.getReportName(i)); + content.addTRL(jTemplate.getTemplateName()); + content.addTRL(String.valueOf(i)); + getFloatInfoFromReport(report,result, content); + } + } + return result; + } + + + + private void getFloatInfoFromReport(Report report, ArrayList result, ITContent content) { + + if (report != null){ + Iterator it = report.iteratorOfElementCase(); + while (it.hasNext()){ + ITContent newContent = content.copy(); + ElementCase elementCase = (ElementCase) it.next(); + getFloatInfoFromElementCase(elementCase,result, newContent); + } + } + } + + private void getFloatInfoFromElementCase(ElementCase elementCase, ArrayList result, ITContent content) { + Iterator floatIterator = elementCase.floatIterator(); + while (floatIterator.hasNext()){ + ITContent newContent = content.copy(); + FloatElement floatElement = (FloatElement) floatIterator.next(); + newContent.getContentObject().setFloatElement(floatElement); + newContent.setReplaceObject(floatElement); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Float_Element")); + if (elementCase instanceof PolyECBlock){ + newContent.setBlockName(((PolyECBlock)elementCase).getBlockName()); + newContent.addTRL(((PolyECBlock)elementCase).getBlockName()); + } + newContent.setShowObject(floatElement.getName()); + newContent.addTRL(floatElement.getName()); + FloatInfo floatInfo = new FloatInfo(newContent); + if (floatElement.getValue() instanceof ChartCollection){ + floatInfo.setChartExist(true); + } + result.add(floatInfo); + } + } + + + public ArrayList getFloatInfos() { + return floatInfos; + } + + public void setFloatInfos(ArrayList floatInfos) { + this.floatInfos = floatInfos; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java new file mode 100644 index 000000000..ca30e60d5 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java @@ -0,0 +1,107 @@ +package com.fr.design.actions.replace.action.content.sql; + +import com.fr.data.TableDataSource; +import com.fr.data.impl.DBTableData; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.SQLInfo; + +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.data.tabledata.wrapper.TableDataFactory; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.TableDataConfig; +import com.fr.form.main.Form; +import com.fr.main.impl.WorkBook; +import com.fr.stable.AssistUtils; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-16 + */ +public class SearchSQLAction implements SearchAction { + private ArrayList sqlInfos; + + public SearchSQLAction(JTemplate jTemplate) { + setSqlInfos(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList sqlInfos = new ArrayList<>(); + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + addModelDataInfos2Array(jTemplate, content, sqlInfos); + addServerDataInfos2Array(content, sqlInfos); + return sqlInfos; + } + + + /** + * 服务器数据集 + * @param content + * @param sqlInfos + */ + private void addServerDataInfos2Array(ITContent content, ArrayList sqlInfos) { + TableDataConfig tableDataConfig = TableDataConfig.getInstance(); + String[] nameArray = TableDataFactory.getSortOfChineseNameOfServerData(tableDataConfig); + for (String dataName : nameArray) { + if (tableDataConfig.getTableData(dataName) instanceof DBTableData) { + ITContent newContent = content.copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData"), + dataName + ); + newContent.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData")); + newContent.setReplaceObject(tableDataConfig.getTableData(dataName)); + newContent.getContentObject().setDbTableData((DBTableData) tableDataConfig.getTableData(dataName)); + sqlInfos.add(new SQLInfo(newContent)); + } + + } + } + + /** + * 模板数据集 + * @param jTemplate + * @param content + * @param sqlInfos + */ + private void addModelDataInfos2Array(JTemplate jTemplate, ITContent content, ArrayList sqlInfos) { + if (jTemplate.getTarget() instanceof TableDataSource) { + TableDataSource source = (TableDataSource) jTemplate.getTarget(); + Iterator dataIterator = source.getTableDataNameIterator(); + while (dataIterator.hasNext()) { + String dataName = (String) dataIterator.next(); + if (source.getTableData(dataName) instanceof DBTableData) { + ITContent newContent = content.copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData"), + dataName + ); + newContent.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData")); + newContent.setReplaceObject(source.getTableData(dataName)); + newContent.getContentObject().setDbTableData(((DBTableData) source.getTableData(dataName))); + sqlInfos.add(new SQLInfo(newContent)); + } + } + } + + } + + public ArrayList getSqlInfos() { + return sqlInfos; + } + + public void setSqlInfos(ArrayList sqlInfos) { + this.sqlInfos = sqlInfos; + } + + @Override + public String toString() { + return AssistUtils.toString(this); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java new file mode 100644 index 000000000..e86c5e3e1 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java @@ -0,0 +1,186 @@ +package com.fr.design.actions.replace.action.content.widget; + +import com.fr.design.actions.replace.action.content.component.ComponentType; +import com.fr.design.actions.replace.info.DealWithInfoValue; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.form.ui.WaterMark; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import javafx.util.Pair; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-29 + */ +public enum FrmWidgetType implements SearchFrmWidget, DealWithInfoValue { + /** + * 自适应布局 + */ + W_SCALE_LAYOUT("WScaleLayout") { + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + WScaleLayout widget = (WScaleLayout) info.getContent().getReplaceObject(); + if (((WidgetInfo) info).isWaterMark()) { + FrmWidgetType frmWidgetType = FrmWidgetType.match(((CRBoundsWidget) widget.getWidget(0)).getWidget().getClass().getSimpleName()); + if (frmWidgetType != null) { + frmWidgetType.setValue(info, findStr, replaceStr, operatorArray); + } + } else { + ComponentType componentType = ComponentType.match(widget.getClass().getSimpleName()); + if (componentType != null) { + componentType.setValue(info, findStr, replaceStr, operatorArray); + } + } + + } + }, + /** + * 文本控件 + */ + TEXT_EDITOR("TextEditor"), + /** + * 标签控件 + */ + LABEL("Label"), + /** + * 按钮控件 + */ + FREE_BUTTON("FreeButton"), + /** + * 下拉框控件 + */ + COMBO_BOX("ComboBox"), + /** + * 下拉复选框控件 + */ + COMBO_CHECK_BOX("ComboCheckBox"), + /** + * 日期控件 + */ + DATE_EDITOR("DateEditor"), + /** + * 数字控件 + */ + NUMBER_EDITOR("NumberEditor"), + /** + * 下拉树控件 + */ + TREE_COMBO_BOX_EDITOR("TreeComboBoxEditor"), + /** + * 单选按钮组控件 + */ + RADIO_GROUP("RadioGroup"), + /** + * 复选按钮组控件 + */ + CHECK_BOX_GROUP("CheckBoxGroup"), + /** + * 查询按钮 + */ + FORM_SUBMIT_BUTTON("FormSubmitButton"), + /** + * 文本域控件 + */ + TEXT_AREA("TextArea"), + /** + * 密码控件 + */ + PASS_WORD("Password"), + /** + * 复选按钮控件 + */ + CHECK_BOX("CheckBox"), + /** + * 视图树 + */ + TREE_EDITOR("TreeEditor"), + /** + * 文件控件 + */ + MULTI_FILE_EDITOR("MultiFileEditor"); + + + String name; + + FrmWidgetType(String name) { + this.name = name; + } + + + /** + * 处理绝对布局或者已经是真正存储对象的控件 + * + * @param content + * @param widget + * @return + */ + public ArrayList dealAbsoluteWidget(ITContent content, Widget widget) { + ArrayList widgetInfos = new ArrayList<>(); + ITContent newContent = content.copy(); + widgetInfos.add(new WidgetInfo(newContent)); + return widgetInfos; + } + + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static FrmWidgetType match(String name) { + FrmWidgetType[] values = FrmWidgetType.values(); + for (FrmWidgetType value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } + + + @Override + public HashMap getValue(Object... o) { + return new HashMap<>(); + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Widget widget = (Widget) info.getContent().getReplaceObject(); + if (widget instanceof WScaleLayout) { + widget = ((CRBoundsWidget) ((WScaleLayout) widget).getWidget(0)).getWidget(); + } + if (((WidgetInfo) info).isWaterMark()) { + WaterMark waterMark = (WaterMark) widget; + info.updateOldStr(waterMark.getWaterMark(), findStr); + waterMark.setWaterMark(ShowValueUtils.replaceAll(waterMark.getWaterMark(), findStr, replaceStr)); + } else { + info.updateOldStr(widget.getWidgetName(), findStr); + ComponentType componentType = ComponentType.match(widget.getClass().getSimpleName()); + if (componentType != null) { + componentType.setValue(info, findStr, replaceStr, operatorArray); + } + } + } + + @Override + public String getInfoShowStr(Info info) { + return info.getContent().getOldShowStr(); + } + + @Override + public ArrayList addFrmWidget2Array(ITContent content, Widget widget) { + return dealAbsoluteWidget(content, widget); + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java new file mode 100644 index 000000000..28ae1cef3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java @@ -0,0 +1,166 @@ +package com.fr.design.actions.replace.action.content.widget; + +import com.fr.base.parameter.ParameterUI; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.cell.SearchCellAction; +import com.fr.design.actions.replace.action.content.component.SearchComponentAction; +import com.fr.design.actions.replace.info.CellInfo; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.mainframe.JTemplate; +import com.fr.form.main.Form; +import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.main.impl.WorkBook; +import com.fr.main.parameter.ReportParameterAttr; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.cell.cellattr.highlight.DefaultHighlight; +import com.fr.report.cell.cellattr.highlight.HighlightAction; +import com.fr.report.cell.cellattr.highlight.HighlightGroup; +import com.fr.report.cell.cellattr.highlight.WidgetHighlightAction; +import com.fr.stable.StringUtils; + +import java.util.ArrayList; + +/** + * 获取控件 + * 目前获取位置:单元格本身、单元格条件属性内超链控件、参数面板控件、决策报表的组件 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-16 + */ +public class SearchWidgetAction implements SearchAction { + ArrayList widgetInfos; + + public SearchWidgetAction(JTemplate jTemplate) { + setWidgetInfos(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList widgetInfos = new ArrayList<>(); + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + //这边拿SearchCellAction里的CellInfo来查找,由于在SearchCellAction里面已经考虑了决策报表和普通报表两种情况了,这边就不用再做区分 + addCellWidget2Array(widgetInfos, jTemplate); + content.addTRL(jTemplate.getTemplateName()); + if (jTemplate.getTarget() instanceof WorkBook) { + addWorkBookParaWidget2Array(content, widgetInfos, jTemplate); + } else if (jTemplate.getTarget() instanceof Form) { + addFrmWidget2Array(content, widgetInfos, jTemplate); + } + + return widgetInfos; + } + + private void addFrmWidget2Array(ITContent content, ArrayList widgetInfos, JTemplate jTemplate) { + SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate); + for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()) { + FrmWidgetType frmWidgetType = FrmWidgetType.match(componentInfo.getContent().getReplaceObject().getClass().getSimpleName()); + if (frmWidgetType != null) { + widgetInfos.addAll(frmWidgetType.addFrmWidget2Array(componentInfo.getContent(), (Widget) componentInfo.getContent().getReplaceObject())); + } + } + + } + + private void addCellWidget2Array(ArrayList widgetInfos, JTemplate jTemplate) { + SearchCellAction searchCellAction = new SearchCellAction(jTemplate); + if (searchCellAction.getCellInfos().size() > 0) { + for (CellInfo cellInfo : searchCellAction.getCellInfos()) { + //单元格本身的控件 + addWidget2ArrayFromCell(widgetInfos, cellInfo); + //单元格条件属性中超链内的控件 + addWidget2ArrayFromCellHighlight(widgetInfos, cellInfo); + } + } + + } + + private void addWidget2ArrayFromCellHighlight(ArrayList widgetInfos, CellInfo cellInfo) { + if (cellInfo.getContent().getReplaceObject() instanceof TemplateCellElement) { + TemplateCellElement cell = (TemplateCellElement) cellInfo.getContent().getReplaceObject(); + if (cell.getHighlightGroup() != null) { + HighlightGroup highlightGroup = cell.getHighlightGroup(); + dealWithHighlightGroup4Widget(highlightGroup, widgetInfos, cellInfo); + } + } + } + + private void dealWithHighlightGroup4Widget(HighlightGroup highlightGroup, ArrayList widgetInfos, CellInfo cellInfo) { + for (int i = 0; i < highlightGroup.size(); i++) { + for (int j = 0; j < ((DefaultHighlight) highlightGroup.getHighlight(i)).actionCount(); j++) { + HighlightAction highlightAction = ((DefaultHighlight) highlightGroup.getHighlight(i)).getHighlightAction(j); + //处理HighlightAction + if (isHighlightWidgetExist(highlightAction)) { + ITContent content = cellInfo.getContent().copy(); + content.addOtherPos("条件属性-超链控件"); + content.setReplaceObject(((WidgetHighlightAction) highlightAction).getWidget()); + content.setShowObject(cellInfo.getContent().getReplaceObject()); + widgetInfos.add(new WidgetInfo(content)); + } + } + } + } + + private boolean isHighlightWidgetExist(HighlightAction highlightAction) { + return highlightAction instanceof WidgetHighlightAction && ((WidgetHighlightAction) highlightAction).getWidget() != null; + } + + private void addWidget2ArrayFromCell(ArrayList widgetInfos, CellInfo cellInfo) { + if (cellInfo.getContent().getReplaceObject() instanceof TemplateCellElement + && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget() != null) { + // 单元格内有控件 + ITContent newContent = cellInfo.getContent().copy(); + + Widget widget = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget(); + newContent.addOtherPos("控件"); + if (!StringUtils.isEmpty(widget.getWidgetName())) { + newContent.addOtherPos(widget.getWidgetName()); + } + newContent.getContentObject().setWidget(widget); + newContent.setReplaceObject(widget); + newContent.setShowObject(cellInfo.getContent().getReplaceObject()); + widgetInfos.add(new WidgetInfo(newContent)); + + } + } + + private void addWorkBookParaWidget2Array(ITContent content, ArrayList widgetInfos, JTemplate jTemplate) { + WorkBook workBook = (WorkBook) jTemplate.getTarget(); + ReportParameterAttr reportParameterAttr = workBook.getReportParameterAttr(); + if (reportParameterAttr != null && reportParameterAttr.getParameterUI() != null) { + ParameterUI parameterUI = reportParameterAttr.getParameterUI(); + Widget[] widgets = parameterUI.getAllWidgets(); + for (Widget widget : widgets) { + ITContent newContent = content.copy(); + newContent.addOtherPos("参数面板控件-" + widget.getWidgetName()); + newContent.setReplaceObject(widget); + newContent.getContentObject().setWidget(widget); + newContent.setShowObject("参数面板控件"); + widgetInfos.add(new WidgetInfo(newContent)); + } + } + + } + + /** + * 是否为空 + * @return 为空返回true + */ + public boolean isWidgetInfosEmpty() { + return widgetInfos.isEmpty(); + } + + public ArrayList getWidgetInfos() { + return widgetInfos; + } + + public void setWidgetInfos(ArrayList widgetInfos) { + this.widgetInfos = widgetInfos; + } +} From 84e0de218338b316ad413a682ac2cd70065c6e01 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:58:08 +0800 Subject: [PATCH 06/17] =?UTF-8?q?REPORT-75998=20=E6=90=9C=E7=B4=A2JS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/content/js/SearchCellJSAction.java | 123 ++++++++++++++++ .../content/js/SearchFloatJSAction.java | 65 +++++++++ .../action/content/js/SearchJSAction.java | 46 ++++++ .../action/content/js/SearchWebJSAction.java | 137 ++++++++++++++++++ .../content/js/SearchWidgetJSAction.java | 57 ++++++++ 5 files changed, 428 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java new file mode 100644 index 000000000..9c066b2eb --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java @@ -0,0 +1,123 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.cell.SearchCellAction; +import com.fr.design.actions.replace.info.CellInfo; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.SearchJSUtils; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.js.JavaScriptImpl; +import com.fr.js.NameJavaScript; +import com.fr.js.NameJavaScriptGroup; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.cell.cellattr.highlight.DefaultHighlight; +import com.fr.report.cell.cellattr.highlight.HighlightAction; +import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; +import javafx.util.Pair; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-13 + */ +public class SearchCellJSAction implements SearchAction { + + + public SearchCellJSAction(JTemplate jTemplate, ArrayList jsInfos) { + jsInfos.addAll(search4Infos(jTemplate)); + } + + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList jsInfos = new ArrayList<>(); + addJSInfos2ListFromCell(jTemplate, jsInfos); + return jsInfos; + } + + + private void addJSInfos2ListFromCell(JTemplate jTemplate, ArrayList jsInfos) { + SearchCellAction searchCellAction = new SearchCellAction(jTemplate); + for (CellInfo cellInfo : searchCellAction.getCellInfos()) { + CellElement cell = (CellElement) cellInfo.getContent().getReplaceObject(); + ITContent newContent4Cell = cellInfo.getContent().copy(); + ITContent newContent4CellCondition = cellInfo.getContent().copy(); + ITContent newContent4CellWidgetCondition = cellInfo.getContent().copy(); + //单元格的超级链接里面的JS + SearchJSUtils.addJSInfosFromHyperLink(cell, jsInfos, newContent4Cell); + + //单元格条件属性里的JS + newContent4CellCondition.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes")); + searchCellConditionJS(cell, jsInfos, newContent4CellCondition); + + + //单元格如果是图表还需要额外处理 + if (cell.getValue() instanceof ChartCollection) { + ArrayList> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue()); + ArrayList nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) cell.getValue()); + //图表-样式-标签以及图表-特效-条件显示 + ITContent htmlITContent = cellInfo.getContent().copy(); + htmlITContent.getContentObject().setCell(cell); + htmlITContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); + SearchJSUtils.addJSInfosFromHtmlLabel(htmlITContent, htmlLabels, jsInfos); + //图表-特效-交互属性 + ITContent conditionContent = cellInfo.getContent().copy(); + conditionContent.getContentObject().setCell(cell); + conditionContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Interactive"), + Toolkit.i18nText("Fine-Design_Report_Hyperlink") + ); + SearchJSUtils.addJSInfosFromNameJS(conditionContent, nameJavaScripts, jsInfos); + } + } + } + + private void searchCellConditionJS(CellElement cell, ArrayList jsInfos, ITContent content) { + if (((TemplateCellElement) cell).getHighlightGroup() != null) { + for (int i = 0; i < ((TemplateCellElement) cell).getHighlightGroup().size(); i++) { + NameJavaScriptGroup njsg = getJSFromAction(((DefaultHighlight) ((TemplateCellElement) cell).getHighlightGroup().getHighlight(i))); + getAllJSFromNameJavaScriptGroup(cell, jsInfos, njsg, content); + + } + } + } + + private void getAllJSFromNameJavaScriptGroup(CellElement cell, ArrayList jsInfos, NameJavaScriptGroup njsg, ITContent content) { + if (isJSExist(njsg)) { + for (int i = 0; i < njsg.size(); i++) { + if (njsg.getNameHyperlink(i).getJavaScript() instanceof JavaScriptImpl) { + ITContent newContent = content.copy(); + newContent.getContentObject().setCell(cell); + newContent.getContentObject().setNameJavaScript(njsg.getNameHyperlink(i)); + newContent.setReplaceObject(njsg.getNameHyperlink(i)); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + } + + } + } + } + + private boolean isJSExist(NameJavaScriptGroup njsg) { + return njsg != null; + } + + private NameJavaScriptGroup getJSFromAction(DefaultHighlight highlight) { + for (int i = 0; i < highlight.actionCount(); i++) { + if (isHighlightAction(highlight.getHighlightAction(i))) { + return ((HyperlinkHighlightAction) highlight.getHighlightAction(i)).getHperlink(); + } + } + return null; + } + + private boolean isHighlightAction(HighlightAction highlightAction) { + return highlightAction instanceof HyperlinkHighlightAction; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java new file mode 100644 index 000000000..7f29a12ea --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java @@ -0,0 +1,65 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; +import com.fr.design.actions.replace.info.FloatInfo; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.actions.replace.utils.SearchJSUtils; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.js.NameJavaScript; +import com.fr.main.impl.WorkBook; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.report.cell.FloatElement; +import com.fr.report.elementcase.ElementCase; +import com.fr.report.poly.PolyECBlock; +import com.fr.report.report.Report; +import javafx.util.Pair; + +import java.util.*; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-15 + */ +public class SearchFloatJSAction implements SearchAction { + + public SearchFloatJSAction(JTemplate jTemplate, ArrayList jsInfos) { + jsInfos.addAll(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList jsInfos = new ArrayList<>(); + addJSInfos2ListFromFloat(jTemplate, jsInfos); + return jsInfos; + } + + private void addJSInfos2ListFromFloat(JTemplate jTemplate, ArrayList jsInfos) { + SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate); + for (FloatInfo floatInfo : searchFloatAction.getFloatInfos()) { + FloatElement floatElement = (FloatElement) floatInfo.getContent().getReplaceObject(); + ITContent content = floatInfo.getContent().copy(); + //从超级链接搜索 + SearchJSUtils.addJSInfosFromHyperLink(floatElement, jsInfos, content); + if (floatElement.getValue() instanceof ChartCollection) { + ArrayList> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) floatElement.getValue()); + ArrayList nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) floatElement.getValue()); + //图表-样式-标签以及图表-特效-条件显示 + SearchJSUtils.addJSInfosFromHtmlLabel(content, htmlLabels, jsInfos); + //图表-特效-交互属性 + ITContent newContent = content.copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), + Toolkit.i18nText("Fine-Design_Chart_Interactive") + ); + SearchJSUtils.addJSInfosFromNameJS(newContent, nameJavaScripts, jsInfos); + } + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java new file mode 100644 index 000000000..a62543d36 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java @@ -0,0 +1,46 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.JSInfo; + +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-12 + */ +public class SearchJSAction implements SearchAction { + private ArrayList jsInfos; + + public SearchJSAction(JTemplate jTemplate) { + setJsInfos(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList jsInfos = new ArrayList<>(); + //从单元格获取JS + new SearchCellJSAction(jTemplate, jsInfos); + //从参数面板控件 + new SearchWidgetJSAction(jTemplate, jsInfos); + //从模板Web属性 + new SearchWebJSAction(jTemplate, jsInfos); + //从悬浮元素 + new SearchFloatJSAction(jTemplate, jsInfos); + return jsInfos; + } + + public ArrayList getJsInfos() { + return jsInfos; + } + + public void setJsInfos(ArrayList jsInfos) { + this.jsInfos = jsInfos; + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java new file mode 100644 index 000000000..6c84d71af --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java @@ -0,0 +1,137 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.JSInfo; + +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.actions.replace.utils.SearchJSUtils; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.event.Listener; +import com.fr.form.ui.CustomToolBarButton; +import com.fr.form.ui.Widget; + +import com.fr.js.JavaScriptImpl; +import com.fr.main.impl.WorkBook; +import com.fr.report.web.ToolBarManager; +import com.fr.report.web.WebContent; +import com.fr.web.attr.ReportWebAttr; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-15 + */ +public class SearchWebJSAction implements SearchAction { + + private final static HashMap map = new HashMap<>(); + private ArrayList arrayList = new ArrayList<>(); + + + static { + map.put("WebPage", Toolkit.i18nText("Fine-Design_Report_Pagination_Setting")); + map.put("WebWrite", Toolkit.i18nText("Fine-Design_Report_Write_Setting")); + map.put("WebView", Toolkit.i18nText("Fine-Design_Report_Data_Analysis_Settings")); + } + + public SearchWebJSAction(JTemplate jTemplate, ArrayList jsInfos) { + jsInfos.addAll(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList jsInfos = new ArrayList<>(); + addJSInfos2ListFromWeb(jTemplate, jsInfos); + return jsInfos; + } + + private void addJSInfos2ListFromWeb(JTemplate jTemplate, ArrayList jsInfos) { + if (jTemplate.getTarget() instanceof WorkBook) { + WorkBook workBook = (WorkBook) jTemplate.getTarget(); + ReportWebAttr webAttr = workBook.getReportWebAttr(); + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + addWebContent2Array(webAttr); + for (int i = 0; i < arrayList.size(); i++) { + addJSInfos2ListFromArray(content, jsInfos, arrayList.get(i)); + } + } + } + + private void addJSInfos2ListFromArray(ITContent content, ArrayList jsInfos, WebContent webContent) { + ITContent newContent = content.copy(); + if (map.containsKey(webContent.getClass().getSimpleName())) { + newContent.addOtherPos(map.get(webContent.getClass().getSimpleName())); + } + addJSInfos2ListFromWebButton(newContent, jsInfos, webContent); + addJSInfos2ListFromWebListener(newContent, jsInfos, webContent); + } + + private void addJSInfos2ListFromWebListener(ITContent content, ArrayList jsInfos, WebContent webContent) { + for (int i = 0; i < webContent.getListenerSize(); i++) { + Listener listener = webContent.getListener(i); + ITContent newContent = content.copy(); + newContent.setReplaceObject(listener); + SearchJSUtils.searchJSFromListener(jsInfos, newContent); + } + } + + private void addJSInfos2ListFromWebButton(ITContent content, ArrayList jsInfos, WebContent webContent) { + if (hasToolBarManagers(webContent.getToolBarManagers())) { + for (ToolBarManager toolBarManager : webContent.getToolBarManagers()) { + dealWithCustonToolBarButtonImpl(content, jsInfos, toolBarManager); + } + } + } + + private void addWebContent2Array(ReportWebAttr webAttr) { + if (webAttr != null) { + addContent(arrayList, webAttr.getWebWrite()); + addContent(arrayList, webAttr.getWebPage()); + addContent(arrayList, webAttr.getWebView()); + } + + } + + private void addContent(ArrayList arrayList, WebContent webContent) { + if (webContent != null) { + arrayList.add(webContent); + } + } + + private void dealWithCustonToolBarButtonImpl(ITContent content, ArrayList jsInfos, ToolBarManager toolBarManager) { + for (int i = 0; i < toolBarManager.getToolBar().getWidgetSize(); i++) { + if (isWidgetIntanceofCustomToolBarButton(toolBarManager.getToolBar().getWidget(i))) { + ITContent newContent = content.copy(); + newContent.getContentObject().setWidget(toolBarManager.getToolBar().getWidget(i)); + addJSInfos2ListFromButtonImpl(newContent, jsInfos); + } + } + + } + + private void addJSInfos2ListFromButtonImpl(ITContent content, ArrayList jsInfos) { + + if (((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl() != null + && ((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl() instanceof JavaScriptImpl) { + ITContent newContent = content.copy(); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Custom_Form_Button")); + newContent.getContentObject().setJs(((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl()); + newContent.setReplaceObject(((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl()); + SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); + } + + } + + private boolean hasToolBarManagers(ToolBarManager[] toolBarManagers) { + return toolBarManagers.length > 0; + } + + private boolean isWidgetIntanceofCustomToolBarButton(Widget widget) { + return widget instanceof CustomToolBarButton; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java new file mode 100644 index 000000000..2881af5c0 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java @@ -0,0 +1,57 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.base.parameter.ParameterUI; +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.component.SearchComponentAction; +import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.JSInfo; + +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.design.actions.replace.utils.SearchJSUtils; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.ui.Widget; +import com.fr.main.impl.WorkBook; +import com.fr.main.parameter.ReportParameterAttr; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-13 + */ +public class SearchWidgetJSAction implements SearchAction { + public SearchWidgetJSAction(JTemplate jTemplate,ArrayList jsInfos){ + jsInfos.addAll(search4Infos(jTemplate)); + } + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList jsInfos = new ArrayList<>(); + addJSInfos2ListFromWidget(jTemplate,jsInfos); + return jsInfos; + } + + private void addJSInfos2ListFromWidget(JTemplate jTemplate, ArrayList jsInfos) { + if (jTemplate.getTarget() instanceof WorkBook){ + SearchWidgetAction searchWidgetAction = new SearchWidgetAction(jTemplate); + for (WidgetInfo widgetInfo : searchWidgetAction.getWidgetInfos()){ + ITContent content = widgetInfo.getContent().copy(); + content.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event")); + SearchJSUtils.selectJSAction(jsInfos,content); + } + } else { + SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate); + for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()){ + ITContent content = componentInfo.getContent().copy(); + content.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event")); + SearchJSUtils.selectJSAction(jsInfos,content); + } + } + + } + +} From eeb25e7dfafa2cebd93397c63c0b732e074a5ee9 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 14:59:21 +0800 Subject: [PATCH 07/17] =?UTF-8?q?REPORT-75998=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E2=80=94=E2=80=94=E5=8D=95=E5=85=83=E6=A0=BC?= =?UTF-8?q?=E3=80=81=E5=9B=BE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../formula/AbstractSearchFormulaAction.java | 25 ++ .../content/formula/FormulaReplaceObject.java | 396 ++++++++++++++++++ .../content/formula/SearchFormulaAction.java | 46 ++ .../cell/AbstractSearchCellFormulaAction.java | 37 ++ .../formula/cell/SearchCellFormulaAction.java | 198 +++++++++ .../cell/SearchCellFormulaTypeAction.java | 27 ++ .../cell/SearchDSColumnFormulaAction.java | 117 ++++++ .../formula/cell/SearchRichFormulaAction.java | 34 ++ .../cell/SearchSubReportFormulaAction.java | 36 ++ .../SearchChartCollectionFormulaAction.java | 213 ++++++++++ 10 files changed, 1129 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java new file mode 100644 index 000000000..9746cc169 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java @@ -0,0 +1,25 @@ +package com.fr.design.actions.replace.action.content.formula; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public abstract class AbstractSearchFormulaAction implements SearchFormula{ + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java new file mode 100644 index 000000000..297194568 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java @@ -0,0 +1,396 @@ +package com.fr.design.actions.replace.action.content.formula; + +import com.fr.base.BaseFormula; +import com.fr.base.Formula; +import com.fr.base.Parameter; +import com.fr.base.StoreProcedureParameter; +import com.fr.base.iofile.attr.WatermarkAttr; +import com.fr.base.present.FormulaPresent; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.core.Compare; +import com.fr.design.actions.replace.action.ShowValue; +import com.fr.design.actions.replace.info.DealWithInfoValue; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.design.file.HistoryTemplateListCache; +import com.fr.js.SingleJavaScript; +import com.fr.main.impl.WorkBook; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.cellattr.CellInsertPolicyAttr; +import com.fr.report.cell.cellattr.core.RichText; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.stable.FormulaProvider; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; +import javafx.util.Pair; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-25 + */ +public enum FormulaReplaceObject implements DealWithInfoValue { + /** + * Formula类型(最基础也是最常见) + */ + FORMULA("Formula") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) o[0]).getContent())) { + map.put("content", ((Formula) o[0]).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((Formula) replaceObject).getContent(), findStr); + ((Formula) replaceObject).setContent(ShowValueUtils.replaceAll(((Formula) replaceObject).getContent(), findStr, replaceStr)); + } + }, + /** + * FormulaCondition + */ + FORMULA_CONDITION("FormulaCondition") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((FormulaCondition) o[0]).getFormula())) { + map.put("content", ((FormulaCondition) o[0]).getFormula()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + //更新上一次操作的信息 + info.updateOldStr(((FormulaCondition) replaceObject).getFormula(), findStr); + + ((FormulaCondition) replaceObject).setFormula(ShowValueUtils.replaceAll(((FormulaCondition) replaceObject).getFormula(), findStr, replaceStr)); + } + + }, + /** + * Compare + */ + COMPARE("Compare") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) ((Compare) o[0]).getValue()).getContent())) { + map.put("content", ((Formula) ((Compare) o[0]).getValue()).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + if (((Compare) replaceObject).getValue() instanceof Formula) { + Formula formula = (Formula) ((Compare) replaceObject).getValue(); + info.updateOldStr(formula.getContent(), findStr); + + formula.setContent(ShowValueUtils.replaceAll(formula.getContent(), findStr, replaceStr)); + } + } + + }, + /** + * 富文本 + */ + RICH_TEXT("RichText") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((RichText) ((CellElement) o[0]).getValue()).getContent())) { + map.put("content", ((RichText) ((CellElement) o[0]).getValue()).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + //todo 富文本公式处理 + } + + }, + /** + * KV + */ + KV("KV") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent())) { + map.put("content", ((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((Formula) ((com.fr.base.core.KV) replaceObject).getValue()).getContent(), findStr); + + ((Formula) ((com.fr.base.core.KV) replaceObject).getValue()).setContent(ShowValueUtils.replaceAll(((Formula) ((com.fr.base.core.KV) replaceObject).getValue()).getContent(), findStr, replaceStr)); + } + + }, + /** + * 插入策略 + */ + CELL_INSERT_POLICY_ATTR("CellInsertPolicyAttr") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent())) { + map.put("content", ((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((Formula) (((CellInsertPolicyAttr) replaceObject).getDefaultInsertValue())).getContent(), findStr); + ((Formula) (((CellInsertPolicyAttr) replaceObject).getDefaultInsertValue())).setContent(ShowValueUtils.replaceAll(((Formula) (((CellInsertPolicyAttr) replaceObject).getDefaultInsertValue())).getContent(), findStr, replaceStr)); + } + + }, + /** + * present + */ + PRESENT("Present") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((FormulaPresent) o[0]).getFormulaContent())) { + map.put("content", ((FormulaPresent) o[0]).getFormulaContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((FormulaPresent) replaceObject).getFormulaContent(), findStr); + + ((FormulaPresent) replaceObject).setFormulaContent(ShowValueUtils.replaceAll(((FormulaPresent) replaceObject).getFormulaContent(), findStr, replaceStr)); + } + + }, + /** + * SingleJavaScript + */ + SINGLE_JAVA_SCRIPT("SingleJavaScript") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((SingleJavaScript) o[0]).getFileName())) { + map.put("content", ((SingleJavaScript) o[0]).getFileName()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((SingleJavaScript) replaceObject).getFileName(), findStr); + + ((SingleJavaScript) replaceObject).setFileName(ShowValueUtils.replaceAll(((SingleJavaScript) replaceObject).getFileName(), findStr, replaceStr)); + } + + }, + /** + * 参数 + */ + PARAMETER_PROVIDER("ParameterProvider") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) (((ParameterProvider) o[0]).getValue())).getContent())) { + map.put("content", ((Formula) (((ParameterProvider) o[0]).getValue())).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((Formula) (((ParameterProvider) replaceObject).getValue())).getContent(), findStr); + + ((Formula) (((ParameterProvider) replaceObject).getValue())).setContent(ShowValueUtils.replaceAll(((Formula) (((ParameterProvider) replaceObject).getValue())).getContent(), findStr, replaceStr)); + } + + }, + /** + * FormulaProvider + */ + FORMULA_PROVIDER("FormulaProvider") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((FormulaProvider) o[0]).getContent())) { + map.put("content", ((FormulaProvider) o[0]).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((FormulaProvider) replaceObject).getContent(), findStr); + + ((FormulaProvider) replaceObject).setContent(ShowValueUtils.replaceAll(((FormulaProvider) replaceObject).getContent(), findStr, replaceStr)); + } + + }, + /** + * 参数 + */ + PARAMETER("Parameter") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) (((Parameter) o[0]).getValue())).getContent())) { + map.put("content", ((Formula) (((Parameter) o[0]).getValue())).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((Formula) (((Parameter) replaceObject).getValue())).getContent(), findStr); + + ((Formula) (((Parameter) replaceObject).getValue())).setContent(ShowValueUtils.replaceAll(((Formula) (((Parameter) replaceObject).getValue())).getContent(), findStr, replaceStr)); + } + + }, + /** + * 数据列 + */ + DS_COLUMN("DSColumn") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((DSColumn) o[0]).getResult())) { + map.put("content", ((DSColumn) o[0]).getResult()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((DSColumn) replaceObject).getResult(), findStr); + + ((DSColumn) replaceObject).setResult(ShowValueUtils.replaceAll(((DSColumn) replaceObject).getResult(), findStr, replaceStr)); + } + + }, + /** + * 公式类型 + */ + BASE_FORMULA("BaseFormula") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((BaseFormula) o[0]).getContent())) { + map.put("content", ((BaseFormula) o[0]).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((BaseFormula) replaceObject).getContent(), findStr); + + ((BaseFormula) replaceObject).setContent(ShowValueUtils.replaceAll(((BaseFormula) replaceObject).getContent(), findStr, replaceStr)); + } + + }, + /** + * 存储过程的参数 + */ + STORE_PROCEDURE_PARAMETER("StoreProcedureParameter") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent())) { + map.put("content", ((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + Object replaceObject = info.getContent().getReplaceObject(); + info.updateOldStr(((Formula) ((StoreProcedureParameter) replaceObject).getValue()).getContent(), findStr); + + ((Formula) ((StoreProcedureParameter) replaceObject).getValue()).setContent(ShowValueUtils.replaceAll(((Formula) ((StoreProcedureParameter) replaceObject).getValue()).getContent(), findStr, replaceStr)); + } + + }, + /** + * WatermarkAttr水印 + */ + WATER_MARK_ATTR("WatermarkAttr") { + @Override + public HashMap getValue(Object... o) { + HashMap map = new HashMap<>(); + if (!StringUtils.isEmpty(((WatermarkAttr) o[0]).getText())) { + map.put("content", ((WatermarkAttr) o[0]).getText()); + } + return map; + } + + @Override + public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + WorkBook workBook = (WorkBook) HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget(); + WatermarkAttr watermarkAttr = (WatermarkAttr) info.getContent().getReplaceObject(); + info.updateOldStr(watermarkAttr.getText(), findStr); + watermarkAttr.setText(ShowValueUtils.replaceAll(watermarkAttr.getText(), findStr, replaceStr)); + workBook.addAttrMark(watermarkAttr); + } + }; + + + String name; + + FormulaReplaceObject(String name) { + this.name = name; + } + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static FormulaReplaceObject match(String name) { + FormulaReplaceObject[] values = FormulaReplaceObject.values(); + for (FormulaReplaceObject value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } + + + @Override + public String getInfoShowStr(Info info) { + return info.getContent().getOldShowStr(); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java new file mode 100644 index 000000000..2f5e03137 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java @@ -0,0 +1,46 @@ +package com.fr.design.actions.replace.action.content.formula; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaAction; +import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; +import com.fr.design.actions.replace.action.content.formula.floatelement.SearchFloatFormulaAction; +import com.fr.design.actions.replace.action.content.formula.template.SearchTemplateFormulaAction; +import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.main.Form; +import com.fr.main.impl.WorkBook; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class SearchFormulaAction implements SearchAction { + private ArrayList formulaInfos; + + public SearchFormulaAction(JTemplate jTemplate) { + setFormulaInfos(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList formulaInfos = new ArrayList<>(); + new SearchCellFormulaAction(jTemplate, formulaInfos); + new SearchWidgetFormulaAction(jTemplate, formulaInfos); + new SearchDataFormulaAction(jTemplate, formulaInfos); + new SearchTemplateFormulaAction(jTemplate, formulaInfos); + new SearchFloatFormulaAction(jTemplate, formulaInfos); + return formulaInfos; + } + + public ArrayList getFormulaInfos() { + return formulaInfos; + } + + public void setFormulaInfos(ArrayList formulaInfos) { + this.formulaInfos = formulaInfos; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java new file mode 100644 index 000000000..3156878f3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java @@ -0,0 +1,37 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-30 + */ +public abstract class AbstractSearchCellFormulaAction implements SearchCellFormula{ + + + @Override + public void searchFormulaFromCell(JTemplate jTemplate, ArrayList formulaInfos) { + + } + + @Override + public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return new ArrayList<>(); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java new file mode 100644 index 000000000..cc27b002e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java @@ -0,0 +1,198 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.base.Formula; +import com.fr.base.present.FormulaPresent; +import com.fr.design.actions.replace.action.content.cell.SearchCellAction; +import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.*; +import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormulaAction; +import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; +import com.fr.design.actions.replace.info.CellInfo; +import com.fr.design.actions.replace.info.FormulaInfo; + +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.js.NameJavaScriptGroup; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.TemplateCellElement; +import com.fr.report.cell.cellattr.highlight.DefaultHighlight; +import com.fr.report.cell.cellattr.highlight.HighlightAction; +import com.fr.report.cell.cellattr.highlight.HighlightGroup; +import com.fr.report.core.sort.common.CellSortAttr; +import com.fr.report.core.sort.sortexpression.FormulaSortExpression; +import com.fr.report.core.sort.sortexpression.SortExpression; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 搜索单元格中的公式 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { + + + public static HashMap cellType = new HashMap<>(); + + static { + cellType.put("DSColumn", new SearchDSColumnFormulaAction()); + cellType.put("Formula", new SearchCellFormulaTypeAction()); + cellType.put("RichText", new SearchRichFormulaAction()); + cellType.put("SubReport", new SearchSubReportFormulaAction()); + } + + public static HashMap conditionHashMap = new HashMap<>(); + + static { + conditionHashMap.put("FormulaCondition", new SearchFormulaConditionAction()); + conditionHashMap.put("ObjectCondition", new SearchObjectConditionAction()); + conditionHashMap.put("ListCondition", new SearchListConditionAction()); + } + + public SearchCellFormulaAction(JTemplate jTemplate, ArrayList fomulaInfos) { + searchFormulaFromCell(jTemplate, fomulaInfos); + } + + /** + * 从单元格中寻找公式 + * + * @param jTemplate 指定搜索模板 + * @param formulaInfos 指定添加信息的数组 + */ + @Override + public void searchFormulaFromCell(JTemplate jTemplate, ArrayList formulaInfos) { + SearchCellAction searchCellAction = new SearchCellAction(jTemplate); + if (searchCellAction.isCellInfosExist()) { + for (CellInfo cellInfo : searchCellAction.getCellInfos()) { + //根据单元格类型的不同来进行不同的操作 + searchFormulaFromCellInfo(cellInfo, formulaInfos); + + if (cellInfo.getContent().getReplaceObject() instanceof TemplateCellElement) { + //单元格属性-排序 + searchCellSortAttr4Formula(cellInfo, formulaInfos); + //单元格属性-形态 + searchCellPresent4Formula(cellInfo, formulaInfos); + //单元格属性-其他-插入策略 + searchCellInsertPolicy4Formula(cellInfo, formulaInfos); + //单元格条件属性-参数-公式 + searchCellConditionPara4Formula(cellInfo, formulaInfos); + //单元格条件属性-属性-参数 + searchCellHighlightPara4Formula(cellInfo, formulaInfos); + //单元格超链 + searchCellHyperLink4Formula(cellInfo, formulaInfos); + } + + } + } + + } + + private void searchCellHyperLink4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + NameJavaScriptGroup nameJavaScriptGroup = ((CellElement) cellInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); + if (nameJavaScriptGroup != null) { + for (int i = 0; i < nameJavaScriptGroup.size(); i++) { + SearchJSHighlightAction action = new SearchJSHighlightAction(); + action.searchJSFormulaFromOther(formulaInfos, cellInfo.getContent(), nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); + } + } + + } + + private void searchCellHighlightPara4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null) { + HighlightGroup highlightGroup = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup(); + for (int i = 0; i < highlightGroup.size(); i++) { + for (int j = 0; j < ((DefaultHighlight) highlightGroup.getHighlight(i)).actionCount(); j++) { + HighlightAction highlightAction = ((DefaultHighlight) highlightGroup.getHighlight(i)).getHighlightAction(j); + //处理HighlightAction + SearchHighlightFormulaAction searchHighlightAction = new SearchHighlightFormulaAction(); + ITContent newContent = cellInfo.getContent().copy(); + searchHighlightAction.dealWithHighlightAction(newContent, formulaInfos, highlightAction); + } + } + } + } + + private void searchCellConditionPara4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null) { + HighlightGroup highlightGroup = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup(); + for (int i = 0; i < highlightGroup.size(); i++) { + if (conditionHashMap.containsKey(((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition().getClass().getSimpleName())) { + SearchConditionFormula searchCondition = conditionHashMap.get(((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition().getClass().getSimpleName()); + ITContent newContent = cellInfo.getContent().copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), + Toolkit.i18nText("Fine-Design_Basic_Formula")); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent, ((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition()); + } + } + } + } + + private void searchCellPresent4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() != null + && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() instanceof FormulaPresent) { + ITContent newContent = cellInfo.getContent().copy(); + newContent.setReplaceObject((((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent())); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), + Toolkit.i18nText("Fine-Design_Report_Present")); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + + private void searchCellInsertPolicy4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr() != null + && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr().getDefaultInsertValue() instanceof Formula) { + ITContent newContent = cellInfo.getContent().copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), + Toolkit.i18nText("Fine-Design_Report_Other"), + Toolkit.i18nText("Fine-Design_Basic_CellWrite_InsertRow_Policy")); + newContent.setReplaceObject(((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr()); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + + + private void searchCellSortAttr4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellExpandAttr() != null) { + CellSortAttr sortAttr = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellExpandAttr().getCellSortAttr(); + if (isSortAttrExist(sortAttr)) { + for (SortExpression sortExpression : sortAttr.getSortExpressions()) { + if (sortExpression instanceof FormulaSortExpression) { + ITContent newContent = cellInfo.getContent().copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), + Toolkit.i18nText("Fine-Design_Report_Expand"), + Toolkit.i18nText("Fine-Design_Basic_Action_Sort") + ); + newContent.setReplaceObject(sortExpression); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + + } + } + } + + private boolean isSortAttrExist(CellSortAttr sortAttr) { + return sortAttr != null && sortAttr.getSortExpressions() != null; + } + + private void searchFormulaFromCellInfo(CellInfo cellInfo, ArrayList formulaInfos) { + if (((CellElement) (cellInfo.getContent().getReplaceObject())).getValue() != null + && cellType.containsKey(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName())) { + SearchCellFormula searchCellFormula = cellType.get(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName()); + searchCellFormula.searchFormulaFromCellType(formulaInfos, cellInfo.getContent()); + + } + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java new file mode 100644 index 000000000..75e2083cf --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java @@ -0,0 +1,27 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.report.cell.CellElement; + +import java.util.ArrayList; + +/** + * 查找公式时单元格格式如果是公式类型则操作此类 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchCellFormulaTypeAction extends AbstractSearchCellFormulaAction { + + + @Override + public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(((CellElement)(content.getReplaceObject())).getValue()); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Formula")); + formulaInfos.add(new FormulaInfo(newContent)); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java new file mode 100644 index 000000000..baa2e1ec6 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java @@ -0,0 +1,117 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.base.Formula; +import com.fr.base.Parameter; +import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchListConditionAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.general.data.Condition; +import com.fr.report.cell.cellattr.core.group.DSColumn; +import com.fr.report.core.sort.sortexpression.FormulaSortExpression; +import com.fr.report.core.sort.sortexpression.SortExpression; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 查找公式时单元格格式如果是数据列型则操作此类 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchDSColumnFormulaAction extends AbstractSearchCellFormulaAction { + public static HashMap conditionHashMap = new HashMap<>(); + static { + conditionHashMap.put("FormulaCondition",new SearchFormulaConditionAction()); + conditionHashMap.put("CommonCondition",new SearchCommonConditionAction()); + conditionHashMap.put("ListCondition",new SearchListConditionAction()); + } + + + @Override + public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent itContent) { + if (itContent.getContentObject().getCell().getValue() instanceof DSColumn){ + if (((DSColumn) itContent.getContentObject().getCell().getValue()).getCondition() != null){ + ITContent content = itContent.copy(); + //数据列 + content.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_DS_Column")); + DSColumn dsColumn = ((DSColumn) itContent.getContentObject().getCell().getValue()); + //过滤条件中的公式 + addFormulaInfos2ArrayFromCondition(content,dsColumn.getCondition(), formulaInfos); + //动态参数中的公式 + addFormulaInfos2ArrayFromPara(content,dsColumn,formulaInfos); + //高级-排序中的公式 + addFormulaInfos2ArrayFromSortExpression(content,dsColumn,formulaInfos); + //高级-显示值中的公式 + addFormulaInfos2ArrayFromResult(content,dsColumn,formulaInfos); + + } + + } + } + private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, ArrayList formulaInfos) { + if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == '='){ + ITContent newContent =content.copy(); + newContent.setReplaceObject(dsColumn); + //高级-显示值 + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Advanced"), + Toolkit.i18nText("Fine-Design_Basic_Display_Value") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + + } + + private void addFormulaInfos2ArrayFromSortExpression(ITContent content, DSColumn dsColumn, ArrayList formulaInfos) { + if (dsColumn.getCellSortAttr() != null && dsColumn.getCellSortAttr().getSortExpressions() != null){ + for (SortExpression sortExpression : dsColumn.getCellSortAttr().getSortExpressions()){ + if (sortExpression instanceof FormulaSortExpression){ + ITContent newContent =content.copy(); + //高级-排序 + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Advanced"), + Toolkit.i18nText("Fine-Design_Basic_Action_Sort") + ); + newContent.getContentObject().setSortExpression((FormulaSortExpression) sortExpression); + newContent.setReplaceObject(sortExpression); + formulaInfos.add(new FormulaInfo(newContent)); + + } + } + + } + } + + private void addFormulaInfos2ArrayFromPara(ITContent content, DSColumn dsColumn, ArrayList formulaInfos) { + for (Parameter parameter : dsColumn.getParameters()){ + if (parameter.getValue() instanceof Formula){ + ITContent newContent = content.copy(); + //动态参数注入 + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_TableData_Dynamic_Parameter_Setting")); + newContent.getContentObject().setFormula((Formula) parameter.getValue()); + newContent.setReplaceObject(parameter.getValue()); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + } + + /** + * 数据列过滤条件中的公式 + */ + private void addFormulaInfos2ArrayFromCondition(ITContent content, Condition condition, ArrayList formulaInfos){ + //这边condition有三种情况:FormulaCondition、CommonCondition、ListCondition,分别处理 + SearchConditionFormula searchCondition = conditionHashMap.get(condition.getClass().getSimpleName()); + ITContent newContent = content.copy(); + //过滤条件 + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Filter_Conditions")); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent,condition); + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java new file mode 100644 index 000000000..db1c97923 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java @@ -0,0 +1,34 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.cellattr.core.RichText; + +import java.util.ArrayList; + +/** + * 搜索单元格富文本类型的公式 + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchRichFormulaAction extends AbstractSearchCellFormulaAction { + @Override + public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { + //todo 富文本这边直接遍历RichChar来拿公式 + if (((RichText)((CellElement)(content.getReplaceObject())).getValue()).getContent().contains("${")){ + ITContent newContent =content.copy(); + newContent.setReplaceObject(((CellElement)(content.getReplaceObject())).getValue()); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Rich_Text"), + Toolkit.i18nText("Fine-Design_Basic_Formula") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java new file mode 100644 index 000000000..66e9802a0 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java @@ -0,0 +1,36 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.base.Formula; +import com.fr.base.core.KV; +import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.cellattr.core.SubReport; + +import java.util.ArrayList; + +/** + * 搜索单元格子报表类型的公式 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchSubReportFormulaAction extends AbstractSearchCellFormulaAction { + @Override + public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { + KV[] kvs = ((SubReport) (((CellElement) content.getReplaceObject()).getValue())).getParameterKVS(); + for (KV kv : kvs) { + if (kv.getValue() instanceof Formula) { + ITContent newContent = content.copy(); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Sub_Report_Parameter")); + newContent.setReplaceObject(kv); + formulaInfos.add(new FormulaInfo(newContent)); + } + + } + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java new file mode 100644 index 000000000..0a30bc39c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java @@ -0,0 +1,213 @@ +package com.fr.design.actions.replace.action.content.formula.chart; + +import com.fr.base.Formula; +import com.fr.chart.chartattr.Axis; +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.chart.chartattr.Title; +import com.fr.chart.chartdata.NormalChartData; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.plugin.chart.attr.axis.VanChartAlertValue; +import com.fr.plugin.chart.attr.axis.VanChartAxis; +import com.fr.plugin.chart.attr.axis.VanChartValueAxis; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 图表类型获取公式汇总 + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public class SearchChartCollectionFormulaAction { + + public SearchChartCollectionFormulaAction(ArrayList formulaInfos, ITContent content, ChartCollection chartCollection) { + for (int i = 0 ; i < chartCollection.getChartCount() ;i ++){ + ITContent chartContent =content.copy(); + SearchChartPatternFormula(formulaInfos,chartContent,chartCollection.getChart(i)); + //数据-单元格数据-分类名&系列名&值 + SearchChartDataFormula(formulaInfos,content,chartCollection.getChart(i)); + } + + } + + private void SearchChartDataFormula(ArrayList formulaInfos, ITContent content, Chart chart) { + if (chart.defaultChartData() instanceof NormalChartData){ + NormalChartData chartData = (NormalChartData) chart.defaultChartData(); + //todo + } + } + + + private void SearchChartPatternFormula(ArrayList formulaInfos, ITContent chartContent, Chart chart){ + //样式-标题 + SearchChartPatternFormulaFromTitle(formulaInfos, chartContent, chart); + + //样式-坐标轴-值定义&样式-坐标轴-轴标题 + SearchChartPatternFormulaFromAxisValue(formulaInfos, chartContent, chart); + + //样式-背景-警戒线 + SearchChartPatternFormulaFromAlertLine(formulaInfos,chartContent,chart); + } + + private void SearchChartPatternFormulaFromAlertLine(ArrayList formulaInfos, ITContent chartContent, Chart chart) { + Axis xAxis = chart.getPlot().getxAxis(); + Axis yAxis = chart.getPlot().getyAxis(); + ITContent content = chartContent.copy(); + content.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Pattern"), + Toolkit.i18nText("Fine-Design_Chart_Background"), + Toolkit.i18nText("Fine-Design_Chart_Plot_Region"), + Toolkit.i18nText("Fine-Design_Chart_Alert_Line") + ); + if (xAxis instanceof VanChartAxis){ + List list = ((VanChartAxis) xAxis).getAlertValues(); + for (VanChartAlertValue alertValue : list){ + //警戒线设置 + dealAlertValue(formulaInfos,content,alertValue); + //提示文字 + dealAlertContent(formulaInfos,content,alertValue); + } + } + if (yAxis instanceof VanChartAxis){ + List list = ((VanChartAxis) yAxis).getAlertValues(); + for (VanChartAlertValue alertValue : list){ + //警戒线设置 + dealAlertValue(formulaInfos,content,alertValue); + //提示文字 + dealAlertContent(formulaInfos,content,alertValue); + } + } + + } + + private void dealAlertContent(ArrayList formulaInfos, ITContent content, VanChartAlertValue alertValue) { + if (alertValue.getAlertContentFormula() != null){ + ITContent alertContent = content.copy(); + alertContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Alert_Text")); + alertContent.setReplaceObject(alertValue.getAlertContentFormula()); + formulaInfos.add(new FormulaInfo(alertContent)); + } + } + + private void dealAlertValue(ArrayList formulaInfos, ITContent content, VanChartAlertValue alertValue) { + if (alertValue.getAlertValueFormula() != null){ + ITContent valueContent = content.copy(); + valueContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Alert_Set")); + valueContent.setReplaceObject(alertValue.getAlertValueFormula()); + formulaInfos.add(new FormulaInfo(valueContent)); + } + } + + private void SearchChartPatternFormulaFromAxisValue(ArrayList formulaInfos, ITContent chartContent, Chart chart) { + Axis xAxis = chart.getPlot().getxAxis(); + Axis yAxis = chart.getPlot().getyAxis(); + //样式-坐标轴-x轴 + if (xAxis!= null){ + //轴标题 + ITContent xAxisContent = chartContent.copy(); + xAxisContent.addOtherPos( + chart.getChartName(), + Toolkit.i18nText("Fine-Design_Chart_Pattern"), + Toolkit.i18nText("Fine-Design_Chart_Axis"), + Toolkit.i18nText("Fine-Design_Chart_X_Axis") + ); + dealTitle(formulaInfos, xAxisContent,xAxis.getTitle()); + dealChartValueDefine(formulaInfos, xAxisContent,xAxis); + } + + //样式-坐标轴-y轴-轴标题 + if (yAxis !=null){ + ITContent yAxisContent = chartContent.copy(); + yAxisContent.addOtherPos( + chart.getChartName(), + Toolkit.i18nText("Fine-Design_Chart_Pattern"), + Toolkit.i18nText("Fine-Design_Chart_Axis"), + Toolkit.i18nText("Fine-Design_Chart_Y_Axis") + + ); + dealTitle(formulaInfos,yAxisContent,yAxis.getTitle()); + dealChartValueDefine(formulaInfos,yAxisContent,yAxis); + } + + + + } + + private void dealChartValueDefine(ArrayList formulaInfos, ITContent axisContent, Axis axis) { + ITContent content = axisContent.copy(); + content.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Value_Define")); + //自定义最大值最小值 + dealChartMaxAndMinValue(formulaInfos,content,axis); + //自定义主次刻度 + dealChartMainAndSecUnit(formulaInfos,content,axis); + //自定义对数底数 + dealChartLogBase(formulaInfos,content,axis); + + } + + private void dealChartLogBase(ArrayList formulaInfos, ITContent content, Axis axis) { + if (axis instanceof VanChartValueAxis){ + if (axis.isLog() && ((VanChartValueAxis) axis).getLogBase() != null){ + ITContent logContent =content.copy(); + logContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_LogBase_Value")); + logContent.setReplaceObject(((VanChartValueAxis) axis).getLogBase()); + formulaInfos.add(new FormulaInfo(logContent)); + } + } + } + + private void dealChartMainAndSecUnit(ArrayList formulaInfos, ITContent content, Axis axis) { + if (axis.isCustomMainUnit() && axis.getMainUnit() != null){ + ITContent mainContent = content.copy(); + mainContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Main_Type")); + mainContent.setReplaceObject(axis.getMainUnit()); + formulaInfos.add(new FormulaInfo(mainContent)); + } + if (axis.isCustomSecUnit() && axis.getSecUnit() != null){ + ITContent secContent = content.copy(); + secContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Second_Type")); + secContent.setReplaceObject(axis.getSecUnit()); + formulaInfos.add(new FormulaInfo(secContent)); + } + } + + private void dealChartMaxAndMinValue(ArrayList formulaInfos, ITContent axisContent, Axis axis) { + if (axis.isCustomMaxValue() && axis.getMaxValue() != null){ + ITContent maxContent = axisContent.copy(); + maxContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Max_Value")); + maxContent.setReplaceObject(axis.getMaxValue()); + formulaInfos.add(new FormulaInfo(maxContent)); + } + if (axis.isCustomMinValue() && axis.getMinValue() != null){ + ITContent minContent = axisContent.copy(); + minContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Min_Value")); + minContent.setReplaceObject(axis.getMinValue()); + formulaInfos.add(new FormulaInfo(minContent)); + } + } + + private void SearchChartPatternFormulaFromTitle(ArrayList formulaInfos, ITContent chartContent, Chart chart){ + //样式-标题 + ITContent titleContent = chartContent.copy(); + titleContent.addOtherPos( + chart.getChartName(), + Toolkit.i18nText("Fine-Design_Chart_Pattern") + + ); + dealTitle(formulaInfos,titleContent,chart.getTitle()); + } + + private void dealTitle(ArrayList formulaInfos, ITContent chartContent, Title title) { + if (title !=null && title.getTextObject() instanceof Formula){ + ITContent content = chartContent.copy(); + content.addOtherPos(Toolkit.i18nText("Fine-Design_Form_Title")); + content.setReplaceObject(title.getTextObject()); + formulaInfos.add(new FormulaInfo(content)); + } + } +} From 6dc4f3ba963f9030759fbf0c1233eaa68dac53c3 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 15:00:02 +0800 Subject: [PATCH 08/17] =?UTF-8?q?REPORT-75998=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E2=80=94=E2=80=94=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E3=80=81=E6=82=AC=E6=B5=AE=E5=85=83=E7=B4=A0=E3=80=81=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=85=A8=E5=B1=80=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/AbstractSearchDataFormulaAction.java | 31 +++++ .../action/content/formula/data/DataType.java | 124 ++++++++++++++++++ .../formula/data/SearchDataFormulaAction.java | 75 +++++++++++ .../AbstractSearchFloatFormula.java | 26 ++++ .../SearchFloatFormulaAction.java | 111 ++++++++++++++++ .../AbstractSearchTemplateFormula.java | 27 ++++ .../template/SearchTemplateFormulaAction.java | 65 +++++++++ 7 files changed, 459 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java new file mode 100644 index 000000000..108b1b66d --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java @@ -0,0 +1,31 @@ +package com.fr.design.actions.replace.action.content.formula.data; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-26 + */ +public abstract class AbstractSearchDataFormulaAction implements SearchDataFormula{ + + @Override + public void searchFormulaFromData(JTemplate jTemplate,ArrayList fomulaInfos) { + + } + + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java new file mode 100644 index 000000000..3ed0b432d --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java @@ -0,0 +1,124 @@ +package com.fr.design.actions.replace.action.content.formula.data; + +import com.fr.base.Formula; +import com.fr.base.TableData; +import com.fr.data.impl.*; +import com.fr.data.impl.storeproc.StoreProcedure; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.stable.ParameterProvider; +import com.fr.stable.StringUtils; + +import java.util.ArrayList; + +/** + * + * 分别对不同类型的数据集进行获取公式处理 + * 暂不支持ClassTableData(用户自定义数据集)、FileTableData(用户自定义数据集),EmbeddedTableData(无公式) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-26 + */ +public enum DataType { + /** + * 数据库查询 + */ + DB_TABLE_DATA("DBTableData"){ + @Override + public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { + if (((DBTableData)tableData).getParameters() != null){ + for (ParameterProvider provider : ((DBTableData)tableData).getParameters()){ + dealProvider(provider,content,fomulaInfos); + } + } + } + + }, + /** + * 存储过程 + */ + STORE_PROCEDURE("StoreProcedure"){ + @Override + public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { + if (((StoreProcedure)tableData).getParameters() != null){ + for (ParameterProvider provider : ((StoreProcedure)tableData).getParameters()){ + dealProvider(provider,content,fomulaInfos); + + } + } + } + }, + /** + * 关联数据集 + */ + CONDITION_TABLE_DATA("ConditionTableData"){ + @Override + public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { + if (((ConditionTableData)tableData).getDefineParameters() != null){ + for (ParameterProvider provider : ((ConditionTableData)tableData).getDefineParameters()){ + dealProvider(provider,content,fomulaInfos); + } + } + } + }, + /** + * 树数据集 + */ + RECURSION_TABLE_DATA("RecursionTableData"){ + @Override + public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { + if (((RecursionTableData)tableData).getParameters() != null){ + for (ParameterProvider provider : ((RecursionTableData)tableData).getParameters()){ + dealProvider(provider,content,fomulaInfos); + } + } + } + }; + + + String name; + DataType(String name) { + this.name = name; + } + + /** + * 处理参数 + * @param provider + * @param content + * @param formulaInfos + */ + public void dealProvider(ParameterProvider provider, ITContent content, ArrayList formulaInfos) { + if (provider .getValue()instanceof Formula && !StringUtils.isEmpty((((Formula) provider.getValue())).getContent() )){ + ITContent newContent = content.copy(); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter")); + newContent.setReplaceObject(provider); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + + /** + * 匹配 + * @param name + * @return + */ + public static DataType match(String name){ + DataType[] values = DataType.values(); + for (DataType value : values) { + if(value.name.equals(name)){ + return value; + } + } + return null; + } + + /** + * 从数据集中获取公式 + * @param tableData + * @param content + * @param fomulaInfos + */ + void searchFormula(TableData tableData, ITContent content , ArrayList fomulaInfos){} + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java new file mode 100644 index 000000000..31f04705e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java @@ -0,0 +1,75 @@ +package com.fr.design.actions.replace.action.content.formula.data; + +import com.fr.data.TableDataSource; +import com.fr.data.impl.DBTableData; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.SQLInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.data.tabledata.wrapper.TableDataFactory; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.file.TableDataConfig; +import com.fr.main.impl.WorkBook; + +import java.util.ArrayList; +import java.util.Iterator; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-26 + */ +public class SearchDataFormulaAction extends AbstractSearchDataFormulaAction{ + + public SearchDataFormulaAction(JTemplate jTemplate, ArrayList fomulaInfos){ + searchFormulaFromData(jTemplate,fomulaInfos); + } + @Override + public void searchFormulaFromData(JTemplate jTemplate, ArrayList fomulaInfos) { + + //模板数据集 + dealTemplateData(jTemplate,fomulaInfos); + + //服务器数据集 + dealServerData(fomulaInfos); + + } + + private void dealServerData(ArrayList fomulaInfos) { + TableDataConfig tableDataConfig = TableDataConfig.getInstance(); + String[] nameArray = TableDataFactory.getSortOfChineseNameOfServerData(tableDataConfig); + for (String dataName : nameArray) { + ITContent content = new ITContent(); + content.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData"), + dataName + ); + content.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData")); + DataType dataType = DataType.match(tableDataConfig.getTableData(dataName).getClass().getSimpleName()); + if (dataType != null){ + dataType.searchFormula(tableDataConfig.getTableData(dataName),content,fomulaInfos); + } + } + } + + private void dealTemplateData(JTemplate jTemplate, ArrayList fomulaInfos) { + if (jTemplate.getTarget() instanceof TableDataSource){ + TableDataSource source = (TableDataSource) jTemplate.getTarget(); + Iterator dataIterator = source.getTableDataNameIterator(); + while (dataIterator.hasNext()){ + String dataName = (String) dataIterator.next(); + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + content.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData"), + dataName + ); + content.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData")); + DataType dataType = DataType.match(source.getTableData(dataName).getClass().getSimpleName()); + if (dataType != null){ + dataType.searchFormula(source.getTableData(dataName),content,fomulaInfos); + } + } + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java new file mode 100644 index 000000000..f4dff5362 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java @@ -0,0 +1,26 @@ +package com.fr.design.actions.replace.action.content.formula.floatelement; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public abstract class AbstractSearchFloatFormula implements SearchFloatFormula{ + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return new ArrayList<>(); + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java new file mode 100644 index 000000000..331da754a --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java @@ -0,0 +1,111 @@ +package com.fr.design.actions.replace.action.content.formula.floatelement; + +import com.fr.base.Formula; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; +import com.fr.design.actions.replace.action.content.formula.FormulaReplaceObject; +import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; +import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; +import com.fr.design.actions.replace.info.FloatInfo; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.js.NameJavaScriptGroup; +import com.fr.report.cell.CellElement; +import com.fr.report.cell.FloatElement; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { + + public SearchFloatFormulaAction(JTemplate jTemplate, ArrayList formulaInfos) { + SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate); + for (FloatInfo floatInfo : searchFloatAction.getFloatInfos()) { + searchFormulaFromFloat(formulaInfos, floatInfo); + searchFormulaFromFloatType(formulaInfos, floatInfo); + } + } + + @Override + public void searchFormulaFromFloat(ArrayList formulaInfos, FloatInfo floatInfo) { + NameJavaScriptGroup nameJavaScriptGroup = ((FloatElement) floatInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); + if (nameJavaScriptGroup != null) { + for (int i = 0; i < nameJavaScriptGroup.size(); i++) { + SearchJSHighlightAction action = new SearchJSHighlightAction(); + action.searchJSFormulaFromOther(formulaInfos, floatInfo.getContent(), nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); + } + } + } + + + @Override + public void searchFormulaFromFloatType(ArrayList formulaInfos, FloatInfo floatInfo) { + Object value = ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); + FloatFormulaType floatFormulaType = FloatFormulaType.match(value.getClass().getSimpleName()); + if (floatFormulaType != null) { + floatFormulaType.searchFormulaFromFloatElementType(formulaInfos, floatInfo); + } + } + + /** + * 悬浮元素的类型 + */ + public enum FloatFormulaType { + /** + * 公式 + */ + FORMULA("Formula") { + @Override + public void searchFormulaFromFloatElementType(ArrayList formulaInfos, FloatInfo floatInfo) { + ITContent content = floatInfo.getContent().copy(); + Formula value = (Formula) ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); + content.setReplaceObject(value); + formulaInfos.add(new FormulaInfo(content)); + } + }, + /** + * 图表 + */ + CHART_COLLECTION("ChartCollection") { + @Override + public void searchFormulaFromFloatElementType(ArrayList formulaInfos, FloatInfo floatInfo) { + ITContent content = floatInfo.getContent().copy(); + ChartCollection chartCollection = (ChartCollection) ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); + content.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); + new SearchChartCollectionFormulaAction(formulaInfos, content, chartCollection); + } + }; + String name; + + FloatFormulaType(String name) { + this.name = name; + } + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static FloatFormulaType match(String name) { + FloatFormulaType[] values = FloatFormulaType.values(); + for (FloatFormulaType value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } + + public void searchFormulaFromFloatElementType(ArrayList formulaInfos, FloatInfo floatInfo) { + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java new file mode 100644 index 000000000..4de0fccc0 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java @@ -0,0 +1,27 @@ +package com.fr.design.actions.replace.action.content.formula.template; + + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public abstract class AbstractSearchTemplateFormula implements SearchTemplateFormula{ + + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java new file mode 100644 index 000000000..bc89d2d6c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java @@ -0,0 +1,65 @@ +package com.fr.design.actions.replace.action.content.formula.template; + +import com.fr.base.Formula; +import com.fr.base.Parameter; +import com.fr.base.ParameterConfig; +import com.fr.base.io.AttrMark; +import com.fr.base.iofile.attr.WatermarkAttr; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.main.impl.WorkBook; +import com.fr.report.core.ReportUtils; +import com.fr.report.core.watermark.WaterMarkFactory; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-12 + */ +public class SearchTemplateFormulaAction extends AbstractSearchTemplateFormula { + + public SearchTemplateFormulaAction(JTemplate jTemplate, ArrayList formulaInfos) { + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + searchTemplateParaFormula(jTemplate, formulaInfos, content); + searchTemplateWaterMarkFormula(jTemplate, formulaInfos, content); + } + + @Override + public void searchTemplateWaterMarkFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content) { + WatermarkAttr watermarkAttr = ReportUtils.getWatermarkAttrFromTemplateAndGlobal((AttrMark) jTemplate.getTarget()); + if (watermarkAttr != null) { + ITContent waterMarkContent = content.copy(); + waterMarkContent.addOtherPos(Toolkit.i18nText("Fine-Design_Form_WaterMark")); + waterMarkContent.setReplaceObject(watermarkAttr); + formulaInfos.add(new FormulaInfo(waterMarkContent)); + } + } + + @Override + public void searchTemplateParaFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content) { + Parameter[] parameters = jTemplate.getJTemplateParameters(); + for (Parameter parameter : parameters) { + if (parameter.getValue() instanceof Formula) { + ITContent paraContent = content.copy(); + paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Template_Parameter")); + paraContent.setReplaceObject(parameter.getValue()); + formulaInfos.add(new FormulaInfo(paraContent)); + } + } + + Parameter[] globalParameters = ParameterConfig.getInstance().getGlobalParameters(); + for (Parameter parameter : globalParameters) { + if (parameter.getValue() instanceof Formula) { + ITContent paraContent = content.copy(); + paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter_Source_Type_Server")); + paraContent.setReplaceObject(parameter.getValue()); + formulaInfos.add(new FormulaInfo(paraContent)); + } + } + } +} From b12c7f591fe58ea17c1a19989879c5de94cb1650 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 15:00:28 +0800 Subject: [PATCH 09/17] =?UTF-8?q?REPORT-75998=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E2=80=94=E2=80=94=E6=8E=A7=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractSearchWidgetFormulaAction.java | 79 ++++++++++++ .../formula/widget/DictionaryType.java | 114 ++++++++++++++++++ .../SearchCommonWidgetFormulaAction.java | 22 ++++ .../widget/SearchDateEditorFormulaAction.java | 46 +++++++ .../widget/SearchDictFormulaAction.java | 39 ++++++ .../widget/SearchTreeEditorFormulaAction.java | 75 ++++++++++++ .../widget/SearchWidgetFormulaAction.java | 108 +++++++++++++++++ 7 files changed, 483 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java new file mode 100644 index 000000000..d27899467 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java @@ -0,0 +1,79 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.base.Formula; +import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.event.Listener; +import com.fr.form.ui.DataControl; +import com.fr.form.ui.Widget; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public abstract class AbstractSearchWidgetFormulaAction implements SearchWidgetFormula { + + /** + * 用于处理控件共有的事件以及控件值中的公式 + * + * @param content + * @param formulaInfos + */ + @Override + public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + Widget widget = (Widget) content.getReplaceObject(); + //控件值中的公式 + searchFormulaFromWidgetValue(content,formulaInfos); + for (int i = 0 ; i < widget.getListenerSize() ;i++){ + Listener listener = widget.getListener(i); + ITContent newContent = content.copy(); + newContent.getContentObject().setListener(listener); + //控件的事件可以使用的JS有五种,这边统一交给Highlight那边判断超级链接并进行处理 + SearchJSHighlightAction SJSA = new SearchJSHighlightAction(); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event")); + SJSA.searchJSFormulaFromOther(formulaInfos,newContent, listener.getAction()); + } + } + + /** + * 判断一下控件有没有控件值接口,如果有再判断一下控件值是否已经设置并且是公式 + * @param content + * @param formulaInfos + */ + @Override + public void searchFormulaFromWidgetValue(ITContent content, ArrayList formulaInfos) { + if(content.getReplaceObject() instanceof DataControl){ + if (((DataControl) content.getReplaceObject()).getWidgetValue() != null + && ((DataControl) content.getReplaceObject()).getWidgetValue().getValue() instanceof Formula){ + ITContent newContent = content.copy(); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Widget_Value")); + newContent.setReplaceObject(((DataControl)content.getReplaceObject()).getWidgetValue().getValue()); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + } + + @Override + public void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList formulaInfos) { + } + + + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java new file mode 100644 index 000000000..d5ebc7076 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java @@ -0,0 +1,114 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.data.Dictionary; +import com.fr.data.impl.DatabaseDictionary; +import com.fr.data.impl.FormulaDictionary; +import com.fr.data.impl.TableDataDictionary; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; + +/** + * 数据字典处理 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ +enum DictionaryType implements DictionaryAction { + + /** + * 数据字典——公式 + */ + FORMULA_DICTIONARY("FormulaDictionary") { + @Override + public void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary) { + //显示值 + if (((FormulaDictionary) dictionary).getExcuteFormula() != null) { + ITContent excuteContent = content.copy(); + excuteContent.setReplaceObject(dictionary); + excuteContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Formula"), + Toolkit.i18nText("Fine-Design_Basic_Display_Value") + ); + formulaInfos.add(new FormulaInfo(excuteContent)); + } + //实际值 + if (((FormulaDictionary) dictionary).getProduceFormula() != null) { + ITContent produceContent = content.copy(); + produceContent.setReplaceObject(dictionary); + produceContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Formula"), + Toolkit.i18nText("Fine-Design_Basic_Actual_Value") + ); + formulaInfos.add(new FormulaInfo(produceContent)); + } + + } + }, + /** + * 数据查询 + */ + TABLE_DATA_DICTIONARY("TableDataDictionary") { + @Override + public void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary) { + if (((TableDataDictionary) dictionary).getFormula() != null) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(((TableDataDictionary) dictionary).getFormula()); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Dic_Data_Query"), + Toolkit.i18nText("Fine-Design_Basic_Display_Value") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + + } + }, + /** + * 数据库表 + */ + DATABASE_DICTIONARY("DatabaseDictionary") { + @Override + public void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary) { + if (((DatabaseDictionary) dictionary).getFormula() != null) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(((DatabaseDictionary) dictionary).getFormula()); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Datasource_From_Database"), + Toolkit.i18nText("Fine-Design_Basic_Display_Value") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + }; + + String name; + + DictionaryType(String name) { + this.name = name; + } + + /** + * 匹配 + * + * @param name + * @return + */ + @Nullable + public static DictionaryType match(String name) { + DictionaryType[] values = DictionaryType.values(); + for (DictionaryType value : values) { + if (value.name.equals(name)) { + return value; + } + } + return null; + } +} \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java new file mode 100644 index 000000000..84273cc2b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java @@ -0,0 +1,22 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import java.util.ArrayList; + +/** + * 控件中的公式只会在事件、控件值 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public class SearchCommonWidgetFormulaAction extends AbstractSearchWidgetFormulaAction { + + @Override + public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + //每个事件的事件、控件值两部分的公式获取逻辑是一样的,直接调用即可,各自其他地方的公式就需要特殊处理 + super.searchFormulaFromWidget(content, formulaInfos); + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java new file mode 100644 index 000000000..e2ff6d951 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java @@ -0,0 +1,46 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.form.ui.DateEditor; +import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; + +import java.util.ArrayList; + +/** + * 日期类型控件特殊处理 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-26 + */ +public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAction { + @Override + public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + super.searchFormulaFromWidget(content, formulaInfos); + dealStratDateFormula(content, formulaInfos); + dealEndDateFormula(content, formulaInfos); + } + + private void dealEndDateFormula(ITContent content, ArrayList formulaInfos) { + DateEditor dateEditor = (DateEditor) content.getReplaceObject(); + if (dateEditor.getEndDateFM() != null && !StringUtils.isEmpty(dateEditor.getEndDateFM().getContent())) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(dateEditor.getEndDateFM()); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_End_Time")); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + + private void dealStratDateFormula(ITContent content, ArrayList formulaInfos) { + DateEditor dateEditor = (DateEditor) content.getReplaceObject(); + if (dateEditor.getStartDateFM() != null && !StringUtils.isEmpty(dateEditor.getStartDateFM().getContent())) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(dateEditor.getStartDateFM()); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Start_Time")); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java new file mode 100644 index 000000000..a0dd7ded3 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java @@ -0,0 +1,39 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.form.ui.DictionaryContainer; + +import java.util.ArrayList; + +/** + * 控件中的公式会存在: 控件值、 非树形结构数据字典、 事件 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-20 + */ +public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction { + + + @Override + public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + //控件值、事件 + super.searchFormulaFromWidget(content, formulaInfos); + //数据字典 + searchFormulaFromDict(content, formulaInfos); + + } + + private void searchFormulaFromDict(ITContent content, ArrayList formulaInfos) { + if (content.getReplaceObject() instanceof DictionaryContainer) { + if (((DictionaryContainer) content.getReplaceObject()).getDictionary() != null) { + DictionaryType type = DictionaryType.match(((DictionaryContainer) content.getReplaceObject()).getDictionary().getClass().getSimpleName()); + if (type != null) { + type.searchFormulaFromDictionary(content, formulaInfos, ((DictionaryContainer) content.getReplaceObject()).getDictionary()); + } + } + } + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java new file mode 100644 index 000000000..8d231126d --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java @@ -0,0 +1,75 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.data.impl.DatabaseDictionary; +import com.fr.data.impl.FormulaDisplayDictionary; +import com.fr.data.impl.TableDataDictionary; +import com.fr.data.impl.TreeNodeAttr; +import com.fr.data.impl.TreeNodeWrapper; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.form.ui.TreeEditor; +import com.fr.form.ui.tree.LayerConfig; +import com.fr.stable.StringUtils; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-22 + */ +public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAction { + @Override + public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + //控件值、事件 + super.searchFormulaFromWidget(content, formulaInfos); + //树形结构数据字典 + SearchFormulaFromModelConfig(content, formulaInfos); + + } + + private void SearchFormulaFromModelConfig(ITContent content, ArrayList formulaInfos) { + if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() != null) { + //LayerConfig[] 急速分层构建 + //TreeNodeWrapper 普通分层构建 + if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() instanceof LayerConfig[]) { + LayerConfig[] layerConfigs = (LayerConfig[]) ((TreeEditor) content.getReplaceObject()).getBuildModelConfig(); + dealWithLayerConfigs(layerConfigs, content, formulaInfos); + } else if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() instanceof TreeNodeWrapper) { + TreeNodeWrapper wrapper = (TreeNodeWrapper) ((TreeEditor) content.getReplaceObject()).getBuildModelConfig(); + dealWithTreeNodeWrapper(wrapper, content, formulaInfos); + } + } + } + + private void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, ITContent content, ArrayList formulaInfos) { + for (TreeNodeAttr attr : wrapper.getTreeNodeAttrs()) { + if (((FormulaDisplayDictionary) attr.getDictionary()).getFormula() != null + && !StringUtils.isEmpty(((FormulaDisplayDictionary) attr.getDictionary()).getFormula().getContent())) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(((FormulaDisplayDictionary) attr.getDictionary()).getFormula()); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Layer_Build") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + } + + private void dealWithLayerConfigs(LayerConfig[] layerConfigs, ITContent content, ArrayList formulaInfos) { + for (LayerConfig layerConfig : layerConfigs) { + if (layerConfig.getDictionary().getFormula() != null + && !StringUtils.isEmpty(layerConfig.getDictionary().getFormula().getContent())) { + ITContent newContent = content.copy(); + newContent.setReplaceObject(layerConfig.getDictionary().getFormula()); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_DataTable_Build") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java new file mode 100644 index 000000000..6c262ee98 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java @@ -0,0 +1,108 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.WidgetInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.ui.Widget; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 查找控件内的公式 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public class SearchWidgetFormulaAction extends AbstractSearchWidgetFormulaAction { + public static HashMap widgetHashMap = new HashMap<>(); + static { + //WParameterLayout + //PageFixedRowComboBox + //FormSubmitButton + //TreeEditor + //CheckBox + //Password + //TextArea + //CheckBoxGroup + //RadioGroup + //TreeComboBoxEditor + //NumberEditor + //DateEditor + //ComboCheckBox + //ComboBox + //FreeButton + //Label + /** + * 可能有控件值、 有事件 + */ + widgetHashMap.put("FormSubmitButton",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("WParameterLayout",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("TextArea",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("Password",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("CheckBox",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("Label",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("FreeButton",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("NumberEditor",new SearchCommonWidgetFormulaAction()); + + /** + * 日期类型 + */ + widgetHashMap.put("DateEditor",new SearchDateEditorFormulaAction()); + + /** + * 控件值、事件、非树形数据字典 + */ + widgetHashMap.put("ComboBox",new SearchDictFormulaAction()); + widgetHashMap.put("RadioGroup",new SearchDictFormulaAction()); + widgetHashMap.put("CheckBoxGroup",new SearchDictFormulaAction()); + widgetHashMap.put("ComboCheckBox",new SearchDictFormulaAction()); + widgetHashMap.put("PageFixedRowComboBox",new SearchDictFormulaAction()); + + /** + * 控件值、事件、树形数据字典 + */ + widgetHashMap.put("TreeComboBoxEditor",new SearchTreeEditorFormulaAction()); + widgetHashMap.put("TreeEditor",new SearchTreeEditorFormulaAction()); + + + } + + + public SearchWidgetFormulaAction(JTemplate jTemplate,ArrayList fomulaInfos){ + fomulaInfos.addAll(search4Infos(jTemplate)); + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + ArrayList formulaInfos = new ArrayList<>(); + SearchWidgetAction searchWidgetAction = new SearchWidgetAction(jTemplate); + if (!searchWidgetAction.isWidgetInfosEmpty()){ + for (WidgetInfo widgetInfo : searchWidgetAction.getWidgetInfos()){ + //由于控件类型比较多,各种控件也不大相同,可能存放公式的地方也都不一样,这边根据对应的类型进行处理 + searchFormulaFromWidgetInfos(widgetInfo,formulaInfos); + } + } + return formulaInfos; + } + + @Override + public void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList formulaInfos) { + if (widgetInfo.isReplaceObjectExist()){ + searchFormulaFromWidgetValue(widgetInfo,formulaInfos); + } + } + + private void searchFormulaFromWidgetValue(WidgetInfo widgetInfo, ArrayList formulaInfos) { + Widget widget = (Widget)widgetInfo.getContent().getReplaceObject(); + if (widgetHashMap.containsKey(widget.getClass().getSimpleName())){ + SearchWidgetFormula searchWidgetFormula = widgetHashMap.get(widget.getClass().getSimpleName()); + ITContent content = widgetInfo.getContent().copy(); + searchWidgetFormula.searchFormulaFromWidget(content,formulaInfos); + } + + } +} From 9da26485519990d2494e38693ff0225084ea178d Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Wed, 14 Sep 2022 15:01:17 +0800 Subject: [PATCH 10/17] =?UTF-8?q?REPORT-75998=20=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=85=AC=E5=BC=8F=E2=80=94=E2=80=94=E8=B6=85=E9=93=BE=E3=80=81?= =?UTF-8?q?=E9=AB=98=E4=BA=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbstractSearchHighlightAction.java | 31 ++++++ .../SearchHighlightFormulaAction.java | 37 ++++++ .../SearchCommonConditionAction.java | 25 +++++ .../SearchFormulaConditionAction.java | 26 +++++ .../condition/SearchListConditionAction.java | 36 ++++++ .../SearchObjectConditionAction.java | 25 +++++ .../AbstractSearchJSFormulaAction.java | 42 +++++++ .../SearchCommit2DBJSFormulaAction.java | 97 ++++++++++++++++ .../SearchExportJSFormulaAction.java | 49 ++++++++ .../javascript/SearchJSHighlightAction.java | 105 ++++++++++++++++++ .../SearchMobileHyperlinkFormulaAction.java | 30 +++++ 11 files changed, 503 insertions(+) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java new file mode 100644 index 000000000..adb4ce6b1 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java @@ -0,0 +1,31 @@ +package com.fr.design.actions.replace.action.content.formula.highlight; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; +import com.fr.report.cell.cellattr.highlight.HighlightAction; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public abstract class AbstractSearchHighlightAction implements SearchHighlightFormula { + @Override + public void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction) { + + } + + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return null; + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java new file mode 100644 index 000000000..11667b228 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java @@ -0,0 +1,37 @@ +package com.fr.design.actions.replace.action.content.formula.highlight; + +import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.report.cell.cellattr.highlight.HighlightAction; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 处理条件属性中各种属性的公式(超级链接、控件...) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchHighlightFormulaAction extends AbstractSearchHighlightAction{ + public static HashMap highlightHashMap = new HashMap<>(); + static { + //这边控件类型不做处理,在SearchWidgetFormulaAction统一处理即可 + //条件属性-超级链接 + highlightHashMap.put("HyperlinkHighlightAction",new SearchJSHighlightAction()); + //条件属性-... + // TODO: 2022/9/14 条件属性的其他类型 + } + + + @Override + public void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction) { + if (highlightHashMap.containsKey(highlightAction.getClass().getSimpleName())){ + SearchHighlightFormula searchHighlight = highlightHashMap.get(highlightAction.getClass().getSimpleName()); + searchHighlight.dealWithHighlightAction(content,formulaInfos,highlightAction); + } + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java new file mode 100644 index 000000000..d78041f56 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java @@ -0,0 +1,25 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.condition; + +import com.fr.base.Formula; +import com.fr.data.condition.CommonCondition; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.general.data.Condition; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class SearchCommonConditionAction implements SearchConditionFormula { + @Override + public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { + if (((CommonCondition)condition).getCompare().getValue() != null && ((CommonCondition)condition).getCompare().getValue() instanceof Formula){ + ITContent newContent =content.copy(); + newContent.setReplaceObject(((CommonCondition) condition).getCompare()); + formulaInfos.add(new FormulaInfo(newContent)); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java new file mode 100644 index 000000000..73a2a1435 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java @@ -0,0 +1,26 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.condition; + +import com.fr.data.condition.FormulaCondition; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.general.data.Condition; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class SearchFormulaConditionAction implements SearchConditionFormula { + @Override + public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { + if (((FormulaCondition)(condition)).getFormula() != null){ + ITContent newContent = content.copy(); + newContent.setReplaceObject(condition); + formulaInfos.add(new FormulaInfo(newContent)); + } + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java new file mode 100644 index 000000000..33c52a7da --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java @@ -0,0 +1,36 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.condition; + +import com.fr.data.condition.CommonCondition; +import com.fr.data.condition.FormulaCondition; +import com.fr.data.condition.ListCondition; +import com.fr.data.condition.ObjectCondition; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; + +import com.fr.general.data.Condition; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class SearchListConditionAction implements SearchConditionFormula { + @Override + public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { + for (int i = 0 ;i <((ListCondition)condition).getJoinConditionCount() ;i++){ + Condition joinCondition = ((ListCondition)condition).getJoinCondition(i).getCondition(); + if (joinCondition instanceof CommonCondition){ + SearchCommonConditionAction commonConditionAction = new SearchCommonConditionAction(); + commonConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); + } else if (joinCondition instanceof FormulaCondition){ + SearchFormulaConditionAction formulaConditionAction = new SearchFormulaConditionAction(); + formulaConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); + } else if (joinCondition instanceof ObjectCondition){ + SearchObjectConditionAction objectConditionAction = new SearchObjectConditionAction(); + objectConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); + } + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java new file mode 100644 index 000000000..229512c2f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java @@ -0,0 +1,25 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.condition; + +import com.fr.base.Formula; +import com.fr.data.condition.ObjectCondition; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.general.data.Condition; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchObjectConditionAction implements SearchConditionFormula { + @Override + public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { + if (((ObjectCondition)condition).getCompare().getValue() != null && ((ObjectCondition)condition).getCompare().getValue() instanceof Formula){ + ITContent newContent =content.copy(); + newContent.setReplaceObject(((ObjectCondition) condition).getCompare()); + formulaInfos.add(new FormulaInfo(newContent)); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java new file mode 100644 index 000000000..c7fd8cebc --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java @@ -0,0 +1,42 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; +import com.fr.js.JavaScript; +import com.fr.report.cell.cellattr.highlight.HighlightAction; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public abstract class AbstractSearchJSFormulaAction implements SearchJSFormula { + @Override + public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + + } + + @Override + public void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction) { + + } + + @Override + public void searchFormula(ArrayList formulaInfos, ITContent content) { + + } + + @Override + public ArrayList search4Infos(JTemplate jTemplate) { + return null; + } + + @Override + public void addFormulaInfosFromJSPara(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java new file mode 100644 index 000000000..aa956c52c --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java @@ -0,0 +1,97 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchListConditionAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.general.data.Condition; +import com.fr.js.Commit2DBJavaScript; +import com.fr.js.JavaScript; +import com.fr.write.DBManipulation; +import com.fr.write.DMLConfigJob; +import com.fr.write.config.DMLConfig; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public class SearchCommit2DBJSFormulaAction extends AbstractSearchJSFormulaAction{ + + public static HashMap conditionHashMap = new HashMap<>(); + static { + conditionHashMap.put("FormulaCondition",new SearchFormulaConditionAction()); + conditionHashMap.put("CommonCondition",new SearchCommonConditionAction()); + conditionHashMap.put("ListCondition",new SearchListConditionAction()); + } + @Override + public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + if (!((Commit2DBJavaScript)javaScript).getDBManipulation().isEmpty()){ + + //处理回调函数——这里单独摘出来是因为这边逻辑比较复杂,提交事件会再循环产生一个新的DBManipulation,后续统一处理 + dealWithCallBack(formulaInfos,content,((Commit2DBJavaScript)javaScript)); + //处理DBManipulation + for (int i = 0 ; i < ((Commit2DBJavaScript)javaScript).getDBManipulation().size() ; i++){ + dealWithDBManipulation(formulaInfos,content, (DBManipulation) ((Commit2DBJavaScript)javaScript).getDBManipulation().get(i)); + } + } + } + + private void dealWithDBManipulation(ArrayList formulaInfos, ITContent content, DBManipulation dbManipulation) { + DMLConfig dmlConfig = dbManipulation.getDmlConfig(); + //处理提交条件中的公式 + dealWithCommit2DBCondition(formulaInfos,content,dmlConfig); + //处理DBManipulation + dealWithSubmitJob(formulaInfos,content,dmlConfig); + } + + private void dealWithSubmitJob(ArrayList formulaInfos, ITContent content, DMLConfig dmlConfig) { + for (int i = 0 ;i < dmlConfig.getSubmitJobCount() ; i ++){ + //这边自定义事件不需要处理,只处理提交事件 + if (dmlConfig.getSubmitJob(i) instanceof DMLConfigJob){ + ITContent newContent = content.copy(); + + newContent.addOtherPos( + Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"), + Toolkit.i18nText("Fine-Design_Basic_Write_Submit_Event") + ); + dealWithDBManipulation(formulaInfos,newContent,(((DMLConfigJob)dmlConfig.getSubmitJob(i)).getDBManipulation())); + } + } + } + + private void dealWithCallBack(ArrayList formulaInfos, ITContent content, Commit2DBJavaScript javaScript) { + if (javaScript.getCallBack() != null){ + SearchJSHighlightAction SJSA = new SearchJSHighlightAction(); + ITContent newContent = content.copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"), + Toolkit.i18nText("Fine-Design_Basic_Set_Callback_Function") + ); + SJSA.searchJSFormulaFromOther(formulaInfos,newContent, javaScript.getCallBack()); + + } + } + + private void dealWithCommit2DBCondition(ArrayList formulaInfos, ITContent content, DMLConfig dmlConfig){ + if (dmlConfig.getCondition() != null){ + //这边condition有三种情况:FormulaCondition、CommonCondition、ListCondition,分别处理 + Condition condition = dmlConfig.getCondition(); + SearchConditionFormula searchCondition = conditionHashMap.get(condition.getClass().getSimpleName()); + ITContent newContent = content.copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"), + Toolkit.i18nText("Fine-Design_Basic_Submit_Condition") + ); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent,condition); + } + } + + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java new file mode 100644 index 000000000..c49496db7 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java @@ -0,0 +1,49 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.js.ExportJavaScript; +import com.fr.js.JavaScript; +import com.fr.js.SingleJavaScript; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public class SearchExportJSFormulaAction extends AbstractSearchJSFormulaAction{ + @Override + public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + //如果导出当前模板,可以存公式的地方就是命名方式-自定义 + if (((ExportJavaScript)javaScript).isCurrentTemplate()){ + dealSingleJavaScript(formulaInfos,content,((ExportJavaScript)javaScript).getCurrentTemplateJavaScript()); + } else { + List list = ((ExportJavaScript)javaScript).getJsListForOtherTemplates(); + if (isListExist(list)){ + for (SingleJavaScript singleJavaScript : list){ + dealSingleJavaScript(formulaInfos,content,singleJavaScript); + } + } + } + } + + public boolean isListExist(List list){ + return list != null && list.size() > 0; + } + + private void dealSingleJavaScript(ArrayList formulaInfos, ITContent content, SingleJavaScript javaScript){ + if (!javaScript.isDefaultFileName()){ + ITContent newContent = content.copy(); + newContent.setReplaceObject(javaScript); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Event"), + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java new file mode 100644 index 000000000..36f5c2d9e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java @@ -0,0 +1,105 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.base.Formula; + +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.js.Commit2DBJavaScript; +import com.fr.js.JavaScript; +import com.fr.js.NameJavaScriptGroup; +import com.fr.report.cell.cellattr.highlight.HighlightAction; +import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; +import com.fr.stable.ParameterProvider; + +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 处理条件属性中各种超级链接内的公式(也包括事件中的各种超链) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-18 + */ +public class SearchJSHighlightAction extends AbstractSearchJSFormulaAction { + //需要特殊处理的JS类型 + public static HashMap javaScriptHashMap = new HashMap<>(); + public static HashMap hashMap = new HashMap<>(); + static { + hashMap.put(Commit2DBJavaScript.class, new SearchCommit2DBJSFormulaAction()); + } + static { + //控件事件里面需要特殊处理的类型 + //EmailJavaScript(这个暂时不做处理) + //ExportJavaScript + //MobilePopupHyperlink + //Commit2DBJavaScript + //单元格条件属性里面需要处理的类型 + //WebHyperlink——只有参数可以放公式,不需要特殊处理 + //ReportletHyperlink——只有参数可以放公式,不需要特殊处理 + //EmailJavaScript(这个暂时不做处理) + //ParameterJavaScript——只有参数可以放公式,不需要特殊处理 + //JavaScriptImpl——只有参数可以放公式,不需要特殊处理 + //MobilePopupHyperlink + //ChartHyperPoplink + //ChartHyperRelateCellLink + //ChartHyperRelateFloatLink + javaScriptHashMap.put("Commit2DBJavaScript",new SearchCommit2DBJSFormulaAction()); + javaScriptHashMap.put("ExportJavaScript",new SearchExportJSFormulaAction()); + javaScriptHashMap.put("MobilePopupHyperlink",new SearchMobileHyperlinkFormulaAction()); + } + + @Override + public void dealWithHighlightAction( ITContent content, ArrayList formulaInfos,HighlightAction highlightAction) { + NameJavaScriptGroup nameJavaScriptGroup = ((HyperlinkHighlightAction)highlightAction).getHperlink(); + if (nameJavaScriptGroup != null){ + for (int i = 0 ; i < nameJavaScriptGroup.size() ; i ++){ + //单元格条件属性-属性-超级链接里面参数的公式统一判断获取一下 + ITContent newContent =content.copy(); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Cell"), + Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), + Toolkit.i18nText("Fine-Design_Report_Hyperlink"), + Toolkit.i18nText("Fine-Design_Basic_Parameters")); + addFormulaInfosFromJSPara(formulaInfos,newContent,nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); + } + } + } + + /** + * 仅仅获取JS中的参数中的公式 + * @param formulaInfos + * @param content + * @param javaScript + */ + @Override + public void addFormulaInfosFromJSPara(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + if (javaScript.getParameters() != null){ + for (ParameterProvider provider : javaScript.getParameters()){ + if (provider.getValue() instanceof Formula){ + ITContent newContent = content.copy(); + newContent.setReplaceObject(provider); + formulaInfos.add(new FormulaInfo(newContent)); + } + } + } + } + + /** + * 对各种类型的JS分别处理,获取公式 + * @param formulaInfos + * @param content + * @param javaScript + */ + @Override + public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + //获取JS中的参数中的公式 + addFormulaInfosFromJSPara(formulaInfos, content, javaScript); + //这里面类型比较多,但是一部分不用处理——公式可能存在的地方只有参数,这部分在addFormulaInfosFromJSPara中就已经把公式拿完了 + if (javaScriptHashMap.containsKey(javaScript.getClass().getSimpleName())){ + SearchJSFormula javaScriptFormula = javaScriptHashMap.get(javaScript.getClass().getSimpleName()); + javaScriptFormula.searchJSFormulaFromOther(formulaInfos,content,javaScript); + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java new file mode 100644 index 000000000..3524f6af1 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java @@ -0,0 +1,30 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.base.Formula; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; +import com.fr.js.JavaScript; +import com.fr.js.MobilePopupHyperlink; + +import java.util.ArrayList; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-19 + */ +public class SearchMobileHyperlinkFormulaAction extends AbstractSearchJSFormulaAction{ + @Override + public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + if (((MobilePopupHyperlink)javaScript).getPopupText() instanceof Formula){ + ITContent newContent = content.copy(); + newContent.setReplaceObject(((MobilePopupHyperlink)javaScript).getPopupText()); + newContent.addOtherPos( + Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup"), + Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Text") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } + } +} From fa7f11c43c6c824a021a4b006bc7d866b24bd0d4 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 16 Sep 2022 10:59:20 +0800 Subject: [PATCH 11/17] =?UTF-8?q?REPORT-75998=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=EF=BC=8C=E5=A4=A7=E9=83=A8=E5=88=86=E4=B8=8D?= =?UTF-8?q?=E6=8C=81=E6=9C=89=E5=B1=9E=E6=80=A7=E7=9A=84=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=8D=95=E4=BE=8B=EF=BC=8C=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E4=BA=86=E5=86=B3=E7=AD=96=E6=8A=A5=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E5=9B=BE=E8=A1=A8=E9=83=A8=E5=88=86=E7=9A=84=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/replace/action/SearchAction.java | 8 +- .../action/ShowSearchResultAction.java | 180 +++++++------- .../actions/replace/action/ShowValue.java | 11 +- .../action/content/cell/SearchCellAction.java | 161 +++++++----- .../content/component/ComponentType.java | 163 +++++++----- .../component/SearchComponentAction.java | 84 ++++--- .../floatelement/SearchFloatAction.java | 90 ++++--- .../formula/AbstractSearchFormulaAction.java | 25 -- .../content/formula/FormulaReplaceObject.java | 67 +++-- .../action/content/formula/SearchFormula.java | 16 +- .../content/formula/SearchFormulaAction.java | 46 ---- .../content/formula/SearchFormulaManager.java | 94 +++++++ .../cell/AbstractSearchCellFormulaAction.java | 37 --- .../formula/cell/SearchCellFormula.java | 10 +- .../formula/cell/SearchCellFormulaAction.java | 164 ++++++++++--- .../cell/SearchCellFormulaTypeAction.java | 10 +- .../cell/SearchDSColumnFormulaAction.java | 63 ++--- .../formula/cell/SearchRichFormulaAction.java | 16 +- .../cell/SearchSubReportFormulaAction.java | 9 +- .../SearchChartCollectionFormulaAction.java | 178 +++++++++----- .../data/AbstractSearchDataFormulaAction.java | 31 --- .../action/content/formula/data/DataType.java | 62 ++--- .../formula/data/SearchDataFormula.java | 22 -- .../formula/data/SearchDataFormulaAction.java | 70 ++++-- .../AbstractSearchFloatFormula.java | 26 -- .../floatelement/SearchFloatFormula.java | 7 +- .../SearchFloatFormulaAction.java | 75 ++++-- .../AbstractSearchHighlightAction.java | 31 --- .../highlight/SearchHighlightFormula.java | 8 +- .../SearchHighlightFormulaAction.java | 12 +- .../SearchCommonConditionAction.java | 10 +- .../condition/SearchConditionFormula.java | 6 +- .../SearchFormulaConditionAction.java | 10 +- .../condition/SearchListConditionAction.java | 16 +- .../SearchObjectConditionAction.java | 10 +- .../AbstractSearchJSFormulaAction.java | 42 ---- .../SearchCommit2DBJSFormulaAction.java | 66 ++--- .../SearchExportJSFormulaAction.java | 28 ++- .../highlight/javascript/SearchJSFormula.java | 16 +- .../javascript/SearchJSHighlightAction.java | 48 ++-- .../SearchMobileHyperlinkFormulaAction.java | 14 +- .../AbstractSearchTemplateFormula.java | 27 -- .../template/SearchTemplateFormula.java | 10 +- .../template/SearchTemplateFormulaAction.java | 59 ++++- .../AbstractSearchWidgetFormulaAction.java | 55 ++--- .../formula/widget/DictionaryAction.java | 7 +- .../formula/widget/DictionaryType.java | 18 +- .../SearchCommonWidgetFormulaAction.java | 4 +- .../widget/SearchDateEditorFormulaAction.java | 14 +- .../widget/SearchDictFormulaAction.java | 6 +- .../widget/SearchTreeEditorFormulaAction.java | 15 +- .../formula/widget/SearchWidgetFormula.java | 15 +- .../widget/SearchWidgetFormulaAction.java | 166 +++++++++---- .../action/content/js/SearchCellJSAction.java | 103 +++++--- .../content/js/SearchChartJSAction.java | 123 ++++++++++ .../content/js/SearchFloatJSAction.java | 89 +++++-- .../replace/action/content/js/SearchJS.java | 26 ++ .../action/content/js/SearchJSAction.java | 46 ---- .../action/content/js/SearchJSManager.java | 105 ++++++++ .../action/content/js/SearchWebJSAction.java | 87 +++++-- .../content/js/SearchWidgetJSAction.java | 76 ++++-- .../action/content/sql/SearchSQLAction.java | 67 +++-- .../action/content/widget/FrmWidgetType.java | 18 +- .../content/widget/SearchFrmWidget.java | 8 +- .../content/widget/SearchWidgetAction.java | 73 ++++-- .../design/actions/replace/info/CellInfo.java | 35 ++- .../actions/replace/info/ComponentInfo.java | 12 +- .../replace/info/DealWithInfoValue.java | 11 +- .../actions/replace/info/FloatInfo.java | 26 +- .../actions/replace/info/FormulaInfo.java | 43 ++-- .../fr/design/actions/replace/info/Info.java | 16 +- .../design/actions/replace/info/JSInfo.java | 29 ++- .../actions/replace/info/ReplaceObject.java | 69 +++--- .../design/actions/replace/info/SQLInfo.java | 13 +- .../actions/replace/info/WidgetInfo.java | 35 ++- .../replace/info/base/ContentObject.java | 232 ------------------ .../actions/replace/info/base/ITContent.java | 112 +++++---- .../actions/replace/ui/ITComboBoxEditor.java | 15 +- .../replace/ui/ITReplaceMainDialog.java | 95 +++++-- .../replace/ui/ITReplaceNorthPanel.java | 58 +++-- .../replace/ui/ITReplaceSouthPanel.java | 1 - .../replace/ui/ITReplaceWestPanel.java | 4 +- .../actions/replace/ui/ITTableButton.java | 18 +- .../actions/replace/ui/ITTableEditor.java | 22 +- .../actions/replace/ui/ITTableEditorPane.java | 22 +- .../actions/replace/utils/SearchJSUtils.java | 87 ++++--- .../actions/replace/utils/ShowValueUtils.java | 36 ++- 87 files changed, 2492 insertions(+), 1758 deletions(-) delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java delete mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java index 3d44d92e6..7cce5087e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java @@ -1,11 +1,11 @@ package com.fr.design.actions.replace.action; -import com.fr.design.actions.replace.info.Info; import com.fr.design.mainframe.JTemplate; -import java.util.ArrayList; /** + * 顶层行为接口 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-11 @@ -16,8 +16,8 @@ public interface SearchAction { * 搜索模板,获取信息列表 * * @param jTemplate 指定搜索的模板 - * @return 对应的Info信息列表 */ - ArrayList search4Infos(JTemplate jTemplate); + default void search4Infos(JTemplate jTemplate) { + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java index acf430a91..06520f52b 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java @@ -5,8 +5,8 @@ import com.fr.chart.chartattr.ChartCollection; import com.fr.design.actions.replace.action.content.cell.SearchCellAction; import com.fr.design.actions.replace.action.content.component.SearchComponentAction; import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; -import com.fr.design.actions.replace.action.content.formula.SearchFormulaAction; -import com.fr.design.actions.replace.action.content.js.SearchJSAction; +import com.fr.design.actions.replace.action.content.formula.SearchFormulaManager; +import com.fr.design.actions.replace.action.content.js.SearchJSManager; import com.fr.design.actions.replace.action.content.sql.SearchSQLAction; import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; import com.fr.design.actions.replace.info.*; @@ -16,16 +16,18 @@ import com.fr.design.mainframe.JTemplate; import com.fr.general.GeneralUtils; import com.fr.report.cell.CellElement; import com.fr.report.cell.FloatElement; -import com.fr.third.org.apache.poi.hssf.record.formula.functions.Int; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 对展示结果进行处理(获取、过滤) + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-22 @@ -36,14 +38,15 @@ public enum ShowSearchResultAction implements ShowValue { */ CELL(Toolkit.i18nText("Fine-Design_Basic_Cell")) { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchCellAction(jTemplate).getCellInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchCellAction.getInstance().search4Infos(jTemplate); + return SearchCellAction.getInstance().getCellInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { - ArrayList cellInfos = new ArrayList<>(); - for (Info info : arrayList) { + public List addMatchResult(String str, List list) { + List cellInfos = new ArrayList<>(); + for (Info info : list) { if (((CellInfo) info).isChartExist()) { CellElement cellElement = (CellElement) info.getContent().getReplaceObject(); ChartCollection chartCollection = (ChartCollection) cellElement.getValue(); @@ -62,8 +65,8 @@ public enum ShowSearchResultAction implements ShowValue { } } } else { - HashMap stringHashMap = info.getValue(); - String content = stringHashMap.getOrDefault("content", StringUtils.EMPTY); + Map stringHashMap = info.getValue(); + String content = stringHashMap.getOrDefault(objectContentKey, StringUtils.EMPTY); if (content.contains(str) && !StringUtils.isEmpty(content)) { info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); info.getContent().setOldShowStr(content); @@ -88,62 +91,62 @@ public enum ShowSearchResultAction implements ShowValue { */ JS(Toolkit.i18nText("Fine-Design_Replace_JS")) { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchJSAction(jTemplate).getJsInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchJSManager.getInstance().search4Infos(jTemplate); + return SearchJSManager.getInstance().getJsInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { - ArrayList jsInfos = new ArrayList<>(); - HashMap stringHashMap = new HashMap<>(); - for (Info info : arrayList) { + public List addMatchResult(String str, List list) { + List jsInfos = new ArrayList<>(); + Map stringHashMap = new HashMap<>(); + for (Info info : list) { stringHashMap = info.getValue(); if (StringUtils.isEmpty(str)) { - if (!StringUtils.isEmpty(stringHashMap.getOrDefault("content", StringUtils.EMPTY))) { + if (!StringUtils.isEmpty(stringHashMap.getOrDefault(objectContentKey, StringUtils.EMPTY))) { JSInfo contentJSInfo = ((JSInfo) info).copy(); - contentJSInfo.getContent().setShowStr(stringHashMap.get("content")); - contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content")); + contentJSInfo.getContent().setShowStr(stringHashMap.get(objectContentKey)); + contentJSInfo.getContent().setOldShowStr(stringHashMap.get(objectContentKey)); contentJSInfo.getContent().setSelected(true); contentJSInfo.setContentFlag(true); jsInfos.add(contentJSInfo); } - if (!StringUtils.isEmpty(stringHashMap.getOrDefault("name", StringUtils.EMPTY))) { + if (!StringUtils.isEmpty(stringHashMap.getOrDefault(objectNameKey, StringUtils.EMPTY))) { JSInfo nameJSInfo = ((JSInfo) info).copy(); - nameJSInfo.getContent().setShowStr(stringHashMap.get("name")); - nameJSInfo.getContent().setOldShowStr(stringHashMap.get("name")); + nameJSInfo.getContent().setShowStr(stringHashMap.get(objectNameKey)); + nameJSInfo.getContent().setOldShowStr(stringHashMap.get(objectNameKey)); nameJSInfo.getContent().setSelected(true); nameJSInfo.setContentFlag(false); jsInfos.add(nameJSInfo); } } else { searchMap4JS(stringHashMap, jsInfos, ((JSInfo) info), str); - //searchMap4JSContent(stringHashMap, jsInfos, ((JSInfo) info), str); } } return jsInfos; } - private void searchMap4JS(HashMap stringHashMap, ArrayList jsInfos, JSInfo info, String str) { - if (stringHashMap.containsKey("name") && !StringUtils.isEmpty(stringHashMap.get("name"))) { - String name = stringHashMap.get("name"); + private void searchMap4JS(Map map, List jsInfos, JSInfo info, String str) { + if (map.containsKey(objectNameKey) && !StringUtils.isEmpty(map.get(objectNameKey))) { + String name = map.get(objectNameKey); if (name.contains(str)) { JSInfo nameJSInfo = info.copy(); nameJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); nameJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str)); - nameJSInfo.getContent().setOldShowStr(stringHashMap.get("name")); + nameJSInfo.getContent().setOldShowStr(map.get(objectNameKey)); nameJSInfo.setContentFlag(false); nameJSInfo.getContent().setSelected(true); jsInfos.add(nameJSInfo); } } - if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) { - String content = stringHashMap.get("content"); + if (map.containsKey(objectContentKey) && !StringUtils.isEmpty(map.get(objectContentKey))) { + String content = map.get(objectContentKey); if (content.contains(str)) { JSInfo contentJSInfo = info.copy(); contentJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); contentJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); - contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content")); + contentJSInfo.getContent().setOldShowStr(map.get(objectContentKey)); contentJSInfo.setContentFlag(true); contentJSInfo.getContent().setSelected(true); jsInfos.add(contentJSInfo); @@ -156,19 +159,20 @@ public enum ShowSearchResultAction implements ShowValue { */ SQL("SQL") { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchSQLAction(jTemplate).getSqlInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchSQLAction.getInstance().search4Infos(jTemplate); + return SearchSQLAction.getInstance().getSqlInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { - ArrayList sqlInfos = new ArrayList<>(); - HashMap stringHashMap = new HashMap<>(); - for (Info info : arrayList) { + public List addMatchResult(String str, List list) { + List sqlInfos = new ArrayList<>(); + Map stringHashMap = new HashMap<>(); + for (Info info : list) { stringHashMap = ((SQLInfo) info).getValue(); if (StringUtils.isEmpty(str)) { - info.getContent().setShowStr(stringHashMap.get("content")); - info.getContent().setOldShowStr(stringHashMap.get("content")); + info.getContent().setShowStr(stringHashMap.get(objectContentKey)); + info.getContent().setOldShowStr(stringHashMap.get(objectContentKey)); info.getContent().setSelected(true); sqlInfos.add((SQLInfo) info); } else { @@ -179,14 +183,14 @@ public enum ShowSearchResultAction implements ShowValue { return sqlInfos; } - private void searchMap4SQLContent(HashMap stringHashMap, ArrayList sqlInfos, SQLInfo info, String str) { - if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) { - String content = stringHashMap.get("content"); + private void searchMap4SQLContent(Map map, List sqlInfos, SQLInfo info, String str) { + if (map.containsKey(objectContentKey) && !StringUtils.isEmpty(map.get(objectContentKey))) { + String content = map.get(objectContentKey); if (content.contains(str)) { SQLInfo contentJSInfo = info.copy(); contentJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); contentJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); - contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content")); + contentJSInfo.getContent().setOldShowStr(map.get(objectContentKey)); contentJSInfo.getContent().setSelected(true); sqlInfos.add(contentJSInfo); } @@ -204,14 +208,15 @@ public enum ShowSearchResultAction implements ShowValue { */ FLOAT(Toolkit.i18nText("Fine-Design_Basic_Float_Element")) { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchFloatAction(jTemplate).getFloatInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchFloatAction.getInstance().search4Infos(jTemplate); + return SearchFloatAction.getInstance().getFloatInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { - ArrayList floatInfos = new ArrayList<>(); - for (Info info : arrayList) { + public List addMatchResult(String str, List list) { + List floatInfos = new ArrayList<>(); + for (Info info : list) { FloatElement floatElement = ((FloatElement) (info.getContent().getReplaceObject())); //如果存的是图表,就要特殊处理 if (((FloatInfo) info).isChartExist()) { @@ -252,27 +257,28 @@ public enum ShowSearchResultAction implements ShowValue { */ COMPONENT(Toolkit.i18nText("Fine-Design_Replace_Component")) { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchComponentAction(jTemplate).getComponentInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchComponentAction.getInstance().search4Infos(jTemplate); + return SearchComponentAction.getInstance().getComponentInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { + public List addMatchResult(String str, List list) { ArrayList componentInfos = new ArrayList<>(); - HashMap stringHashMap = new HashMap<>(); - for (Info info : arrayList) { - stringHashMap = info.getValue(info.getContent().getReplaceObject()); - searchMap4Component(stringHashMap, componentInfos, ((ComponentInfo) info), str); + Map map = new HashMap<>(); + for (Info info : list) { + map = info.getValue(info.getContent().getReplaceObject()); + searchMap4Component(map, componentInfos, ((ComponentInfo) info), str); } return componentInfos; } - private void searchMap4Component(HashMap stringHashMap, ArrayList componentInfos, ComponentInfo info, String str) { - if (stringHashMap.containsKey("content")) { - String content = stringHashMap.get("content"); + private void searchMap4Component(Map stringHashMap, ArrayList componentInfos, ComponentInfo info, String str) { + if (stringHashMap.containsKey(objectContentKey)) { + String content = stringHashMap.get(objectContentKey); if (content.contains(str)) { info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); - info.getContent().setOldShowStr(stringHashMap.get("content")); + info.getContent().setOldShowStr(stringHashMap.get(objectContentKey)); info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); info.getContent().setSelected(true); componentInfos.add(info); @@ -285,41 +291,42 @@ public enum ShowSearchResultAction implements ShowValue { */ WIDGET(Toolkit.i18nText("Fine-Design_Basic_Widget")) { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchWidgetAction(jTemplate).getWidgetInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchWidgetAction.getInstance().search4Infos(jTemplate); + return SearchWidgetAction.getInstance().getWidgetInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { + public List addMatchResult(String str, List list) { ArrayList widgetInfos = new ArrayList<>(); - HashMap stringHashMap = new HashMap<>(); - for (Info info : arrayList) { + Map stringHashMap = new HashMap<>(); + for (Info info : list) { stringHashMap = info.getValue(); searchMap4Widget(stringHashMap, widgetInfos, ((WidgetInfo) info), str); } return widgetInfos; } - private void searchMap4Widget(HashMap stringHashMap, ArrayList widgetInfos, WidgetInfo info, String str) { - if (stringHashMap.containsKey("name")) { - String name = stringHashMap.get("name"); + private void searchMap4Widget(Map map, List widgetInfos, WidgetInfo info, String str) { + if (map.containsKey(objectNameKey)) { + String name = map.get(objectNameKey); if (!StringUtils.isEmpty(name) && name.contains(str)) { WidgetInfo nameInfo = info.copy(info); nameInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); - nameInfo.getContent().setOldShowStr(stringHashMap.get("name")); + nameInfo.getContent().setOldShowStr(map.get(objectNameKey)); nameInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str)); nameInfo.getContent().setSelected(true); nameInfo.setWaterMarkFlag(false); widgetInfos.add(nameInfo); } } - if (stringHashMap.containsKey("waterMark")) { - String waterMark = stringHashMap.get("waterMark"); + if (map.containsKey(objectWaterMarkKey)) { + String waterMark = map.get(objectWaterMarkKey); if (!StringUtils.isEmpty(waterMark) && waterMark.contains(str)) { WidgetInfo widgetInfo = info.copy(info); widgetInfo.getContent().setShowStr(ShowValueUtils.getCommonString(waterMark, str)); - widgetInfo.getContent().setOldShowStr(stringHashMap.get("waterMark")); - widgetInfo.getContent().setShowObject(widgetInfo.getContent().getShowObject() + "水印"); + widgetInfo.getContent().setOldShowStr(map.get(objectWaterMarkKey)); + widgetInfo.getContent().setShowObject(widgetInfo.getContent().getShowObject() + Toolkit.i18nText("Fine-Design_Form_WaterMark")); widgetInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(waterMark, str)); widgetInfo.getContent().setSelected(true); widgetInfo.setWaterMarkFlag(true); @@ -333,27 +340,28 @@ public enum ShowSearchResultAction implements ShowValue { */ FORMULA(Toolkit.i18nText("Fine-Design_Basic_Formula")) { @Override - public ArrayList showSearchValue(JTemplate jTemplate) { - return new SearchFormulaAction(jTemplate).getFormulaInfos(); + public List showSearchValue(JTemplate jTemplate) { + SearchFormulaManager.getInstance().search4Infos(jTemplate); + return SearchFormulaManager.getInstance().getFormulaInfos(); } @Override - public ArrayList addMatchResult(String str, ArrayList arrayList) { - ArrayList formulaInfos = new ArrayList<>(); - HashMap stringHashMap = new HashMap<>(); - for (Info info : arrayList) { + public List addMatchResult(String str, List list) { + List formulaInfos = new ArrayList<>(); + Map stringHashMap = new HashMap<>(); + for (Info info : list) { stringHashMap = info.getValue(); searchMap4Formula(stringHashMap, formulaInfos, ((FormulaInfo) info), str); } return formulaInfos; } - private void searchMap4Formula(HashMap stringHashMap, ArrayList formulaInfos, FormulaInfo info, String str) { - if (stringHashMap.containsKey("content")) { - String name = stringHashMap.get("content"); + private void searchMap4Formula(Map stringHashMap, List formulaInfos, FormulaInfo info, String str) { + if (stringHashMap.containsKey(objectContentKey)) { + String name = stringHashMap.get(objectContentKey); if (name.contains(str)) { info.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); - info.getContent().setOldShowStr(stringHashMap.get("content")); + info.getContent().setOldShowStr(stringHashMap.get(objectContentKey)); info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str)); info.getContent().setSelected(true); formulaInfos.add(info); @@ -364,6 +372,12 @@ public enum ShowSearchResultAction implements ShowValue { String name; + //存储的对象名称key值 + String objectNameKey = "name"; + //存储的对象内容key值 + String objectContentKey = "content"; + //存储的对象水印Key值 + String objectWaterMarkKey = "waterMark"; ShowSearchResultAction(String name) { this.name = name; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java index 8ee365b2e..c65cee63f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java @@ -4,8 +4,11 @@ import com.fr.design.actions.replace.info.Info; import com.fr.design.mainframe.JTemplate; import java.util.ArrayList; +import java.util.List; /** + * 用于展示结果的处理(获取、过滤) + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-22 @@ -14,17 +17,19 @@ public interface ShowValue { /** * 获取搜索结果 + * * @param jTemplate * @return */ - ArrayList showSearchValue(JTemplate jTemplate); + List showSearchValue(JTemplate jTemplate); /** * 对搜索结果进行过滤 + * * @param str - * @param arrayList + * @param list * @return */ - ArrayList addMatchResult(String str,ArrayList arrayList); + List addMatchResult(String str, List list); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java index 12f73a33f..04b1a6e62 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java @@ -4,8 +4,6 @@ import com.fr.chart.chartattr.ChartCollection; import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.action.content.component.SearchComponentAction; import com.fr.design.actions.replace.info.ComponentInfo; -import com.fr.design.actions.replace.info.DealWithInfoValue; -import com.fr.design.actions.replace.info.Info; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; @@ -14,7 +12,7 @@ import com.fr.design.actions.replace.info.CellInfo; import com.fr.form.main.Form; import com.fr.form.ui.ElementCaseEditor; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.*; +import com.fr.form.ui.container.WTitleLayout; import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.general.GeneralUtils; import com.fr.main.impl.WorkBook; @@ -22,74 +20,74 @@ import com.fr.report.cell.CellElement; import com.fr.report.elementcase.ElementCase; import com.fr.report.poly.PolyECBlock; import com.fr.report.report.Report; -import com.fr.stable.AssistUtils; -import javafx.util.Pair; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; +import java.util.List; /** * 获取有内容的单元格相关信息 - * + *

* tips:这边报表分为两块——决策报表(dealForm)和普通报表(dealWorkBook),二者最后都会归于ElementCase - * 决策报表:虽然分为绝对布局和自适应布局,但是单元格可能存在的地方只有report ,二者对它(report)的处理是统一的,都属于WTitleLayout,因此没必要划分两种布局 - * 普通报表:获取elementCase拿到cellIterator遍历即可 + * 决策报表:虽然分为绝对布局和自适应布局,但是单元格可能存在的地方只有report ,二者对它(report)的处理是统一的,都属于WTitleLayout,因此没必要划分两种布局 + * 普通报表:获取elementCase拿到cellIterator遍历即可 * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-11 */ public class SearchCellAction implements SearchAction { - private ArrayList cellInfos; + private List cellInfos; - /** - * 构造时会搜索单元格,设置对应的单元格列表信息 - * @param jTemplate 要搜索的报表对象 - */ - public SearchCellAction(JTemplate jTemplate){ - setCellInfos(search4Infos(jTemplate)); + private SearchCellAction() { } + ; - public ArrayList getCellInfos() { + public List getCellInfos() { return cellInfos; } - public void setCellInfos(ArrayList cellInfos) { + public void setCellInfos(List cellInfos) { this.cellInfos = cellInfos; } /** * 搜索对应的信息 + * * @param jTemplate 要搜索的报表对象 - * @return 返回单元格信息Array */ @Override - public ArrayList search4Infos(JTemplate jTemplate){ - if (jTemplate.getTarget() instanceof Form){ - return dealForm(jTemplate); - - } else if (jTemplate.getTarget() instanceof WorkBook){ - return dealWorkBook(jTemplate); + public void search4Infos(JTemplate jTemplate) { + ITContent content = new ITContent(); + content.setTemplateName(jTemplate.getTemplateName()); + content.addTRL(jTemplate.getTemplateName()); + if (jTemplate.getTarget() instanceof Form) { + setCellInfos(dealForm(jTemplate)); + } else if (jTemplate.getTarget() instanceof WorkBook) { + setCellInfos(dealWorkBook((WorkBook) jTemplate.getTarget(),content)); + } else { + setCellInfos(new ArrayList<>()); } - return new ArrayList<>(); } /** * 处理决策报表 * 流程:dealForm——>getCellInfosFromBoundsWidget——>getCellInfoFromElementCase + * * @param jTemplate 要搜索的报表对象 * @return 返回单元格信息Array */ - private ArrayList dealForm(JTemplate jTemplate) { + private List dealForm(JTemplate jTemplate) { ArrayList result = new ArrayList<>(); - SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate); - for (ComponentInfo info : searchComponentAction.getComponentInfos()){ - ITContent content = info.getContent().copy(); - getCellInfosFromBoundsWidget(result,content, (Widget) info.getContent().getReplaceObject()); + + SearchComponentAction searchComponentAction = SearchComponentAction.getInstance(); + searchComponentAction.search4Infos(jTemplate); + for (ComponentInfo info : searchComponentAction.getComponentInfos()) { + ITContent content = ITContent.copy(info.getContent()); + getCellInfosFromBoundsWidget(result, content, (Widget) info.getContent().getReplaceObject()); } return result; @@ -97,19 +95,20 @@ public class SearchCellAction implements SearchAction { /** * 从组件信息中获取到的layout中的BoundsWidget中获取真正的报表块,并且将信息添加到列表中 - * @param result 要操作的Array + * + * @param result 要操作的Array * @param content 存储查找替换相关信息的类 - * @param widget 控件和组件的最高层接口 + * @param widget 控件和组件的最高层接口 */ - private void getCellInfosFromBoundsWidget(ArrayList result, ITContent content, Widget widget) { + private void getCellInfosFromBoundsWidget(List result, ITContent content, Widget widget) { //report在两种布局中都属于WTitleLayout - if (widget instanceof WTitleLayout){ - for (int i = 0 ; i < ((WTitleLayout) widget).getWidgetCount() ; i++){ + if (widget instanceof WTitleLayout) { + for (int i = 0; i < ((WTitleLayout) widget).getWidgetCount(); i++) { //这里它又套了一层BoundsWidget - if (((CRBoundsWidget)((WTitleLayout) widget).getWidget(i)).getWidget() instanceof ElementCaseEditor){ - ElementCaseEditor editor = (ElementCaseEditor) ((CRBoundsWidget)((WTitleLayout) widget).getWidget(i)).getWidget(); - ITContent newContent = content.copy(); - getCellInfoFromElementCase((ElementCase) editor.getElementCase(),result,newContent); + if (((CRBoundsWidget) ((WTitleLayout) widget).getWidget(i)).getWidget() instanceof ElementCaseEditor) { + ElementCaseEditor editor = (ElementCaseEditor) ((CRBoundsWidget) ((WTitleLayout) widget).getWidget(i)).getWidget(); + ITContent newContent = ITContent.copy(content); + getCellInfoFromElementCase((ElementCase) editor.getElementCase(), result, newContent); } } } @@ -118,61 +117,59 @@ public class SearchCellAction implements SearchAction { /** * 处理普通报表 - * @param jTemplate 要搜索的报表对象 + * + * @param workBook 要搜索的报表对象 * @return 对应信息Array */ - private ArrayList dealWorkBook(JTemplate jTemplate) { - WorkBook workBook = (WorkBook) jTemplate.getTarget(); + public List dealWorkBook(WorkBook workBook,ITContent workBookContent) { ArrayList result = new ArrayList<>(); - for (int i = 0 ; i < workBook.getReportCount() ; i++){ + for (int i = 0; i < workBook.getReportCount(); i++) { Report report = workBook.getReport(i); - ITContent content = new ITContent(); + ITContent content = ITContent.copy(workBookContent); content.setSheetID(String.valueOf(i)); content.setSheetName(workBook.getReportName(i)); - content.setTemplateName(jTemplate.getTemplateName()); - content.addTRL(jTemplate.getTemplateName()); - getCellInfoFromReport(report,result, content); + getCellInfoFromReport(report, result, content); } return result; } /** * 处理普通报表的sheet - * @param report sheet - * @param result 要操作的信息Array + * + * @param report sheet + * @param result 要操作的信息Array * @param content 存储查找替换相关信息的类 */ - private void getCellInfoFromReport(Report report, ArrayList result,ITContent content){ + private void getCellInfoFromReport(Report report, List result, ITContent content) { - if (report != null){ + if (report != null) { Iterator it = report.iteratorOfElementCase(); - while (it.hasNext()){ - ITContent newContent =content.copy(); + while (it.hasNext()) { + ITContent newContent = ITContent.copy(content); ElementCase elementCase = (ElementCase) it.next(); - getCellInfoFromElementCase(elementCase,result, newContent); + getCellInfoFromElementCase(elementCase, result, newContent); } } } - private void getCellInfoFromElementCase(ElementCase elementCase, ArrayList result,ITContent content){ + private void getCellInfoFromElementCase(ElementCase elementCase, List result, ITContent content) { Iterator cellIterator = elementCase.cellIterator(); - while (cellIterator.hasNext()){ - ITContent newContent = content.copy(); + while (cellIterator.hasNext()) { + ITContent newContent = ITContent.copy(content); CellElement cell = (CellElement) cellIterator.next(); - newContent.getContentObject().setCell(cell); newContent.setReplaceObject(cell); //单元格 - newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Cell") +cell); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Cell") + cell); newContent.setShowObject(cell); newContent.addTRL(newContent.getSheetID()); - if (elementCase instanceof PolyECBlock){ - newContent.setBlockName(((PolyECBlock)elementCase).getBlockName()); - newContent.addTRL(((PolyECBlock)elementCase).getBlockName()); + if (elementCase instanceof PolyECBlock) { + newContent.setBlockName(((PolyECBlock) elementCase).getBlockName()); + newContent.addTRL(((PolyECBlock) elementCase).getBlockName()); } newContent.addTRL(GeneralUtils.objectToString(cell)); CellInfo cellInfo = new CellInfo(newContent); - if (cell.getValue() instanceof ChartCollection){ + if (cell.getValue() instanceof ChartCollection) { cellInfo.setChartExist(true); } result.add(cellInfo); @@ -182,11 +179,45 @@ public class SearchCellAction implements SearchAction { /** * 对应的单元格信息列表是否有内容 + * * @return 判断的布尔值 */ - public boolean isCellInfosExist(){ + public boolean isCellInfosExist() { return this.getCellInfos().size() > 0; } + /** + * 对外开放的获取对象的方法 + * + * @return + */ + public static SearchCellAction getInstance() { + return SearchCellAction.SearchCellActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchCellActionEnum { + /** + * 单例 + */ + SINGLETON; + + private SearchCellAction instance; + + SearchCellActionEnum() { + instance = new SearchCellAction(); + } + + /** + * 获取对象 + * + * @return + */ + public SearchCellAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java index 4f63e1402..ed5cab762 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java @@ -1,11 +1,8 @@ package com.fr.design.actions.replace.action.content.component; -import com.fr.design.actions.replace.action.content.widget.FrmWidgetType; -import com.fr.design.actions.replace.action.content.widget.SearchFrmWidget; import com.fr.design.actions.replace.info.ComponentInfo; import com.fr.design.actions.replace.info.DealWithInfoValue; import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.form.ui.Widget; @@ -20,19 +17,21 @@ import com.fr.form.ui.container.cardlayout.WCardTitleLayout; import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 决策报表组件类型 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-08 */ -public enum ComponentType implements DealWithInfoValue{ +public enum ComponentType implements DealWithInfoValue { /** * WCardMainBorderLayout属于Tab块组件中的最外层——默认命名方式为tablayout0的类型 @@ -40,54 +39,54 @@ public enum ComponentType implements DealWithInfoValue{ * 处理该类型时需要先将该对象加入我们的组件列表中,再对其包含的内容进行递归处理 * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 */ - W_CARD_MAIN_BORDER_LAYOUT("WCardMainBorderLayout"){ + W_CARD_MAIN_BORDER_LAYOUT("WCardMainBorderLayout") { @Override - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { super.addComponent2Array(componentInfos, bodyContent, widget); - ITContent content = bodyContent.copy(); + ITContent content = ITContent.copy(bodyContent); content.addOtherPos(widget.getWidgetName()); - for (int i = 0 ; i < ((WCardMainBorderLayout)widget).getWidgetCount() ; i ++){ - Widget cardLayoutWidget = ((WCardMainBorderLayout)widget).getWidget(i); - if (cardLayoutWidget instanceof WCardTitleLayout){ - for (int j = 0 ; j <((WCardTitleLayout) cardLayoutWidget).getWidgetCount() ; j++){ - if (((WCardTitleLayout) cardLayoutWidget).getWidget(j) instanceof WCardTagLayout){ + for (int i = 0; i < ((WCardMainBorderLayout) widget).getWidgetCount(); i++) { + Widget cardLayoutWidget = ((WCardMainBorderLayout) widget).getWidget(i); + if (cardLayoutWidget instanceof WCardTitleLayout) { + for (int j = 0; j < ((WCardTitleLayout) cardLayoutWidget).getWidgetCount(); j++) { + if (((WCardTitleLayout) cardLayoutWidget).getWidget(j) instanceof WCardTagLayout) { content.addOtherPos(((WCardTitleLayout) cardLayoutWidget).getWidget(j).getWidgetName()); } } } } - searchLayout4Component(componentInfos,content,((WCardMainBorderLayout)widget)); + searchLayout4Component(componentInfos, content, ((WCardMainBorderLayout) widget)); } }, /** * WCardTitleLayout里面两个,一个CardAddButton——不必处理,一个WCardTagLayout——默认命名方式为tabpane0的类型 * 处理该类型时不用对该对象进行处理,直接对其包含的内容进行递归处理即可 */ - W_CARD_TITLE_LAYOUT("WCardTitleLayout"){ + W_CARD_TITLE_LAYOUT("WCardTitleLayout") { @Override - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { - searchLayout4Component(componentInfos,bodyContent,(WCardTitleLayout) widget); + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { + searchLayout4Component(componentInfos, bodyContent, (WCardTitleLayout) widget); } }, /** * 对于WCardLayout 里面就是放的WTabFitLayout——tab00、tab10 * 处理该类型时不用对该对象进行处理,直接对其包含的内容进行递归处理即可 */ - W_CARD_LAYOUT("WCardLayout"){ + W_CARD_LAYOUT("WCardLayout") { @Override - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { - searchLayout4Component(componentInfos,bodyContent,(WCardLayout) widget); + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { + searchLayout4Component(componentInfos, bodyContent, (WCardLayout) widget); } }, /** * WCardTagLayout——默认命名方式为tabpane0的类型 * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 */ - W_CARD_TAG_LAYOUT("WCardTagLayout"){ + W_CARD_TAG_LAYOUT("WCardTagLayout") { @Override - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { super.addComponent2Array(componentInfos, bodyContent, widget); - searchLayout4Component(componentInfos,bodyContent,(WCardTagLayout) widget); + searchLayout4Component(componentInfos, bodyContent, (WCardTagLayout) widget); } }, /** @@ -95,11 +94,11 @@ public enum ComponentType implements DealWithInfoValue{ * 处理该类型时需要先将该对象加入我们的组件列表中,再对其包含的内容进行递归处理 * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 */ - W_ABSOLUTE_LAYOUT("WAbsoluteLayout"){ + W_ABSOLUTE_LAYOUT("WAbsoluteLayout") { @Override - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { super.addComponent2Array(componentInfos, bodyContent, widget); - serachCRBoundsWidget4Component(componentInfos,bodyContent,(WAbsoluteLayout) widget); + serachCRBoundsWidget4Component(componentInfos, bodyContent, (WAbsoluteLayout) widget); } }, /** @@ -107,27 +106,27 @@ public enum ComponentType implements DealWithInfoValue{ * 处理该类型时需要先将该对象加入我们的组件列表中,再对其包含的内容进行递归处理 * TIP:该类型对其设置组件名时直接setWidgetName即可,设计器右侧上方和右侧下方面板中的组件名称会同步更改 */ - W_TAB_FIT_LAYOUT("WTabFitLayout"){ + W_TAB_FIT_LAYOUT("WTabFitLayout") { @Override - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { super.addComponent2Array(componentInfos, bodyContent, widget); - serachCRBoundsWidget4Component(componentInfos,bodyContent,(WTabFitLayout) widget); + serachCRBoundsWidget4Component(componentInfos, bodyContent, (WTabFitLayout) widget); } }, /** * 自适应布局下报表块和图表的存储方式 * TIP:该类型对其设置组件名时需要对内外层进行setWidgetName,设计器右侧上方和右侧下方面板中的组件名称不会同步更改 */ - W_TITLE_LAYOUT("WTitleLayout"){ + W_TITLE_LAYOUT("WTitleLayout") { @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); - if (replaceObject instanceof WTitleLayout){ + if (replaceObject instanceof WTitleLayout) { WTitleLayout titleLayout = (WTitleLayout) replaceObject; - info.updateOldStr(titleLayout.getWidgetName(),findStr); - titleLayout.setWidgetName(ShowValueUtils.replaceAll(titleLayout.getWidgetName(),findStr,replaceStr)); - CRBoundsWidget crBoundsWidget = ((CRBoundsWidget)titleLayout.getWidget(0)); - crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(),findStr,replaceStr)); + info.updateOldStr(titleLayout.getWidgetName(), findStr); + titleLayout.setWidgetName(ShowValueUtils.replaceAll(titleLayout.getWidgetName(), findStr, replaceStr)); + CRBoundsWidget crBoundsWidget = ((CRBoundsWidget) titleLayout.getWidget(0)); + crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(), findStr, replaceStr)); } } }, @@ -136,16 +135,16 @@ public enum ComponentType implements DealWithInfoValue{ * 自适应布局下:下拉框控件、下拉复选框控件、日期控件、数字控件、下拉树控件、密码控件都属于该类型 * TIP:该类型对其设置组件名时需要对内外层进行setWidgetName,设计器右侧上方和右侧下方面板中的组件名称不会同步更改 */ - W_SCALE_LAYOUT("WScaleLayout"){ + W_SCALE_LAYOUT("WScaleLayout") { @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); - if (replaceObject instanceof WScaleLayout){ + if (replaceObject instanceof WScaleLayout) { WScaleLayout scaleLayout = (WScaleLayout) replaceObject; - info.updateOldStr(scaleLayout.getWidgetName(),findStr); - scaleLayout.setWidgetName(ShowValueUtils.replaceAll(scaleLayout.getWidgetName(),findStr,replaceStr)); - CRBoundsWidget crBoundsWidget = ((CRBoundsWidget)scaleLayout.getWidget(0)); - crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(),findStr,replaceStr)); + info.updateOldStr(scaleLayout.getWidgetName(), findStr); + scaleLayout.setWidgetName(ShowValueUtils.replaceAll(scaleLayout.getWidgetName(), findStr, replaceStr)); + CRBoundsWidget crBoundsWidget = ((CRBoundsWidget) scaleLayout.getWidget(0)); + crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(), findStr, replaceStr)); } } }, @@ -231,30 +230,44 @@ public enum ComponentType implements DealWithInfoValue{ String name; + ComponentType(String name) { this.name = name; } + /** + * 匹配 + * + * @param name + * @return + */ @Nullable - public static ComponentType match(String name){ + public static ComponentType match(String name) { ComponentType[] values = ComponentType.values(); for (ComponentType value : values) { - if(value.name.equals(name)){ + if (value.name.equals(name)) { return value; } } return null; } - public void addComponent2Array(ArrayList componentInfos, ITContent bodyContent, Widget widget) { - componentInfos.add(new ComponentInfo(getComponentContent(bodyContent,widget))); + public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { + componentInfos.add(new ComponentInfo(getComponentContent(bodyContent, widget))); } - public ITContent getComponentContent(ITContent componentContent,Widget widget){ - ITContent content = componentContent.copy(); + /** + * 处理ITContent + * + * @param componentContent + * @param widget + * @return + */ + public ITContent getComponentContent(ITContent componentContent, Widget widget) { + ITContent content = ITContent.copy(componentContent); content.setReplaceObject(widget); String widgetName = widget.getWidgetName(); - if (!(widget instanceof WCardTagLayout)){ + if (!(widget instanceof WCardTagLayout)) { content.addOtherPos(widgetName); } content.setBlockName(widgetName); @@ -263,50 +276,64 @@ public enum ComponentType implements DealWithInfoValue{ return content; } - public void searchLayout4Component(ArrayList componentInfos, ITContent bodyContent, WLayout layout){ - for (int i = 0 ; i < layout.getWidgetCount() ; i ++){ + /** + * 从Layout里面拿组件 + * + * @param componentInfos + * @param bodyContent + * @param layout + */ + public void searchLayout4Component(List componentInfos, ITContent bodyContent, WLayout layout) { + for (int i = 0; i < layout.getWidgetCount(); i++) { ComponentType componentType = ComponentType.match(layout.getWidget(i).getClass().getSimpleName()); - if (componentType != null){ + if (componentType != null) { componentType.addComponent2Array(componentInfos, bodyContent, layout.getWidget(i)); } } } - public void serachCRBoundsWidget4Component(ArrayList componentInfos, ITContent bodyContent, WLayout layout){ - for (int i = 0 ; i < layout.getWidgetCount() ; i ++){ + /** + * 从CRBoundWidget里面拿组件 + * + * @param componentInfos + * @param bodyContent + * @param layout + */ + public void serachCRBoundsWidget4Component(List componentInfos, ITContent bodyContent, WLayout layout) { + for (int i = 0; i < layout.getWidgetCount(); i++) { //这边会套一层CRBoundsWidget - ComponentType componentType = ComponentType.match(((CRBoundsWidget)(layout.getWidget(i))).getWidget().getClass().getSimpleName()); - if (componentType != null){ - ITContent content = bodyContent.copy(); + ComponentType componentType = ComponentType.match(((CRBoundsWidget) (layout.getWidget(i))).getWidget().getClass().getSimpleName()); + if (componentType != null) { + ITContent content = ITContent.copy(bodyContent); content.addOtherPos(layout.getWidgetName()); - componentType.addComponent2Array(componentInfos, content, ((CRBoundsWidget)(layout.getWidget(i))).getWidget()); + componentType.addComponent2Array(componentInfos, content, ((CRBoundsWidget) (layout.getWidget(i))).getWidget()); } } } @Override - public HashMap getValue(Object... o) { - HashMap hashMap = new HashMap<>(); - if (o != null && o[0] instanceof Widget){ + public Map getValue(Object... o) { + HashMap hashMap = new HashMap<>(); + if (o != null && o[0] instanceof Widget) { hashMap.put("content", ((Widget) o[0]).getWidgetName()); } return hashMap; } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); - if (replaceObject instanceof Widget){ + if (replaceObject instanceof Widget) { Widget widget = ((Widget) replaceObject); - info.updateOldStr(widget.getWidgetName(),findStr); - widget.setWidgetName(widget.getWidgetName().replaceAll(findStr,replaceStr)); + info.updateOldStr(widget.getWidgetName(), findStr); + widget.setWidgetName(widget.getWidgetName().replaceAll(findStr, replaceStr)); } } @Override public String getInfoShowStr(Info info) { - if (info instanceof ComponentInfo && info.getContent().getReplaceObject() instanceof Widget){ + if (info instanceof ComponentInfo && info.getContent().getReplaceObject() instanceof Widget) { return ((Widget) info.getContent().getReplaceObject()).getWidgetName(); } return StringUtils.EMPTY; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java index 70f4ea419..217980de6 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java @@ -1,23 +1,17 @@ package com.fr.design.actions.replace.action.content.component; import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.cell.SearchCellAction; import com.fr.design.actions.replace.info.ComponentInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.mainframe.JTemplate; import com.fr.form.main.Form; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WAbsoluteLayout; -import com.fr.form.ui.container.WCardLayout; import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout; -import com.fr.form.ui.container.cardlayout.WCardTagLayout; -import com.fr.form.ui.container.cardlayout.WCardTitleLayout; -import com.fr.form.ui.container.cardlayout.WTabFitLayout; import com.fr.form.ui.widget.CRBoundsWidget; -import com.fr.stable.StringUtils; -import com.teamdev.jxbrowser.deps.org.checkerframework.checker.units.qual.C; import java.util.ArrayList; +import java.util.List; /** * 获取决策报表组件 @@ -29,33 +23,26 @@ import java.util.ArrayList; */ public class SearchComponentAction implements SearchAction { - private ArrayList componentInfos; + private List componentInfos; - public ArrayList getComponentInfos() { + public List getComponentInfos() { return componentInfos; } - public void setComponentInfos(ArrayList componentInfos) { + public void setComponentInfos(List componentInfos) { this.componentInfos = componentInfos; } - /** - * 构造时会搜索组件,设置对应的组件列表信息 - * @param jTemplate 要搜索的模板 - */ - public SearchComponentAction(JTemplate jTemplate) { - setComponentInfos(search4Infos(jTemplate)); - } /** * 搜索决策报表参数面板以及body面板两个地方的组件 + * * @param jTemplate 要搜索的模板 - * @return 组件信息Array */ @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList componentInfos = new ArrayList<>(); + public void search4Infos(JTemplate jTemplate) { + List componentInfos = new ArrayList<>(); if (jTemplate.getTarget() instanceof Form) { Form form = (Form) jTemplate.getTarget(); ITContent content = new ITContent(); @@ -67,12 +54,12 @@ public class SearchComponentAction implements SearchAction { //body面板 dealBody(componentInfos, content, form.getBody()); } - return componentInfos; + setComponentInfos(componentInfos); } - private void dealBody(ArrayList componentInfos, ITContent content, Widget body) { + private void dealBody(List componentInfos, ITContent content, Widget body) { if (body instanceof WLayout) { - ITContent bodyContent = content.copy(); + ITContent bodyContent = ITContent.copy(content); bodyContent.addOtherPos(body.getWidgetName()); //单独处理一下body组件 dealBodyContainer(componentInfos, bodyContent, (WLayout) body); @@ -82,28 +69,28 @@ public class SearchComponentAction implements SearchAction { } } - private void searchBodyComponent(ArrayList componentInfos, ITContent bodyContent, Widget body) { - for (int i = 0 ; i < ((WLayout) body).getWidgetCount(); i++){ + private void searchBodyComponent(List componentInfos, ITContent bodyContent, Widget body) { + for (int i = 0; i < ((WLayout) body).getWidgetCount(); i++) { //body下面的每个控件都会有一层BoundsWidget,为了兼容用了CRBoundsWidget,boundsWidget.getWidget()里面才是真正我们需要的widget CRBoundsWidget boundsWidget = (CRBoundsWidget) ((WLayout) body).getWidget(i); ComponentType componentType = ComponentType.match(boundsWidget.getWidget().getClass().getSimpleName()); - if (componentType != null){ - componentType.addComponent2Array(componentInfos,bodyContent,boundsWidget.getWidget()); + if (componentType != null) { + componentType.addComponent2Array(componentInfos, bodyContent, boundsWidget.getWidget()); } } } - private void dealBodyContainer(ArrayList componentInfos, ITContent bodyContent, WLayout body) { - ITContent content = bodyContent.copy(); + private void dealBodyContainer(List componentInfos, ITContent bodyContent, WLayout body) { + ITContent content = ITContent.copy(bodyContent); content.setReplaceObject(body); dealContent(content, body.getWidgetName()); //WParameterLayout componentInfos.add(new ComponentInfo(content)); } - private void dealPara(ArrayList componentInfos, ITContent content, WLayout paraContainer) { + private void dealPara(List componentInfos, ITContent content, WLayout paraContainer) { if (paraContainer != null) { - ITContent paraContent = content.copy(); + ITContent paraContent = ITContent.copy(content); paraContent.addOtherPos(paraContainer.getWidgetName()); //单独处理一下para组件 dealParaContainer(componentInfos, paraContent, paraContainer); @@ -112,9 +99,9 @@ public class SearchComponentAction implements SearchAction { } } - private void searchParaComponent(ArrayList componentInfos, ITContent paraContent, WLayout paraContainer) { + private void searchParaComponent(List componentInfos, ITContent paraContent, WLayout paraContainer) { for (int i = 0; i < paraContainer.getWidgetCount(); i++) { - ITContent content = paraContent.copy(); + ITContent content = ITContent.copy(paraContent); String widgetName = ((CRBoundsWidget) (paraContainer.getWidget(i))).getWidget().getWidgetName(); content.addOtherPos(widgetName); content.setReplaceObject(((CRBoundsWidget) (paraContainer.getWidget(i))).getWidget()); @@ -124,9 +111,15 @@ public class SearchComponentAction implements SearchAction { } } - //单独处理WParameterLayout组件 - private void dealParaContainer(ArrayList componentInfos, ITContent content, WLayout paraContainer) { - ITContent paraContent = content.copy(); + /** + * 单独处理WParameterLayout组件 + * + * @param componentInfos + * @param content + * @param paraContainer + */ + private void dealParaContainer(List componentInfos, ITContent content, WLayout paraContainer) { + ITContent paraContent = ITContent.copy(content); paraContent.setReplaceObject(paraContainer); dealContent(paraContent, paraContainer.getWidgetName()); //WParameterLayout @@ -139,4 +132,21 @@ public class SearchComponentAction implements SearchAction { content.setShowObject(widgetName); content.addTRL(widgetName); } + + public static SearchComponentAction getInstance() { + return SearchComponentAction.SearchComponentActionEnum.SINGLETON.getInstance(); + } + + enum SearchComponentActionEnum { + SINGLETON; + private SearchComponentAction instance; + + SearchComponentActionEnum() { + instance = new SearchComponentAction(); + } + + public SearchComponentAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java index c3bd741e0..4d89c5136 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java @@ -2,6 +2,7 @@ package com.fr.design.actions.replace.action.content.floatelement; import com.fr.chart.chartattr.ChartCollection; import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.cell.SearchCellAction; import com.fr.design.actions.replace.info.FloatInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; @@ -14,10 +15,11 @@ import com.fr.report.report.Report; import java.util.ArrayList; import java.util.Iterator; +import java.util.List; /** * 查找悬浮元素的信息 - * + *

* 由于决策报表没有悬浮元素,因此不用考虑决策报表,只需要考虑普通报表即可 * * @author Destiny.Lin @@ -25,25 +27,19 @@ import java.util.Iterator; * created by Destiny.Lin on 2022-08-16 */ public class SearchFloatAction implements SearchAction { - private ArrayList floatInfos; - - /** - * 构造时会搜索悬浮元素,设置对应的悬浮元素信息列表 - * @param jTemplate 指定搜索的模板 - */ - public SearchFloatAction(JTemplate jTemplate){ setFloatInfos(search4Infos(jTemplate));} + private List floatInfos; /** * 查找悬浮元素信息,只需要考虑普通报表 + * * @param jTemplate 指定搜索模板 - * @return 悬浮元素信息列表 */ @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList result = new ArrayList<>(); - if (jTemplate.getTarget() instanceof WorkBook){ + public void search4Infos(JTemplate jTemplate) { + List result = new ArrayList<>(); + if (jTemplate.getTarget() instanceof WorkBook) { WorkBook workBook = (WorkBook) jTemplate.getTarget(); - for (int i = 0 ; i < workBook.getReportCount() ; i++){ + for (int i = 0; i < workBook.getReportCount(); i++) { Report report = workBook.getReport(i); ITContent content = new ITContent(); content.setTemplateName(jTemplate.getTemplateName()); @@ -51,42 +47,41 @@ public class SearchFloatAction implements SearchAction { content.setSheetName(workBook.getReportName(i)); content.addTRL(jTemplate.getTemplateName()); content.addTRL(String.valueOf(i)); - getFloatInfoFromReport(report,result, content); + getFloatInfoFromReport(report, result, content); } } - return result; - } + setFloatInfos(result); + } - private void getFloatInfoFromReport(Report report, ArrayList result, ITContent content) { + private void getFloatInfoFromReport(Report report, List result, ITContent content) { - if (report != null){ + if (report != null) { Iterator it = report.iteratorOfElementCase(); - while (it.hasNext()){ - ITContent newContent = content.copy(); + while (it.hasNext()) { + ITContent newContent = ITContent.copy(content); ElementCase elementCase = (ElementCase) it.next(); - getFloatInfoFromElementCase(elementCase,result, newContent); + getFloatInfoFromElementCase(elementCase, result, newContent); } } } - private void getFloatInfoFromElementCase(ElementCase elementCase, ArrayList result, ITContent content) { + private void getFloatInfoFromElementCase(ElementCase elementCase, List result, ITContent content) { Iterator floatIterator = elementCase.floatIterator(); - while (floatIterator.hasNext()){ - ITContent newContent = content.copy(); + while (floatIterator.hasNext()) { + ITContent newContent = ITContent.copy(content); FloatElement floatElement = (FloatElement) floatIterator.next(); - newContent.getContentObject().setFloatElement(floatElement); newContent.setReplaceObject(floatElement); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Float_Element")); - if (elementCase instanceof PolyECBlock){ - newContent.setBlockName(((PolyECBlock)elementCase).getBlockName()); - newContent.addTRL(((PolyECBlock)elementCase).getBlockName()); + if (elementCase instanceof PolyECBlock) { + newContent.setBlockName(((PolyECBlock) elementCase).getBlockName()); + newContent.addTRL(((PolyECBlock) elementCase).getBlockName()); } newContent.setShowObject(floatElement.getName()); newContent.addTRL(floatElement.getName()); FloatInfo floatInfo = new FloatInfo(newContent); - if (floatElement.getValue() instanceof ChartCollection){ + if (floatElement.getValue() instanceof ChartCollection) { floatInfo.setChartExist(true); } result.add(floatInfo); @@ -94,11 +89,44 @@ public class SearchFloatAction implements SearchAction { } - public ArrayList getFloatInfos() { + public List getFloatInfos() { return floatInfos; } - public void setFloatInfos(ArrayList floatInfos) { + public void setFloatInfos(List floatInfos) { this.floatInfos = floatInfos; } + + /** + * 对外开放的获取对象的方法 + * + * @return + */ + public static SearchFloatAction getInstance() { + return SearchFloatAction.SearchFloatActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchFloatActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchFloatAction instance; + + SearchFloatActionEnum() { + instance = new SearchFloatAction(); + } + + /** + * 获取对象 + * + * @return + */ + public SearchFloatAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java deleted file mode 100644 index 9746cc169..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula; - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-19 - */ -public abstract class AbstractSearchFormulaAction implements SearchFormula{ - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return null; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java index 297194568..c2c8a5688 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java @@ -8,10 +8,8 @@ import com.fr.base.iofile.attr.WatermarkAttr; import com.fr.base.present.FormulaPresent; import com.fr.data.condition.FormulaCondition; import com.fr.data.core.Compare; -import com.fr.design.actions.replace.action.ShowValue; import com.fr.design.actions.replace.info.DealWithInfoValue; import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.file.HistoryTemplateListCache; import com.fr.js.SingleJavaScript; @@ -23,11 +21,12 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.FormulaProvider; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @author Destiny.Lin @@ -40,7 +39,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ FORMULA("Formula") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) o[0]).getContent())) { map.put("content", ((Formula) o[0]).getContent()); @@ -49,7 +48,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((Formula) replaceObject).getContent(), findStr); ((Formula) replaceObject).setContent(ShowValueUtils.replaceAll(((Formula) replaceObject).getContent(), findStr, replaceStr)); @@ -60,7 +59,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ FORMULA_CONDITION("FormulaCondition") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((FormulaCondition) o[0]).getFormula())) { map.put("content", ((FormulaCondition) o[0]).getFormula()); @@ -69,7 +68,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); //更新上一次操作的信息 info.updateOldStr(((FormulaCondition) replaceObject).getFormula(), findStr); @@ -83,7 +82,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ COMPARE("Compare") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) ((Compare) o[0]).getValue()).getContent())) { map.put("content", ((Formula) ((Compare) o[0]).getValue()).getContent()); @@ -92,7 +91,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); if (((Compare) replaceObject).getValue() instanceof Formula) { Formula formula = (Formula) ((Compare) replaceObject).getValue(); @@ -108,7 +107,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ RICH_TEXT("RichText") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((RichText) ((CellElement) o[0]).getValue()).getContent())) { map.put("content", ((RichText) ((CellElement) o[0]).getValue()).getContent()); @@ -117,7 +116,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { //todo 富文本公式处理 } @@ -127,7 +126,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ KV("KV") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent())) { map.put("content", ((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent()); @@ -136,7 +135,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((Formula) ((com.fr.base.core.KV) replaceObject).getValue()).getContent(), findStr); @@ -149,7 +148,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ CELL_INSERT_POLICY_ATTR("CellInsertPolicyAttr") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent())) { map.put("content", ((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent()); @@ -158,7 +157,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((Formula) (((CellInsertPolicyAttr) replaceObject).getDefaultInsertValue())).getContent(), findStr); ((Formula) (((CellInsertPolicyAttr) replaceObject).getDefaultInsertValue())).setContent(ShowValueUtils.replaceAll(((Formula) (((CellInsertPolicyAttr) replaceObject).getDefaultInsertValue())).getContent(), findStr, replaceStr)); @@ -170,7 +169,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ PRESENT("Present") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((FormulaPresent) o[0]).getFormulaContent())) { map.put("content", ((FormulaPresent) o[0]).getFormulaContent()); @@ -179,7 +178,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((FormulaPresent) replaceObject).getFormulaContent(), findStr); @@ -192,7 +191,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ SINGLE_JAVA_SCRIPT("SingleJavaScript") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((SingleJavaScript) o[0]).getFileName())) { map.put("content", ((SingleJavaScript) o[0]).getFileName()); @@ -201,7 +200,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((SingleJavaScript) replaceObject).getFileName(), findStr); @@ -214,7 +213,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ PARAMETER_PROVIDER("ParameterProvider") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) (((ParameterProvider) o[0]).getValue())).getContent())) { map.put("content", ((Formula) (((ParameterProvider) o[0]).getValue())).getContent()); @@ -223,7 +222,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((Formula) (((ParameterProvider) replaceObject).getValue())).getContent(), findStr); @@ -236,7 +235,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ FORMULA_PROVIDER("FormulaProvider") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((FormulaProvider) o[0]).getContent())) { map.put("content", ((FormulaProvider) o[0]).getContent()); @@ -245,7 +244,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((FormulaProvider) replaceObject).getContent(), findStr); @@ -258,7 +257,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ PARAMETER("Parameter") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) (((Parameter) o[0]).getValue())).getContent())) { map.put("content", ((Formula) (((Parameter) o[0]).getValue())).getContent()); @@ -267,7 +266,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((Formula) (((Parameter) replaceObject).getValue())).getContent(), findStr); @@ -280,7 +279,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ DS_COLUMN("DSColumn") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((DSColumn) o[0]).getResult())) { map.put("content", ((DSColumn) o[0]).getResult()); @@ -289,7 +288,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((DSColumn) replaceObject).getResult(), findStr); @@ -302,7 +301,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ BASE_FORMULA("BaseFormula") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((BaseFormula) o[0]).getContent())) { map.put("content", ((BaseFormula) o[0]).getContent()); @@ -311,7 +310,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((BaseFormula) replaceObject).getContent(), findStr); @@ -324,7 +323,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ STORE_PROCEDURE_PARAMETER("StoreProcedureParameter") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent())) { map.put("content", ((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent()); @@ -333,7 +332,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Object replaceObject = info.getContent().getReplaceObject(); info.updateOldStr(((Formula) ((StoreProcedureParameter) replaceObject).getValue()).getContent(), findStr); @@ -346,7 +345,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { */ WATER_MARK_ATTR("WatermarkAttr") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); if (!StringUtils.isEmpty(((WatermarkAttr) o[0]).getText())) { map.put("content", ((WatermarkAttr) o[0]).getText()); @@ -355,7 +354,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { WorkBook workBook = (WorkBook) HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget(); WatermarkAttr watermarkAttr = (WatermarkAttr) info.getContent().getReplaceObject(); info.updateOldStr(watermarkAttr.getText(), findStr); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java index 49b5b8198..1b6fc2f2c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java @@ -3,9 +3,11 @@ package com.fr.design.actions.replace.action.content.formula; import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.mainframe.JTemplate; import java.util.ArrayList; +import java.util.List; /** * @author Destiny.Lin @@ -19,5 +21,17 @@ public interface SearchFormula extends SearchAction { * @param formulaInfos 存储公式信息的列表 * @param content ITContent的数据结构 */ - void searchFormula(ArrayList formulaInfos, ITContent content); + default void searchFormula(List formulaInfos, ITContent content) { + } + + + /** + * 获取各个地方的公式 + * + * @param jTemplate + * @param formulaInfos + */ + default void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java deleted file mode 100644 index 2f5e03137..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula; - -import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaAction; -import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; -import com.fr.design.actions.replace.action.content.formula.floatelement.SearchFloatFormulaAction; -import com.fr.design.actions.replace.action.content.formula.template.SearchTemplateFormulaAction; -import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaAction; -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.mainframe.JTemplate; -import com.fr.form.main.Form; -import com.fr.main.impl.WorkBook; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-17 - */ -public class SearchFormulaAction implements SearchAction { - private ArrayList formulaInfos; - - public SearchFormulaAction(JTemplate jTemplate) { - setFormulaInfos(search4Infos(jTemplate)); - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList formulaInfos = new ArrayList<>(); - new SearchCellFormulaAction(jTemplate, formulaInfos); - new SearchWidgetFormulaAction(jTemplate, formulaInfos); - new SearchDataFormulaAction(jTemplate, formulaInfos); - new SearchTemplateFormulaAction(jTemplate, formulaInfos); - new SearchFloatFormulaAction(jTemplate, formulaInfos); - return formulaInfos; - } - - public ArrayList getFormulaInfos() { - return formulaInfos; - } - - public void setFormulaInfos(ArrayList formulaInfos) { - this.formulaInfos = formulaInfos; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java new file mode 100644 index 000000000..9ca37b501 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java @@ -0,0 +1,94 @@ +package com.fr.design.actions.replace.action.content.formula; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaAction; +import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; +import com.fr.design.actions.replace.action.content.formula.floatelement.SearchFloatFormulaAction; +import com.fr.design.actions.replace.action.content.formula.template.SearchTemplateFormulaAction; +import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaAction; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.mainframe.JTemplate; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-17 + */ +public class SearchFormulaManager implements SearchAction { + private List formulaInfos; + private Set formulaProviderSet = new HashSet<>(); + + private SearchFormulaManager() { + registerFormula(SearchCellFormulaAction.getInstance()); + registerFormula(SearchWidgetFormulaAction.getInstance()); + registerFormula(SearchDataFormulaAction.getInstance()); + registerFormula(SearchTemplateFormulaAction.getInstance()); + registerFormula(SearchFloatFormulaAction.getInstance()); + } + + @Override + public void search4Infos(JTemplate jTemplate) { + List formulaInfos = new ArrayList<>(); + for (SearchFormula searchFormula : formulaProviderSet) { + searchFormula.searchFormulaFromObject(jTemplate, formulaInfos); + } + setFormulaInfos(formulaInfos); + } + + /** + * 注册对应的SearchFormula + * + * @param searchFormula + */ + public void registerFormula(SearchFormula searchFormula) { + formulaProviderSet.add(searchFormula); + } + + public List getFormulaInfos() { + return formulaInfos; + } + + public void setFormulaInfos(List formulaInfos) { + this.formulaInfos = formulaInfos; + } + + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchFormulaManager getInstance() { + return SearchFormulaManagerEnum.SINGLETON.getInstance(); + } + + + /** + * 枚举实现单例 + */ + enum SearchFormulaManagerEnum { + /** + * 单例 + */ + SINGLETON; + private SearchFormulaManager instance; + + SearchFormulaManagerEnum() { + instance = new SearchFormulaManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchFormulaManager getInstance() { + return instance; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java deleted file mode 100644 index 3156878f3..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.cell; - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-30 - */ -public abstract class AbstractSearchCellFormulaAction implements SearchCellFormula{ - - - @Override - public void searchFormulaFromCell(JTemplate jTemplate, ArrayList formulaInfos) { - - } - - @Override - public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return new ArrayList<>(); - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java index 80811f33f..a86544935 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java @@ -5,7 +5,7 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.mainframe.JTemplate; -import java.util.ArrayList; +import java.util.List; /** * 查找单元格中可能存在的公式 @@ -22,7 +22,8 @@ public interface SearchCellFormula extends SearchFormula { * @param jTemplate 指定搜索模板 * @param formulaInfos 要存储对应信息列表的数据结构 */ - void searchFormulaFromCell(JTemplate jTemplate, ArrayList formulaInfos); + default void searchFormulaFromCell(JTemplate jTemplate, List formulaInfos) { + } /** * 查找不同单元格内容类型各自可能存在的公式 @@ -30,5 +31,8 @@ public interface SearchCellFormula extends SearchFormula { * @param formulaInfos * @param content */ - void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content); + default void searchFormulaFromCellType(List formulaInfos, ITContent content) { + } + + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java index cc27b002e..f4fc869cd 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java @@ -1,19 +1,24 @@ package com.fr.design.actions.replace.action.content.formula.cell; import com.fr.base.Formula; +import com.fr.base.present.DictPresent; import com.fr.base.present.FormulaPresent; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.data.impl.DatabaseDictionary; import com.fr.design.actions.replace.action.content.cell.SearchCellAction; -import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; -import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.*; import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormulaAction; import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; +import com.fr.design.actions.replace.action.content.formula.widget.DictionaryType; import com.fr.design.actions.replace.info.CellInfo; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; +import com.fr.form.ui.DictionaryContainer; +import com.fr.general.data.Condition; import com.fr.js.NameJavaScriptGroup; import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; @@ -23,9 +28,11 @@ import com.fr.report.cell.cellattr.highlight.HighlightGroup; import com.fr.report.core.sort.common.CellSortAttr; import com.fr.report.core.sort.sortexpression.FormulaSortExpression; import com.fr.report.core.sort.sortexpression.SortExpression; +import sun.security.krb5.SCDynamicStoreConfig; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 搜索单元格中的公式 @@ -34,7 +41,7 @@ import java.util.HashMap; * @version 11.0 * created by Destiny.Lin on 2022-08-17 */ -public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { +public class SearchCellFormulaAction implements SearchCellFormula { public static HashMap cellType = new HashMap<>(); @@ -54,8 +61,12 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { conditionHashMap.put("ListCondition", new SearchListConditionAction()); } - public SearchCellFormulaAction(JTemplate jTemplate, ArrayList fomulaInfos) { - searchFormulaFromCell(jTemplate, fomulaInfos); + private SearchCellFormulaAction() { + } + + @Override + public void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { + searchFormulaFromCell(jTemplate, formulaInfos); } /** @@ -65,8 +76,9 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { * @param formulaInfos 指定添加信息的数组 */ @Override - public void searchFormulaFromCell(JTemplate jTemplate, ArrayList formulaInfos) { - SearchCellAction searchCellAction = new SearchCellAction(jTemplate); + public void searchFormulaFromCell(JTemplate jTemplate, List formulaInfos) { + SearchCellAction searchCellAction = SearchCellAction.getInstance(); + searchCellAction.search4Infos(jTemplate); if (searchCellAction.isCellInfosExist()) { for (CellInfo cellInfo : searchCellAction.getCellInfos()) { //根据单元格类型的不同来进行不同的操作 @@ -92,39 +104,42 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { } - private void searchCellHyperLink4Formula(CellInfo cellInfo, ArrayList formulaInfos) { + private void searchCellHyperLink4Formula(CellInfo cellInfo, List formulaInfos) { NameJavaScriptGroup nameJavaScriptGroup = ((CellElement) cellInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); if (nameJavaScriptGroup != null) { for (int i = 0; i < nameJavaScriptGroup.size(); i++) { SearchJSHighlightAction action = new SearchJSHighlightAction(); - action.searchJSFormulaFromOther(formulaInfos, cellInfo.getContent(), nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); + ITContent content = ITContent.copy(cellInfo.getContent()); + content.addOtherPos(nameJavaScriptGroup.getNameHyperlink(i).getName()); + action.searchJSFormulaFromOther(formulaInfos, content, nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); } } } - private void searchCellHighlightPara4Formula(CellInfo cellInfo, ArrayList formulaInfos) { - if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null) { + private void searchCellHighlightPara4Formula(CellInfo cellInfo, List formulaInfos) { + if (isHighlightGroupEmpty(cellInfo)) { HighlightGroup highlightGroup = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup(); for (int i = 0; i < highlightGroup.size(); i++) { for (int j = 0; j < ((DefaultHighlight) highlightGroup.getHighlight(i)).actionCount(); j++) { HighlightAction highlightAction = ((DefaultHighlight) highlightGroup.getHighlight(i)).getHighlightAction(j); //处理HighlightAction SearchHighlightFormulaAction searchHighlightAction = new SearchHighlightFormulaAction(); - ITContent newContent = cellInfo.getContent().copy(); + ITContent newContent = ITContent.copy(cellInfo.getContent()); searchHighlightAction.dealWithHighlightAction(newContent, formulaInfos, highlightAction); } } } } - private void searchCellConditionPara4Formula(CellInfo cellInfo, ArrayList formulaInfos) { - if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null) { + private void searchCellConditionPara4Formula(CellInfo cellInfo, List formulaInfos) { + if (isHighlightGroupEmpty(cellInfo)) { HighlightGroup highlightGroup = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup(); for (int i = 0; i < highlightGroup.size(); i++) { - if (conditionHashMap.containsKey(((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition().getClass().getSimpleName())) { + DefaultHighlight defaultHighlight = (DefaultHighlight) highlightGroup.getHighlight(i); + if (isConditionKeyExist(defaultHighlight.getCondition())) { SearchConditionFormula searchCondition = conditionHashMap.get(((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition().getClass().getSimpleName()); - ITContent newContent = cellInfo.getContent().copy(); + ITContent newContent = ITContent.copy(cellInfo.getContent()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), Toolkit.i18nText("Fine-Design_Basic_Formula")); @@ -134,22 +149,43 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { } } - private void searchCellPresent4Formula(CellInfo cellInfo, ArrayList formulaInfos) { - if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() != null - && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() instanceof FormulaPresent) { - ITContent newContent = cellInfo.getContent().copy(); + private boolean isHighlightGroupEmpty(CellInfo cellInfo) { + return ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null; + } + + private boolean isConditionKeyExist(Condition condition) { + return conditionHashMap.containsKey(condition.getClass().getSimpleName()); + } + + + private void searchCellPresent4Formula(CellInfo cellInfo, List formulaInfos) { + if (isFormulaPresentValid(cellInfo)) { + ITContent newContent = ITContent.copy(cellInfo.getContent()); newContent.setReplaceObject((((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent())); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), Toolkit.i18nText("Fine-Design_Report_Present")); formulaInfos.add(new FormulaInfo(newContent)); } + if (isDictPresentValid(cellInfo)) { + ITContent dictContent = ITContent.copy(cellInfo.getContent()); + dictContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), + Toolkit.i18nText("Fine-Design_Report_Present") + ); + DictPresent present = (DictPresent) ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent(); + if (present.getDictionary() != null) { + DictionaryType type = DictionaryType.match(present.getDictionary().getClass().getSimpleName()); + if (type != null) { + type.searchFormulaFromDictionary(dictContent, formulaInfos, present.getDictionary()); + } + } + } } - private void searchCellInsertPolicy4Formula(CellInfo cellInfo, ArrayList formulaInfos) { - if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr() != null - && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr().getDefaultInsertValue() instanceof Formula) { - ITContent newContent = cellInfo.getContent().copy(); + private void searchCellInsertPolicy4Formula(CellInfo cellInfo, List formulaInfos) { + if (isInsertPolicyValid(cellInfo)) { + ITContent newContent = ITContent.copy(cellInfo.getContent()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), Toolkit.i18nText("Fine-Design_Report_Other"), @@ -159,14 +195,29 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { } } + private boolean isFormulaPresentValid(CellInfo cellInfo) { + return ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() != null + && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() instanceof FormulaPresent; + } + + private boolean isDictPresentValid(CellInfo cellInfo) { + return ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() != null + && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getPresent() instanceof DictPresent; + } - private void searchCellSortAttr4Formula(CellInfo cellInfo, ArrayList formulaInfos) { - if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellExpandAttr() != null) { + private boolean isInsertPolicyValid(CellInfo cellInfo) { + return ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr() != null + && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellInsertPolicyAttr().getDefaultInsertValue() instanceof Formula; + } + + + private void searchCellSortAttr4Formula(CellInfo cellInfo, List formulaInfos) { + if (isSortAttrValid(cellInfo)) { CellSortAttr sortAttr = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellExpandAttr().getCellSortAttr(); if (isSortAttrExist(sortAttr)) { for (SortExpression sortExpression : sortAttr.getSortExpressions()) { if (sortExpression instanceof FormulaSortExpression) { - ITContent newContent = cellInfo.getContent().copy(); + ITContent newContent = ITContent.copy(cellInfo.getContent()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Cell_Attributes"), Toolkit.i18nText("Fine-Design_Report_Expand"), @@ -185,14 +236,63 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction { return sortAttr != null && sortAttr.getSortExpressions() != null; } - private void searchFormulaFromCellInfo(CellInfo cellInfo, ArrayList formulaInfos) { - if (((CellElement) (cellInfo.getContent().getReplaceObject())).getValue() != null - && cellType.containsKey(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName())) { + private boolean isSortAttrValid(CellInfo cellInfo) { + return ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getCellExpandAttr() != null; + } + + private void searchFormulaFromCellInfo(CellInfo cellInfo, List formulaInfos) { + if (isCellValueValid(cellInfo)) { SearchCellFormula searchCellFormula = cellType.get(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName()); searchCellFormula.searchFormulaFromCellType(formulaInfos, cellInfo.getContent()); - + } else if (isChart(cellInfo)) { + ITContent chartContent = cellInfo.getContent(); + //这边置否的原因是决策报表里面单元格里面放的图表是可以有多个的,每个还是有各自的名字,和普通报表一样处理即可 + chartContent.setFrmFlag(false); + SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, cellInfo.getContent(), (ChartCollection) ((CellElement) (cellInfo.getContent().getReplaceObject())).getValue()); } } + private boolean isChart(CellInfo cellInfo) { + return ((CellElement) (cellInfo.getContent().getReplaceObject())).getValue() != null + && ((CellElement) (cellInfo.getContent().getReplaceObject())).getValue() instanceof ChartCollection; + } + + private boolean isCellValueValid(CellInfo cellInfo) { + return ((CellElement) (cellInfo.getContent().getReplaceObject())).getValue() != null + && cellType.containsKey(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName()); + } + + /** + * 获取单例 + * + * @return + */ + public static SearchCellFormulaAction getInstance() { + return SearchCellFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * SearchCellFormulaAction 的单例 + */ + enum SearchCellFormulaActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchCellFormulaAction instance; + + SearchCellFormulaActionEnum() { + instance = new SearchCellFormulaAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchCellFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java index 75e2083cf..d857ecc7e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java @@ -5,7 +5,7 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.report.cell.CellElement; -import java.util.ArrayList; +import java.util.List; /** * 查找公式时单元格格式如果是公式类型则操作此类 @@ -14,13 +14,13 @@ import java.util.ArrayList; * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ -public class SearchCellFormulaTypeAction extends AbstractSearchCellFormulaAction { +public class SearchCellFormulaTypeAction implements SearchCellFormula { @Override - public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { - ITContent newContent = content.copy(); - newContent.setReplaceObject(((CellElement)(content.getReplaceObject())).getValue()); + public void searchFormulaFromCellType(List formulaInfos, ITContent content) { + ITContent newContent = ITContent.copy(content); + newContent.setReplaceObject(((CellElement) (content.getReplaceObject())).getValue()); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Formula")); formulaInfos.add(new FormulaInfo(newContent)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java index baa2e1ec6..aee5e7578 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java @@ -2,7 +2,6 @@ package com.fr.design.actions.replace.action.content.formula.cell; import com.fr.base.Formula; import com.fr.base.Parameter; -import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction; @@ -11,12 +10,14 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.general.data.Condition; +import com.fr.report.cell.CellElement; import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.core.sort.sortexpression.FormulaSortExpression; import com.fr.report.core.sort.sortexpression.SortExpression; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * 查找公式时单元格格式如果是数据列型则操作此类 @@ -25,39 +26,41 @@ import java.util.HashMap; * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ -public class SearchDSColumnFormulaAction extends AbstractSearchCellFormulaAction { +public class SearchDSColumnFormulaAction implements SearchCellFormula { public static HashMap conditionHashMap = new HashMap<>(); + static { - conditionHashMap.put("FormulaCondition",new SearchFormulaConditionAction()); - conditionHashMap.put("CommonCondition",new SearchCommonConditionAction()); - conditionHashMap.put("ListCondition",new SearchListConditionAction()); + conditionHashMap.put("FormulaCondition", new SearchFormulaConditionAction()); + conditionHashMap.put("CommonCondition", new SearchCommonConditionAction()); + conditionHashMap.put("ListCondition", new SearchListConditionAction()); } @Override - public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent itContent) { - if (itContent.getContentObject().getCell().getValue() instanceof DSColumn){ - if (((DSColumn) itContent.getContentObject().getCell().getValue()).getCondition() != null){ - ITContent content = itContent.copy(); + public void searchFormulaFromCellType(List formulaInfos, ITContent itContent) { + if (((CellElement) (itContent.getReplaceObject())).getValue() instanceof DSColumn) { + if (((DSColumn) ((CellElement) (itContent.getReplaceObject())).getValue()).getCondition() != null) { + ITContent content = ITContent.copy(itContent); //数据列 content.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_DS_Column")); - DSColumn dsColumn = ((DSColumn) itContent.getContentObject().getCell().getValue()); + DSColumn dsColumn = (DSColumn) ((CellElement) (itContent.getReplaceObject())).getValue(); //过滤条件中的公式 - addFormulaInfos2ArrayFromCondition(content,dsColumn.getCondition(), formulaInfos); + addFormulaInfos2ArrayFromCondition(content, dsColumn.getCondition(), formulaInfos); //动态参数中的公式 - addFormulaInfos2ArrayFromPara(content,dsColumn,formulaInfos); + addFormulaInfos2ArrayFromPara(content, dsColumn, formulaInfos); //高级-排序中的公式 - addFormulaInfos2ArrayFromSortExpression(content,dsColumn,formulaInfos); + addFormulaInfos2ArrayFromSortExpression(content, dsColumn, formulaInfos); //高级-显示值中的公式 - addFormulaInfos2ArrayFromResult(content,dsColumn,formulaInfos); + addFormulaInfos2ArrayFromResult(content, dsColumn, formulaInfos); } } } - private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, ArrayList formulaInfos) { - if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == '='){ - ITContent newContent =content.copy(); + + private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, List formulaInfos) { + if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == '=') { + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dsColumn); //高级-显示值 newContent.addOtherPos( @@ -69,17 +72,16 @@ public class SearchDSColumnFormulaAction extends AbstractSearchCellFormulaAction } - private void addFormulaInfos2ArrayFromSortExpression(ITContent content, DSColumn dsColumn, ArrayList formulaInfos) { - if (dsColumn.getCellSortAttr() != null && dsColumn.getCellSortAttr().getSortExpressions() != null){ - for (SortExpression sortExpression : dsColumn.getCellSortAttr().getSortExpressions()){ - if (sortExpression instanceof FormulaSortExpression){ - ITContent newContent =content.copy(); + private void addFormulaInfos2ArrayFromSortExpression(ITContent content, DSColumn dsColumn, List formulaInfos) { + if (dsColumn.getCellSortAttr() != null && dsColumn.getCellSortAttr().getSortExpressions() != null) { + for (SortExpression sortExpression : dsColumn.getCellSortAttr().getSortExpressions()) { + if (sortExpression instanceof FormulaSortExpression) { + ITContent newContent = ITContent.copy(content); //高级-排序 newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Advanced"), Toolkit.i18nText("Fine-Design_Basic_Action_Sort") ); - newContent.getContentObject().setSortExpression((FormulaSortExpression) sortExpression); newContent.setReplaceObject(sortExpression); formulaInfos.add(new FormulaInfo(newContent)); @@ -89,13 +91,12 @@ public class SearchDSColumnFormulaAction extends AbstractSearchCellFormulaAction } } - private void addFormulaInfos2ArrayFromPara(ITContent content, DSColumn dsColumn, ArrayList formulaInfos) { - for (Parameter parameter : dsColumn.getParameters()){ - if (parameter.getValue() instanceof Formula){ - ITContent newContent = content.copy(); + private void addFormulaInfos2ArrayFromPara(ITContent content, DSColumn dsColumn, List formulaInfos) { + for (Parameter parameter : dsColumn.getParameters()) { + if (parameter.getValue() instanceof Formula) { + ITContent newContent = ITContent.copy(content); //动态参数注入 newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_TableData_Dynamic_Parameter_Setting")); - newContent.getContentObject().setFormula((Formula) parameter.getValue()); newContent.setReplaceObject(parameter.getValue()); formulaInfos.add(new FormulaInfo(newContent)); } @@ -105,13 +106,13 @@ public class SearchDSColumnFormulaAction extends AbstractSearchCellFormulaAction /** * 数据列过滤条件中的公式 */ - private void addFormulaInfos2ArrayFromCondition(ITContent content, Condition condition, ArrayList formulaInfos){ + private void addFormulaInfos2ArrayFromCondition(ITContent content, Condition condition, List formulaInfos) { //这边condition有三种情况:FormulaCondition、CommonCondition、ListCondition,分别处理 SearchConditionFormula searchCondition = conditionHashMap.get(condition.getClass().getSimpleName()); - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); //过滤条件 newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Filter_Conditions")); - searchCondition.searchFormulaFromCondition(formulaInfos, newContent,condition); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent, condition); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java index db1c97923..80c85158e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java @@ -1,31 +1,31 @@ package com.fr.design.actions.replace.action.content.formula.cell; -import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.report.cell.CellElement; import com.fr.report.cell.cellattr.core.RichText; -import java.util.ArrayList; +import java.util.List; /** * 搜索单元格富文本类型的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ -public class SearchRichFormulaAction extends AbstractSearchCellFormulaAction { +public class SearchRichFormulaAction implements SearchCellFormula { @Override - public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { + public void searchFormulaFromCellType(List formulaInfos, ITContent content) { //todo 富文本这边直接遍历RichChar来拿公式 - if (((RichText)((CellElement)(content.getReplaceObject())).getValue()).getContent().contains("${")){ - ITContent newContent =content.copy(); - newContent.setReplaceObject(((CellElement)(content.getReplaceObject())).getValue()); + if (((RichText) ((CellElement) (content.getReplaceObject())).getValue()).getContent().contains("${")) { + ITContent newContent = ITContent.copy(content); + newContent.setReplaceObject(((CellElement) (content.getReplaceObject())).getValue()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Chart_Rich_Text"), Toolkit.i18nText("Fine-Design_Basic_Formula") - ); + ); formulaInfos.add(new FormulaInfo(newContent)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java index 66e9802a0..758b7a638 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java @@ -2,14 +2,13 @@ package com.fr.design.actions.replace.action.content.formula.cell; import com.fr.base.Formula; import com.fr.base.core.KV; -import com.fr.design.actions.replace.action.content.formula.AbstractSearchFormulaAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.report.cell.CellElement; import com.fr.report.cell.cellattr.core.SubReport; -import java.util.ArrayList; +import java.util.List; /** * 搜索单元格子报表类型的公式 @@ -18,13 +17,13 @@ import java.util.ArrayList; * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ -public class SearchSubReportFormulaAction extends AbstractSearchCellFormulaAction { +public class SearchSubReportFormulaAction implements SearchCellFormula { @Override - public void searchFormulaFromCellType(ArrayList formulaInfos, ITContent content) { + public void searchFormulaFromCellType(List formulaInfos, ITContent content) { KV[] kvs = ((SubReport) (((CellElement) content.getReplaceObject()).getValue())).getParameterKVS(); for (KV kv : kvs) { if (kv.getValue() instanceof Formula) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Sub_Report_Parameter")); newContent.setReplaceObject(kv); formulaInfos.add(new FormulaInfo(newContent)); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java index 0a30bc39c..c2157241b 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java @@ -13,116 +13,128 @@ import com.fr.plugin.chart.attr.axis.VanChartAlertValue; import com.fr.plugin.chart.attr.axis.VanChartAxis; import com.fr.plugin.chart.attr.axis.VanChartValueAxis; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** * 图表类型获取公式汇总 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-12 */ public class SearchChartCollectionFormulaAction { - public SearchChartCollectionFormulaAction(ArrayList formulaInfos, ITContent content, ChartCollection chartCollection) { - for (int i = 0 ; i < chartCollection.getChartCount() ;i ++){ - ITContent chartContent =content.copy(); - SearchChartPatternFormula(formulaInfos,chartContent,chartCollection.getChart(i)); + + public SearchChartCollectionFormulaAction() { + } + + /** + * 搜索图表中的公式 + * + * @param formulaInfos + * @param content + * @param chartCollection + */ + public void searchChartCollectionFormula(List formulaInfos, ITContent content, ChartCollection chartCollection) { + for (int i = 0; i < chartCollection.getChartCount(); i++) { + ITContent chartContent = ITContent.copy(content); + searchChartPatternFormula(formulaInfos, chartContent, chartCollection.getChart(i)); //数据-单元格数据-分类名&系列名&值 - SearchChartDataFormula(formulaInfos,content,chartCollection.getChart(i)); + searchChartDataFormula(formulaInfos, content, chartCollection.getChart(i)); } - } - private void SearchChartDataFormula(ArrayList formulaInfos, ITContent content, Chart chart) { - if (chart.defaultChartData() instanceof NormalChartData){ + + private void searchChartDataFormula(List formulaInfos, ITContent content, Chart chart) { + if (chart.defaultChartData() instanceof NormalChartData) { NormalChartData chartData = (NormalChartData) chart.defaultChartData(); //todo } } - private void SearchChartPatternFormula(ArrayList formulaInfos, ITContent chartContent, Chart chart){ + private void searchChartPatternFormula(List formulaInfos, ITContent chartContent, Chart chart) { //样式-标题 - SearchChartPatternFormulaFromTitle(formulaInfos, chartContent, chart); + searchChartPatternFormulaFromTitle(formulaInfos, chartContent, chart); //样式-坐标轴-值定义&样式-坐标轴-轴标题 - SearchChartPatternFormulaFromAxisValue(formulaInfos, chartContent, chart); + searchChartPatternFormulaFromAxisValue(formulaInfos, chartContent, chart); //样式-背景-警戒线 - SearchChartPatternFormulaFromAlertLine(formulaInfos,chartContent,chart); + searchChartPatternFormulaFromAlertLine(formulaInfos, chartContent, chart); } - private void SearchChartPatternFormulaFromAlertLine(ArrayList formulaInfos, ITContent chartContent, Chart chart) { + private void searchChartPatternFormulaFromAlertLine(List formulaInfos, ITContent chartContent, Chart chart) { Axis xAxis = chart.getPlot().getxAxis(); Axis yAxis = chart.getPlot().getyAxis(); - ITContent content = chartContent.copy(); + ITContent content = ITContent.copy(chartContent); content.addOtherPos( Toolkit.i18nText("Fine-Design_Chart_Pattern"), Toolkit.i18nText("Fine-Design_Chart_Background"), Toolkit.i18nText("Fine-Design_Chart_Plot_Region"), Toolkit.i18nText("Fine-Design_Chart_Alert_Line") ); - if (xAxis instanceof VanChartAxis){ + if (xAxis instanceof VanChartAxis) { List list = ((VanChartAxis) xAxis).getAlertValues(); - for (VanChartAlertValue alertValue : list){ + for (VanChartAlertValue alertValue : list) { //警戒线设置 - dealAlertValue(formulaInfos,content,alertValue); + dealAlertValue(formulaInfos, content, alertValue); //提示文字 - dealAlertContent(formulaInfos,content,alertValue); + dealAlertContent(formulaInfos, content, alertValue); } } - if (yAxis instanceof VanChartAxis){ + if (yAxis instanceof VanChartAxis) { List list = ((VanChartAxis) yAxis).getAlertValues(); - for (VanChartAlertValue alertValue : list){ + for (VanChartAlertValue alertValue : list) { //警戒线设置 - dealAlertValue(formulaInfos,content,alertValue); + dealAlertValue(formulaInfos, content, alertValue); //提示文字 - dealAlertContent(formulaInfos,content,alertValue); + dealAlertContent(formulaInfos, content, alertValue); } } } - private void dealAlertContent(ArrayList formulaInfos, ITContent content, VanChartAlertValue alertValue) { - if (alertValue.getAlertContentFormula() != null){ - ITContent alertContent = content.copy(); + private void dealAlertContent(List formulaInfos, ITContent content, VanChartAlertValue alertValue) { + if (alertValue.getAlertContentFormula() != null) { + ITContent alertContent = ITContent.copy(content); alertContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Alert_Text")); alertContent.setReplaceObject(alertValue.getAlertContentFormula()); formulaInfos.add(new FormulaInfo(alertContent)); } } - private void dealAlertValue(ArrayList formulaInfos, ITContent content, VanChartAlertValue alertValue) { - if (alertValue.getAlertValueFormula() != null){ - ITContent valueContent = content.copy(); + private void dealAlertValue(List formulaInfos, ITContent content, VanChartAlertValue alertValue) { + if (alertValue.getAlertValueFormula() != null) { + ITContent valueContent = ITContent.copy(content); valueContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Alert_Set")); valueContent.setReplaceObject(alertValue.getAlertValueFormula()); formulaInfos.add(new FormulaInfo(valueContent)); } } - private void SearchChartPatternFormulaFromAxisValue(ArrayList formulaInfos, ITContent chartContent, Chart chart) { + private void searchChartPatternFormulaFromAxisValue(List formulaInfos, ITContent chartContent, Chart chart) { Axis xAxis = chart.getPlot().getxAxis(); Axis yAxis = chart.getPlot().getyAxis(); //样式-坐标轴-x轴 - if (xAxis!= null){ + if (xAxis != null) { //轴标题 - ITContent xAxisContent = chartContent.copy(); + ITContent xAxisContent = ITContent.copy(chartContent); + if (!chartContent.isFrm()){ + xAxisContent.addOtherPos(chart.getChartName()); + } xAxisContent.addOtherPos( - chart.getChartName(), Toolkit.i18nText("Fine-Design_Chart_Pattern"), Toolkit.i18nText("Fine-Design_Chart_Axis"), Toolkit.i18nText("Fine-Design_Chart_X_Axis") ); - dealTitle(formulaInfos, xAxisContent,xAxis.getTitle()); - dealChartValueDefine(formulaInfos, xAxisContent,xAxis); + dealTitle(formulaInfos, xAxisContent, xAxis.getTitle()); + dealChartValueDefine(formulaInfos, xAxisContent, xAxis); } //样式-坐标轴-y轴-轴标题 - if (yAxis !=null){ - ITContent yAxisContent = chartContent.copy(); + if (yAxis != null) { + ITContent yAxisContent = ITContent.copy(chartContent); yAxisContent.addOtherPos( chart.getChartName(), Toolkit.i18nText("Fine-Design_Chart_Pattern"), @@ -130,30 +142,29 @@ public class SearchChartCollectionFormulaAction { Toolkit.i18nText("Fine-Design_Chart_Y_Axis") ); - dealTitle(formulaInfos,yAxisContent,yAxis.getTitle()); - dealChartValueDefine(formulaInfos,yAxisContent,yAxis); + dealTitle(formulaInfos, yAxisContent, yAxis.getTitle()); + dealChartValueDefine(formulaInfos, yAxisContent, yAxis); } - } - private void dealChartValueDefine(ArrayList formulaInfos, ITContent axisContent, Axis axis) { - ITContent content = axisContent.copy(); + private void dealChartValueDefine(List formulaInfos, ITContent axisContent, Axis axis) { + ITContent content = ITContent.copy(axisContent); content.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Value_Define")); //自定义最大值最小值 - dealChartMaxAndMinValue(formulaInfos,content,axis); + dealChartMaxAndMinValue(formulaInfos, content, axis); //自定义主次刻度 - dealChartMainAndSecUnit(formulaInfos,content,axis); + dealChartMainAndSecUnit(formulaInfos, content, axis); //自定义对数底数 - dealChartLogBase(formulaInfos,content,axis); + dealChartLogBase(formulaInfos, content, axis); } - private void dealChartLogBase(ArrayList formulaInfos, ITContent content, Axis axis) { - if (axis instanceof VanChartValueAxis){ - if (axis.isLog() && ((VanChartValueAxis) axis).getLogBase() != null){ - ITContent logContent =content.copy(); + private void dealChartLogBase(List formulaInfos, ITContent content, Axis axis) { + if (axis instanceof VanChartValueAxis) { + if (axis.isLog() && ((VanChartValueAxis) axis).getLogBase() != null) { + ITContent logContent = ITContent.copy(content); logContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_LogBase_Value")); logContent.setReplaceObject(((VanChartValueAxis) axis).getLogBase()); formulaInfos.add(new FormulaInfo(logContent)); @@ -161,53 +172,88 @@ public class SearchChartCollectionFormulaAction { } } - private void dealChartMainAndSecUnit(ArrayList formulaInfos, ITContent content, Axis axis) { - if (axis.isCustomMainUnit() && axis.getMainUnit() != null){ - ITContent mainContent = content.copy(); + private void dealChartMainAndSecUnit(List formulaInfos, ITContent content, Axis axis) { + if (axis.isCustomMainUnit() && axis.getMainUnit() != null) { + ITContent mainContent = ITContent.copy(content); mainContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Main_Type")); mainContent.setReplaceObject(axis.getMainUnit()); formulaInfos.add(new FormulaInfo(mainContent)); } - if (axis.isCustomSecUnit() && axis.getSecUnit() != null){ - ITContent secContent = content.copy(); + if (axis.isCustomSecUnit() && axis.getSecUnit() != null) { + ITContent secContent = ITContent.copy(content); secContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Second_Type")); secContent.setReplaceObject(axis.getSecUnit()); formulaInfos.add(new FormulaInfo(secContent)); } } - private void dealChartMaxAndMinValue(ArrayList formulaInfos, ITContent axisContent, Axis axis) { - if (axis.isCustomMaxValue() && axis.getMaxValue() != null){ - ITContent maxContent = axisContent.copy(); + private void dealChartMaxAndMinValue(List formulaInfos, ITContent axisContent, Axis axis) { + if (axis.isCustomMaxValue() && axis.getMaxValue() != null) { + ITContent maxContent = ITContent.copy(axisContent); maxContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Max_Value")); maxContent.setReplaceObject(axis.getMaxValue()); formulaInfos.add(new FormulaInfo(maxContent)); } - if (axis.isCustomMinValue() && axis.getMinValue() != null){ - ITContent minContent = axisContent.copy(); + if (axis.isCustomMinValue() && axis.getMinValue() != null) { + ITContent minContent = ITContent.copy(axisContent); minContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Custom_Min_Value")); minContent.setReplaceObject(axis.getMinValue()); formulaInfos.add(new FormulaInfo(minContent)); } } - private void SearchChartPatternFormulaFromTitle(ArrayList formulaInfos, ITContent chartContent, Chart chart){ + private void searchChartPatternFormulaFromTitle(List formulaInfos, ITContent chartContent, Chart chart) { //样式-标题 - ITContent titleContent = chartContent.copy(); + ITContent titleContent = ITContent.copy(chartContent); titleContent.addOtherPos( chart.getChartName(), Toolkit.i18nText("Fine-Design_Chart_Pattern") ); - dealTitle(formulaInfos,titleContent,chart.getTitle()); + dealTitle(formulaInfos, titleContent, chart.getTitle()); } - private void dealTitle(ArrayList formulaInfos, ITContent chartContent, Title title) { - if (title !=null && title.getTextObject() instanceof Formula){ - ITContent content = chartContent.copy(); + private void dealTitle(List formulaInfos, ITContent chartContent, Title title) { + if (title != null && title.getTextObject() instanceof Formula) { + ITContent content = ITContent.copy(chartContent); content.addOtherPos(Toolkit.i18nText("Fine-Design_Form_Title")); content.setReplaceObject(title.getTextObject()); formulaInfos.add(new FormulaInfo(content)); } } + + + /** + * 对外开放获取对象的方法 + * + * @return + */ + public static SearchChartCollectionFormulaAction getInstance() { + return SearchChartCollectionFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchChartCollectionFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchChartCollectionFormulaAction instance; + + SearchChartCollectionFormulaActionEnum() { + instance = new SearchChartCollectionFormulaAction(); + } + + /** + * 获取单例的方法 + * + * @return + */ + public SearchChartCollectionFormulaAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java deleted file mode 100644 index 108b1b66d..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.data; - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-26 - */ -public abstract class AbstractSearchDataFormulaAction implements SearchDataFormula{ - - @Override - public void searchFormulaFromData(JTemplate jTemplate,ArrayList fomulaInfos) { - - } - - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return null; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java index 3ed0b432d..f8ea44cd7 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java @@ -11,9 +11,9 @@ import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; import java.util.ArrayList; +import java.util.List; /** - * * 分别对不同类型的数据集进行获取公式处理 * 暂不支持ClassTableData(用户自定义数据集)、FileTableData(用户自定义数据集),EmbeddedTableData(无公式) * @@ -21,16 +21,16 @@ import java.util.ArrayList; * @version 11.0 * created by Destiny.Lin on 2022-08-26 */ -public enum DataType { +public enum DataType { /** * 数据库查询 */ - DB_TABLE_DATA("DBTableData"){ + DB_TABLE_DATA("DBTableData") { @Override - public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { - if (((DBTableData)tableData).getParameters() != null){ - for (ParameterProvider provider : ((DBTableData)tableData).getParameters()){ - dealProvider(provider,content,fomulaInfos); + public void searchFormula(TableData tableData, ITContent content, List fomulaInfos) { + if (((DBTableData) tableData).getParameters() != null) { + for (ParameterProvider provider : ((DBTableData) tableData).getParameters()) { + dealProvider(provider, content, fomulaInfos); } } } @@ -39,12 +39,12 @@ public enum DataType { /** * 存储过程 */ - STORE_PROCEDURE("StoreProcedure"){ + STORE_PROCEDURE("StoreProcedure") { @Override - public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { - if (((StoreProcedure)tableData).getParameters() != null){ - for (ParameterProvider provider : ((StoreProcedure)tableData).getParameters()){ - dealProvider(provider,content,fomulaInfos); + public void searchFormula(TableData tableData, ITContent content, List fomulaInfos) { + if (((StoreProcedure) tableData).getParameters() != null) { + for (ParameterProvider provider : ((StoreProcedure) tableData).getParameters()) { + dealProvider(provider, content, fomulaInfos); } } @@ -53,12 +53,12 @@ public enum DataType { /** * 关联数据集 */ - CONDITION_TABLE_DATA("ConditionTableData"){ + CONDITION_TABLE_DATA("ConditionTableData") { @Override - public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { - if (((ConditionTableData)tableData).getDefineParameters() != null){ - for (ParameterProvider provider : ((ConditionTableData)tableData).getDefineParameters()){ - dealProvider(provider,content,fomulaInfos); + public void searchFormula(TableData tableData, ITContent content, List fomulaInfos) { + if (((ConditionTableData) tableData).getDefineParameters() != null) { + for (ParameterProvider provider : ((ConditionTableData) tableData).getDefineParameters()) { + dealProvider(provider, content, fomulaInfos); } } } @@ -66,12 +66,12 @@ public enum DataType { /** * 树数据集 */ - RECURSION_TABLE_DATA("RecursionTableData"){ + RECURSION_TABLE_DATA("RecursionTableData") { @Override - public void searchFormula(TableData tableData, ITContent content, ArrayList fomulaInfos) { - if (((RecursionTableData)tableData).getParameters() != null){ - for (ParameterProvider provider : ((RecursionTableData)tableData).getParameters()){ - dealProvider(provider,content,fomulaInfos); + public void searchFormula(TableData tableData, ITContent content, List fomulaInfos) { + if (((RecursionTableData) tableData).getParameters() != null) { + for (ParameterProvider provider : ((RecursionTableData) tableData).getParameters()) { + dealProvider(provider, content, fomulaInfos); } } } @@ -79,19 +79,21 @@ public enum DataType { String name; + DataType(String name) { this.name = name; } /** * 处理参数 + * * @param provider * @param content * @param formulaInfos */ - public void dealProvider(ParameterProvider provider, ITContent content, ArrayList formulaInfos) { - if (provider .getValue()instanceof Formula && !StringUtils.isEmpty((((Formula) provider.getValue())).getContent() )){ - ITContent newContent = content.copy(); + public void dealProvider(ParameterProvider provider, ITContent content, List formulaInfos) { + if (provider.getValue() instanceof Formula && !StringUtils.isEmpty((((Formula) provider.getValue())).getContent())) { + ITContent newContent = ITContent.copy(content); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter")); newContent.setReplaceObject(provider); formulaInfos.add(new FormulaInfo(newContent)); @@ -100,13 +102,14 @@ public enum DataType { /** * 匹配 + * * @param name * @return */ - public static DataType match(String name){ + public static DataType match(String name) { DataType[] values = DataType.values(); for (DataType value : values) { - if(value.name.equals(name)){ + if (value.name.equals(name)) { return value; } } @@ -115,10 +118,11 @@ public enum DataType { /** * 从数据集中获取公式 + * * @param tableData * @param content - * @param fomulaInfos + * @param formulaInfos */ - void searchFormula(TableData tableData, ITContent content , ArrayList fomulaInfos){} + abstract void searchFormula(TableData tableData, ITContent content, List formulaInfos); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java deleted file mode 100644 index 4d93f604b..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.data; - -import com.fr.design.actions.replace.action.content.formula.SearchFormula; -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-26 - */ -public interface SearchDataFormula extends SearchFormula { - /** - * 从数据集类型中去获取公式 - * @param jTemplate - * @param fomulaInfos - */ - void searchFormulaFromData(JTemplate jTemplate, ArrayList fomulaInfos); -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java index 31f04705e..bf58d26ed 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java @@ -2,6 +2,8 @@ package com.fr.design.actions.replace.action.content.formula.data; import com.fr.data.TableDataSource; import com.fr.data.impl.DBTableData; +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.SQLInfo; import com.fr.design.actions.replace.info.base.ITContent; @@ -13,29 +15,32 @@ import com.fr.main.impl.WorkBook; import java.util.ArrayList; import java.util.Iterator; +import java.util.List; /** + * 搜索数据集中的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-26 */ -public class SearchDataFormulaAction extends AbstractSearchDataFormulaAction{ +public class SearchDataFormulaAction implements SearchFormula { - public SearchDataFormulaAction(JTemplate jTemplate, ArrayList fomulaInfos){ - searchFormulaFromData(jTemplate,fomulaInfos); + + private SearchDataFormulaAction() { } - @Override - public void searchFormulaFromData(JTemplate jTemplate, ArrayList fomulaInfos) { + + @Override + public void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { //模板数据集 - dealTemplateData(jTemplate,fomulaInfos); + dealTemplateData(jTemplate, formulaInfos); //服务器数据集 - dealServerData(fomulaInfos); - + dealServerData(formulaInfos); } - private void dealServerData(ArrayList fomulaInfos) { + private void dealServerData(List fomulaInfos) { TableDataConfig tableDataConfig = TableDataConfig.getInstance(); String[] nameArray = TableDataFactory.getSortOfChineseNameOfServerData(tableDataConfig); for (String dataName : nameArray) { @@ -46,17 +51,17 @@ public class SearchDataFormulaAction extends AbstractSearchDataFormulaAction{ ); content.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData")); DataType dataType = DataType.match(tableDataConfig.getTableData(dataName).getClass().getSimpleName()); - if (dataType != null){ - dataType.searchFormula(tableDataConfig.getTableData(dataName),content,fomulaInfos); + if (dataType != null) { + dataType.searchFormula(tableDataConfig.getTableData(dataName), content, fomulaInfos); } } } - private void dealTemplateData(JTemplate jTemplate, ArrayList fomulaInfos) { - if (jTemplate.getTarget() instanceof TableDataSource){ + private void dealTemplateData(JTemplate jTemplate, List fomulaInfos) { + if (jTemplate.getTarget() instanceof TableDataSource) { TableDataSource source = (TableDataSource) jTemplate.getTarget(); Iterator dataIterator = source.getTableDataNameIterator(); - while (dataIterator.hasNext()){ + while (dataIterator.hasNext()) { String dataName = (String) dataIterator.next(); ITContent content = new ITContent(); content.setTemplateName(jTemplate.getTemplateName()); @@ -66,10 +71,43 @@ public class SearchDataFormulaAction extends AbstractSearchDataFormulaAction{ ); content.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData")); DataType dataType = DataType.match(source.getTableData(dataName).getClass().getSimpleName()); - if (dataType != null){ - dataType.searchFormula(source.getTableData(dataName),content,fomulaInfos); + if (dataType != null) { + dataType.searchFormula(source.getTableData(dataName), content, fomulaInfos); } } } } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchDataFormulaAction getInstance() { + return SearchDataFormulaAction.SearchDataFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchDataFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchDataFormulaAction instance; + + SearchDataFormulaActionEnum() { + instance = new SearchDataFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchDataFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java deleted file mode 100644 index f4dff5362..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.floatelement; - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-09-12 - */ -public abstract class AbstractSearchFloatFormula implements SearchFloatFormula{ - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return new ArrayList<>(); - } - - -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java index 6e5db9fee..f9f31d5a4 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java @@ -7,8 +7,11 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.mainframe.JTemplate; import java.util.ArrayList; +import java.util.List; /** + * 搜索悬浮元素的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-12 @@ -21,7 +24,7 @@ public interface SearchFloatFormula extends SearchFormula { * @param floatInfo FloatInfo信息 * @param formulaInfos 要存储对应信息列表的数据结构 */ - void searchFormulaFromFloat(ArrayList formulaInfos, FloatInfo floatInfo); + void searchFormulaFromCommonFloat(List formulaInfos, FloatInfo floatInfo); /** * 查找不同悬浮元素内容类型各自可能存在的公式 @@ -29,5 +32,5 @@ public interface SearchFloatFormula extends SearchFormula { * @param formulaInfos 要存储对应信息列表的数据结构 * @param floatInfo FloatInfo信息 */ - void searchFormulaFromFloatType(ArrayList formulaInfos, FloatInfo floatInfo); + void searchFormulaFromFloatType(List formulaInfos, FloatInfo floatInfo); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java index 331da754a..6abb748d1 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java @@ -3,7 +3,6 @@ package com.fr.design.actions.replace.action.content.formula.floatelement; import com.fr.base.Formula; import com.fr.chart.chartattr.ChartCollection; import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; -import com.fr.design.actions.replace.action.content.formula.FormulaReplaceObject; import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; import com.fr.design.actions.replace.info.FloatInfo; @@ -12,29 +11,36 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.js.NameJavaScriptGroup; -import com.fr.report.cell.CellElement; import com.fr.report.cell.FloatElement; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; +import java.util.List; /** + * 搜索悬浮元素中的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-12 */ -public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { +public class SearchFloatFormulaAction implements SearchFloatFormula { - public SearchFloatFormulaAction(JTemplate jTemplate, ArrayList formulaInfos) { - SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate); + private SearchFloatFormulaAction() { + } + + + @Override + public void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { + SearchFloatAction searchFloatAction = SearchFloatAction.getInstance(); + searchFloatAction.search4Infos(jTemplate); for (FloatInfo floatInfo : searchFloatAction.getFloatInfos()) { - searchFormulaFromFloat(formulaInfos, floatInfo); + searchFormulaFromCommonFloat(formulaInfos, floatInfo); searchFormulaFromFloatType(formulaInfos, floatInfo); } } @Override - public void searchFormulaFromFloat(ArrayList formulaInfos, FloatInfo floatInfo) { + public void searchFormulaFromCommonFloat(List formulaInfos, FloatInfo floatInfo) { NameJavaScriptGroup nameJavaScriptGroup = ((FloatElement) floatInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); if (nameJavaScriptGroup != null) { for (int i = 0; i < nameJavaScriptGroup.size(); i++) { @@ -46,7 +52,7 @@ public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { @Override - public void searchFormulaFromFloatType(ArrayList formulaInfos, FloatInfo floatInfo) { + public void searchFormulaFromFloatType(List formulaInfos, FloatInfo floatInfo) { Object value = ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); FloatFormulaType floatFormulaType = FloatFormulaType.match(value.getClass().getSimpleName()); if (floatFormulaType != null) { @@ -63,8 +69,8 @@ public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { */ FORMULA("Formula") { @Override - public void searchFormulaFromFloatElementType(ArrayList formulaInfos, FloatInfo floatInfo) { - ITContent content = floatInfo.getContent().copy(); + public void searchFormulaFromFloatElementType(List formulaInfos, FloatInfo floatInfo) { + ITContent content = ITContent.copy(floatInfo.getContent()); Formula value = (Formula) ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); content.setReplaceObject(value); formulaInfos.add(new FormulaInfo(content)); @@ -75,11 +81,11 @@ public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { */ CHART_COLLECTION("ChartCollection") { @Override - public void searchFormulaFromFloatElementType(ArrayList formulaInfos, FloatInfo floatInfo) { - ITContent content = floatInfo.getContent().copy(); + public void searchFormulaFromFloatElementType(List formulaInfos, FloatInfo floatInfo) { + ITContent content = ITContent.copy(floatInfo.getContent()); ChartCollection chartCollection = (ChartCollection) ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); content.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); - new SearchChartCollectionFormulaAction(formulaInfos, content, chartCollection); + SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, content, chartCollection); } }; String name; @@ -105,7 +111,46 @@ public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { return null; } - public void searchFormulaFromFloatElementType(ArrayList formulaInfos, FloatInfo floatInfo) { + /** + * 从特殊类型的悬浮元素值中获取到所需的公式 + * + * @param formulaInfos + * @param floatInfo + */ + abstract public void searchFormulaFromFloatElementType(List formulaInfos, FloatInfo floatInfo); + } + + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchFloatFormulaAction getInstance() { + return SearchFloatFormulaAction.SearchFloatFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 单例实现枚举 + */ + enum SearchFloatFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchFloatFormulaAction instance; + + SearchFloatFormulaActionEnum() { + instance = new SearchFloatFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchFloatFormulaAction getInstance() { + return instance; } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java deleted file mode 100644 index adb4ce6b1..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.highlight; - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; -import com.fr.report.cell.cellattr.highlight.HighlightAction; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-19 - */ -public abstract class AbstractSearchHighlightAction implements SearchHighlightFormula { - @Override - public void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction) { - - } - - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return null; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java index 7a787901c..d74da99d5 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java @@ -6,8 +6,11 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.report.cell.cellattr.highlight.HighlightAction; import java.util.ArrayList; +import java.util.List; /** + * 从条件属性中搜索公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-18 @@ -15,6 +18,9 @@ import java.util.ArrayList; public interface SearchHighlightFormula extends SearchFormula { //处理条件属性中各种属性 - void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction); + default void dealWithHighlightAction(ITContent content, List formulaInfos, HighlightAction highlightAction) { + } + + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java index 11667b228..7c83563bf 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java @@ -7,6 +7,7 @@ import com.fr.report.cell.cellattr.highlight.HighlightAction; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * 处理条件属性中各种属性的公式(超级链接、控件...) @@ -15,22 +16,23 @@ import java.util.HashMap; * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ -public class SearchHighlightFormulaAction extends AbstractSearchHighlightAction{ +public class SearchHighlightFormulaAction implements SearchHighlightFormula { public static HashMap highlightHashMap = new HashMap<>(); + static { //这边控件类型不做处理,在SearchWidgetFormulaAction统一处理即可 //条件属性-超级链接 - highlightHashMap.put("HyperlinkHighlightAction",new SearchJSHighlightAction()); + highlightHashMap.put("HyperlinkHighlightAction", new SearchJSHighlightAction()); //条件属性-... // TODO: 2022/9/14 条件属性的其他类型 } @Override - public void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction) { - if (highlightHashMap.containsKey(highlightAction.getClass().getSimpleName())){ + public void dealWithHighlightAction(ITContent content, List formulaInfos, HighlightAction highlightAction) { + if (highlightHashMap.containsKey(highlightAction.getClass().getSimpleName())) { SearchHighlightFormula searchHighlight = highlightHashMap.get(highlightAction.getClass().getSimpleName()); - searchHighlight.dealWithHighlightAction(content,formulaInfos,highlightAction); + searchHighlight.dealWithHighlightAction(content, formulaInfos, highlightAction); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java index d78041f56..8439b27e0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java @@ -6,18 +6,20 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.general.data.Condition; -import java.util.ArrayList; +import java.util.List; /** + * 获取CommonCondition中的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 */ public class SearchCommonConditionAction implements SearchConditionFormula { @Override - public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { - if (((CommonCondition)condition).getCompare().getValue() != null && ((CommonCondition)condition).getCompare().getValue() instanceof Formula){ - ITContent newContent =content.copy(); + public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { + if (((CommonCondition) condition).getCompare().getValue() != null && ((CommonCondition) condition).getCompare().getValue() instanceof Formula) { + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((CommonCondition) condition).getCompare()); formulaInfos.add(new FormulaInfo(newContent)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java index 00f71b75f..2cc7c595f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java @@ -6,8 +6,11 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.general.data.Condition; import java.util.ArrayList; +import java.util.List; /** + * 从条件相关对象中拿公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 @@ -15,9 +18,10 @@ import java.util.ArrayList; public interface SearchConditionFormula { /** * 从条件相关对象中获取公式 + * * @param formulaInfos * @param content * @param condition */ - void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition); + void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java index 73a2a1435..b1800d7fa 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java @@ -6,18 +6,20 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.general.data.Condition; -import java.util.ArrayList; +import java.util.List; /** + * 获取FormulaCondition公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 */ public class SearchFormulaConditionAction implements SearchConditionFormula { @Override - public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { - if (((FormulaCondition)(condition)).getFormula() != null){ - ITContent newContent = content.copy(); + public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { + if (((FormulaCondition) (condition)).getFormula() != null) { + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(condition); formulaInfos.add(new FormulaInfo(newContent)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java index 33c52a7da..bed57a65e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java @@ -9,25 +9,27 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.general.data.Condition; -import java.util.ArrayList; +import java.util.List; /** + * 获取ListCondition公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 */ public class SearchListConditionAction implements SearchConditionFormula { @Override - public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { - for (int i = 0 ;i <((ListCondition)condition).getJoinConditionCount() ;i++){ - Condition joinCondition = ((ListCondition)condition).getJoinCondition(i).getCondition(); - if (joinCondition instanceof CommonCondition){ + public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { + for (int i = 0; i < ((ListCondition) condition).getJoinConditionCount(); i++) { + Condition joinCondition = ((ListCondition) condition).getJoinCondition(i).getCondition(); + if (joinCondition instanceof CommonCondition) { SearchCommonConditionAction commonConditionAction = new SearchCommonConditionAction(); commonConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); - } else if (joinCondition instanceof FormulaCondition){ + } else if (joinCondition instanceof FormulaCondition) { SearchFormulaConditionAction formulaConditionAction = new SearchFormulaConditionAction(); formulaConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); - } else if (joinCondition instanceof ObjectCondition){ + } else if (joinCondition instanceof ObjectCondition) { SearchObjectConditionAction objectConditionAction = new SearchObjectConditionAction(); objectConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java index 229512c2f..51b4c64af 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java @@ -6,18 +6,20 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.general.data.Condition; -import java.util.ArrayList; +import java.util.List; /** + * 获取ObjectCondition类型公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ public class SearchObjectConditionAction implements SearchConditionFormula { @Override - public void searchFormulaFromCondition(ArrayList formulaInfos, ITContent content, Condition condition) { - if (((ObjectCondition)condition).getCompare().getValue() != null && ((ObjectCondition)condition).getCompare().getValue() instanceof Formula){ - ITContent newContent =content.copy(); + public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { + if (((ObjectCondition) condition).getCompare().getValue() != null && ((ObjectCondition) condition).getCompare().getValue() instanceof Formula) { + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((ObjectCondition) condition).getCompare()); formulaInfos.add(new FormulaInfo(newContent)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java deleted file mode 100644 index c7fd8cebc..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.highlight.javascript; - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; -import com.fr.js.JavaScript; -import com.fr.report.cell.cellattr.highlight.HighlightAction; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-19 - */ -public abstract class AbstractSearchJSFormulaAction implements SearchJSFormula { - @Override - public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { - - } - - @Override - public void dealWithHighlightAction(ITContent content, ArrayList formulaInfos, HighlightAction highlightAction) { - - } - - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return null; - } - - @Override - public void addFormulaInfosFromJSPara(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { - - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java index aa956c52c..602090812 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java @@ -16,80 +16,80 @@ import com.fr.write.config.DMLConfig; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** + * 获取提交入库中的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-19 */ -public class SearchCommit2DBJSFormulaAction extends AbstractSearchJSFormulaAction{ +public class SearchCommit2DBJSFormulaAction implements SearchJSFormula { public static HashMap conditionHashMap = new HashMap<>(); + static { - conditionHashMap.put("FormulaCondition",new SearchFormulaConditionAction()); - conditionHashMap.put("CommonCondition",new SearchCommonConditionAction()); - conditionHashMap.put("ListCondition",new SearchListConditionAction()); + conditionHashMap.put("FormulaCondition", new SearchFormulaConditionAction()); + conditionHashMap.put("CommonCondition", new SearchCommonConditionAction()); + conditionHashMap.put("ListCondition", new SearchListConditionAction()); } - @Override - public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { - if (!((Commit2DBJavaScript)javaScript).getDBManipulation().isEmpty()){ + @Override + public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { + if (!((Commit2DBJavaScript) javaScript).getDBManipulation().isEmpty()) { //处理回调函数——这里单独摘出来是因为这边逻辑比较复杂,提交事件会再循环产生一个新的DBManipulation,后续统一处理 - dealWithCallBack(formulaInfos,content,((Commit2DBJavaScript)javaScript)); + dealWithCallBack(formulaInfos, content, ((Commit2DBJavaScript) javaScript)); //处理DBManipulation - for (int i = 0 ; i < ((Commit2DBJavaScript)javaScript).getDBManipulation().size() ; i++){ - dealWithDBManipulation(formulaInfos,content, (DBManipulation) ((Commit2DBJavaScript)javaScript).getDBManipulation().get(i)); + for (int i = 0; i < ((Commit2DBJavaScript) javaScript).getDBManipulation().size(); i++) { + dealWithDBManipulation(formulaInfos, content, (DBManipulation) ((Commit2DBJavaScript) javaScript).getDBManipulation().get(i)); } } } - private void dealWithDBManipulation(ArrayList formulaInfos, ITContent content, DBManipulation dbManipulation) { + private void dealWithDBManipulation(List formulaInfos, ITContent content, DBManipulation dbManipulation) { DMLConfig dmlConfig = dbManipulation.getDmlConfig(); //处理提交条件中的公式 - dealWithCommit2DBCondition(formulaInfos,content,dmlConfig); + dealWithCommit2DBCondition(formulaInfos, content, dmlConfig); //处理DBManipulation - dealWithSubmitJob(formulaInfos,content,dmlConfig); + dealWithSubmitJob(formulaInfos, content, dmlConfig); } - private void dealWithSubmitJob(ArrayList formulaInfos, ITContent content, DMLConfig dmlConfig) { - for (int i = 0 ;i < dmlConfig.getSubmitJobCount() ; i ++){ + private void dealWithSubmitJob(List formulaInfos, ITContent content, DMLConfig dmlConfig) { + for (int i = 0; i < dmlConfig.getSubmitJobCount(); i++) { //这边自定义事件不需要处理,只处理提交事件 - if (dmlConfig.getSubmitJob(i) instanceof DMLConfigJob){ - ITContent newContent = content.copy(); - + if (dmlConfig.getSubmitJob(i) instanceof DMLConfigJob) { + ITContent newContent = ITContent.copy(content); newContent.addOtherPos( - Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"), Toolkit.i18nText("Fine-Design_Basic_Write_Submit_Event") - ); - dealWithDBManipulation(formulaInfos,newContent,(((DMLConfigJob)dmlConfig.getSubmitJob(i)).getDBManipulation())); + ); + dealWithDBManipulation(formulaInfos, newContent, (((DMLConfigJob) dmlConfig.getSubmitJob(i)).getDBManipulation())); } } } - private void dealWithCallBack(ArrayList formulaInfos, ITContent content, Commit2DBJavaScript javaScript) { - if (javaScript.getCallBack() != null){ + private void dealWithCallBack(List formulaInfos, ITContent content, Commit2DBJavaScript javaScript) { + if (javaScript.getCallBack() != null) { SearchJSHighlightAction SJSA = new SearchJSHighlightAction(); - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos( - Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"), Toolkit.i18nText("Fine-Design_Basic_Set_Callback_Function") - ); - SJSA.searchJSFormulaFromOther(formulaInfos,newContent, javaScript.getCallBack()); + ); + SJSA.searchJSFormulaFromOther(formulaInfos, newContent, javaScript.getCallBack()); } } - private void dealWithCommit2DBCondition(ArrayList formulaInfos, ITContent content, DMLConfig dmlConfig){ - if (dmlConfig.getCondition() != null){ + private void dealWithCommit2DBCondition(List formulaInfos, ITContent content, DMLConfig dmlConfig) { + if (dmlConfig.getCondition() != null) { //这边condition有三种情况:FormulaCondition、CommonCondition、ListCondition,分别处理 Condition condition = dmlConfig.getCondition(); SearchConditionFormula searchCondition = conditionHashMap.get(condition.getClass().getSimpleName()); - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos( - Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"), Toolkit.i18nText("Fine-Design_Basic_Submit_Condition") - ); - searchCondition.searchFormulaFromCondition(formulaInfos, newContent,condition); + ); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent, condition); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java index c49496db7..61e1c14a1 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java @@ -11,38 +11,40 @@ import java.util.ArrayList; import java.util.List; /** + * 获取导出事件的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-19 */ -public class SearchExportJSFormulaAction extends AbstractSearchJSFormulaAction{ +public class SearchExportJSFormulaAction implements SearchJSFormula { @Override - public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { //如果导出当前模板,可以存公式的地方就是命名方式-自定义 - if (((ExportJavaScript)javaScript).isCurrentTemplate()){ - dealSingleJavaScript(formulaInfos,content,((ExportJavaScript)javaScript).getCurrentTemplateJavaScript()); + if (((ExportJavaScript) javaScript).isCurrentTemplate()) { + dealSingleJavaScript(formulaInfos, content, ((ExportJavaScript) javaScript).getCurrentTemplateJavaScript()); } else { - List list = ((ExportJavaScript)javaScript).getJsListForOtherTemplates(); - if (isListExist(list)){ - for (SingleJavaScript singleJavaScript : list){ - dealSingleJavaScript(formulaInfos,content,singleJavaScript); + List list = ((ExportJavaScript) javaScript).getJsListForOtherTemplates(); + if (isListExist(list)) { + for (SingleJavaScript singleJavaScript : list) { + dealSingleJavaScript(formulaInfos, content, singleJavaScript); } } } } - public boolean isListExist(List list){ + public boolean isListExist(List list) { return list != null && list.size() > 0; } - private void dealSingleJavaScript(ArrayList formulaInfos, ITContent content, SingleJavaScript javaScript){ - if (!javaScript.isDefaultFileName()){ - ITContent newContent = content.copy(); + private void dealSingleJavaScript(List formulaInfos, ITContent content, SingleJavaScript javaScript) { + if (!javaScript.isDefaultFileName()) { + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(javaScript); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Export_JS_Event"), Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename") - ); + ); formulaInfos.add(new FormulaInfo(newContent)); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java index ccbf8d1b7..07f6a019d 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java @@ -1,14 +1,16 @@ package com.fr.design.actions.replace.action.content.formula.highlight.javascript; -import com.fr.design.actions.replace.action.content.formula.SearchFormula; import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormula; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.js.JavaScript; import java.util.ArrayList; +import java.util.List; /** + * 获取各种类型JS的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-18 @@ -17,17 +19,25 @@ public interface SearchJSFormula extends SearchHighlightFormula { /** * 对各种类型的JS分别处理,获取各自其他地方的公式 + * * @param formulaInfos * @param content * @param javaScript */ - void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript); + default void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { + } + + ; /** * 从超链中的参数获取公式 + * * @param formulaInfos * @param content * @param javaScript */ - void addFormulaInfosFromJSPara(ArrayList formulaInfos, ITContent content, JavaScript javaScript); + default void addFormulaInfosFromJSPara(List formulaInfos, ITContent content, JavaScript javaScript) { + } + + ; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java index 36f5c2d9e..27fef18dd 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java @@ -14,6 +14,7 @@ import com.fr.stable.ParameterProvider; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * 处理条件属性中各种超级链接内的公式(也包括事件中的各种超链) @@ -22,13 +23,15 @@ import java.util.HashMap; * @version 11.0 * created by Destiny.Lin on 2022-08-18 */ -public class SearchJSHighlightAction extends AbstractSearchJSFormulaAction { +public class SearchJSHighlightAction implements SearchJSFormula { //需要特殊处理的JS类型 public static HashMap javaScriptHashMap = new HashMap<>(); - public static HashMap hashMap = new HashMap<>(); + public static HashMap hashMap = new HashMap<>(); + static { hashMap.put(Commit2DBJavaScript.class, new SearchCommit2DBJSFormulaAction()); } + static { //控件事件里面需要特殊处理的类型 //EmailJavaScript(这个暂时不做处理) @@ -45,41 +48,43 @@ public class SearchJSHighlightAction extends AbstractSearchJSFormulaAction { //ChartHyperPoplink //ChartHyperRelateCellLink //ChartHyperRelateFloatLink - javaScriptHashMap.put("Commit2DBJavaScript",new SearchCommit2DBJSFormulaAction()); - javaScriptHashMap.put("ExportJavaScript",new SearchExportJSFormulaAction()); - javaScriptHashMap.put("MobilePopupHyperlink",new SearchMobileHyperlinkFormulaAction()); + javaScriptHashMap.put("Commit2DBJavaScript", new SearchCommit2DBJSFormulaAction()); + javaScriptHashMap.put("ExportJavaScript", new SearchExportJSFormulaAction()); + javaScriptHashMap.put("MobilePopupHyperlink", new SearchMobileHyperlinkFormulaAction()); } @Override - public void dealWithHighlightAction( ITContent content, ArrayList formulaInfos,HighlightAction highlightAction) { - NameJavaScriptGroup nameJavaScriptGroup = ((HyperlinkHighlightAction)highlightAction).getHperlink(); - if (nameJavaScriptGroup != null){ - for (int i = 0 ; i < nameJavaScriptGroup.size() ; i ++){ + public void dealWithHighlightAction(ITContent content, List formulaInfos, HighlightAction highlightAction) { + NameJavaScriptGroup nameJavaScriptGroup = ((HyperlinkHighlightAction) highlightAction).getHperlink(); + if (nameJavaScriptGroup != null) { + for (int i = 0; i < nameJavaScriptGroup.size(); i++) { //单元格条件属性-属性-超级链接里面参数的公式统一判断获取一下 - ITContent newContent =content.copy(); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Cell"), Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), - Toolkit.i18nText("Fine-Design_Report_Hyperlink"), - Toolkit.i18nText("Fine-Design_Basic_Parameters")); - addFormulaInfosFromJSPara(formulaInfos,newContent,nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); + nameJavaScriptGroup.getNameHyperlink(i).getName() + ); + addFormulaInfosFromJSPara(formulaInfos, newContent, nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); } } } /** * 仅仅获取JS中的参数中的公式 + * * @param formulaInfos * @param content * @param javaScript */ @Override - public void addFormulaInfosFromJSPara(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { - if (javaScript.getParameters() != null){ - for (ParameterProvider provider : javaScript.getParameters()){ - if (provider.getValue() instanceof Formula){ - ITContent newContent = content.copy(); + public void addFormulaInfosFromJSPara(List formulaInfos, ITContent content, JavaScript javaScript) { + if (javaScript.getParameters() != null) { + for (ParameterProvider provider : javaScript.getParameters()) { + if (provider.getValue() instanceof Formula) { + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(provider); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameters")); formulaInfos.add(new FormulaInfo(newContent)); } } @@ -88,18 +93,19 @@ public class SearchJSHighlightAction extends AbstractSearchJSFormulaAction { /** * 对各种类型的JS分别处理,获取公式 + * * @param formulaInfos * @param content * @param javaScript */ @Override - public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { + public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { //获取JS中的参数中的公式 addFormulaInfosFromJSPara(formulaInfos, content, javaScript); //这里面类型比较多,但是一部分不用处理——公式可能存在的地方只有参数,这部分在addFormulaInfosFromJSPara中就已经把公式拿完了 - if (javaScriptHashMap.containsKey(javaScript.getClass().getSimpleName())){ + if (javaScriptHashMap.containsKey(javaScript.getClass().getSimpleName())) { SearchJSFormula javaScriptFormula = javaScriptHashMap.get(javaScript.getClass().getSimpleName()); - javaScriptFormula.searchJSFormulaFromOther(formulaInfos,content,javaScript); + javaScriptFormula.searchJSFormulaFromOther(formulaInfos, content, javaScript); } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java index 3524f6af1..8b2358a08 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java @@ -7,19 +7,21 @@ import com.fr.design.i18n.Toolkit; import com.fr.js.JavaScript; import com.fr.js.MobilePopupHyperlink; -import java.util.ArrayList; +import java.util.List; /** + * 获取移动端弹窗相关公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-19 */ -public class SearchMobileHyperlinkFormulaAction extends AbstractSearchJSFormulaAction{ +public class SearchMobileHyperlinkFormulaAction implements SearchJSFormula { @Override - public void searchJSFormulaFromOther(ArrayList formulaInfos, ITContent content, JavaScript javaScript) { - if (((MobilePopupHyperlink)javaScript).getPopupText() instanceof Formula){ - ITContent newContent = content.copy(); - newContent.setReplaceObject(((MobilePopupHyperlink)javaScript).getPopupText()); + public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { + if (((MobilePopupHyperlink) javaScript).getPopupText() instanceof Formula) { + ITContent newContent = ITContent.copy(content); + newContent.setReplaceObject(((MobilePopupHyperlink) javaScript).getPopupText()); newContent.addOtherPos( Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup"), Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Text") diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java deleted file mode 100644 index 4de0fccc0..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.fr.design.actions.replace.action.content.formula.template; - - -import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-09-12 - */ -public abstract class AbstractSearchTemplateFormula implements SearchTemplateFormula{ - - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return null; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java index 169bc5dc3..8d9f9190c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java @@ -5,9 +5,11 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.mainframe.JTemplate; -import java.util.ArrayList; +import java.util.List; /** + * 搜索模板全局内容 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-12 @@ -16,17 +18,19 @@ public interface SearchTemplateFormula extends SearchFormula { /** * 搜索全局水印中的公式 + * * @param jTemplate * @param formulaInfos * @param content */ - void searchTemplateWaterMarkFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content); + void searchTemplateWaterMarkFormula(JTemplate jTemplate, List formulaInfos, ITContent content); /** * 搜索全局参数中的公式 + * * @param jTemplate * @param formulaInfos * @param content */ - void searchTemplateParaFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content); + void searchTemplateParaFormula(JTemplate jTemplate, List formulaInfos, ITContent content); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java index bc89d2d6c..a500bdb7f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java @@ -5,24 +5,32 @@ import com.fr.base.Parameter; import com.fr.base.ParameterConfig; import com.fr.base.io.AttrMark; import com.fr.base.iofile.attr.WatermarkAttr; +import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; -import com.fr.main.impl.WorkBook; import com.fr.report.core.ReportUtils; -import com.fr.report.core.watermark.WaterMarkFactory; import java.util.ArrayList; +import java.util.List; /** + * 搜索模板的全局相关内容 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-12 */ -public class SearchTemplateFormulaAction extends AbstractSearchTemplateFormula { +public class SearchTemplateFormulaAction implements SearchTemplateFormula { - public SearchTemplateFormulaAction(JTemplate jTemplate, ArrayList formulaInfos) { + + private SearchTemplateFormulaAction() { + } + + + @Override + public void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { ITContent content = new ITContent(); content.setTemplateName(jTemplate.getTemplateName()); searchTemplateParaFormula(jTemplate, formulaInfos, content); @@ -30,10 +38,10 @@ public class SearchTemplateFormulaAction extends AbstractSearchTemplateFormula { } @Override - public void searchTemplateWaterMarkFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content) { + public void searchTemplateWaterMarkFormula(JTemplate jTemplate, List formulaInfos, ITContent content) { WatermarkAttr watermarkAttr = ReportUtils.getWatermarkAttrFromTemplateAndGlobal((AttrMark) jTemplate.getTarget()); if (watermarkAttr != null) { - ITContent waterMarkContent = content.copy(); + ITContent waterMarkContent = ITContent.copy(content); waterMarkContent.addOtherPos(Toolkit.i18nText("Fine-Design_Form_WaterMark")); waterMarkContent.setReplaceObject(watermarkAttr); formulaInfos.add(new FormulaInfo(waterMarkContent)); @@ -41,11 +49,11 @@ public class SearchTemplateFormulaAction extends AbstractSearchTemplateFormula { } @Override - public void searchTemplateParaFormula(JTemplate jTemplate, ArrayList formulaInfos, ITContent content) { + public void searchTemplateParaFormula(JTemplate jTemplate, List formulaInfos, ITContent content) { Parameter[] parameters = jTemplate.getJTemplateParameters(); for (Parameter parameter : parameters) { if (parameter.getValue() instanceof Formula) { - ITContent paraContent = content.copy(); + ITContent paraContent = ITContent.copy(content); paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Template_Parameter")); paraContent.setReplaceObject(parameter.getValue()); formulaInfos.add(new FormulaInfo(paraContent)); @@ -55,11 +63,44 @@ public class SearchTemplateFormulaAction extends AbstractSearchTemplateFormula { Parameter[] globalParameters = ParameterConfig.getInstance().getGlobalParameters(); for (Parameter parameter : globalParameters) { if (parameter.getValue() instanceof Formula) { - ITContent paraContent = content.copy(); + ITContent paraContent = ITContent.copy(content); paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter_Source_Type_Server")); paraContent.setReplaceObject(parameter.getValue()); formulaInfos.add(new FormulaInfo(paraContent)); } } } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchTemplateFormulaAction getInstance() { + return SearchTemplateFormulaAction.SearchTemplateFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 单例实现枚举 + */ + enum SearchTemplateFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchTemplateFormulaAction instance; + + SearchTemplateFormulaActionEnum() { + instance = new SearchTemplateFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchTemplateFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java index d27899467..96a1437af 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java @@ -3,18 +3,22 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.base.Formula; import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.Info; import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.form.event.Listener; +import com.fr.form.ui.ComboCheckBox; import com.fr.form.ui.DataControl; import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.widget.CRBoundsWidget; -import java.util.ArrayList; +import java.util.List; /** + * 处理共有控件内容 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-19 @@ -28,52 +32,45 @@ public abstract class AbstractSearchWidgetFormulaAction implements SearchWidgetF * @param formulaInfos */ @Override - public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + public void searchFormulaFromWidget(ITContent content, List formulaInfos) { Widget widget = (Widget) content.getReplaceObject(); //控件值中的公式 - searchFormulaFromWidgetValue(content,formulaInfos); - for (int i = 0 ; i < widget.getListenerSize() ;i++){ + searchFormulaFromWidgetValue(content, formulaInfos); + for (int i = 0; i < widget.getListenerSize(); i++) { Listener listener = widget.getListener(i); - ITContent newContent = content.copy(); - newContent.getContentObject().setListener(listener); + ITContent newContent = ITContent.copy(content); //控件的事件可以使用的JS有五种,这边统一交给Highlight那边判断超级链接并进行处理 SearchJSHighlightAction SJSA = new SearchJSHighlightAction(); - newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event")); - SJSA.searchJSFormulaFromOther(formulaInfos,newContent, listener.getAction()); + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event"),listener.getName()); + + SJSA.searchJSFormulaFromOther(formulaInfos, newContent, listener.getAction()); } } /** * 判断一下控件有没有控件值接口,如果有再判断一下控件值是否已经设置并且是公式 + * * @param content * @param formulaInfos */ @Override - public void searchFormulaFromWidgetValue(ITContent content, ArrayList formulaInfos) { - if(content.getReplaceObject() instanceof DataControl){ - if (((DataControl) content.getReplaceObject()).getWidgetValue() != null - && ((DataControl) content.getReplaceObject()).getWidgetValue().getValue() instanceof Formula){ - ITContent newContent = content.copy(); + public void searchFormulaFromWidgetValue(ITContent content, List formulaInfos) { + Widget widget = (Widget) content.getReplaceObject(); + if (widget instanceof WScaleLayout){ + widget = ((CRBoundsWidget)((WScaleLayout)widget).getWidget(0)).getWidget(); + } + if (widget instanceof DataControl) { + if (isWidgetValueValid(((DataControl) widget))) { + ITContent newContent = ITContent.copy(content); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Widget_Value")); - newContent.setReplaceObject(((DataControl)content.getReplaceObject()).getWidgetValue().getValue()); + newContent.setReplaceObject(((DataControl) widget).getWidgetValue().getValue()); formulaInfos.add(new FormulaInfo(newContent)); } } } - @Override - public void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList formulaInfos) { - } - - - @Override - public void searchFormula(ArrayList formulaInfos, ITContent content) { - - } - - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - return null; + private boolean isWidgetValueValid(DataControl control){ + return control.getWidgetValue() != null + && control.getWidgetValue().getValue() instanceof Formula; } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java index f5a7610b9..7ae47c80e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java @@ -4,9 +4,11 @@ import com.fr.data.Dictionary; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; -import java.util.ArrayList; +import java.util.List; /** + * 从数据字典中获取信息 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-22 @@ -15,9 +17,10 @@ public interface DictionaryAction { /** * 从数据字典中获取公式 + * * @param content * @param formulaInfos * @param dictionary */ - void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary); + void searchFormulaFromDictionary(ITContent content, List formulaInfos, Dictionary dictionary); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java index d5ebc7076..be16c095e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java @@ -9,7 +9,7 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; +import java.util.List; /** * 数据字典处理 @@ -18,17 +18,17 @@ import java.util.ArrayList; * @version 11.0 * created by Destiny.Lin on 2022-08-22 */ -enum DictionaryType implements DictionaryAction { +public enum DictionaryType implements DictionaryAction { /** * 数据字典——公式 */ FORMULA_DICTIONARY("FormulaDictionary") { @Override - public void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary) { + public void searchFormulaFromDictionary(ITContent content, List formulaInfos, Dictionary dictionary) { //显示值 if (((FormulaDictionary) dictionary).getExcuteFormula() != null) { - ITContent excuteContent = content.copy(); + ITContent excuteContent = ITContent.copy(content); excuteContent.setReplaceObject(dictionary); excuteContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), @@ -39,7 +39,7 @@ enum DictionaryType implements DictionaryAction { } //实际值 if (((FormulaDictionary) dictionary).getProduceFormula() != null) { - ITContent produceContent = content.copy(); + ITContent produceContent = ITContent.copy(content); produceContent.setReplaceObject(dictionary); produceContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), @@ -56,9 +56,9 @@ enum DictionaryType implements DictionaryAction { */ TABLE_DATA_DICTIONARY("TableDataDictionary") { @Override - public void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary) { + public void searchFormulaFromDictionary(ITContent content, List formulaInfos, Dictionary dictionary) { if (((TableDataDictionary) dictionary).getFormula() != null) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((TableDataDictionary) dictionary).getFormula()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), @@ -75,9 +75,9 @@ enum DictionaryType implements DictionaryAction { */ DATABASE_DICTIONARY("DatabaseDictionary") { @Override - public void searchFormulaFromDictionary(ITContent content, ArrayList formulaInfos, Dictionary dictionary) { + public void searchFormulaFromDictionary(ITContent content, List formulaInfos, Dictionary dictionary) { if (((DatabaseDictionary) dictionary).getFormula() != null) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((DatabaseDictionary) dictionary).getFormula()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java index 84273cc2b..0c2c0235c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java @@ -3,7 +3,7 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; -import java.util.ArrayList; +import java.util.List; /** * 控件中的公式只会在事件、控件值 @@ -15,7 +15,7 @@ import java.util.ArrayList; public class SearchCommonWidgetFormulaAction extends AbstractSearchWidgetFormulaAction { @Override - public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + public void searchFormulaFromWidget(ITContent content, List formulaInfos) { //每个事件的事件、控件值两部分的公式获取逻辑是一样的,直接调用即可,各自其他地方的公式就需要特殊处理 super.searchFormulaFromWidget(content, formulaInfos); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java index e2ff6d951..3c9b8884b 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java @@ -1,12 +1,14 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.form.ui.DateEditor; import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; import java.util.ArrayList; +import java.util.List; /** * 日期类型控件特殊处理 @@ -16,27 +18,29 @@ import java.util.ArrayList; * created by Destiny.Lin on 2022-08-26 */ public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAction { + + @Override - public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + public void searchFormulaFromWidget(ITContent content, List formulaInfos) { super.searchFormulaFromWidget(content, formulaInfos); dealStratDateFormula(content, formulaInfos); dealEndDateFormula(content, formulaInfos); } - private void dealEndDateFormula(ITContent content, ArrayList formulaInfos) { + private void dealEndDateFormula(ITContent content, List formulaInfos) { DateEditor dateEditor = (DateEditor) content.getReplaceObject(); if (dateEditor.getEndDateFM() != null && !StringUtils.isEmpty(dateEditor.getEndDateFM().getContent())) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dateEditor.getEndDateFM()); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_End_Time")); formulaInfos.add(new FormulaInfo(newContent)); } } - private void dealStratDateFormula(ITContent content, ArrayList formulaInfos) { + private void dealStratDateFormula(ITContent content, List formulaInfos) { DateEditor dateEditor = (DateEditor) content.getReplaceObject(); if (dateEditor.getStartDateFM() != null && !StringUtils.isEmpty(dateEditor.getStartDateFM().getContent())) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dateEditor.getStartDateFM()); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Start_Time")); formulaInfos.add(new FormulaInfo(newContent)); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java index a0dd7ded3..abe0ddc5c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java @@ -2,9 +2,11 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.form.ui.ComboCheckBox; import com.fr.form.ui.DictionaryContainer; import java.util.ArrayList; +import java.util.List; /** * 控件中的公式会存在: 控件值、 非树形结构数据字典、 事件 @@ -17,7 +19,7 @@ public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction { @Override - public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + public void searchFormulaFromWidget(ITContent content, List formulaInfos) { //控件值、事件 super.searchFormulaFromWidget(content, formulaInfos); //数据字典 @@ -25,7 +27,7 @@ public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction { } - private void searchFormulaFromDict(ITContent content, ArrayList formulaInfos) { + private void searchFormulaFromDict(ITContent content, List formulaInfos) { if (content.getReplaceObject() instanceof DictionaryContainer) { if (((DictionaryContainer) content.getReplaceObject()).getDictionary() != null) { DictionaryType type = DictionaryType.match(((DictionaryContainer) content.getReplaceObject()).getDictionary().getClass().getSimpleName()); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java index 8d231126d..03ae60b07 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java @@ -1,8 +1,6 @@ package com.fr.design.actions.replace.action.content.formula.widget; -import com.fr.data.impl.DatabaseDictionary; import com.fr.data.impl.FormulaDisplayDictionary; -import com.fr.data.impl.TableDataDictionary; import com.fr.data.impl.TreeNodeAttr; import com.fr.data.impl.TreeNodeWrapper; import com.fr.design.actions.replace.info.FormulaInfo; @@ -13,6 +11,7 @@ import com.fr.form.ui.tree.LayerConfig; import com.fr.stable.StringUtils; import java.util.ArrayList; +import java.util.List; /** * @author Destiny.Lin @@ -21,7 +20,7 @@ import java.util.ArrayList; */ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAction { @Override - public void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos) { + public void searchFormulaFromWidget(ITContent content, List formulaInfos) { //控件值、事件 super.searchFormulaFromWidget(content, formulaInfos); //树形结构数据字典 @@ -29,7 +28,7 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc } - private void SearchFormulaFromModelConfig(ITContent content, ArrayList formulaInfos) { + private void SearchFormulaFromModelConfig(ITContent content, List formulaInfos) { if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() != null) { //LayerConfig[] 急速分层构建 //TreeNodeWrapper 普通分层构建 @@ -43,11 +42,11 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc } } - private void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, ITContent content, ArrayList formulaInfos) { + private void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, ITContent content, List formulaInfos) { for (TreeNodeAttr attr : wrapper.getTreeNodeAttrs()) { if (((FormulaDisplayDictionary) attr.getDictionary()).getFormula() != null && !StringUtils.isEmpty(((FormulaDisplayDictionary) attr.getDictionary()).getFormula().getContent())) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((FormulaDisplayDictionary) attr.getDictionary()).getFormula()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), @@ -58,11 +57,11 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc } } - private void dealWithLayerConfigs(LayerConfig[] layerConfigs, ITContent content, ArrayList formulaInfos) { + private void dealWithLayerConfigs(LayerConfig[] layerConfigs, ITContent content, List formulaInfos) { for (LayerConfig layerConfig : layerConfigs) { if (layerConfig.getDictionary().getFormula() != null && !StringUtils.isEmpty(layerConfig.getDictionary().getFormula().getContent())) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(layerConfig.getDictionary().getFormula()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java index 1064dee36..355cb0080 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java @@ -2,13 +2,15 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.action.content.formula.SearchFormula; import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.form.ui.Widget; -import java.util.ArrayList; +import java.util.List; /** + * 搜索控件中的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-19 @@ -17,11 +19,10 @@ public interface SearchWidgetFormula extends SearchFormula { /** * 从WidgetInfos列表中搜索所有公式 - * - * @param widgetInfo 对应的Info信息列表 + * @param info 对应的Info信息列表 * @param formulaInfos 要存储进去的公式信息列表 */ - void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList formulaInfos); + default void searchFormulaFromWidgetInfos(Info info, List formulaInfos){} /** * 从控件的不同类型中获取公式 @@ -29,7 +30,7 @@ public interface SearchWidgetFormula extends SearchFormula { * @param content 对应的ITContent数据结构 * @param formulaInfos 要存储进去的公式信息列表 */ - void searchFormulaFromWidget(ITContent content, ArrayList formulaInfos); + void searchFormulaFromWidget(ITContent content, List formulaInfos); /** * 从控件值中获取公式 @@ -37,6 +38,6 @@ public interface SearchWidgetFormula extends SearchFormula { * @param content 对应的ITContent数据结构 * @param formulaInfos 要存储进去的公式信息列表 */ - void searchFormulaFromWidgetValue(ITContent content, ArrayList formulaInfos); + void searchFormulaFromWidgetValue(ITContent content, List formulaInfos); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java index 6c262ee98..28115d1a5 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java @@ -1,14 +1,28 @@ package com.fr.design.actions.replace.action.content.formula.widget; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.action.content.component.SearchComponentAction; +import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; +import com.fr.design.actions.replace.info.ComponentInfo; import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.mainframe.JTemplate; +import com.fr.form.main.Form; +import com.fr.form.ui.ChartEditor; +import com.fr.form.ui.ComboCheckBox; import com.fr.form.ui.Widget; +import com.fr.form.ui.container.WScaleLayout; +import com.fr.form.ui.container.WTitleLayout; +import com.fr.form.ui.widget.CRBoundsWidget; +import com.fr.main.impl.WorkBook; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * 查找控件内的公式 @@ -18,91 +32,135 @@ import java.util.HashMap; * created by Destiny.Lin on 2022-08-19 */ public class SearchWidgetFormulaAction extends AbstractSearchWidgetFormulaAction { - public static HashMap widgetHashMap = new HashMap<>(); + private SearchWidgetFormulaAction() { + } + + public static HashMap widgetHashMap = new HashMap<>(); + static { - //WParameterLayout - //PageFixedRowComboBox - //FormSubmitButton - //TreeEditor - //CheckBox - //Password - //TextArea - //CheckBoxGroup - //RadioGroup - //TreeComboBoxEditor - //NumberEditor - //DateEditor - //ComboCheckBox - //ComboBox - //FreeButton - //Label /** * 可能有控件值、 有事件 */ - widgetHashMap.put("FormSubmitButton",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("WParameterLayout",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("TextArea",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("Password",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("CheckBox",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("Label",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("FreeButton",new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("NumberEditor",new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("FormSubmitButton", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("WParameterLayout", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("TextArea", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("Password", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("CheckBox", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("Label", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("FreeButton", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("NumberEditor", new SearchCommonWidgetFormulaAction()); + widgetHashMap.put("TextEditor", new SearchCommonWidgetFormulaAction()); /** * 日期类型 */ - widgetHashMap.put("DateEditor",new SearchDateEditorFormulaAction()); + widgetHashMap.put("DateEditor", new SearchDateEditorFormulaAction()); /** * 控件值、事件、非树形数据字典 */ - widgetHashMap.put("ComboBox",new SearchDictFormulaAction()); - widgetHashMap.put("RadioGroup",new SearchDictFormulaAction()); - widgetHashMap.put("CheckBoxGroup",new SearchDictFormulaAction()); - widgetHashMap.put("ComboCheckBox",new SearchDictFormulaAction()); - widgetHashMap.put("PageFixedRowComboBox",new SearchDictFormulaAction()); + widgetHashMap.put("ComboBox", new SearchDictFormulaAction()); + widgetHashMap.put("RadioGroup", new SearchDictFormulaAction()); + widgetHashMap.put("CheckBoxGroup", new SearchDictFormulaAction()); + widgetHashMap.put("ComboCheckBox", new SearchDictFormulaAction()); + widgetHashMap.put("PageFixedRowComboBox", new SearchDictFormulaAction()); /** * 控件值、事件、树形数据字典 */ - widgetHashMap.put("TreeComboBoxEditor",new SearchTreeEditorFormulaAction()); - widgetHashMap.put("TreeEditor",new SearchTreeEditorFormulaAction()); + widgetHashMap.put("TreeComboBoxEditor", new SearchTreeEditorFormulaAction()); + widgetHashMap.put("TreeEditor", new SearchTreeEditorFormulaAction()); } - - public SearchWidgetFormulaAction(JTemplate jTemplate,ArrayList fomulaInfos){ - fomulaInfos.addAll(search4Infos(jTemplate)); - } - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList formulaInfos = new ArrayList<>(); - SearchWidgetAction searchWidgetAction = new SearchWidgetAction(jTemplate); - if (!searchWidgetAction.isWidgetInfosEmpty()){ - for (WidgetInfo widgetInfo : searchWidgetAction.getWidgetInfos()){ - //由于控件类型比较多,各种控件也不大相同,可能存放公式的地方也都不一样,这边根据对应的类型进行处理 - searchFormulaFromWidgetInfos(widgetInfo,formulaInfos); + public void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { + List result = new ArrayList<>(); + if (jTemplate.getTarget() instanceof WorkBook) { + SearchWidgetAction searchWidgetAction = SearchWidgetAction.getInstance(); + searchWidgetAction.search4Infos(jTemplate); + if (!searchWidgetAction.isWidgetInfosEmpty()) { + for (WidgetInfo widgetInfo : searchWidgetAction.getWidgetInfos()) { + //由于控件类型比较多,各种控件也不大相同,可能存放公式的地方也都不一样,这边根据对应的类型进行处理 + searchFormulaFromWidgetInfos(widgetInfo, result); + } + } + } else if (jTemplate.getTarget() instanceof Form) { + SearchComponentAction searchComponentAction = SearchComponentAction.getInstance(); + searchComponentAction.search4Infos(jTemplate); + if (ShowValueUtils.isNotEmpty(searchComponentAction.getComponentInfos())) { + for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()) { + searchFormulaFromWidgetInfos(componentInfo, formulaInfos); + } } } - return formulaInfos; + formulaInfos.addAll(result); } + @Override - public void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList formulaInfos) { - if (widgetInfo.isReplaceObjectExist()){ - searchFormulaFromWidgetValue(widgetInfo,formulaInfos); + public void searchFormulaFromWidgetInfos(Info info, List formulaInfos) { + if (isReplaceObjectExist(info)) { + searchFormulaFromWidgetValue(info, formulaInfos); } } - private void searchFormulaFromWidgetValue(WidgetInfo widgetInfo, ArrayList formulaInfos) { - Widget widget = (Widget)widgetInfo.getContent().getReplaceObject(); - if (widgetHashMap.containsKey(widget.getClass().getSimpleName())){ + private void searchFormulaFromWidgetValue(Info info, List formulaInfos) { + Widget widget = (Widget) info.getContent().getReplaceObject(); + if (widget instanceof WScaleLayout) { + widget = ((CRBoundsWidget) ((WScaleLayout) widget).getWidget(0)).getWidget(); + } + if (widget instanceof WTitleLayout) { + widget = ((CRBoundsWidget) ((WTitleLayout) widget).getWidget(0)).getWidget(); + if (widget instanceof ChartEditor && ((ChartEditor) widget).getChartCollection() instanceof ChartCollection) { + SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, info.getContent(), (ChartCollection) ((ChartEditor) widget).getChartCollection()); + } + } + if (widgetHashMap.containsKey(widget.getClass().getSimpleName())) { SearchWidgetFormula searchWidgetFormula = widgetHashMap.get(widget.getClass().getSimpleName()); - ITContent content = widgetInfo.getContent().copy(); - searchWidgetFormula.searchFormulaFromWidget(content,formulaInfos); + ITContent content = ITContent.copy(info.getContent()); + searchWidgetFormula.searchFormulaFromWidget(content, formulaInfos); } } + + + public boolean isReplaceObjectExist(Info info) { + return info.getContent() != null && info.getContent().getReplaceObject() != null; + } + + /** + * 对外开放的获取对象的方法 + * + * @return + */ + public static SearchWidgetFormulaAction getInstance() { + return SearchWidgetFormulaAction.SearchWidgetFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchWidgetFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchWidgetFormulaAction instance; + + SearchWidgetFormulaActionEnum() { + instance = new SearchWidgetFormulaAction(); + } + + /** + * 获取对象 + * + * @return + */ + public SearchWidgetFormulaAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java index 9c066b2eb..35b09547e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java @@ -18,38 +18,39 @@ import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.highlight.DefaultHighlight; import com.fr.report.cell.cellattr.highlight.HighlightAction; import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import java.util.ArrayList; +import java.util.List; /** + * 搜索单元格JS + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-13 */ -public class SearchCellJSAction implements SearchAction { +public class SearchCellJSAction implements SearchJS { - public SearchCellJSAction(JTemplate jTemplate, ArrayList jsInfos) { - jsInfos.addAll(search4Infos(jTemplate)); + private SearchCellJSAction() { } - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList jsInfos = new ArrayList<>(); - addJSInfos2ListFromCell(jTemplate, jsInfos); - return jsInfos; + public void searchJSFromObject(JTemplate jTemplate, List jsInfos) { + List CellJSInfos = new ArrayList<>(); + addJSInfos2ListFromCell(jTemplate, CellJSInfos); + jsInfos.addAll(CellJSInfos); } - - private void addJSInfos2ListFromCell(JTemplate jTemplate, ArrayList jsInfos) { - SearchCellAction searchCellAction = new SearchCellAction(jTemplate); + private void addJSInfos2ListFromCell(JTemplate jTemplate, List jsInfos) { + SearchCellAction searchCellAction = SearchCellAction.getInstance(); + searchCellAction.search4Infos(jTemplate); for (CellInfo cellInfo : searchCellAction.getCellInfos()) { CellElement cell = (CellElement) cellInfo.getContent().getReplaceObject(); - ITContent newContent4Cell = cellInfo.getContent().copy(); - ITContent newContent4CellCondition = cellInfo.getContent().copy(); - ITContent newContent4CellWidgetCondition = cellInfo.getContent().copy(); + ITContent newContent4Cell = ITContent.copy(cellInfo.getContent()); + ITContent newContent4CellCondition = ITContent.copy(cellInfo.getContent()); + ITContent newContent4CellWidgetCondition = ITContent.copy(cellInfo.getContent()); //单元格的超级链接里面的JS SearchJSUtils.addJSInfosFromHyperLink(cell, jsInfos, newContent4Cell); @@ -60,26 +61,26 @@ public class SearchCellJSAction implements SearchAction { //单元格如果是图表还需要额外处理 if (cell.getValue() instanceof ChartCollection) { - ArrayList> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue()); - ArrayList nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) cell.getValue()); - //图表-样式-标签以及图表-特效-条件显示 - ITContent htmlITContent = cellInfo.getContent().copy(); - htmlITContent.getContentObject().setCell(cell); - htmlITContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); - SearchJSUtils.addJSInfosFromHtmlLabel(htmlITContent, htmlLabels, jsInfos); - //图表-特效-交互属性 - ITContent conditionContent = cellInfo.getContent().copy(); - conditionContent.getContentObject().setCell(cell); - conditionContent.addOtherPos( - Toolkit.i18nText("Fine-Design_Chart_Interactive"), - Toolkit.i18nText("Fine-Design_Report_Hyperlink") - ); - SearchJSUtils.addJSInfosFromNameJS(conditionContent, nameJavaScripts, jsInfos); + SearchChartJSAction.getInstance().searchChartJS((ChartCollection) cell.getValue(),ITContent.copy(cellInfo.getContent()),jsInfos); + //List> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue()); + //List nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) cell.getValue()); + ////图表-样式-标签以及图表-特效-条件显示 + //ITContent htmlITContent = ITContent.copy(cellInfo.getContent()); + //htmlITContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); + //SearchJSUtils.addJSInfosFromHtmlLabel(htmlITContent, htmlLabels, jsInfos); + ////图表-特效-交互属性 + //ITContent conditionContent = ITContent.copy(cellInfo.getContent()); + //conditionContent.addOtherPos( + // Toolkit.i18nText("Fine-Design_Chart_Chart"), + // Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), + // Toolkit.i18nText("Fine-Design_Chart_Interactive") + //); + //SearchJSUtils.addJSInfosFromNameJS(conditionContent, nameJavaScripts, jsInfos); } } } - private void searchCellConditionJS(CellElement cell, ArrayList jsInfos, ITContent content) { + private void searchCellConditionJS(CellElement cell, List jsInfos, ITContent content) { if (((TemplateCellElement) cell).getHighlightGroup() != null) { for (int i = 0; i < ((TemplateCellElement) cell).getHighlightGroup().size(); i++) { NameJavaScriptGroup njsg = getJSFromAction(((DefaultHighlight) ((TemplateCellElement) cell).getHighlightGroup().getHighlight(i))); @@ -89,13 +90,11 @@ public class SearchCellJSAction implements SearchAction { } } - private void getAllJSFromNameJavaScriptGroup(CellElement cell, ArrayList jsInfos, NameJavaScriptGroup njsg, ITContent content) { + private void getAllJSFromNameJavaScriptGroup(CellElement cell, List jsInfos, NameJavaScriptGroup njsg, ITContent content) { if (isJSExist(njsg)) { for (int i = 0; i < njsg.size(); i++) { if (njsg.getNameHyperlink(i).getJavaScript() instanceof JavaScriptImpl) { - ITContent newContent = content.copy(); - newContent.getContentObject().setCell(cell); - newContent.getContentObject().setNameJavaScript(njsg.getNameHyperlink(i)); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(njsg.getNameHyperlink(i)); SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); } @@ -120,4 +119,38 @@ public class SearchCellJSAction implements SearchAction { private boolean isHighlightAction(HighlightAction highlightAction) { return highlightAction instanceof HyperlinkHighlightAction; } + + + /** + * 开放对外的方法,用于获取SearchCellJSAction的单例 + * + * @return SearchCellJSAction的单例 + */ + public static SearchCellJSAction getInstance() { + return SearchCellJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchCellJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchCellJSAction instance; + + SearchCellJSActionEnum() { + instance = new SearchCellJSAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchCellJSAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java new file mode 100644 index 000000000..7b1fc1e4b --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java @@ -0,0 +1,123 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.chart.chartattr.Axis; +import com.fr.chart.chartattr.Chart; +import com.fr.chart.chartattr.ChartCollection; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.SearchJSUtils; +import com.fr.design.i18n.Toolkit; +import com.fr.js.NameJavaScript; +import com.fr.plugin.chart.attr.axis.VanChartAlertValue; +import com.fr.plugin.chart.attr.axis.VanChartAxis; +import com.fr.plugin.chart.base.VanChartHtmlLabel; +import com.fr.stable.collections.combination.Pair; + +import java.util.List; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-15 + */ +public class SearchChartJSAction { + + /** + * 寻找图表中的JS + * + * @param chartCollection + * @param content + * @param jsInfos + */ + public void searchChartJS(ChartCollection chartCollection, ITContent content, List jsInfos) { + List> htmlLabels = SearchJSUtils.getHtmlLabel(chartCollection); + List nameJavaScripts = SearchJSUtils.getNameJavaScript(chartCollection); + //图表-样式-标签以及图表-特效-条件显示 + ITContent htmlITContent = ITContent.copy(content); + htmlITContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); + SearchJSUtils.addJSInfosFromHtmlLabel(htmlITContent, htmlLabels, jsInfos); + //图表-特效-交互属性 + ITContent conditionContent = ITContent.copy(content); + conditionContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Chart"), + Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), + Toolkit.i18nText("Fine-Design_Chart_Interactive") + ); + SearchJSUtils.addJSInfosFromNameJS(conditionContent, nameJavaScripts, jsInfos); + + for (int i = 0; i < chartCollection.getChartCount(); i++) { + ITContent chartContent = ITContent.copy(content); + searchAxisJS(jsInfos, chartContent, chartCollection.getChart(i)); + } + + } + + private void searchAxisJS(List jsInfos, ITContent chartContent, Chart chart) { + Axis xAxis = chart.getPlot().getxAxis(); + Axis yAxis = chart.getPlot().getyAxis(); + if (xAxis instanceof VanChartAxis) { + ITContent xAxisContent = ITContent.copy(chartContent); + xAxisContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Axis"), + Toolkit.i18nText("Fine-Design_Chart_X_Axis"), + Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Format") + ); + dealAxisHtmlLabelJS(jsInfos, ((VanChartAxis) xAxis).getHtmlLabel(), xAxisContent); + } + + if (yAxis instanceof VanChartAxis) { + ITContent yAxisContent = ITContent.copy(chartContent); + yAxisContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Axis"), + Toolkit.i18nText("Fine-Design_Chart_Y_Axis"), + Toolkit.i18nText("Fine-Design_Chart_Axis_Label_Format") + ); + dealAxisHtmlLabelJS(jsInfos, ((VanChartAxis) yAxis).getHtmlLabel(), yAxisContent); + } + } + + private void dealAxisHtmlLabelJS(List jsInfos, VanChartHtmlLabel label, ITContent content) { + if (isHtmlLabelValid(label)) { + ITContent axisContent = ITContent.copy(content); + axisContent.setReplaceObject(label); + jsInfos.add(new JSInfo(axisContent)); + } + } + + private boolean isHtmlLabelValid(VanChartHtmlLabel label) { + return label != null && label.getCustomText() != null; + } + + /** + * 对外开放的获取单例的方法 + * + * @return + */ + public static SearchChartJSAction getInstance() { + return SearchChartJSAction.SearchChartJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchChartJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchChartJSAction instance; + + SearchChartJSActionEnum() { + instance = new SearchChartJSAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchChartJSAction getInstance() { + return instance; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java index 7f29a12ea..7340f3b24 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java @@ -11,55 +11,92 @@ import com.fr.design.actions.replace.utils.SearchJSUtils; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.js.NameJavaScript; -import com.fr.main.impl.WorkBook; + import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.report.cell.FloatElement; -import com.fr.report.elementcase.ElementCase; -import com.fr.report.poly.PolyECBlock; -import com.fr.report.report.Report; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; + import java.util.*; /** + * 搜索悬浮元素JS + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-15 */ -public class SearchFloatJSAction implements SearchAction { +public class SearchFloatJSAction implements SearchJS { - public SearchFloatJSAction(JTemplate jTemplate, ArrayList jsInfos) { - jsInfos.addAll(search4Infos(jTemplate)); + private SearchFloatJSAction() { } + @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList jsInfos = new ArrayList<>(); - addJSInfos2ListFromFloat(jTemplate, jsInfos); - return jsInfos; + public void searchJSFromObject(JTemplate jTemplate, List jsInfos) { + List floatJSInfos = new ArrayList<>(); + addJSInfos2ListFromFloat(jTemplate, floatJSInfos); + jsInfos.addAll(floatJSInfos); } - private void addJSInfos2ListFromFloat(JTemplate jTemplate, ArrayList jsInfos) { - SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate); + + private void addJSInfos2ListFromFloat(JTemplate jTemplate, List jsInfos) { + SearchFloatAction searchFloatAction = SearchFloatAction.getInstance(); + searchFloatAction.search4Infos(jTemplate); for (FloatInfo floatInfo : searchFloatAction.getFloatInfos()) { FloatElement floatElement = (FloatElement) floatInfo.getContent().getReplaceObject(); - ITContent content = floatInfo.getContent().copy(); + ITContent content = ITContent.copy(floatInfo.getContent()); //从超级链接搜索 SearchJSUtils.addJSInfosFromHyperLink(floatElement, jsInfos, content); if (floatElement.getValue() instanceof ChartCollection) { - ArrayList> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) floatElement.getValue()); - ArrayList nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) floatElement.getValue()); - //图表-样式-标签以及图表-特效-条件显示 - SearchJSUtils.addJSInfosFromHtmlLabel(content, htmlLabels, jsInfos); - //图表-特效-交互属性 - ITContent newContent = content.copy(); - newContent.addOtherPos( - Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), - Toolkit.i18nText("Fine-Design_Chart_Interactive") - ); - SearchJSUtils.addJSInfosFromNameJS(newContent, nameJavaScripts, jsInfos); + SearchChartJSAction.getInstance().searchChartJS((ChartCollection) floatElement.getValue(),ITContent.copy(floatInfo.getContent()),jsInfos); + //List> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) floatElement.getValue()); + //List nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) floatElement.getValue()); + ////图表-样式-标签以及图表-特效-条件显示 + //SearchJSUtils.addJSInfosFromHtmlLabel(content, htmlLabels, jsInfos); + ////图表-特效-交互属性 + //ITContent newContent = ITContent.copy(content); + //newContent.addOtherPos( + // Toolkit.i18nText("Fine-Design_Chart_Chart"), + // Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), + // Toolkit.i18nText("Fine-Design_Chart_Interactive") + //); + //SearchJSUtils.addJSInfosFromNameJS(newContent, nameJavaScripts, jsInfos); } } } + + /** + * 对外开放的获取对象的方法 + * + * @return + */ + public static SearchFloatJSAction getInstance() { + return SearchFloatJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchFloatJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchFloatJSAction instance; + + SearchFloatJSActionEnum() { + instance = new SearchFloatJSAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchFloatJSAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java new file mode 100644 index 000000000..d543a4c2e --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java @@ -0,0 +1,26 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.mainframe.JTemplate; + +import java.util.List; + +/** + * 搜索JS + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-15 + */ +public interface SearchJS extends SearchAction { + + /** + * 获取各个地方的JS + * + * @param jTemplate + * @param jsInfos + */ + default void searchJSFromObject(JTemplate jTemplate, List jsInfos) { + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java deleted file mode 100644 index a62543d36..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.fr.design.actions.replace.action.content.js; - -import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.info.JSInfo; - -import com.fr.design.mainframe.JTemplate; - -import java.util.ArrayList; - - -/** - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-12 - */ -public class SearchJSAction implements SearchAction { - private ArrayList jsInfos; - - public SearchJSAction(JTemplate jTemplate) { - setJsInfos(search4Infos(jTemplate)); - } - - @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList jsInfos = new ArrayList<>(); - //从单元格获取JS - new SearchCellJSAction(jTemplate, jsInfos); - //从参数面板控件 - new SearchWidgetJSAction(jTemplate, jsInfos); - //从模板Web属性 - new SearchWebJSAction(jTemplate, jsInfos); - //从悬浮元素 - new SearchFloatJSAction(jTemplate, jsInfos); - return jsInfos; - } - - public ArrayList getJsInfos() { - return jsInfos; - } - - public void setJsInfos(ArrayList jsInfos) { - this.jsInfos = jsInfos; - } - - -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java new file mode 100644 index 000000000..2a233a523 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java @@ -0,0 +1,105 @@ +package com.fr.design.actions.replace.action.content.js; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.info.JSInfo; + +import com.fr.design.actions.replace.utils.ShowValueUtils; +import com.fr.design.mainframe.JTemplate; +import com.fr.form.ui.Widget; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + + +/** + * 管理搜索JS的注册销毁的管理类 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-08-12 + */ +public class SearchJSManager implements SearchAction { + private List jsInfos; + private Set searchJSSet = new HashSet<>(); + + private SearchJSManager() { + //从控件 + registerJS(SearchWidgetJSAction.getInstance()); + //从单元格获取JS + registerJS(SearchCellJSAction.getInstance()); + //从模板Web属性 + registerJS(SearchWebJSAction.getInstance()); + //从悬浮元素 + registerJS(SearchFloatJSAction.getInstance()); + } + + @Override + public void search4Infos(JTemplate jTemplate) { + List jsInfos = new ArrayList<>(); + for (SearchJS searchJS : searchJSSet) { + searchJS.searchJSFromObject(jTemplate, jsInfos); + } + setJsInfos(jsInfos); + } + + public List getJsInfos() { + return jsInfos; + } + + public void setJsInfos(List jsInfos) { + this.jsInfos = jsInfos; + } + + /** + * 注册对象 + * + * @param searchJS + */ + public void registerJS(SearchJS searchJS) { + searchJSSet.add(searchJS); + } + + /** + * 销毁对象 + */ + public void removeJS(SearchJS searchJS) { + searchJSSet.remove(searchJS); + } + + /** + * 对外开放的获取对象的方法 + * + * @return + */ + public static SearchJSManager getInstance() { + return SearchJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchJSManager instance; + + SearchJSActionEnum() { + instance = new SearchJSManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchJSManager getInstance() { + return instance; + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java index 6c84d71af..4805a82b5 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java @@ -20,17 +20,22 @@ import com.fr.web.attr.ReportWebAttr; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** + * 搜索模板Web属性里的JS + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-15 */ -public class SearchWebJSAction implements SearchAction { +public class SearchWebJSAction implements SearchJS { private final static HashMap map = new HashMap<>(); - private ArrayList arrayList = new ArrayList<>(); + private List arrayList = new ArrayList<>(); + private SearchWebJSAction() { + } static { map.put("WebPage", Toolkit.i18nText("Fine-Design_Report_Pagination_Setting")); @@ -38,18 +43,17 @@ public class SearchWebJSAction implements SearchAction { map.put("WebView", Toolkit.i18nText("Fine-Design_Report_Data_Analysis_Settings")); } - public SearchWebJSAction(JTemplate jTemplate, ArrayList jsInfos) { - jsInfos.addAll(search4Infos(jTemplate)); - } @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList jsInfos = new ArrayList<>(); - addJSInfos2ListFromWeb(jTemplate, jsInfos); - return jsInfos; + public void searchJSFromObject(JTemplate jTemplate, List jsInfos) { + arrayList.clear(); + List webJSInfos = new ArrayList<>(); + addJSInfos2ListFromWeb(jTemplate, webJSInfos); + jsInfos.addAll(webJSInfos); } - private void addJSInfos2ListFromWeb(JTemplate jTemplate, ArrayList jsInfos) { + + private void addJSInfos2ListFromWeb(JTemplate jTemplate, List jsInfos) { if (jTemplate.getTarget() instanceof WorkBook) { WorkBook workBook = (WorkBook) jTemplate.getTarget(); ReportWebAttr webAttr = workBook.getReportWebAttr(); @@ -62,8 +66,8 @@ public class SearchWebJSAction implements SearchAction { } } - private void addJSInfos2ListFromArray(ITContent content, ArrayList jsInfos, WebContent webContent) { - ITContent newContent = content.copy(); + private void addJSInfos2ListFromArray(ITContent content, List jsInfos, WebContent webContent) { + ITContent newContent = ITContent.copy(content); if (map.containsKey(webContent.getClass().getSimpleName())) { newContent.addOtherPos(map.get(webContent.getClass().getSimpleName())); } @@ -71,16 +75,16 @@ public class SearchWebJSAction implements SearchAction { addJSInfos2ListFromWebListener(newContent, jsInfos, webContent); } - private void addJSInfos2ListFromWebListener(ITContent content, ArrayList jsInfos, WebContent webContent) { + private void addJSInfos2ListFromWebListener(ITContent content, List jsInfos, WebContent webContent) { for (int i = 0; i < webContent.getListenerSize(); i++) { Listener listener = webContent.getListener(i); - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(listener); SearchJSUtils.searchJSFromListener(jsInfos, newContent); } } - private void addJSInfos2ListFromWebButton(ITContent content, ArrayList jsInfos, WebContent webContent) { + private void addJSInfos2ListFromWebButton(ITContent content, List jsInfos, WebContent webContent) { if (hasToolBarManagers(webContent.getToolBarManagers())) { for (ToolBarManager toolBarManager : webContent.getToolBarManagers()) { dealWithCustonToolBarButtonImpl(content, jsInfos, toolBarManager); @@ -97,31 +101,29 @@ public class SearchWebJSAction implements SearchAction { } - private void addContent(ArrayList arrayList, WebContent webContent) { + private void addContent(List arrayList, WebContent webContent) { if (webContent != null) { arrayList.add(webContent); } } - private void dealWithCustonToolBarButtonImpl(ITContent content, ArrayList jsInfos, ToolBarManager toolBarManager) { + private void dealWithCustonToolBarButtonImpl(ITContent content, List jsInfos, ToolBarManager toolBarManager) { for (int i = 0; i < toolBarManager.getToolBar().getWidgetSize(); i++) { if (isWidgetIntanceofCustomToolBarButton(toolBarManager.getToolBar().getWidget(i))) { - ITContent newContent = content.copy(); - newContent.getContentObject().setWidget(toolBarManager.getToolBar().getWidget(i)); - addJSInfos2ListFromButtonImpl(newContent, jsInfos); + ITContent newContent = ITContent.copy(content); + addJSInfos2ListFromButtonImpl(newContent, jsInfos, toolBarManager.getToolBar().getWidget(i)); } } } - private void addJSInfos2ListFromButtonImpl(ITContent content, ArrayList jsInfos) { + private void addJSInfos2ListFromButtonImpl(ITContent content, List jsInfos, Widget widget) { - if (((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl() != null - && ((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl() instanceof JavaScriptImpl) { - ITContent newContent = content.copy(); + if (((CustomToolBarButton) widget).getJSImpl() != null + && ((CustomToolBarButton) widget).getJSImpl() instanceof JavaScriptImpl) { + ITContent newContent = ITContent.copy(content); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Custom_Form_Button")); - newContent.getContentObject().setJs(((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl()); - newContent.setReplaceObject(((CustomToolBarButton) content.getContentObject().getWidget()).getJSImpl()); + newContent.setReplaceObject(((CustomToolBarButton) widget).getJSImpl()); SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); } @@ -134,4 +136,37 @@ public class SearchWebJSAction implements SearchAction { private boolean isWidgetIntanceofCustomToolBarButton(Widget widget) { return widget instanceof CustomToolBarButton; } + + /** + * 对外开放的获取单例的方法 + * + * @return + */ + public static SearchWebJSAction getInstance() { + return SearchWebJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchWebJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchWebJSAction instance; + + SearchWebJSActionEnum() { + instance = new SearchWebJSAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchWebJSAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java index 2881af5c0..e2379a8de 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java @@ -1,7 +1,5 @@ package com.fr.design.actions.replace.action.content.js; -import com.fr.base.parameter.ParameterUI; -import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.action.content.component.SearchComponentAction; import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; import com.fr.design.actions.replace.info.ComponentInfo; @@ -13,45 +11,79 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.SearchJSUtils; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; -import com.fr.form.ui.Widget; import com.fr.main.impl.WorkBook; -import com.fr.main.parameter.ReportParameterAttr; import java.util.ArrayList; +import java.util.List; /** + * 搜索控件的JS + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-13 */ -public class SearchWidgetJSAction implements SearchAction { - public SearchWidgetJSAction(JTemplate jTemplate,ArrayList jsInfos){ - jsInfos.addAll(search4Infos(jTemplate)); - } +public class SearchWidgetJSAction implements SearchJS { + @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList jsInfos = new ArrayList<>(); - addJSInfos2ListFromWidget(jTemplate,jsInfos); - return jsInfos; + public void searchJSFromObject(JTemplate jTemplate, List jsInfos) { + List widgetJSInfos = new ArrayList<>(); + addJSInfos2ListFromWidget(jTemplate, widgetJSInfos); + jsInfos.addAll(widgetJSInfos); } - private void addJSInfos2ListFromWidget(JTemplate jTemplate, ArrayList jsInfos) { - if (jTemplate.getTarget() instanceof WorkBook){ - SearchWidgetAction searchWidgetAction = new SearchWidgetAction(jTemplate); - for (WidgetInfo widgetInfo : searchWidgetAction.getWidgetInfos()){ - ITContent content = widgetInfo.getContent().copy(); + private void addJSInfos2ListFromWidget(JTemplate jTemplate, List jsInfos) { + if (jTemplate.getTarget() instanceof WorkBook) { + SearchWidgetAction searchWidgetAction = SearchWidgetAction.getInstance(); + searchWidgetAction.search4Infos(jTemplate); + for (WidgetInfo widgetInfo : searchWidgetAction.getWidgetInfos()) { + ITContent content = ITContent.copy(widgetInfo.getContent()); content.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event")); - SearchJSUtils.selectJSAction(jsInfos,content); + SearchJSUtils.selectJSAction(jsInfos, content); } } else { - SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate); - for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()){ - ITContent content = componentInfo.getContent().copy(); + SearchComponentAction searchComponentAction = SearchComponentAction.getInstance(); + searchComponentAction.search4Infos(jTemplate); + for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()) { + ITContent content = ITContent.copy(componentInfo.getContent()); content.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event")); - SearchJSUtils.selectJSAction(jsInfos,content); + SearchJSUtils.selectJSAction(jsInfos, content); } } } + /** + * 对外开放获取对象的方法 + * + * @return + */ + public static SearchWidgetJSAction getInstance() { + return SearchWidgetJSActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchWidgetJSActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchWidgetJSAction instance; + + SearchWidgetJSActionEnum() { + instance = new SearchWidgetJSAction(); + } + + /** + * 获取单例的方法 + * + * @return + */ + public SearchWidgetJSAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java index ca30e60d5..005ae6f3c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java @@ -3,6 +3,7 @@ package com.fr.design.actions.replace.action.content.sql; import com.fr.data.TableDataSource; import com.fr.data.impl.DBTableData; import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; import com.fr.design.actions.replace.info.SQLInfo; import com.fr.design.actions.replace.info.base.ITContent; @@ -10,54 +11,54 @@ import com.fr.design.data.tabledata.wrapper.TableDataFactory; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.file.TableDataConfig; -import com.fr.form.main.Form; -import com.fr.main.impl.WorkBook; import com.fr.stable.AssistUtils; import java.util.ArrayList; import java.util.Iterator; +import java.util.List; /** + * 搜索SQL + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-16 */ public class SearchSQLAction implements SearchAction { - private ArrayList sqlInfos; + private List sqlInfos; - public SearchSQLAction(JTemplate jTemplate) { - setSqlInfos(search4Infos(jTemplate)); + private SearchSQLAction() { } @Override - public ArrayList search4Infos(JTemplate jTemplate) { - ArrayList sqlInfos = new ArrayList<>(); + public void search4Infos(JTemplate jTemplate) { + List sqlInfos = new ArrayList<>(); ITContent content = new ITContent(); content.setTemplateName(jTemplate.getTemplateName()); addModelDataInfos2Array(jTemplate, content, sqlInfos); addServerDataInfos2Array(content, sqlInfos); - return sqlInfos; + setSqlInfos(sqlInfos); } /** * 服务器数据集 + * * @param content * @param sqlInfos */ - private void addServerDataInfos2Array(ITContent content, ArrayList sqlInfos) { + private void addServerDataInfos2Array(ITContent content, List sqlInfos) { TableDataConfig tableDataConfig = TableDataConfig.getInstance(); String[] nameArray = TableDataFactory.getSortOfChineseNameOfServerData(tableDataConfig); for (String dataName : nameArray) { if (tableDataConfig.getTableData(dataName) instanceof DBTableData) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData"), dataName ); newContent.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData")); newContent.setReplaceObject(tableDataConfig.getTableData(dataName)); - newContent.getContentObject().setDbTableData((DBTableData) tableDataConfig.getTableData(dataName)); sqlInfos.add(new SQLInfo(newContent)); } @@ -66,25 +67,25 @@ public class SearchSQLAction implements SearchAction { /** * 模板数据集 + * * @param jTemplate * @param content * @param sqlInfos */ - private void addModelDataInfos2Array(JTemplate jTemplate, ITContent content, ArrayList sqlInfos) { + private void addModelDataInfos2Array(JTemplate jTemplate, ITContent content, List sqlInfos) { if (jTemplate.getTarget() instanceof TableDataSource) { TableDataSource source = (TableDataSource) jTemplate.getTarget(); Iterator dataIterator = source.getTableDataNameIterator(); while (dataIterator.hasNext()) { String dataName = (String) dataIterator.next(); if (source.getTableData(dataName) instanceof DBTableData) { - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData"), dataName ); newContent.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData")); newContent.setReplaceObject(source.getTableData(dataName)); - newContent.getContentObject().setDbTableData(((DBTableData) source.getTableData(dataName))); sqlInfos.add(new SQLInfo(newContent)); } } @@ -92,11 +93,11 @@ public class SearchSQLAction implements SearchAction { } - public ArrayList getSqlInfos() { + public List getSqlInfos() { return sqlInfos; } - public void setSqlInfos(ArrayList sqlInfos) { + public void setSqlInfos(List sqlInfos) { this.sqlInfos = sqlInfos; } @@ -104,4 +105,38 @@ public class SearchSQLAction implements SearchAction { public String toString() { return AssistUtils.toString(this); } + + + /** + * 对外开放的获取单例对象方法 + * + * @return + */ + public static SearchSQLAction getInstance() { + return SearchSQLAction.SearchSQLActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchSQLActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchSQLAction instance; + + SearchSQLActionEnum() { + instance = new SearchSQLAction(); + } + + /** + * 获取对象 + * + * @return + */ + public SearchSQLAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java index e86c5e3e1..98d2282f5 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java @@ -10,13 +10,17 @@ import com.fr.form.ui.WaterMark; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; import com.fr.form.ui.widget.CRBoundsWidget; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 决策报表控件种类 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-29 @@ -27,7 +31,7 @@ public enum FrmWidgetType implements SearchFrmWidget, DealWithInfoValue { */ W_SCALE_LAYOUT("WScaleLayout") { @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { WScaleLayout widget = (WScaleLayout) info.getContent().getReplaceObject(); if (((WidgetInfo) info).isWaterMark()) { FrmWidgetType frmWidgetType = FrmWidgetType.match(((CRBoundsWidget) widget.getWidget(0)).getWidget().getClass().getSimpleName()); @@ -123,9 +127,9 @@ public enum FrmWidgetType implements SearchFrmWidget, DealWithInfoValue { * @param widget * @return */ - public ArrayList dealAbsoluteWidget(ITContent content, Widget widget) { + public List dealAbsoluteWidget(ITContent content, Widget widget) { ArrayList widgetInfos = new ArrayList<>(); - ITContent newContent = content.copy(); + ITContent newContent = ITContent.copy(content); widgetInfos.add(new WidgetInfo(newContent)); return widgetInfos; } @@ -150,12 +154,12 @@ public enum FrmWidgetType implements SearchFrmWidget, DealWithInfoValue { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { return new HashMap<>(); } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Widget widget = (Widget) info.getContent().getReplaceObject(); if (widget instanceof WScaleLayout) { widget = ((CRBoundsWidget) ((WScaleLayout) widget).getWidget(0)).getWidget(); @@ -179,7 +183,7 @@ public enum FrmWidgetType implements SearchFrmWidget, DealWithInfoValue { } @Override - public ArrayList addFrmWidget2Array(ITContent content, Widget widget) { + public List addFrmWidget2Array(ITContent content, Widget widget) { return dealAbsoluteWidget(content, widget); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java index 95aa3c11c..936d8ce6c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java @@ -3,11 +3,12 @@ package com.fr.design.actions.replace.action.content.widget; import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WLayout; -import java.util.ArrayList; +import java.util.List; /** + * 获取决策报表控件相关 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-29 @@ -16,9 +17,10 @@ public interface SearchFrmWidget { /** * 将决策报表的控件加入数组中 + * * @param content ITContent信息 * @param widget 对应的控件 * @return */ - ArrayList addFrmWidget2Array(ITContent content, Widget widget); + List addFrmWidget2Array(ITContent content, Widget widget); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java index 28ae1cef3..f2e6d4b93 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java @@ -9,11 +9,10 @@ import com.fr.design.actions.replace.info.ComponentInfo; import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.form.main.Form; import com.fr.form.ui.Widget; -import com.fr.form.ui.container.WLayout; -import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.main.impl.WorkBook; import com.fr.main.parameter.ReportParameterAttr; import com.fr.report.cell.TemplateCellElement; @@ -24,6 +23,7 @@ import com.fr.report.cell.cellattr.highlight.WidgetHighlightAction; import com.fr.stable.StringUtils; import java.util.ArrayList; +import java.util.List; /** * 获取控件 @@ -34,14 +34,11 @@ import java.util.ArrayList; * created by Destiny.Lin on 2022-08-16 */ public class SearchWidgetAction implements SearchAction { - ArrayList widgetInfos; + List widgetInfos; - public SearchWidgetAction(JTemplate jTemplate) { - setWidgetInfos(search4Infos(jTemplate)); - } @Override - public ArrayList search4Infos(JTemplate jTemplate) { + public void search4Infos(JTemplate jTemplate) { ArrayList widgetInfos = new ArrayList<>(); ITContent content = new ITContent(); content.setTemplateName(jTemplate.getTemplateName()); @@ -53,12 +50,12 @@ public class SearchWidgetAction implements SearchAction { } else if (jTemplate.getTarget() instanceof Form) { addFrmWidget2Array(content, widgetInfos, jTemplate); } - - return widgetInfos; + setWidgetInfos(widgetInfos); } private void addFrmWidget2Array(ITContent content, ArrayList widgetInfos, JTemplate jTemplate) { - SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate); + SearchComponentAction searchComponentAction = SearchComponentAction.getInstance(); + searchComponentAction.search4Infos(jTemplate); for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()) { FrmWidgetType frmWidgetType = FrmWidgetType.match(componentInfo.getContent().getReplaceObject().getClass().getSimpleName()); if (frmWidgetType != null) { @@ -69,7 +66,8 @@ public class SearchWidgetAction implements SearchAction { } private void addCellWidget2Array(ArrayList widgetInfos, JTemplate jTemplate) { - SearchCellAction searchCellAction = new SearchCellAction(jTemplate); + SearchCellAction searchCellAction = SearchCellAction.getInstance(); + searchCellAction.search4Infos(jTemplate); if (searchCellAction.getCellInfos().size() > 0) { for (CellInfo cellInfo : searchCellAction.getCellInfos()) { //单元格本身的控件 @@ -97,7 +95,7 @@ public class SearchWidgetAction implements SearchAction { HighlightAction highlightAction = ((DefaultHighlight) highlightGroup.getHighlight(i)).getHighlightAction(j); //处理HighlightAction if (isHighlightWidgetExist(highlightAction)) { - ITContent content = cellInfo.getContent().copy(); + ITContent content = ITContent.copy(cellInfo.getContent()); content.addOtherPos("条件属性-超链控件"); content.setReplaceObject(((WidgetHighlightAction) highlightAction).getWidget()); content.setShowObject(cellInfo.getContent().getReplaceObject()); @@ -115,14 +113,13 @@ public class SearchWidgetAction implements SearchAction { if (cellInfo.getContent().getReplaceObject() instanceof TemplateCellElement && ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget() != null) { // 单元格内有控件 - ITContent newContent = cellInfo.getContent().copy(); + ITContent newContent = ITContent.copy(cellInfo.getContent()); Widget widget = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget(); newContent.addOtherPos("控件"); if (!StringUtils.isEmpty(widget.getWidgetName())) { newContent.addOtherPos(widget.getWidgetName()); } - newContent.getContentObject().setWidget(widget); newContent.setReplaceObject(widget); newContent.setShowObject(cellInfo.getContent().getReplaceObject()); widgetInfos.add(new WidgetInfo(newContent)); @@ -137,11 +134,13 @@ public class SearchWidgetAction implements SearchAction { ParameterUI parameterUI = reportParameterAttr.getParameterUI(); Widget[] widgets = parameterUI.getAllWidgets(); for (Widget widget : widgets) { - ITContent newContent = content.copy(); - newContent.addOtherPos("参数面板控件-" + widget.getWidgetName()); + ITContent newContent = ITContent.copy(content); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Parameter_Panel"), + Toolkit.i18nText("Fine-Design_Basic_Widget"), + widget.getWidgetName()); newContent.setReplaceObject(widget); - newContent.getContentObject().setWidget(widget); - newContent.setShowObject("参数面板控件"); + newContent.setShowObject(Toolkit.i18nText("Fine-Design_Parameter_Panel")); widgetInfos.add(new WidgetInfo(newContent)); } } @@ -150,17 +149,51 @@ public class SearchWidgetAction implements SearchAction { /** * 是否为空 + * * @return 为空返回true */ public boolean isWidgetInfosEmpty() { return widgetInfos.isEmpty(); } - public ArrayList getWidgetInfos() { + public List getWidgetInfos() { return widgetInfos; } - public void setWidgetInfos(ArrayList widgetInfos) { + public void setWidgetInfos(List widgetInfos) { this.widgetInfos = widgetInfos; } + + /** + * 对外开放获取对象的方法 + * + * @return + */ + public static SearchWidgetAction getInstance() { + return SearchWidgetAction.SearchWidgetActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + enum SearchWidgetActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchWidgetAction instance; + + SearchWidgetActionEnum() { + instance = new SearchWidgetAction(); + } + + /** + * 获取对象 + * + * @return + */ + public SearchWidgetAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java index aff0a56fd..94a8f73ce 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java @@ -3,20 +3,12 @@ package com.fr.design.actions.replace.info; import com.fr.base.Formula; import com.fr.chart.chartattr.ChartCollection; import com.fr.chart.chartattr.Title; -import com.fr.design.actions.replace.action.ShowValue; -import com.fr.design.actions.replace.action.content.widget.FrmWidgetType; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.ShowValueUtils; -import com.fr.design.write.submit.DBManipulationPane; -import com.fr.form.ui.Widget; import com.fr.general.GeneralUtils; -import com.fr.general.ImageWithSuffix; -import com.fr.general.data.TableDataColumn; -import com.fr.invoke.Reflect; import com.fr.main.impl.LinkWorkBookTemplate; import com.fr.report.cell.CellElement; -import com.fr.report.cell.FloatElement; import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.RichText; import com.fr.report.cell.cellattr.core.SubReport; @@ -24,14 +16,16 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.cell.painter.BiasTextPainter; import com.fr.stable.AssistUtils; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; +import java.util.Map; /** + * 存储单元格信息的Info * 返回:查找内容(匹配词高亮)、模板名称、所在sheet、分布组件、单元格位置、操作 * * @author Destiny.Lin @@ -56,6 +50,11 @@ public class CellInfo implements Info { this.content = content; } + /** + * toString + * + * @return + */ @Override public String toString() { return AssistUtils.toString(this); @@ -69,7 +68,7 @@ public class CellInfo implements Info { * @return */ @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap stringHashMap = new HashMap<>(); CellElement cellElement = (((CellElement) (this.getContent().getReplaceObject()))); if (cellElement.getValue() != null && !this.isChartExist()) { @@ -92,7 +91,7 @@ public class CellInfo implements Info { * @param operatorArray 存储内容类替换所要操作的所有位置(Pair<起始位置,结束位置>) */ @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { CellElement cellElement = (((CellElement) (this.getContent().getReplaceObject()))); if (this.isChartExist() && this.getCellChartIndex() != -1) { ChartCollection chartCollection = (ChartCollection) ((CellElement) this.getContent().getReplaceObject()).getValue(); @@ -125,6 +124,11 @@ public class CellInfo implements Info { this.cellChartIndex = cellChartIndex; } + /** + * 是否是图表 + * + * @return + */ public boolean isChartExist() { return chartExist; } @@ -139,7 +143,7 @@ public class CellInfo implements Info { * @return */ public CellInfo copy() { - ITContent content = this.getContent().copy(); + ITContent content = ITContent.copy(this.getContent()); CellInfo cellInfo = new CellInfo(content); cellInfo.setCellChartIndex(this.getCellChartIndex()); cellInfo.setChartExist(this.isChartExist()); @@ -157,6 +161,11 @@ public class CellInfo implements Info { return this.getContent().getOldShowStr(); } + /** + * 校验值有没有被修改 + * + * @return + */ @Override public Boolean checkValid() { CellElement cellElement = (((CellElement) (this.getContent().getReplaceObject()))); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java index 3bcaf5323..cb84837f4 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java @@ -4,12 +4,16 @@ import com.fr.design.actions.replace.action.content.component.ComponentType; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.form.ui.Widget; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; + -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 存储组件的Info + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-29 @@ -26,7 +30,7 @@ public class ComponentInfo implements Info { } @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap hashMap = new HashMap<>(); if (this.content.getReplaceObject() != null && this.content.getReplaceObject() instanceof Widget) { hashMap.put("content", ((Widget) this.content.getReplaceObject()).getWidgetName()); @@ -49,7 +53,7 @@ public class ComponentInfo implements Info { * @param operatorArray 存储内容类替换所要操作的所有位置(Pair<起始位置,结束位置>) */ @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { ComponentType componentType = ComponentType.match(this.content.getReplaceObject().getClass().getSimpleName()); if (componentType != null) { componentType.setValue(info, findStr, replaceStr, operatorArray); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java index ecde8d185..14a3ff4d1 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java @@ -1,10 +1,13 @@ package com.fr.design.actions.replace.info; import com.fr.design.actions.replace.info.base.ITContent; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; + import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 处理信息 @@ -19,9 +22,9 @@ public interface DealWithInfoValue { * 获取存储的值 * * @param o 用于替换的replaceObject - * @return 返回便于处理的HashMap(不同类型可能会存在多个需要存储的数据,eg:控件名 & 水印) + * @return 返回便于处理的Map(不同类型可能会存在多个需要存储的数据,eg:控件名 & 水印) */ - HashMap getValue(Object... o); + Map getValue(Object... o); /** @@ -32,7 +35,7 @@ public interface DealWithInfoValue { * @param replaceStr 用于替换的字符串 * @param operatorArray 存储内容类替换所要操作的所有位置(Pair<起始位置,结束位置>) */ - void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray); + void setValue(Info info, String findStr, String replaceStr, List> operatorArray); /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java index 8010fea81..ec8cb28dd 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java @@ -9,13 +9,16 @@ import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.general.GeneralUtils; import com.fr.report.cell.FloatElement; import com.fr.stable.AssistUtils; -import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; + -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 存储悬浮元素的Info + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-15 @@ -38,6 +41,11 @@ public class FloatInfo implements Info { this.content = content; } + /** + * toString + * + * @return + */ @Override public String toString() { return AssistUtils.toString(this); @@ -51,6 +59,11 @@ public class FloatInfo implements Info { this.floatChartIndex = charIndex; } + /** + * 是否是图表 + * + * @return + */ public boolean isChartExist() { return chartExist; } @@ -60,7 +73,7 @@ public class FloatInfo implements Info { } @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap hashMap = new HashMap<>(); FloatElement floatElement = (((FloatElement) (this.getContent().getReplaceObject()))); if (!this.isChartExist()) { @@ -70,7 +83,7 @@ public class FloatInfo implements Info { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { if (this.isChartExist() && this.getFloatChartIndex() != -1) { ChartCollection chartCollection = (ChartCollection) ((FloatElement) this.getContent().getReplaceObject()).getValue(); Title title = chartCollection.getChart(this.getFloatChartIndex()).getTitle(); @@ -102,10 +115,11 @@ public class FloatInfo implements Info { /** * 复制 + * * @return */ public FloatInfo copy() { - ITContent content = this.getContent().copy(); + ITContent content = ITContent.copy(this.getContent()); FloatInfo floatInfo = new FloatInfo(content); floatInfo.setFloatChartIndex(this.getFloatChartIndex()); floatInfo.setChartExist(this.isChartExist()); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java index f45689655..41779d8cc 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java @@ -4,23 +4,28 @@ package com.fr.design.actions.replace.info; import com.fr.data.impl.FormulaDictionary; import com.fr.design.actions.replace.action.content.formula.FormulaReplaceObject; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.i18n.Toolkit; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 存储公式类型的Info + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 */ -public class FormulaInfo implements Info{ - private ITContent content; +public class FormulaInfo implements Info { + private ITContent content; public FormulaInfo(ITContent content) { this.content = content; } + @Override public ITContent getContent() { return content; @@ -31,41 +36,43 @@ public class FormulaInfo implements Info{ } @Override - public HashMap getValue(Object... o){ - HashMap map = new HashMap<>(); + public Map getValue(Object... o) { + Map map = new HashMap<>(); //这边比较特殊,存的都是FormulaDictionary ,特殊判断一下 - if (this.content.getOtherPos().contains("数据字典-公式类型-显示值")){ - map.put("content",((FormulaDictionary)this.getContent().getReplaceObject()).getExcuteFormula()); - } else if (this.content.getOtherPos().contains("数据字典-公式类型-实际值")){ - map.put("content",((FormulaDictionary)this.getContent().getReplaceObject()).getProduceFormula()); + if (this.content.getOtherPos().contains(Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Display_Value"))) { + map.put("content", ((FormulaDictionary) this.getContent().getReplaceObject()).getExcuteFormula()); + } else if (this.content.getOtherPos().contains(Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Actual_Value"))) { + map.put("content", ((FormulaDictionary) this.getContent().getReplaceObject()).getProduceFormula()); } else { map = getCommonValue(); } return map; } + @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { FormulaReplaceObject formulaReplaceObject = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); - if (formulaReplaceObject != null){ - formulaReplaceObject.setValue(this , findStr , replaceStr, operatorArray); + if (formulaReplaceObject != null) { + formulaReplaceObject.setValue(this, findStr, replaceStr, operatorArray); } } @Override public String getInfoShowStr(Info info) { FormulaReplaceObject formulaReplaceObject = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); - if (formulaReplaceObject != null){ - return formulaReplaceObject.getInfoShowStr(info); + if (formulaReplaceObject != null) { + return formulaReplaceObject.getInfoShowStr(info); } return StringUtils.EMPTY; } - private HashMap getCommonValue(){ + private Map getCommonValue() { + Map map = new HashMap(); FormulaReplaceObject o = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); - if(o != null){ + if (o != null) { return o.getValue(this.content.getReplaceObject()); } - return new HashMap<>(); + return map; } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java index 9b318a217..3f5a30d86 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java @@ -1,18 +1,20 @@ package com.fr.design.actions.replace.info; import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.stable.StringUtils; /** + * 主要的数据结构 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 */ -public interface Info extends DealWithInfoValue{ +public interface Info extends DealWithInfoValue { /** * 获取ITContent + * * @return */ ITContent getContent(); @@ -20,20 +22,24 @@ public interface Info extends DealWithInfoValue{ /** * 更新旧值 + * * @param oldShowStr * @param lastSearchStr */ - default void updateOldStr(String oldShowStr, String lastSearchStr){ + default void updateOldStr(String oldShowStr, String lastSearchStr) { this.getContent().setOldShowStr(oldShowStr); this.getContent().setLastSearchStr(lastSearchStr); } /** * 校验正确性(是否被修改) + * * @return */ - default Boolean checkValid(){ + default Boolean checkValid() { //todo 完善所有类型的校验 return true; - }; + } + + ; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java index 23e6a9b3b..b1123c4eb 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java @@ -4,14 +4,18 @@ package com.fr.design.actions.replace.info; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.stable.AssistUtils; -import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; + import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 存储JS信息的Info + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-11 @@ -34,7 +38,7 @@ public class JSInfo implements Info { } @Override - public HashMap getValue(Object... object) { + public Map getValue(Object... object) { ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); if (o != null) { return o.getValue(this.content.getReplaceObject()); @@ -43,7 +47,7 @@ public class JSInfo implements Info { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); if (o != null) { o.setValue(this, findStr, replaceStr, this.getContent().getOperatorArray()); @@ -57,18 +61,33 @@ public class JSInfo implements Info { } + /** + * toString + * + * @return + */ @Override public String toString() { return AssistUtils.toString(this); } + /** + * 复制 + * + * @return + */ public JSInfo copy() { - ITContent content = this.getContent().copy(); + ITContent content = ITContent.copy(this.getContent()); JSInfo jsInfo = new JSInfo(content); jsInfo.setContentFlag(this.isContent()); return jsInfo; } + /** + * 是否属于存储内容 + * + * @return + */ public boolean isContent() { return contentFlag; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java index 9918abec4..ea82c1929 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java @@ -1,18 +1,18 @@ package com.fr.design.actions.replace.info; import com.fr.data.impl.DBTableData; -import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.form.event.Listener; import com.fr.js.JavaScriptImpl; import com.fr.js.NameJavaScript; import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 处理所存储的不同类型的对象(除了Formula外的其他对象) @@ -29,19 +29,15 @@ public enum ReplaceObject implements DealWithInfoValue { */ NAME_JAVA_SCRIPT("NameJavaScript") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((NameJavaScript) o[0]).getName())) { - map.put("name", ((NameJavaScript) o[0]).getName()); - } - if (!StringUtils.isEmpty(((JavaScriptImpl) (((NameJavaScript) o[0]).getJavaScript())).getContent())) { - map.put("content", ((JavaScriptImpl) (((NameJavaScript) o[0]).getJavaScript())).getContent()); - } + addValue2Map(nameKey, ((NameJavaScript) o[0]).getName(), map); + addValue2Map(contentKey, ((JavaScriptImpl) (((NameJavaScript) o[0]).getJavaScript())).getContent(), map); return map; } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { if (((JSInfo) info).isContent()) { JavaScriptImpl javaScript = (JavaScriptImpl) ((NameJavaScript) (info.getContent().getReplaceObject())).getJavaScript(); info.updateOldStr(javaScript.getContent(), findStr); @@ -69,19 +65,15 @@ public enum ReplaceObject implements DealWithInfoValue { */ LISTENER("Listener") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Listener) o[0]).getName())) { - map.put("name", ((Listener) o[0]).getName()); - } - if (!StringUtils.isEmpty(((JavaScriptImpl) (((Listener) o[0]).getAction())).getContent())) { - map.put("content", ((JavaScriptImpl) (((Listener) o[0]).getAction())).getContent()); - } + addValue2Map(nameKey, ((Listener) o[0]).getName(), map); + addValue2Map(contentKey, ((JavaScriptImpl) (((Listener) o[0]).getAction())).getContent(), map); return map; } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { if (((JSInfo) info).isContent()) { if (operatorArray.size() > 0) { JavaScriptImpl javaScript = (JavaScriptImpl) ((Listener) (info.getContent().getReplaceObject())).getAction(); @@ -111,16 +103,14 @@ public enum ReplaceObject implements DealWithInfoValue { */ VAN_CHART_HTML_LABEL("VanChartHtmlLabel") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((VanChartHtmlLabel) o[0]).getCustomText())) { - map.put("content", ((VanChartHtmlLabel) o[0]).getCustomText()); - } + addValue2Map(contentKey, ((VanChartHtmlLabel) o[0]).getCustomText(), map); return map; } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { if (((JSInfo) info).isContent()) { if (operatorArray.size() > 0) { VanChartHtmlLabel htmlLabel = ((VanChartHtmlLabel) (info.getContent().getReplaceObject())); @@ -142,16 +132,14 @@ public enum ReplaceObject implements DealWithInfoValue { */ JAVA_SCRIPT_IMPL("JavaScriptImpl") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((JavaScriptImpl) o[0]).getContent())) { - map.put("content", ((JavaScriptImpl) o[0]).getContent()); - } + addValue2Map(contentKey, ((JavaScriptImpl) o[0]).getContent(), map); return map; } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { JavaScriptImpl javaScript = (JavaScriptImpl) (info.getContent().getReplaceObject()); info.updateOldStr(javaScript.getContent(), findStr); javaScript.setContent(ShowValueUtils.replaceAll(javaScript.getContent(), findStr, replaceStr)); @@ -168,16 +156,14 @@ public enum ReplaceObject implements DealWithInfoValue { */ DB_TABLE_DATA("DBTableData") { @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((DBTableData) o[0]).getQuery())) { - map.put("content", ((DBTableData) o[0]).getQuery()); - } + addValue2Map(contentKey, ((DBTableData) o[0]).getQuery(), map); return map; } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { DBTableData dbTableData = (DBTableData) info.getContent().getReplaceObject(); info.updateOldStr(dbTableData.getQuery(), findStr); dbTableData.setQuery(ShowValueUtils.replaceAll(dbTableData.getQuery(), findStr, replaceStr)); @@ -191,6 +177,8 @@ public enum ReplaceObject implements DealWithInfoValue { String name; + String nameKey = "name"; + String contentKey = "content"; ReplaceObject(String name) { this.name = name; @@ -213,5 +201,18 @@ public enum ReplaceObject implements DealWithInfoValue { return null; } + /** + * 将键值放入Map中 + * + * @param flag + * @param content + * @param map + */ + public void addValue2Map(String flag, String content, Map map) { + if (StringUtils.isNotEmpty(content)) { + map.put(flag, content); + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java index cf40e52ca..f8700f0ea 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java @@ -3,12 +3,15 @@ package com.fr.design.actions.replace.info; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.stable.AssistUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 存储SQL信息的Info + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-16 @@ -30,7 +33,7 @@ public class SQLInfo implements Info { } @Override - public HashMap getValue(Object... objects) { + public Map getValue(Object... objects) { ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); if (o != null) { return o.getValue(this.content.getReplaceObject()); @@ -39,7 +42,7 @@ public class SQLInfo implements Info { } public SQLInfo copy() { - ITContent content = this.getContent().copy(); + ITContent content = ITContent.copy(this.getContent()); return new SQLInfo(content); } @@ -50,7 +53,7 @@ public class SQLInfo implements Info { @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); if (o != null) { o.setValue(this, findStr, replaceStr, operatorArray); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java index 3c313cc46..8f44967a9 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java @@ -9,12 +9,16 @@ import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.stable.AssistUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; + -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** + * 存储控件信息的Info + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-16 @@ -37,7 +41,7 @@ public class WidgetInfo implements Info, DealWithInfoValue { } @Override - public HashMap getValue(Object... o) { + public Map getValue(Object... o) { HashMap map = new HashMap<>(); Widget widget = (Widget) this.content.getReplaceObject(); if (widget instanceof WScaleLayout) { @@ -53,7 +57,7 @@ public class WidgetInfo implements Info, DealWithInfoValue { } @Override - public void setValue(Info info, String findStr, String replaceStr, ArrayList> operatorArray) { + public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { Widget widget = ((Widget) (this.content.getReplaceObject())); if (this.getContent().isFrm()) { FrmWidgetType widgetType = FrmWidgetType.match(widget.getClass().getSimpleName()); @@ -77,11 +81,22 @@ public class WidgetInfo implements Info, DealWithInfoValue { return this.getContent().getOldShowStr(); } + /** + * 复制 + * + * @param widgetInfo + * @return + */ public WidgetInfo copy(WidgetInfo widgetInfo) { - ITContent content = widgetInfo.getContent().copy(); + ITContent content = ITContent.copy(widgetInfo.getContent()); return new WidgetInfo(content); } + /** + * 是否存储水印 + * + * @return + */ public boolean isWaterMark() { return waterMarkFlag; } @@ -90,10 +105,20 @@ public class WidgetInfo implements Info, DealWithInfoValue { this.waterMarkFlag = waterMarkFlag; } + /** + * ReplaceObject是否存在 + * + * @return + */ public boolean isReplaceObjectExist() { return content != null && content.getReplaceObject() != null; } + /** + * toString + * + * @return + */ @Override public String toString() { return AssistUtils.toString(this); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java deleted file mode 100644 index 74adc8e01..000000000 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.fr.design.actions.replace.info.base; - -import com.fr.base.Formula; -import com.fr.chartx.constant.ChartKeyCst; -import com.fr.data.impl.DBTableData; -import com.fr.form.event.Listener; -import com.fr.form.ui.Widget; -import com.fr.general.data.Condition; -import com.fr.js.JavaScript; -import com.fr.js.NameJavaScript; -import com.fr.plugin.chart.base.VanChartHtmlLabel; -import com.fr.report.cell.CellElement; -import com.fr.report.cell.FloatElement; -import com.fr.report.core.sort.sortexpression.FormulaSortExpression; -import com.fr.report.core.sort.sortexpression.SortExpression; -import com.fr.stable.AssistUtils; -import com.teamdev.jxbrowser.deps.org.checkerframework.checker.units.qual.C; - -/** - * 存储用于定位内容的对象(便于定位) - * - * @author Destiny.Lin - * @version 11.0 - * created by Destiny.Lin on 2022-08-16 - */ -public class ContentObject { - //todo 可能没用,考虑废除掉 - private CellElement cell; - private JavaScript js; - private NameJavaScript nameJavaScript; - private VanChartHtmlLabel htmlLabel; - private Widget widget; - private Listener listener; - private FloatElement floatElement; - private Formula formula; - private Condition condition; - private FormulaSortExpression sortExpression; - private DBTableData dbTableData; - - public ContentObject() { - this.cell = null; - this.js = null; - this.nameJavaScript = null; - this.htmlLabel = null; - this.widget = null; - this.listener = null; - this.floatElement = null; - this.formula = null; - this.condition = null; - this.sortExpression = null; - this.dbTableData = null; - } - - public ContentObject newContentObject(ContentObject contentObject) { - ContentObject newContent = new ContentObject(); - newContent.copyCellElement(contentObject); - newContent.copyFloatElement(contentObject); - newContent.copyHtmlLabel(contentObject); - newContent.copyJavaScript(contentObject); - newContent.copyListener(contentObject); - newContent.copyNameJavaScript(contentObject); - newContent.copyWidget(contentObject); - newContent.copyFormula(contentObject); - newContent.copyCondition(contentObject); - newContent.copySortExpression(contentObject); - newContent.copyDBTableData(contentObject); - return newContent; - } - - public void copyCellElement(ContentObject contentObject) { - if (contentObject.getCell() != null) { - this.setCell(contentObject.getCell()); - } - } - - public void copyJavaScript(ContentObject contentObject) { - if (contentObject.getJs() != null) { - this.setJs(contentObject.getJs()); - } - } - - public void copyNameJavaScript(ContentObject contentObject) { - if (contentObject.getNameJavaScript() != null) { - this.setNameJavaScript(contentObject.getNameJavaScript()); - } - } - - public void copyHtmlLabel(ContentObject contentObject) { - if (contentObject.getHtmlLabel() != null) { - this.setHtmlLabel(contentObject.getHtmlLabel()); - } - } - - public void copyListener(ContentObject contentObject) { - if (contentObject.getListener() != null) { - this.setListener(contentObject.getListener()); - } - } - - public void copyFloatElement(ContentObject contentObject) { - if (contentObject.getFloatElement() != null) { - this.setFloatElement(contentObject.getFloatElement()); - } - } - - public void copyWidget(ContentObject contentObject) { - if (contentObject.getWidget() != null) { - this.setWidget(contentObject.getWidget()); - } - } - - public void copyFormula(ContentObject contentObject) { - if (contentObject.getFormula() != null) { - this.setFormula(contentObject.getFormula()); - } - } - - public void copyCondition(ContentObject contentObject) { - if (contentObject.getCondition() != null) { - this.setCondition(contentObject.getCondition()); - } - } - - public void copySortExpression(ContentObject contentObject) { - if (contentObject.getSortExpression() != null) { - this.setSortExpression(contentObject.getSortExpression()); - } - } - - public void copyDBTableData(ContentObject contentObject) { - if (contentObject.getDbTableData() != null) { - this.setDbTableData(contentObject.getDbTableData()); - } - } - - public DBTableData getDbTableData() { - return dbTableData; - } - - public void setDbTableData(DBTableData dbTableData) { - this.dbTableData = dbTableData; - } - - public FormulaSortExpression getSortExpression() { - return sortExpression; - } - - public void setSortExpression(FormulaSortExpression sortExpression) { - this.sortExpression = sortExpression; - } - - public Condition getCondition() { - return condition; - } - - public void setCondition(Condition condition) { - this.condition = condition; - } - - public Formula getFormula() { - return formula; - } - - public void setFormula(Formula formula) { - this.formula = formula; - } - - public CellElement getCell() { - return cell; - } - - public void setCell(CellElement cell) { - this.cell = cell; - } - - public JavaScript getJs() { - return js; - } - - public void setJs(JavaScript js) { - this.js = js; - } - - public NameJavaScript getNameJavaScript() { - return nameJavaScript; - } - - public void setNameJavaScript(NameJavaScript nameJavaScript) { - this.nameJavaScript = nameJavaScript; - } - - public VanChartHtmlLabel getHtmlLabel() { - return htmlLabel; - } - - public void setHtmlLabel(VanChartHtmlLabel htmlLabel) { - this.htmlLabel = htmlLabel; - } - - public Widget getWidget() { - return widget; - } - - public void setWidget(Widget widget) { - this.widget = widget; - } - - public Listener getListener() { - return listener; - } - - public void setListener(Listener listener) { - this.listener = listener; - } - - public FloatElement getFloatElement() { - return floatElement; - } - - public void setFloatElement(FloatElement floatElement) { - this.floatElement = floatElement; - } - - @Override - public String toString() { - return AssistUtils.toString(this); - } - - public boolean isNameJSExist() { - return this.nameJavaScript != null; - } -} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java index 79b7c9199..9a6a02667 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java @@ -1,12 +1,12 @@ package com.fr.design.actions.replace.info.base; -import com.fr.design.actions.replace.info.DealWithInfoValue; + import com.fr.stable.AssistUtils; import com.fr.stable.StringUtils; -import javafx.util.Pair; +import com.fr.stable.collections.combination.Pair; import java.util.ArrayList; -import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -21,27 +21,45 @@ public class ITContent implements Cloneable { private String sheetName; private String templateName; private String blockName; - //一些不好定位的位置先用字符串展示出来就好 + /** + * 一些不好定位的位置先用字符串展示出来就好 + */ private String otherPos; - //用于后续跳转相关的对象信息 - private ContentObject contentObject; - //用于操作替换相关的对象(通过此属性获取所需的对象) + /** + * 用于操作替换相关的对象(通过此属性获取所需的对象) + */ private Object replaceObject; - //用于展示给用户的位置 + /** + * 用于展示给用户的位置 + */ private Object showObject; - //用于展示内容 + /** + * 用于展示内容 + */ private String showStr; - //存储展示前的旧值 + /** + * 存储展示前的旧值 + */ private String oldShowStr; - //存储上一次搜索的string + /** + * 存储上一次搜索的string + */ private String lastSearchStr; - //由于我们TRL是一次性的,这边存字符串到时候new一个即可 + /** + * 由于我们TRL是一次性的,这边存字符串到时候new一个即可 + */ private String trlString; - //为操作字符串提供操作位置的定位信息,Pair中存储的是开始操作的索引以及结束操作的索引 - private ArrayList> operatorArray; - //是否是决策报表——用于判断一些决策报表的特殊操作(比如决策报表控件在设置值时要多设置几个地方,一层套一层) + /** + * 为操作字符串提供操作位置的定位信息,Pair中存储的是开始操作的索引以及结束操作的索引 + */ + private List> operatorArray; + /** + * 是否是决策报表——用于判断一些决策报表的特殊操作(比如决策报表控件在设置值时要多设置几个地方,一层套一层) + */ private boolean frmFlag = false; - //是否被选中 + /** + * 是否被选中 + */ private boolean selected = true; @@ -52,7 +70,6 @@ public class ITContent implements Cloneable { this.templateName = StringUtils.EMPTY; this.otherPos = StringUtils.EMPTY; this.replaceObject = StringUtils.EMPTY; - this.contentObject = new ContentObject(); this.showObject = StringUtils.EMPTY; this.showStr = StringUtils.EMPTY; this.oldShowStr = StringUtils.EMPTY; @@ -64,35 +81,27 @@ public class ITContent implements Cloneable { /** * 复制 + * * @return */ - public ITContent copy() { + public static ITContent copy(ITContent content) { ITContent result = new ITContent(); - result.setSheetID(this.getSheetID()); - result.setSheetName(this.getSheetName()); - result.setTemplateName(this.getTemplateName()); - result.setBlockName(this.getBlockName()); - result.addOtherPos(this.getOtherPos()); - result.setReplaceObject(this.getReplaceObject()); - result.setContentObject(this.getContentObject().newContentObject(getContentObject())); - result.setShowObject(this.getShowObject()); - result.setTrlString(this.getTrlString()); - result.setShowStr(this.getShowStr()); - result.setOldShowStr(this.getOldShowStr()); - result.setLastSearchStr(this.getLastSearchStr()); - result.setOperatorArray(this.getOperatorArray()); - result.setFrmFlag(this.isFrm()); + result.setSheetID(content.getSheetID()); + result.setSheetName(content.getSheetName()); + result.setTemplateName(content.getTemplateName()); + result.setBlockName(content.getBlockName()); + result.addOtherPos(content.getOtherPos()); + result.setReplaceObject(content.getReplaceObject()); + result.setShowObject(content.getShowObject()); + result.setTrlString(content.getTrlString()); + result.setShowStr(content.getShowStr()); + result.setOldShowStr(content.getOldShowStr()); + result.setLastSearchStr(content.getLastSearchStr()); + result.setOperatorArray(content.getOperatorArray()); + result.setFrmFlag(content.isFrm()); return result; } - public ContentObject getContentObject() { - return contentObject; - } - - public void setContentObject(ContentObject contentObject) { - this.contentObject = contentObject; - } - public Object getReplaceObject() { return replaceObject; } @@ -163,6 +172,7 @@ public class ITContent implements Cloneable { /** * 添加位置信息 + * * @param otherPoses */ public void addOtherPos(String... otherPoses) { @@ -177,11 +187,12 @@ public class ITContent implements Cloneable { /** * 添加跳转路径 + * * @param trlString */ public void addTRL(String trlString) { if (!StringUtils.isEmpty(trlString)) { - if (this.trlString != null && !StringUtils.isEmpty(this.trlString)) { + if (StringUtils.isNotEmpty(this.trlString)) { this.trlString = this.trlString + ":" + trlString; } else { this.trlString = trlString; @@ -190,11 +201,11 @@ public class ITContent implements Cloneable { } - public ArrayList> getOperatorArray() { + public List> getOperatorArray() { return operatorArray; } - public void setOperatorArray(ArrayList> operatorArray) { + public void setOperatorArray(List> operatorArray) { this.operatorArray = operatorArray; } @@ -202,14 +213,29 @@ public class ITContent implements Cloneable { this.otherPos = otherPos; } + /** + * 是否选中 + * + * @return + */ public boolean isSelected() { return selected; } + /** + * 设置选中 + * + * @param selected + */ public void setSelected(boolean selected) { this.selected = selected; } + /** + * 是否是决策报表 + * + * @return + */ public boolean isFrm() { return frmFlag; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java index 93a6f2894..cb0d343e8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java @@ -6,13 +6,15 @@ import com.fr.stable.Constants; import com.fr.stable.StringUtils; import javax.swing.plaf.basic.BasicComboBoxEditor; -import java.awt.*; +import java.awt.Component; +import java.awt.Insets; import java.awt.event.ActionListener; import java.lang.reflect.Method; /** * 渲染带有默认值的ComboBox * UIComboBox中设置默认值会整体上移,需要自己重新实现一个 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-02 @@ -25,7 +27,7 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { * 构造时重新设置一下TextField的上边距 */ public ITComboBoxEditor() { - textField = new UITextField(){ + textField = new UITextField() { @Override public Insets getInsets() { return new Insets(4, 4, 0, 4); @@ -41,6 +43,7 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { /** * 设置选项 + * * @param anObject 选项 */ @Override @@ -57,8 +60,8 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { /** * 获取选项 - * @return 选项 * + * @return 选项 */ @Override public Object getItem() { @@ -66,7 +69,7 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { if (oldValue != null && !(oldValue instanceof String)) { // The original value is not a string. Should return the value in it's // original type. - if(ComparatorUtils.equals(newValue,oldValue.toString())) { + if (ComparatorUtils.equals(newValue, oldValue.toString())) { return oldValue; } else { // Must take the value from the textField and get the value and cast it to the new type. @@ -74,7 +77,7 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { try { Method method = cls.getMethod("valueOf", new Class[]{String.class}); newValue = method.invoke(oldValue, new Object[]{textField.getText()}); - } catch (Exception ex) { + } catch (Exception ignored) { // Fail silently and return the newValue (a String object) } } @@ -94,6 +97,7 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { /** * 添加监听 + * * @param l 监听 */ @Override @@ -103,6 +107,7 @@ public class ITComboBoxEditor extends BasicComboBoxEditor { /** * 移除监听 + * * @param l 监听 */ @Override diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java index d5fccede4..188d5f101 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java @@ -3,13 +3,11 @@ package com.fr.design.actions.replace.ui; import com.fr.design.actions.replace.action.ShowSearchResultAction; -import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.action.content.formula.SearchFormulaManager; import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.JSInfo; -import com.fr.design.actions.replace.info.WidgetInfo; + import com.fr.design.actions.replace.utils.ShowValueUtils; -import com.fr.design.data.DesignTableDataManager; -import com.fr.design.data.datapane.TableDataPaneListPane; + import com.fr.design.dialog.FineJOptionPane; import com.fr.design.dialog.UIDialog; import com.fr.design.file.HistoryTemplateListCache; @@ -17,16 +15,22 @@ import com.fr.design.gui.itextfield.UITextField; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.JTemplate; -import com.fr.file.TableDataConfig; + import com.fr.general.GeneralUtils; -import com.fr.main.impl.WorkBook; + import com.fr.stable.StringUtils; -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; + +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.ArrayList; -import java.util.HashMap; + +import java.util.List; /** * 主面板 @@ -36,14 +40,15 @@ import java.util.HashMap; * created by Destiny.Lin on 2022-08-10 */ public class ITReplaceMainDialog extends UIDialog { - ArrayList searchResultList = new ArrayList<>(); + List searchResultList = new ArrayList<>(); private static boolean ITReplaceFlag = false; private static volatile ITReplaceMainDialog instance = null; private static String templateID; - private static int selectCount; private ITReplaceNorthPanel northPane; private ITReplaceSouthPanel southPanel; private ITReplaceWestPanel westPanel; + private boolean searchFlag; + private String searchStr; private ITReplaceMainDialog() { super(DesignerContext.getDesignerFrame()); @@ -129,13 +134,29 @@ public class ITReplaceMainDialog extends UIDialog { } } }); - ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).addActionListener(new ActionListener() { + + northPane.getSearchButton().addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - replace(); + search(); + String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(); + if (!StringUtils.isEmpty(searchStr)) { + ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setEditable(true); + northPane.getReplaceInputCombobox().setEditable(true); + } else { + ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setEditable(false); + northPane.getReplaceInputCombobox().setEditable(false); + } } + }); - + northPane.getReplaceButton().addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (isSearchFlag()) { + replace(); + } + } }); center.add(northPane.getUpPanel(), BorderLayout.NORTH); center.add(southPanel.getTableEditorPane(), BorderLayout.CENTER); @@ -164,10 +185,10 @@ public class ITReplaceMainDialog extends UIDialog { northPane.refreshReplaceInputComboBoxItems(); ITTableEditorPane.getEditTable().repaint(); HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().fireTargetModified(true); - + setSearchFlag(false); } else { - Object[] options = new Object[]{Toolkit.i18nText("Fine-Design_Replace_Search_Again"), Toolkit.i18nText("Fine-Engine_Basic_Cancel")}; + Object[] options = new Object[]{Toolkit.i18nText("Fine-Design_Replace_Search_Again"), Toolkit.i18nText("Fine-Design_Basic_Cancel")}; int optionSelected = FineJOptionPane.showOptionDialog( ITReplaceMainDialog.this, Toolkit.i18nText("Fine-Design_Replace_Message"), @@ -175,7 +196,8 @@ public class ITReplaceMainDialog extends UIDialog { JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE, null, - options, // 如果传null, 则按钮为 optionType 类型所表示的按钮(也就是确认对话框) + // 如果传null, 则按钮为 optionType 类型所表示的按钮(也就是确认对话框) + options, options[0] ); //如果选择了重新查找,则再查找一遍 @@ -185,7 +207,7 @@ public class ITReplaceMainDialog extends UIDialog { } } - private Boolean checkTemplateChanged(ArrayList searchResultList) { + private Boolean checkTemplateChanged(List searchResultList) { for (Info info : searchResultList) { if (!info.checkValid()) { return false; @@ -207,10 +229,42 @@ public class ITReplaceMainDialog extends UIDialog { } + + /** + * 是否选择过 + * + * @return + */ + public boolean isSearchFlag() { + return searchFlag; + } + + public void setSearchFlag(boolean searchFlag) { + this.searchFlag = searchFlag; + } + + public String getSearchStr() { + return searchStr; + } + + public void setSearchStr(String searchStr) { + this.searchStr = searchStr; + } + + /** + * 设置标签 + * + * @param ITReplaceFlag + */ public static void setITReplaceFlag(boolean ITReplaceFlag) { ITReplaceMainDialog.ITReplaceFlag = ITReplaceFlag; } + /** + * 定位执行标签 + * + * @return + */ public static boolean isITReplaceFlag() { return ITReplaceFlag; } @@ -232,6 +286,7 @@ public class ITReplaceMainDialog extends UIDialog { } itTableEditor.fireTableDataChanged(); northPane.refreshFindInputComboBoxItems(); + setSearchFlag(true); } else { //todo } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java index 781b053f7..ed66571c6 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java @@ -2,8 +2,6 @@ package com.fr.design.actions.replace.ui; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.ibutton.UIRadioButton; -import com.fr.design.gui.icheckbox.UICheckBox; import com.fr.design.gui.icombobox.UIComboBox; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itextfield.UITextField; @@ -40,17 +38,21 @@ public class ITReplaceNorthPanel { private UIButton replaceButton; private UIButton searchButton; - private static int FIND_LABEL_X, FIND_LABEL_Y, FIND_LABEL_WIDTH, FIND_LABEL_HEIGHT; - private static int FIND_COMBOBOX_X, FIND_COMBOBOX_Y, FIND_COMBOBOX_WIDTH, FIND_COMBOBOX_HEIGHT; - private static int RANGE_LABEL_X, RANGE_LABEL_Y, RANGE_LABEL_WIDTH, RANGE_LABEL_HEIGHT; - private static int RANGE_COMBOBOX_X, RANGE_COMBOBOX_Y, RANGE_COMBOBOX_WIDTH, RANGE_COMBOBOX_HEIGHT; - private static int MATCH_X, MATCH_Y, MATCH_WIDTH, MATCH_HEIGHT; - private static int RESULT_LABEL_X, RESULT_LABEL_Y, RESULT_LABEL_WIDTH, RESULT_LABEL_HEIGHT; - private static int FIND_INPUT_COMBOBOX_X, FIND_INPUT_COMBOBOX_Y, FIND_INPUT_COMBOBOX_WIDTH, FIND_INPUT_COMBOBOX_HEIGHT; - private static int REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT; - private static int REPLACE_BUTTON_X, REPLACE_BUTTON_Y, REPLACE_BUTTON_WIDTH, REPLACE_BUTTON_HEIGHT; - private static int SEARCH_BUTTON_X, SEARCH_BUTTON_Y, SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT; - private static int BUTTON_GAP; + //存储的5次最近输入 + private int maxItemCount = 5; + + + private int FIND_LABEL_X, FIND_LABEL_Y, FIND_LABEL_WIDTH, FIND_LABEL_HEIGHT; + private int FIND_COMBOBOX_X, FIND_COMBOBOX_Y, FIND_COMBOBOX_WIDTH, FIND_COMBOBOX_HEIGHT; + private int RANGE_LABEL_X, RANGE_LABEL_Y, RANGE_LABEL_WIDTH, RANGE_LABEL_HEIGHT; + private int RANGE_COMBOBOX_X, RANGE_COMBOBOX_Y, RANGE_COMBOBOX_WIDTH, RANGE_COMBOBOX_HEIGHT; + private int MATCH_X, MATCH_Y, MATCH_WIDTH, MATCH_HEIGHT; + private int RESULT_LABEL_X, RESULT_LABEL_Y, RESULT_LABEL_WIDTH, RESULT_LABEL_HEIGHT; + private int FIND_INPUT_COMBOBOX_X, FIND_INPUT_COMBOBOX_Y, FIND_INPUT_COMBOBOX_WIDTH, FIND_INPUT_COMBOBOX_HEIGHT; + private int REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT; + private int REPLACE_BUTTON_X, REPLACE_BUTTON_Y, REPLACE_BUTTON_WIDTH, REPLACE_BUTTON_HEIGHT; + private int SEARCH_BUTTON_X, SEARCH_BUTTON_Y, SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT; + private int BUTTON_GAP; public static ArrayList findItems = new ArrayList<>(); public static ArrayList findInputItems = new ArrayList<>(); @@ -150,12 +152,12 @@ public class ITReplaceNorthPanel { */ public void refreshFindInputComboBoxItems() { String text = ((UITextField) (this.getFindInputCombobox().getEditor().getEditorComponent())).getText(); - if(!StringUtils.isEmpty(text)){ + if (!StringUtils.isEmpty(text)) { if (findInputItems.contains(text)) { Collections.swap(findInputItems, 0, findInputItems.indexOf(text)); } else { - if (findInputItems.size() >= 5) { - findInputItems.remove(4); + if (findInputItems.size() >= maxItemCount) { + findInputItems.remove(maxItemCount - 1); findInputItems.add(0, text); } else { findInputItems.add(0, text); @@ -169,20 +171,20 @@ public class ITReplaceNorthPanel { /** * 刷新替换框 */ - public void refreshReplaceInputComboBoxItems(){ + public void refreshReplaceInputComboBoxItems() { String text = ((UITextField) (this.getReplaceInputCombobox().getEditor().getEditorComponent())).getText(); - if(!StringUtils.isEmpty(text)){ + if (!StringUtils.isEmpty(text)) { if (replaceInputItems.contains(text)) { Collections.swap(replaceInputItems, 0, replaceInputItems.indexOf(text)); } else { - if (replaceInputItems.size() >= 5) { - replaceInputItems.remove(4); + if (replaceInputItems.size() >= maxItemCount) { + replaceInputItems.remove(maxItemCount - 1); replaceInputItems.add(0, text); } else { replaceInputItems.add(0, text); } } - this.getFindInputCombobox().refreshBoxItems(ITReplaceNorthPanel.replaceInputItems); + this.getReplaceInputCombobox().refreshBoxItems(ITReplaceNorthPanel.replaceInputItems); ((UITextField) (this.getReplaceInputCombobox().getEditor().getEditorComponent())).setText(text); } } @@ -348,5 +350,19 @@ public class ITReplaceNorthPanel { this.replaceInputCombobox = replaceInputCombobox; } + public UIButton getReplaceButton() { + return replaceButton; + } + + public void setReplaceButton(UIButton replaceButton) { + this.replaceButton = replaceButton; + } + + public UIButton getSearchButton() { + return searchButton; + } + public void setSearchButton(UIButton searchButton) { + this.searchButton = searchButton; + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java index 0d31bfc35..7db6b5285 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java @@ -3,7 +3,6 @@ package com.fr.design.actions.replace.ui; import javax.swing.RowSorter; import javax.swing.table.TableRowSorter; import java.awt.Color; -import java.awt.Dimension; /** * 下面板 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java index 8fc69f043..e9ff2286c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java @@ -30,7 +30,9 @@ public class ITReplaceWestPanel { leftJpanel.add(contentButton); leftJpanel.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, new Color(218, 218, 221))); leftJpanel.add(settingButton); - for (int i = 0; i < 13; i++) { + //由于要砍掉设置项这部分,这边先暂时填充一下 + int labelNum = 13; + for (int i = 0; i < labelNum; i++) { leftJpanel.add(new UILabel("")); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java index 45ebc651b..248a7353a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java @@ -4,25 +4,17 @@ import com.fr.base.TRL; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.gui.ibutton.UIButton; -import com.fr.design.gui.icheckbox.UICheckBox; -import com.fr.design.gui.icombobox.UIComboBox; -import com.fr.design.gui.ilable.UILabel; -import com.fr.design.mainframe.JTemplate; +import com.fr.design.i18n.Toolkit; import com.fr.general.GeneralUtils; import com.fr.stable.StringUtils; -import org.omg.Messaging.SYNC_WITH_TRANSPORT; -import javax.swing.*; +import javax.swing.AbstractCellEditor; +import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; -import java.awt.*; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; import static com.fr.design.actions.replace.ui.ITTableEditorPane.getEditTable; @@ -38,7 +30,7 @@ public class ITTableButton extends AbstractCellEditor implements TableCellEditor private UIButton paraButton; public ITTableButton() { - paraButton = new UIButton("定位 "); + paraButton = new UIButton("" + Toolkit.i18nText("Fine-Design_Chart_Location") + " "); paraButton.setVisible(true); paraButton.setBorderPainted(false); paraButton.addActionListener(new ActionListener() { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java index babbc81ce..8097ad917 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java @@ -1,21 +1,22 @@ package com.fr.design.actions.replace.ui; import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.ReplaceObject; import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.gui.icheckbox.UICheckBox; + import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itableeditorpane.UITableEditAction; import com.fr.design.gui.itableeditorpane.UITableModelAdapter; import com.fr.design.i18n.Toolkit; -import com.fr.form.ui.CheckBox; -import com.fr.function.INDEX; + +import com.fr.stable.StringUtils; import org.jetbrains.annotations.Nullable; -import javax.swing.*; -import java.util.ArrayList; + +import java.util.List; /** + * 表格的Editor,对应每列放的内容,用来处理表格的model + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-22 @@ -25,7 +26,7 @@ public class ITTableEditor extends UITableModelAdapter { public ITTableEditor() { super(new String[]{ - " ", + StringUtils.BLANK, Toolkit.i18nText("Fine-Design_Replace_Search_Content"), Toolkit.i18nText("Fine-Design_Replace_Template_Name"), Toolkit.i18nText("Fine-Design_Replace_Sheet_Name"), @@ -35,7 +36,6 @@ public class ITTableEditor extends UITableModelAdapter { Toolkit.i18nText("Fine-Design_Replace_Operator"), }); - //this.createTable().getColumnModel().getColumn(4).setMaxWidth(60); this.setColumnClass(new Class[]{ Boolean.class, UILabel.class, @@ -99,10 +99,10 @@ public class ITTableEditor extends UITableModelAdapter { /** * 添加数据 * - * @param arrayList + * @param list */ - public void add(ArrayList arrayList) { - for (Info info : arrayList) { + public void add(List list) { + for (Info info : list) { addRow(info.getContent()); fireTableDataChanged(); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java index 90d5c3f2b..1acb5e2ba 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java @@ -4,7 +4,7 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.border.UIRoundedBorder; import com.fr.design.constants.UIConstants; import com.fr.design.dialog.BasicPane; -import com.fr.design.gui.icheckbox.UICheckBox; + import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.itableeditorpane.UITableEditAction; @@ -13,14 +13,27 @@ import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.mainframe.share.ui.base.MouseClickListener; import com.fr.stable.StringUtils; -import javax.swing.*; -import javax.swing.table.*; -import java.awt.*; + +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTable; +import javax.swing.SwingConstants; +import javax.swing.UIManager; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellRenderer; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; /** + * 表格面板 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-22 @@ -35,7 +48,6 @@ public class ITTableEditorPane extends BasicPane { public ITTableEditorPane(UITableModelAdapter model) { this.tableModel = model; this.initComponent(model.createAction()); - //((DefaultCellEditor) editTable.getCellEditor()).setClickCountToStart(1); editTable.setGridColor(new Color(218, 218, 221)); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java index 1acfbce88..729f1e6a8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java @@ -18,11 +18,16 @@ import com.fr.plugin.chart.base.AttrTooltip; import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.plugin.chart.vanchart.VanChart; import com.fr.report.cell.Elem; -import javafx.util.Pair; +import com.fr.stable.StringUtils; +import com.fr.stable.collections.combination.Pair; + import java.util.ArrayList; +import java.util.List; /** + * 用来获取JS相关的工具类 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-11 @@ -32,11 +37,11 @@ public class SearchJSUtils { /** * 从Listener中获取JS */ - public static void searchJSFromListener(ArrayList jsInfos, ITContent content) { + public static void searchJSFromListener(List jsInfos, ITContent content) { JavaScript javaScript = ((Listener) (content.getReplaceObject())).getAction(); if (javaScript instanceof JavaScriptImpl) { - ITContent newContent = content.copy(); - newContent.getContentObject().setJs(javaScript); + ITContent newContent = ITContent.copy(content); + newContent.setReplaceObject(javaScript); SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); } } @@ -47,7 +52,7 @@ public class SearchJSUtils { * @param collection * @return */ - public static ArrayList> getHtmlLabel(ChartCollection collection) { + public static List> getHtmlLabel(ChartCollection collection) { ArrayList> arrayList = new ArrayList<>(); addHtmlLabel2Array(arrayList, collection); return arrayList; @@ -59,7 +64,7 @@ public class SearchJSUtils { * @param arrayList * @param collection */ - private static void addHtmlLabel2Array(ArrayList> arrayList, ChartCollection collection) { + private static void addHtmlLabel2Array(List> arrayList, ChartCollection collection) { for (int i = 0; i < collection.getChartCount(); i++) { VanChart chart = ((VanChart) collection.getChart(i)); int size = chart.getPlot().getConditionCollection().getConditionAttrSize(); @@ -77,7 +82,7 @@ public class SearchJSUtils { * @param chart * @param arrayList */ - private static void addAttrLabelHtmlLabel(VanChart chart, ArrayList> arrayList) { + private static void addAttrLabelHtmlLabel(VanChart chart, List> arrayList) { VanChartPlot plot = chart.getPlot(); addAttrToolTipCondition2Array(plot, arrayList); if (isAttrLabelExist(plot)) { @@ -88,28 +93,36 @@ public class SearchJSUtils { } - private static void addAttrToolTipCondition2Array(VanChartPlot plot, ArrayList> arrayList) { - if (plot.getAttrTooltipFromConditionCollection() != null && ((AttrTooltip) plot.getAttrTooltipFromConditionCollection()).isEnable() && plot.getAttrTooltipFromConditionCollection() instanceof AttrTooltip) { + private static void addAttrToolTipCondition2Array(VanChartPlot plot, List> arrayList) { + if (isToolTipValid(plot)) { arrayList.add(new Pair<>(((AttrTooltip) plot.getAttrTooltipFromConditionCollection()).getContent().getHtmlLabel(), Toolkit.i18nText("Fine-Design_Chart_Tooltip") + "-" + Toolkit.i18nText("Fine-Design_Basic_Custom"))); } } - - private static void addAttrLabelDetail2Array(VanChartPlot plot, ArrayList> arrayList) { - if (plot.getAttrLabelFromConditionCollection() != null - && plot.getAttrLabelFromConditionCollection().getAttrLabelDetail() != null - && plot.getAttrLabelFromConditionCollection().getAttrLabelDetail().getContent().getHtmlLabel() != null) { + private static boolean isToolTipValid(VanChartPlot plot){ + return plot.getAttrTooltipFromConditionCollection() != null && ((AttrTooltip) plot.getAttrTooltipFromConditionCollection()).isEnable() && plot.getAttrTooltipFromConditionCollection() instanceof AttrTooltip; + } + private static void addAttrLabelDetail2Array(VanChartPlot plot, List> arrayList) { + if (isLabelDetailValid(plot)) { arrayList.add(new Pair<>(plot.getAttrLabelFromConditionCollection().getAttrLabelDetail().getContent().getHtmlLabel(), Toolkit.i18nText("Fine-Design_Chart_Value_Label"))); } } + private static boolean isLabelDetailValid(VanChartPlot plot){ + return plot.getAttrLabelFromConditionCollection() != null + && plot.getAttrLabelFromConditionCollection().getAttrLabelDetail() != null + && plot.getAttrLabelFromConditionCollection().getAttrLabelDetail().getContent().getHtmlLabel() != null; + } - private static void addAttrSecondLabelDetail2Array(VanChartPlot plot, ArrayList> arrayList) { - if (plot.getAttrLabelFromConditionCollection() != null - && plot.getAttrLabelFromConditionCollection().getSecondLabelDetail() != null - && plot.getAttrLabelFromConditionCollection().getSecondLabelDetail().getContent().getHtmlLabel() != null) { + private static void addAttrSecondLabelDetail2Array(VanChartPlot plot, List> arrayList) { + if (isSecondLabelDetailValid(plot)) { arrayList.add(new Pair<>(plot.getAttrLabelFromConditionCollection().getSecondLabelDetail().getContent().getHtmlLabel(), Toolkit.i18nText("Fine-Design_Chart_Category_Label"))); } } + private static boolean isSecondLabelDetailValid(VanChartPlot plot){ + return plot.getAttrLabelFromConditionCollection() != null + && plot.getAttrLabelFromConditionCollection().getSecondLabelDetail() != null + && plot.getAttrLabelFromConditionCollection().getSecondLabelDetail().getContent().getHtmlLabel() != null; + } private static boolean isAttrLabelExist(VanChartPlot plot) { return plot.getAttrLabelFromConditionCollection() != null && plot.getAttrLabelFromConditionCollection().isEnable(); @@ -121,7 +134,7 @@ public class SearchJSUtils { * @param arrayList * @param conditionAttr */ - private static void searchConditionCollection(ArrayList> arrayList, ConditionAttr conditionAttr) { + private static void searchConditionCollection(List> arrayList, ConditionAttr conditionAttr) { int conditionSize = conditionAttr.getDataSeriesConditionCount(); for (int t = 0; t < conditionSize; t++) { if (conditionAttr.getDataSeriesCondition(t) instanceof AttrTooltip) { @@ -138,7 +151,7 @@ public class SearchJSUtils { * @param chartCollection * @return */ - public static ArrayList getNameJavaScript(ChartCollection chartCollection) { + public static List getNameJavaScript(ChartCollection chartCollection) { ArrayList nameJavaScriptArrayList = new ArrayList<>(); for (int i = 0; i < chartCollection.getChartCount(); i++) { VanChart chart = ((VanChart) chartCollection.getChart(i)); @@ -149,7 +162,7 @@ public class SearchJSUtils { return nameJavaScriptArrayList; } - private static void addNameJavaScript2Array(ArrayList nameJavaScriptArrayList, NameJavaScriptGroup nameJavaScriptGroup) { + private static void addNameJavaScript2Array(List nameJavaScriptArrayList, NameJavaScriptGroup nameJavaScriptGroup) { if (isNameJavaScriptGroupExist(nameJavaScriptGroup)) { for (int j = 0; j < nameJavaScriptGroup.size(); j++) { if (nameJavaScriptGroup.getNameHyperlink(j).getJavaScript() instanceof JavaScriptImpl) { @@ -169,8 +182,8 @@ public class SearchJSUtils { * @param jsInfos * @param jsInfo */ - public static void addJSInfos(ArrayList jsInfos, JSInfo jsInfo) { - jsInfo.setContent(jsInfo.getContent().copy()); + public static void addJSInfos(List jsInfos, JSInfo jsInfo) { + jsInfo.setContent(ITContent.copy(jsInfo.getContent())); jsInfos.add(jsInfo); } @@ -183,13 +196,12 @@ public class SearchJSUtils { * @param htmlLabels * @param jsInfos */ - public static void addJSInfosFromHtmlLabel(ITContent content, ArrayList> htmlLabels, ArrayList jsInfos) { - if (!htmlLabels.isEmpty()) { + public static void addJSInfosFromHtmlLabel(ITContent content, List> htmlLabels, List jsInfos) { + if (ShowValueUtils.isNotEmpty(htmlLabels)) { for (Pair pair : htmlLabels) { - ITContent newContent = content.copy(); - newContent.getContentObject().setHtmlLabel((VanChartHtmlLabel) pair.getKey()); - newContent.addOtherPos(GeneralUtils.objectToString(pair.getValue())); - newContent.setReplaceObject(pair.getKey()); + ITContent newContent = ITContent.copy(content); + newContent.addOtherPos(GeneralUtils.objectToString(pair.getSecond())); + newContent.setReplaceObject(pair.getFirst()); SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); } } @@ -202,11 +214,10 @@ public class SearchJSUtils { * @param nameJavaScripts * @param jsInfos */ - public static void addJSInfosFromNameJS(ITContent content, ArrayList nameJavaScripts, ArrayList jsInfos) { - if (!nameJavaScripts.isEmpty()) { + public static void addJSInfosFromNameJS(ITContent content, List nameJavaScripts, List jsInfos) { + if (ShowValueUtils.isNotEmpty(nameJavaScripts)) { for (NameJavaScript nameJS : nameJavaScripts) { - ITContent newContent = content.copy(); - newContent.getContentObject().setNameJavaScript(nameJS); + ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(nameJS); newContent.addOtherPos(nameJS.getName()); SearchJSUtils.addJSInfos(jsInfos, new JSInfo(newContent)); @@ -222,12 +233,11 @@ public class SearchJSUtils { * @param jsInfos * @param content */ - public static void addJSInfosFromHyperLink(Elem elem, ArrayList jsInfos, ITContent content) { + public static void addJSInfosFromHyperLink(Elem elem, List jsInfos, ITContent content) { if (elem.getNameHyperlinkGroup() != null) { for (int j = 0; j < elem.getNameHyperlinkGroup().size(); j++) { if ((elem.getNameHyperlinkGroup().getNameHyperlink(j).getJavaScript()) instanceof JavaScriptImpl) { - ITContent newContent = content.copy(); - newContent.getContentObject().setNameJavaScript(elem.getNameHyperlinkGroup().getNameHyperlink(j)); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Hyperlink")); newContent.setReplaceObject(elem.getNameHyperlinkGroup().getNameHyperlink(j)); newContent.addOtherPos(elem.getNameHyperlinkGroup().getNameHyperlink(j).getName()); @@ -243,11 +253,10 @@ public class SearchJSUtils { * @param jsInfos * @param content */ - public static void selectJSAction(ArrayList jsInfos, ITContent content) { + public static void selectJSAction(List jsInfos, ITContent content) { for (int i = 0; i < ((Widget) (content.getReplaceObject())).getListenerSize(); i++) { Listener listener = ((Widget) (content.getReplaceObject())).getListener(i); - ITContent newContent = content.copy(); - newContent.getContentObject().setListener(listener); + ITContent newContent = ITContent.copy(content); newContent.addOtherPos(listener.getName()); newContent.setReplaceObject(listener); SearchJSUtils.searchJSFromListener(jsInfos, newContent); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java index 91d2473a6..6342c7e72 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java @@ -1,14 +1,15 @@ package com.fr.design.actions.replace.utils; -import com.fr.design.actions.replace.info.DealWithInfoValue; import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.JSInfo; -import com.fr.third.org.apache.poi.hssf.record.formula.functions.Int; -import javafx.util.Pair; + +import com.fr.stable.collections.combination.Pair; + import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.regex.Pattern; /** @@ -57,18 +58,22 @@ public class ShowValueUtils { * @param find 要查找的内容 * @return 存储匹配的字符串的位置的列表 */ - public static ArrayList> getStringStartAndEndIndex(String str, String find) { - ArrayList> pairs = new ArrayList<>(); - int frontLength = 0;//定义该变量用于记录匹配元素前面的长度 + public static List> getStringStartAndEndIndex(String str, String find) { + List> pairs = new ArrayList<>(); + //定义该变量用于记录匹配元素前面的长度 + int frontLength = 0; StringBuffer result = new StringBuffer(); if (StringUtils.isEmpty(find)) { return pairs; } - while (str.contains(find)) {//只要该str字符串中有匹配的元素,才进行以下操作 - int index = str.indexOf(find);//定义该变量用于记录匹配的元素在当前字符串的位置 + //只要该str字符串中有匹配的元素,才进行以下操作 + while (str.contains(find)) { + //定义该变量用于记录匹配的元素在当前字符串的位置 + int index = str.indexOf(find); pairs.add(new Pair<>(index + frontLength, index + frontLength + find.length())); frontLength += (index + find.length()); - str = str.substring(index + find.length());//将字符串中匹配元素的前面部分及其本身截取,留下后面的部分 + //将字符串中匹配元素的前面部分及其本身截取,留下后面的部分 + str = str.substring(index + find.length()); } return pairs; @@ -88,4 +93,15 @@ public class ShowValueUtils { ); } + + + /** + * 集合是否不为空 + * + * @param collection + * @return + */ + public static boolean isNotEmpty(Collection collection) { + return collection != null && collection.size() > 0; + } } From 7c846cb18756924966c7a224c87cfaa043b3b3d6 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 16 Sep 2022 11:26:18 +0800 Subject: [PATCH 12/17] =?UTF-8?q?REPORT-75998=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/ShowSearchResultAction.java | 8 ++--- .../content/component/ComponentType.java | 7 +++++ .../component/SearchComponentAction.java | 16 ++++++++++ .../content/formula/FormulaReplaceObject.java | 30 +++++++++---------- .../action/content/formula/SearchFormula.java | 2 ++ .../content/formula/SearchFormulaManager.java | 12 ++++++++ .../cell/SearchDSColumnFormulaAction.java | 3 +- .../formula/cell/SearchRichFormulaAction.java | 4 ++- .../action/content/formula/data/DataType.java | 2 +- .../highlight/SearchHighlightFormula.java | 9 ++++-- .../widget/SearchDateEditorFormulaAction.java | 4 +-- .../widget/SearchTreeEditorFormulaAction.java | 6 ++-- .../content/js/SearchChartJSAction.java | 2 ++ .../action/content/js/SearchWebJSAction.java | 14 ++++----- .../content/widget/SearchWidgetAction.java | 4 +-- .../actions/replace/info/FormulaInfo.java | 7 +++-- .../design/actions/replace/info/SQLInfo.java | 4 +++ .../actions/replace/info/base/ITContent.java | 4 +-- .../replace/ui/ITReplaceMainDialog.java | 8 +++-- .../replace/ui/ITReplaceNorthPanel.java | 4 +-- 20 files changed, 103 insertions(+), 47 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java index 06520f52b..6c3abb575 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java @@ -103,7 +103,7 @@ public enum ShowSearchResultAction implements ShowValue { for (Info info : list) { stringHashMap = info.getValue(); if (StringUtils.isEmpty(str)) { - if (!StringUtils.isEmpty(stringHashMap.getOrDefault(objectContentKey, StringUtils.EMPTY))) { + if (StringUtils.isNotEmpty(stringHashMap.getOrDefault(objectContentKey, StringUtils.EMPTY))) { JSInfo contentJSInfo = ((JSInfo) info).copy(); contentJSInfo.getContent().setShowStr(stringHashMap.get(objectContentKey)); contentJSInfo.getContent().setOldShowStr(stringHashMap.get(objectContentKey)); @@ -111,7 +111,7 @@ public enum ShowSearchResultAction implements ShowValue { contentJSInfo.setContentFlag(true); jsInfos.add(contentJSInfo); } - if (!StringUtils.isEmpty(stringHashMap.getOrDefault(objectNameKey, StringUtils.EMPTY))) { + if (StringUtils.isNotEmpty(stringHashMap.getOrDefault(objectNameKey, StringUtils.EMPTY))) { JSInfo nameJSInfo = ((JSInfo) info).copy(); nameJSInfo.getContent().setShowStr(stringHashMap.get(objectNameKey)); nameJSInfo.getContent().setOldShowStr(stringHashMap.get(objectNameKey)); @@ -310,7 +310,7 @@ public enum ShowSearchResultAction implements ShowValue { private void searchMap4Widget(Map map, List widgetInfos, WidgetInfo info, String str) { if (map.containsKey(objectNameKey)) { String name = map.get(objectNameKey); - if (!StringUtils.isEmpty(name) && name.contains(str)) { + if (StringUtils.isNotEmpty(name) && name.contains(str)) { WidgetInfo nameInfo = info.copy(info); nameInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str)); nameInfo.getContent().setOldShowStr(map.get(objectNameKey)); @@ -322,7 +322,7 @@ public enum ShowSearchResultAction implements ShowValue { } if (map.containsKey(objectWaterMarkKey)) { String waterMark = map.get(objectWaterMarkKey); - if (!StringUtils.isEmpty(waterMark) && waterMark.contains(str)) { + if (StringUtils.isNotEmpty(waterMark) && waterMark.contains(str)) { WidgetInfo widgetInfo = info.copy(info); widgetInfo.getContent().setShowStr(ShowValueUtils.getCommonString(waterMark, str)); widgetInfo.getContent().setOldShowStr(map.get(objectWaterMarkKey)); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java index ed5cab762..db7c63f17 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java @@ -252,6 +252,13 @@ public enum ComponentType implements DealWithInfoValue { return null; } + /** + * 添加组件到数组中 + * + * @param componentInfos + * @param bodyContent + * @param widget + */ public void addComponent2Array(List componentInfos, ITContent bodyContent, Widget widget) { componentInfos.add(new ComponentInfo(getComponentContent(bodyContent, widget))); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java index 217980de6..2d328ae8a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java @@ -133,11 +133,22 @@ public class SearchComponentAction implements SearchAction { content.addTRL(widgetName); } + /** + * 对外开放的获取对象的方法 + * + * @return + */ public static SearchComponentAction getInstance() { return SearchComponentAction.SearchComponentActionEnum.SINGLETON.getInstance(); } + /** + * 枚举实现单例 + */ enum SearchComponentActionEnum { + /** + * 单例 + */ SINGLETON; private SearchComponentAction instance; @@ -145,6 +156,11 @@ public class SearchComponentAction implements SearchAction { instance = new SearchComponentAction(); } + /** + * 获取对象 + * + * @return + */ public SearchComponentAction getInstance() { return instance; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java index c2c8a5688..aa9dbfa68 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java @@ -41,7 +41,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) o[0]).getContent())) { + if (StringUtils.isNotEmpty(((Formula) o[0]).getContent())) { map.put("content", ((Formula) o[0]).getContent()); } return map; @@ -61,7 +61,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((FormulaCondition) o[0]).getFormula())) { + if (StringUtils.isNotEmpty(((FormulaCondition) o[0]).getFormula())) { map.put("content", ((FormulaCondition) o[0]).getFormula()); } return map; @@ -84,7 +84,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) ((Compare) o[0]).getValue()).getContent())) { + if (StringUtils.isNotEmpty(((Formula) ((Compare) o[0]).getValue()).getContent())) { map.put("content", ((Formula) ((Compare) o[0]).getValue()).getContent()); } return map; @@ -109,7 +109,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((RichText) ((CellElement) o[0]).getValue()).getContent())) { + if (StringUtils.isNotEmpty(((RichText) ((CellElement) o[0]).getValue()).getContent())) { map.put("content", ((RichText) ((CellElement) o[0]).getValue()).getContent()); } return map; @@ -128,7 +128,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent())) { + if (StringUtils.isNotEmpty(((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent())) { map.put("content", ((Formula) ((com.fr.base.core.KV) o[0]).getValue()).getContent()); } return map; @@ -150,7 +150,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent())) { + if (StringUtils.isNotEmpty(((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent())) { map.put("content", ((Formula) (((CellInsertPolicyAttr) o[0]).getDefaultInsertValue())).getContent()); } return map; @@ -171,7 +171,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((FormulaPresent) o[0]).getFormulaContent())) { + if (StringUtils.isNotEmpty(((FormulaPresent) o[0]).getFormulaContent())) { map.put("content", ((FormulaPresent) o[0]).getFormulaContent()); } return map; @@ -193,7 +193,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((SingleJavaScript) o[0]).getFileName())) { + if (StringUtils.isNotEmpty(((SingleJavaScript) o[0]).getFileName())) { map.put("content", ((SingleJavaScript) o[0]).getFileName()); } return map; @@ -215,7 +215,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) (((ParameterProvider) o[0]).getValue())).getContent())) { + if (StringUtils.isNotEmpty(((Formula) (((ParameterProvider) o[0]).getValue())).getContent())) { map.put("content", ((Formula) (((ParameterProvider) o[0]).getValue())).getContent()); } return map; @@ -237,7 +237,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((FormulaProvider) o[0]).getContent())) { + if (StringUtils.isNotEmpty(((FormulaProvider) o[0]).getContent())) { map.put("content", ((FormulaProvider) o[0]).getContent()); } return map; @@ -259,7 +259,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) (((Parameter) o[0]).getValue())).getContent())) { + if (StringUtils.isNotEmpty(((Formula) (((Parameter) o[0]).getValue())).getContent())) { map.put("content", ((Formula) (((Parameter) o[0]).getValue())).getContent()); } return map; @@ -281,7 +281,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((DSColumn) o[0]).getResult())) { + if (StringUtils.isNotEmpty(((DSColumn) o[0]).getResult())) { map.put("content", ((DSColumn) o[0]).getResult()); } return map; @@ -303,7 +303,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((BaseFormula) o[0]).getContent())) { + if (StringUtils.isNotEmpty(((BaseFormula) o[0]).getContent())) { map.put("content", ((BaseFormula) o[0]).getContent()); } return map; @@ -325,7 +325,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent())) { + if (StringUtils.isNotEmpty(((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent())) { map.put("content", ((Formula) ((StoreProcedureParameter) o[0]).getValue()).getContent()); } return map; @@ -347,7 +347,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (!StringUtils.isEmpty(((WatermarkAttr) o[0]).getText())) { + if (StringUtils.isNotEmpty(((WatermarkAttr) o[0]).getText())) { map.put("content", ((WatermarkAttr) o[0]).getText()); } return map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java index 1b6fc2f2c..82a2db327 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java @@ -10,6 +10,8 @@ import java.util.ArrayList; import java.util.List; /** + * 获取公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-18 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java index 9ca37b501..5a3644a40 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java @@ -15,6 +15,8 @@ import java.util.List; import java.util.Set; /** + * 管理公式类型搜索的注册 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-17 @@ -49,6 +51,16 @@ public class SearchFormulaManager implements SearchAction { formulaProviderSet.add(searchFormula); } + /** + * 注销对应的SearchFormula + * + * @param searchFormula + */ + public void removeFormula(SearchFormula searchFormula) { + formulaProviderSet.remove(searchFormula); + } + + public List getFormulaInfos() { return formulaInfos; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java index aee5e7578..a2d9afea8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java @@ -59,7 +59,8 @@ public class SearchDSColumnFormulaAction implements SearchCellFormula { } private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, List formulaInfos) { - if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == '=') { + char formulaLabel = '='; + if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == formulaLabel) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dsColumn); //高级-显示值 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java index 80c85158e..c80c7a610 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java @@ -16,10 +16,12 @@ import java.util.List; * created by Destiny.Lin on 2022-08-18 */ public class SearchRichFormulaAction implements SearchCellFormula { + @Override public void searchFormulaFromCellType(List formulaInfos, ITContent content) { //todo 富文本这边直接遍历RichChar来拿公式 - if (((RichText) ((CellElement) (content.getReplaceObject())).getValue()).getContent().contains("${")) { + String contain = "${"; + if (((RichText) ((CellElement) (content.getReplaceObject())).getValue()).getContent().contains(contain)) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((CellElement) (content.getReplaceObject())).getValue()); newContent.addOtherPos( diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java index f8ea44cd7..a794ab1df 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java @@ -92,7 +92,7 @@ public enum DataType { * @param formulaInfos */ public void dealProvider(ParameterProvider provider, ITContent content, List formulaInfos) { - if (provider.getValue() instanceof Formula && !StringUtils.isEmpty((((Formula) provider.getValue())).getContent())) { + if (provider.getValue() instanceof Formula && StringUtils.isNotEmpty((((Formula) provider.getValue())).getContent())) { ITContent newContent = ITContent.copy(content); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter")); newContent.setReplaceObject(provider); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java index d74da99d5..2758a4268 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java @@ -17,10 +17,15 @@ import java.util.List; */ public interface SearchHighlightFormula extends SearchFormula { - //处理条件属性中各种属性 + /** + * 处理条件属性中各种属性 + * + * @param content + * @param formulaInfos + * @param highlightAction + */ default void dealWithHighlightAction(ITContent content, List formulaInfos, HighlightAction highlightAction) { } - } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java index 3c9b8884b..00c739e8e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java @@ -29,7 +29,7 @@ public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAc private void dealEndDateFormula(ITContent content, List formulaInfos) { DateEditor dateEditor = (DateEditor) content.getReplaceObject(); - if (dateEditor.getEndDateFM() != null && !StringUtils.isEmpty(dateEditor.getEndDateFM().getContent())) { + if (dateEditor.getEndDateFM() != null && StringUtils.isNotEmpty(dateEditor.getEndDateFM().getContent())) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dateEditor.getEndDateFM()); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_End_Time")); @@ -39,7 +39,7 @@ public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAc private void dealStratDateFormula(ITContent content, List formulaInfos) { DateEditor dateEditor = (DateEditor) content.getReplaceObject(); - if (dateEditor.getStartDateFM() != null && !StringUtils.isEmpty(dateEditor.getStartDateFM().getContent())) { + if (dateEditor.getStartDateFM() != null && StringUtils.isNotEmpty(dateEditor.getStartDateFM().getContent())) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(dateEditor.getStartDateFM()); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Start_Time")); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java index 03ae60b07..1e9e79cd0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java @@ -14,6 +14,8 @@ import java.util.ArrayList; import java.util.List; /** + * 搜索树形结构数据字典的公式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-22 @@ -45,7 +47,7 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc private void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, ITContent content, List formulaInfos) { for (TreeNodeAttr attr : wrapper.getTreeNodeAttrs()) { if (((FormulaDisplayDictionary) attr.getDictionary()).getFormula() != null - && !StringUtils.isEmpty(((FormulaDisplayDictionary) attr.getDictionary()).getFormula().getContent())) { + && StringUtils.isNotEmpty(((FormulaDisplayDictionary) attr.getDictionary()).getFormula().getContent())) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((FormulaDisplayDictionary) attr.getDictionary()).getFormula()); newContent.addOtherPos( @@ -60,7 +62,7 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc private void dealWithLayerConfigs(LayerConfig[] layerConfigs, ITContent content, List formulaInfos) { for (LayerConfig layerConfig : layerConfigs) { if (layerConfig.getDictionary().getFormula() != null - && !StringUtils.isEmpty(layerConfig.getDictionary().getFormula().getContent())) { + && StringUtils.isNotEmpty(layerConfig.getDictionary().getFormula().getContent())) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(layerConfig.getDictionary().getFormula()); newContent.addOtherPos( diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java index 7b1fc1e4b..b02f3ff78 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java @@ -16,6 +16,8 @@ import com.fr.stable.collections.combination.Pair; import java.util.List; /** + * 获取图表的JS + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-15 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java index 4805a82b5..cd41f58b8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java @@ -1,6 +1,5 @@ package com.fr.design.actions.replace.action.content.js; -import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.info.JSInfo; import com.fr.design.actions.replace.info.base.ITContent; @@ -21,6 +20,7 @@ import com.fr.web.attr.ReportWebAttr; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 搜索模板Web属性里的JS @@ -31,16 +31,16 @@ import java.util.List; */ public class SearchWebJSAction implements SearchJS { - private final static HashMap map = new HashMap<>(); + private final static Map MAP = new HashMap<>(); private List arrayList = new ArrayList<>(); private SearchWebJSAction() { } static { - map.put("WebPage", Toolkit.i18nText("Fine-Design_Report_Pagination_Setting")); - map.put("WebWrite", Toolkit.i18nText("Fine-Design_Report_Write_Setting")); - map.put("WebView", Toolkit.i18nText("Fine-Design_Report_Data_Analysis_Settings")); + MAP.put("WebPage", Toolkit.i18nText("Fine-Design_Report_Pagination_Setting")); + MAP.put("WebWrite", Toolkit.i18nText("Fine-Design_Report_Write_Setting")); + MAP.put("WebView", Toolkit.i18nText("Fine-Design_Report_Data_Analysis_Settings")); } @@ -68,8 +68,8 @@ public class SearchWebJSAction implements SearchJS { private void addJSInfos2ListFromArray(ITContent content, List jsInfos, WebContent webContent) { ITContent newContent = ITContent.copy(content); - if (map.containsKey(webContent.getClass().getSimpleName())) { - newContent.addOtherPos(map.get(webContent.getClass().getSimpleName())); + if (MAP.containsKey(webContent.getClass().getSimpleName())) { + newContent.addOtherPos(MAP.get(webContent.getClass().getSimpleName())); } addJSInfos2ListFromWebButton(newContent, jsInfos, webContent); addJSInfos2ListFromWebListener(newContent, jsInfos, webContent); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java index f2e6d4b93..19514ff34 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java @@ -116,8 +116,8 @@ public class SearchWidgetAction implements SearchAction { ITContent newContent = ITContent.copy(cellInfo.getContent()); Widget widget = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget(); - newContent.addOtherPos("控件"); - if (!StringUtils.isEmpty(widget.getWidgetName())) { + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Widget")); + if (StringUtils.isNotEmpty(widget.getWidgetName())) { newContent.addOtherPos(widget.getWidgetName()); } newContent.setReplaceObject(widget); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java index 41779d8cc..dab912818 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java @@ -21,7 +21,8 @@ import java.util.Map; */ public class FormulaInfo implements Info { private ITContent content; - + private static final String DISPLAY = Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Display_Value"); + private static final String ACTUAL = Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Actual_Value"); public FormulaInfo(ITContent content) { this.content = content; } @@ -39,9 +40,9 @@ public class FormulaInfo implements Info { public Map getValue(Object... o) { Map map = new HashMap<>(); //这边比较特殊,存的都是FormulaDictionary ,特殊判断一下 - if (this.content.getOtherPos().contains(Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Display_Value"))) { + if (this.content.getOtherPos().contains(DISPLAY)) { map.put("content", ((FormulaDictionary) this.getContent().getReplaceObject()).getExcuteFormula()); - } else if (this.content.getOtherPos().contains(Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Actual_Value"))) { + } else if (this.content.getOtherPos().contains(ACTUAL)) { map.put("content", ((FormulaDictionary) this.getContent().getReplaceObject()).getProduceFormula()); } else { map = getCommonValue(); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java index f8700f0ea..6006c8375 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java @@ -41,6 +41,10 @@ public class SQLInfo implements Info { return new HashMap<>(); } + /** + * 复制 + * @return + */ public SQLInfo copy() { ITContent content = ITContent.copy(this.getContent()); return new SQLInfo(content); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java index 9a6a02667..cc3ac6fee 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java @@ -177,7 +177,7 @@ public class ITContent implements Cloneable { */ public void addOtherPos(String... otherPoses) { for (String otherPos : otherPoses) { - if (this.otherPos != null && !StringUtils.isEmpty(this.otherPos)) { + if (StringUtils.isNotEmpty(this.otherPos)) { this.otherPos = this.otherPos + "-" + otherPos; } else { this.otherPos = otherPos; @@ -191,7 +191,7 @@ public class ITContent implements Cloneable { * @param trlString */ public void addTRL(String trlString) { - if (!StringUtils.isEmpty(trlString)) { + if (StringUtils.isNotEmpty(trlString)) { if (StringUtils.isNotEmpty(this.trlString)) { this.trlString = this.trlString + ":" + trlString; } else { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java index 188d5f101..0c01a2ec8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java @@ -125,7 +125,7 @@ public class ITReplaceMainDialog extends UIDialog { public void actionPerformed(ActionEvent e) { search(); String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(); - if (!StringUtils.isEmpty(searchStr)) { + if (StringUtils.isNotEmpty(searchStr)) { ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setEditable(true); northPane.getReplaceInputCombobox().setEditable(true); } else { @@ -140,7 +140,7 @@ public class ITReplaceMainDialog extends UIDialog { public void actionPerformed(ActionEvent e) { search(); String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText(); - if (!StringUtils.isEmpty(searchStr)) { + if (StringUtils.isNotEmpty(searchStr)) { ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).setEditable(true); northPane.getReplaceInputCombobox().setEditable(true); } else { @@ -225,7 +225,9 @@ public class ITReplaceMainDialog extends UIDialog { public boolean isITReplaceValid() { if (JTemplate.isValid(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate())) { return StringUtils.equals(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget().getTemplateID(), templateID); - } else return false; + } else { + return false; + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java index ed66571c6..d4ca27672 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java @@ -152,7 +152,7 @@ public class ITReplaceNorthPanel { */ public void refreshFindInputComboBoxItems() { String text = ((UITextField) (this.getFindInputCombobox().getEditor().getEditorComponent())).getText(); - if (!StringUtils.isEmpty(text)) { + if (StringUtils.isNotEmpty(text)) { if (findInputItems.contains(text)) { Collections.swap(findInputItems, 0, findInputItems.indexOf(text)); } else { @@ -173,7 +173,7 @@ public class ITReplaceNorthPanel { */ public void refreshReplaceInputComboBoxItems() { String text = ((UITextField) (this.getReplaceInputCombobox().getEditor().getEditorComponent())).getText(); - if (!StringUtils.isEmpty(text)) { + if (StringUtils.isNotEmpty(text)) { if (replaceInputItems.contains(text)) { Collections.swap(replaceInputItems, 0, replaceInputItems.indexOf(text)); } else { From c504308490df7c7bf4118401b91d217c27fa5991 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 16 Sep 2022 11:26:45 +0800 Subject: [PATCH 13/17] =?UTF-8?q?REPORT-75998=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/module/DesignModuleFactory.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java b/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java index ab751296d..baed29be4 100644 --- a/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java +++ b/designer-base/src/main/java/com/fr/design/module/DesignModuleFactory.java @@ -70,7 +70,7 @@ public class DesignModuleFactory { @NotNull public static NameableCreator[] getCreators4Hyperlink() { - return instance.creators4Hyperlink == null? new NameableCreator[0]:instance.creators4Hyperlink; + return instance.creators4Hyperlink == null ? new NameableCreator[0] : instance.creators4Hyperlink; } public static void registerExtraWidgetOptions(WidgetOption[] options) { @@ -117,10 +117,17 @@ public class DesignModuleFactory { public static Class getNewFormAction() { return instance.newFormAction; } - public static void registerReplaceActionClass(Class r){ + + /** + * 注册一下查找替换 + * + * @param r + */ + public static void registerReplaceActionClass(Class r) { instance.ITReplaceAction = r; } - public static Class getITReplaceAction(){ + + public static Class getITReplaceAction() { return instance.ITReplaceAction; } From 581db160ff2f18c8d31b470b8df36cd1f6621a89 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Fri, 16 Sep 2022 12:06:45 +0800 Subject: [PATCH 14/17] =?UTF-8?q?REPORT-75998=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E9=87=8A=EF=BC=8C=E4=BF=AE=E6=94=B9=E4=B8=8D=E5=90=88?= =?UTF-8?q?=E9=80=82=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../replace/action/content/formula/FormulaReplaceObject.java | 2 ++ .../java/com/fr/design/actions/replace/ui/ITTableButton.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java index aa9dbfa68..6c0a01d66 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java @@ -29,6 +29,8 @@ import java.util.List; import java.util.Map; /** + * 公式可能存在的形式 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-08-25 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java index 248a7353a..c754c2c43 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java @@ -37,7 +37,7 @@ public class ITTableButton extends AbstractCellEditor implements TableCellEditor @Override public void actionPerformed(ActionEvent e) { ITContent content = (ITContent) getEditTable().getValueAt(getEditTable().getEditingRow(), 7); - if (!StringUtils.isEmpty(GeneralUtils.objectToString(content.getTrlString()))) { + if (StringUtils.isNotEmpty(GeneralUtils.objectToString(content.getTrlString()))) { ITReplaceMainDialog.setITReplaceFlag(true); HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().navigate(new TRL(GeneralUtils.objectToString(content.getTrlString()))); } From bc8ad762b10dca482300013e4b4df640c4be9ddb Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Sat, 17 Sep 2022 14:54:09 +0800 Subject: [PATCH 15/17] =?UTF-8?q?REPORT-75998=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E6=B3=A8=E9=94=80=E7=9A=84=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=B1=BB=E4=B8=8E=E7=AE=A1=E7=90=86=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/replace/action/SearchManager.java | 30 +++ .../replace/action/SearchManagerCenter.java | 214 ++++++++++++++++++ .../action/ShowSearchResultAction.java | 13 +- .../action/content/cell/SearchCellAction.java | 12 +- .../component/SearchComponentAction.java | 7 +- .../content/formula/FormulaReplaceObject.java | 18 +- .../content/formula/SearchFormulaManager.java | 17 +- .../formula/cell/SearchCellFormulaAction.java | 37 +-- .../cell/SearchCellFormulaManager.java | 110 +++++++++ .../cell/SearchCellFormulaTypeAction.java | 35 +++ .../cell/SearchDSColumnFormulaAction.java | 92 +++++--- .../formula/cell/SearchRichFormulaAction.java | 64 +++++- .../cell/SearchSubReportFormulaAction.java | 35 +++ .../SearchChartCollectionFormulaAction.java | 4 +- .../action/content/formula/data/DataType.java | 2 + .../formula/data/SearchDataFormulaAction.java | 2 +- .../SearchFloatFormulaAction.java | 4 +- .../SearchHighlightFormulaAction.java | 50 +++- .../SearchHighlightFormulaManager.java | 105 +++++++++ .../SearchCommonConditionAction.java | 41 +++- .../condition/SearchConditionManager.java | 103 +++++++++ .../SearchFormulaConditionAction.java | 39 ++++ .../condition/SearchListConditionAction.java | 44 +++- .../SearchObjectConditionAction.java | 38 ++++ .../SearchCommit2DBJSFormulaAction.java | 67 ++++-- .../SearchExportJSFormulaAction.java | 37 +++ .../highlight/javascript/SearchJSFormula.java | 4 +- .../javascript/SearchJSFormulaManager.java | 116 ++++++++++ .../javascript/SearchJSHighlightAction.java | 69 +++--- .../SearchMobileHyperlinkFormulaAction.java | 37 +++ .../AbstractSearchWidgetFormulaAction.java | 7 +- .../formula/widget/DictionaryType.java | 47 ++-- .../SearchCommonWidgetFormulaAction.java | 38 ++++ .../widget/SearchDateEditorFormulaAction.java | 37 +++ .../widget/SearchDictFormulaAction.java | 37 +++ .../widget/SearchTreeEditorFormulaAction.java | 38 ++++ .../widget/SearchWidgetFormulaAction.java | 47 +--- .../widget/SearchWidgetFormulaManager.java | 146 ++++++++++++ .../action/content/js/SearchCellJSAction.java | 4 +- .../content/js/SearchChartJSAction.java | 6 +- .../content/js/SearchFloatJSAction.java | 16 +- .../action/content/js/SearchJSManager.java | 36 ++- .../action/content/js/SearchWebJSAction.java | 2 +- .../content/js/SearchWidgetJSAction.java | 5 +- .../action/content/sql/SearchSQLAction.java | 2 +- .../content/widget/SearchWidgetAction.java | 10 +- .../actions/replace/info/FormulaInfo.java | 3 +- .../actions/replace/info/base/ITContent.java | 16 ++ .../replace/ui/ITReplaceNorthPanel.java | 114 +++++----- .../actions/replace/ui/ITTableButton.java | 4 + 50 files changed, 1743 insertions(+), 318 deletions(-) create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java create mode 100644 designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManager.java new file mode 100644 index 000000000..c5acd2ec7 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManager.java @@ -0,0 +1,30 @@ +package com.fr.design.actions.replace.action; + +/** + * 管理搜索元素的注册与注销 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public interface SearchManager { + + /** + * 注册搜索行为 + * @param tag + * @param searchAction + */ + void registerAction(String tag , SearchAction searchAction); + + /** + * 根据tag注销搜索行为 + * @param tag + */ + default void removeAction(String tag){}; + + /** + * 根据行为注销指定的搜索行为 + * @param searchAction + */ + default void removeAction(SearchAction searchAction){}; +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java new file mode 100644 index 000000000..d1c7054b5 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java @@ -0,0 +1,214 @@ +package com.fr.design.actions.replace.action; + +import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaManager; +import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormulaManager; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; +import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSFormulaManager; +import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaManager; +import com.fr.design.actions.replace.action.content.js.SearchCellJSAction; +import com.fr.design.actions.replace.action.content.js.SearchJS; +import com.fr.design.actions.replace.action.content.js.SearchJSManager; +import com.fr.design.actions.replace.action.content.js.SearchWebJSAction; +import com.fr.design.actions.replace.action.content.js.SearchWidgetJSAction; +import com.fr.third.v2.org.apache.poi.ss.formula.functions.T; +import org.jetbrains.annotations.Nullable; + +/** + * 管理各个管理类的注入的管理中心 + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public class SearchManagerCenter { + public static final int CELL_FORMULA = 0; + public static final int CONDITION_FORMULA = 1; + public static final int JS_FORMULA = 2; + public static final int HIGHLIGHT_FORMULA = 3; + public static final int WIDGET_FORMULA = 4; + public static final int JS = 5; + + private SearchManagerCenter() { + } + + /** + * 注册 + * + * @param index 指定类型编号 + * @param tag 类名称 + * @param searchAction 对应搜索行为 + */ + public void register(int index, String tag, SearchAction searchAction) { + ManagerType managerType = ManagerType.match(index); + if (managerType != null) { + managerType.registerAction(tag, searchAction); + } + } + + /** + * 注销 + * + * @param index 指定类型编号 + * @param tag 类名称 + */ + public void remove(int index, String tag) { + ManagerType managerType = ManagerType.match(index); + if (managerType != null) { + managerType.removeAction(tag); + } + } + + + /** + * 管理类的类型 + */ + public enum ManagerType implements SearchManager { + /** + * 注册单元格不同值类型中自己特有的公式(数据列、子报表、公式、富文本,可自己添加) + */ + CELL_FORMULA(0) { + @Override + public void registerAction(String tag, SearchAction searchAction) { + SearchCellFormulaManager.getInstance().registerAction(tag, searchAction); + } + + @Override + public void removeAction(String tag) { + SearchCellFormulaManager.getInstance().removeAction(tag); + } + }, + /** + * 注册条件属性中的公式(公式类型的条件属性、包装了一个比较器作为条件的条件对象、组合条件,用多个AND或者OR连接起来的条件组成的对象、简单比较的条件、可自己添加) + */ + CONDITION_FORMULA(1) { + @Override + public void registerAction(String tag, SearchAction searchAction) { + SearchConditionManager.getInstance().registerAction(tag, searchAction); + } + + @Override + public void removeAction(String tag) { + SearchConditionManager.getInstance().removeAction(tag); + } + }, + /** + * 注冊超链类型中的自己特有的公式(提交入库、导出事件、移动端弹窗、可自己添加) + * 其他类型的超链都只有参数部分会存在公式,属于公有,统一处理 + */ + JS_FORMULA(2) { + @Override + public void registerAction(String tag, SearchAction searchAction) { + SearchJSFormulaManager.getInstance().registerAction(tag, searchAction); + } + + @Override + public void removeAction(String tag) { + SearchJSFormulaManager.getInstance().removeAction(tag); + } + }, + /** + * 注册条件属性中自己特有的公式(超级链接、控件、... 可自己添加) + */ + HIGHLIGHT_FORMULA(3) { + @Override + public void registerAction(String tag, SearchAction searchAction) { + SearchHighlightFormulaManager.getInstance().registerAction(tag, searchAction); + } + + @Override + public void removeAction(String tag) { + SearchHighlightFormulaManager.getInstance().removeAction(tag); + } + }, + + /** + * 注册不同控件中的公式(非树形数据字典、树形数据字典、无数据字典、可自己添加) + */ + WIDGET_FORMULA(4) { + @Override + public void registerAction(String tag, SearchAction searchAction) { + SearchWidgetFormulaManager.getInstance().registerAction(tag, searchAction); + } + + @Override + public void removeAction(String tag) { + SearchWidgetFormulaManager.getInstance().removeAction(tag); + } + }, + /** + * 注册获取JS的场景(当前:控件、单元格、模板Web属性、悬浮元素、可自行添加) + */ + JS(5) { + @Override + public void registerAction(String tag, SearchAction searchAction) { + SearchJSManager.getInstance().registerAction(tag, searchAction); + } + + @Override + public void removeAction(SearchAction searchAction) { + SearchJSManager.getInstance().removeAction(searchAction); + } + }; + + + int index; + + ManagerType(int index) { + this.index = index; + } + + /** + * 匹配 + * + * @param index + * @return + */ + @Nullable + public static ManagerType match(int index) { + ManagerType[] values = ManagerType.values(); + for (ManagerType value : values) { + if (value.index == index) { + return value; + } + } + return null; + } + + } + + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchManagerCenter getInstance() { + return SearchManagerCenterEnum.SINGLETON.getInstance(); + } + + + /** + * 枚举实现单例 + */ + private enum SearchManagerCenterEnum { + /** + * 单例 + */ + SINGLETON; + private SearchManagerCenter instance; + + SearchManagerCenterEnum() { + instance = new SearchManagerCenter(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchManagerCenter getInstance() { + return instance; + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java index 6c3abb575..1cfc978f9 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java @@ -9,15 +9,22 @@ import com.fr.design.actions.replace.action.content.formula.SearchFormulaManager import com.fr.design.actions.replace.action.content.js.SearchJSManager; import com.fr.design.actions.replace.action.content.sql.SearchSQLAction; import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; -import com.fr.design.actions.replace.info.*; +import com.fr.design.actions.replace.info.CellInfo; +import com.fr.design.actions.replace.info.ComponentInfo; +import com.fr.design.actions.replace.info.FloatInfo; +import com.fr.design.actions.replace.info.FormulaInfo; +import com.fr.design.actions.replace.info.Info; +import com.fr.design.actions.replace.info.JSInfo; +import com.fr.design.actions.replace.info.SQLInfo; +import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.general.GeneralUtils; import com.fr.report.cell.CellElement; import com.fr.report.cell.FloatElement; +import com.fr.stable.StringUtils; import com.fr.stable.collections.combination.Pair; -import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; @@ -197,7 +204,7 @@ public enum ShowSearchResultAction implements ShowValue { } } - private void updateOperaotrArray(int index, int preLength, int strLength, SQLInfo sqlInfo) { + private void updateOperatorArray(int index, int preLength, int strLength, SQLInfo sqlInfo) { ArrayList> pairs = new ArrayList<>(); pairs.add(new Pair<>(index + preLength, index + preLength + strLength)); sqlInfo.getContent().setOperatorArray(pairs); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java index 04b1a6e62..826b247e0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java @@ -42,8 +42,6 @@ public class SearchCellAction implements SearchAction { private SearchCellAction() { } - ; - public List getCellInfos() { return cellInfos; } @@ -60,13 +58,13 @@ public class SearchCellAction implements SearchAction { */ @Override public void search4Infos(JTemplate jTemplate) { - ITContent content = new ITContent(); + ITContent content = new ITContent(); content.setTemplateName(jTemplate.getTemplateName()); content.addTRL(jTemplate.getTemplateName()); if (jTemplate.getTarget() instanceof Form) { setCellInfos(dealForm(jTemplate)); } else if (jTemplate.getTarget() instanceof WorkBook) { - setCellInfos(dealWorkBook((WorkBook) jTemplate.getTarget(),content)); + setCellInfos(dealWorkBook((WorkBook) jTemplate.getTarget(), content)); } else { setCellInfos(new ArrayList<>()); } @@ -118,10 +116,10 @@ public class SearchCellAction implements SearchAction { /** * 处理普通报表 * - * @param workBook 要搜索的报表对象 + * @param workBook 要搜索的报表对象 * @return 对应信息Array */ - public List dealWorkBook(WorkBook workBook,ITContent workBookContent) { + public List dealWorkBook(WorkBook workBook, ITContent workBookContent) { ArrayList result = new ArrayList<>(); for (int i = 0; i < workBook.getReportCount(); i++) { Report report = workBook.getReport(i); @@ -198,7 +196,7 @@ public class SearchCellAction implements SearchAction { /** * 枚举实现单例 */ - enum SearchCellActionEnum { + private enum SearchCellActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java index 2d328ae8a..775d03f5c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java @@ -23,6 +23,9 @@ import java.util.List; */ public class SearchComponentAction implements SearchAction { + private SearchComponentAction() { + } + private List componentInfos; @@ -83,6 +86,7 @@ public class SearchComponentAction implements SearchAction { private void dealBodyContainer(List componentInfos, ITContent bodyContent, WLayout body) { ITContent content = ITContent.copy(bodyContent); content.setReplaceObject(body); + content.setJumpAble(false); dealContent(content, body.getWidgetName()); //WParameterLayout componentInfos.add(new ComponentInfo(content)); @@ -92,6 +96,7 @@ public class SearchComponentAction implements SearchAction { if (paraContainer != null) { ITContent paraContent = ITContent.copy(content); paraContent.addOtherPos(paraContainer.getWidgetName()); + paraContent.setJumpAble(false); //单独处理一下para组件 dealParaContainer(componentInfos, paraContent, paraContainer); //处理para的子组件 @@ -145,7 +150,7 @@ public class SearchComponentAction implements SearchAction { /** * 枚举实现单例 */ - enum SearchComponentActionEnum { + private enum SearchComponentActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java index 6c0a01d66..7a1c199af 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java @@ -14,9 +14,8 @@ import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.file.HistoryTemplateListCache; import com.fr.js.SingleJavaScript; import com.fr.main.impl.WorkBook; -import com.fr.report.cell.CellElement; import com.fr.report.cell.cellattr.CellInsertPolicyAttr; -import com.fr.report.cell.cellattr.core.RichText; +import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.stable.FormulaProvider; import com.fr.stable.ParameterProvider; @@ -107,19 +106,26 @@ public enum FormulaReplaceObject implements DealWithInfoValue { /** * 富文本 */ - RICH_TEXT("RichText") { + RICH_CHAR("RichChar") { @Override public Map getValue(Object... o) { HashMap map = new HashMap<>(); - if (StringUtils.isNotEmpty(((RichText) ((CellElement) o[0]).getValue()).getContent())) { - map.put("content", ((RichText) ((CellElement) o[0]).getValue()).getContent()); + if (o[0] instanceof RichChar) { + if (StringUtils.isNotEmpty(((RichChar) o[0]).getText())) { + map.put("content", (((RichChar) o[0]).getText())); + } } return map; } @Override public void setValue(Info info, String findStr, String replaceStr, List> operatorArray) { - //todo 富文本公式处理 + Object replaceObject = info.getContent().getReplaceObject(); + if (replaceObject instanceof RichChar) { + RichChar richChar = (RichChar) replaceObject; + info.updateOldStr(richChar.getText(), findStr); + richChar.setText(ShowValueUtils.replaceAll(richChar.getText(), findStr, replaceStr)); + } } }, diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java index 5a3644a40..51c61ef6a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java @@ -1,6 +1,7 @@ package com.fr.design.actions.replace.action.content.formula; import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.SearchManager; import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaAction; import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; import com.fr.design.actions.replace.action.content.formula.floatelement.SearchFloatFormulaAction; @@ -26,11 +27,11 @@ public class SearchFormulaManager implements SearchAction { private Set formulaProviderSet = new HashSet<>(); private SearchFormulaManager() { - registerFormula(SearchCellFormulaAction.getInstance()); - registerFormula(SearchWidgetFormulaAction.getInstance()); - registerFormula(SearchDataFormulaAction.getInstance()); - registerFormula(SearchTemplateFormulaAction.getInstance()); - registerFormula(SearchFloatFormulaAction.getInstance()); + register(SearchCellFormulaAction.getInstance()); + register(SearchWidgetFormulaAction.getInstance()); + register(SearchDataFormulaAction.getInstance()); + register(SearchTemplateFormulaAction.getInstance()); + register(SearchFloatFormulaAction.getInstance()); } @Override @@ -47,7 +48,7 @@ public class SearchFormulaManager implements SearchAction { * * @param searchFormula */ - public void registerFormula(SearchFormula searchFormula) { + public void register(SearchFormula searchFormula) { formulaProviderSet.add(searchFormula); } @@ -56,7 +57,7 @@ public class SearchFormulaManager implements SearchAction { * * @param searchFormula */ - public void removeFormula(SearchFormula searchFormula) { + public void remove(SearchFormula searchFormula) { formulaProviderSet.remove(searchFormula); } @@ -83,7 +84,7 @@ public class SearchFormulaManager implements SearchAction { /** * 枚举实现单例 */ - enum SearchFormulaManagerEnum { + private enum SearchFormulaManagerEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java index f4fc869cd..3882d7721 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java @@ -4,7 +4,6 @@ import com.fr.base.Formula; import com.fr.base.present.DictPresent; import com.fr.base.present.FormulaPresent; import com.fr.chart.chartattr.ChartCollection; -import com.fr.data.impl.DatabaseDictionary; import com.fr.design.actions.replace.action.content.cell.SearchCellAction; import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.*; @@ -17,7 +16,6 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; -import com.fr.form.ui.DictionaryContainer; import com.fr.general.data.Condition; import com.fr.js.NameJavaScriptGroup; import com.fr.report.cell.CellElement; @@ -28,7 +26,6 @@ import com.fr.report.cell.cellattr.highlight.HighlightGroup; import com.fr.report.core.sort.common.CellSortAttr; import com.fr.report.core.sort.sortexpression.FormulaSortExpression; import com.fr.report.core.sort.sortexpression.SortExpression; -import sun.security.krb5.SCDynamicStoreConfig; import java.util.HashMap; import java.util.List; @@ -44,23 +41,6 @@ import java.util.Map; public class SearchCellFormulaAction implements SearchCellFormula { - public static HashMap cellType = new HashMap<>(); - - static { - cellType.put("DSColumn", new SearchDSColumnFormulaAction()); - cellType.put("Formula", new SearchCellFormulaTypeAction()); - cellType.put("RichText", new SearchRichFormulaAction()); - cellType.put("SubReport", new SearchSubReportFormulaAction()); - } - - public static HashMap conditionHashMap = new HashMap<>(); - - static { - conditionHashMap.put("FormulaCondition", new SearchFormulaConditionAction()); - conditionHashMap.put("ObjectCondition", new SearchObjectConditionAction()); - conditionHashMap.put("ListCondition", new SearchListConditionAction()); - } - private SearchCellFormulaAction() { } @@ -108,7 +88,7 @@ public class SearchCellFormulaAction implements SearchCellFormula { NameJavaScriptGroup nameJavaScriptGroup = ((CellElement) cellInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); if (nameJavaScriptGroup != null) { for (int i = 0; i < nameJavaScriptGroup.size(); i++) { - SearchJSHighlightAction action = new SearchJSHighlightAction(); + SearchJSHighlightAction action = SearchJSHighlightAction.getInstance(); ITContent content = ITContent.copy(cellInfo.getContent()); content.addOtherPos(nameJavaScriptGroup.getNameHyperlink(i).getName()); action.searchJSFormulaFromOther(formulaInfos, content, nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); @@ -124,7 +104,7 @@ public class SearchCellFormulaAction implements SearchCellFormula { for (int j = 0; j < ((DefaultHighlight) highlightGroup.getHighlight(i)).actionCount(); j++) { HighlightAction highlightAction = ((DefaultHighlight) highlightGroup.getHighlight(i)).getHighlightAction(j); //处理HighlightAction - SearchHighlightFormulaAction searchHighlightAction = new SearchHighlightFormulaAction(); + SearchHighlightFormulaAction searchHighlightAction = SearchHighlightFormulaAction.getInstance(); ITContent newContent = ITContent.copy(cellInfo.getContent()); searchHighlightAction.dealWithHighlightAction(newContent, formulaInfos, highlightAction); } @@ -138,7 +118,8 @@ public class SearchCellFormulaAction implements SearchCellFormula { for (int i = 0; i < highlightGroup.size(); i++) { DefaultHighlight defaultHighlight = (DefaultHighlight) highlightGroup.getHighlight(i); if (isConditionKeyExist(defaultHighlight.getCondition())) { - SearchConditionFormula searchCondition = conditionHashMap.get(((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition().getClass().getSimpleName()); + Map conditionType = SearchConditionManager.getInstance().getConditionType(); + SearchConditionFormula searchCondition = conditionType.get(((DefaultHighlight) highlightGroup.getHighlight(i)).getCondition().getClass().getSimpleName()); ITContent newContent = ITContent.copy(cellInfo.getContent()); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), @@ -154,7 +135,8 @@ public class SearchCellFormulaAction implements SearchCellFormula { } private boolean isConditionKeyExist(Condition condition) { - return conditionHashMap.containsKey(condition.getClass().getSimpleName()); + + return SearchConditionManager.getInstance().getConditionType().containsKey(condition.getClass().getSimpleName()); } @@ -241,14 +223,16 @@ public class SearchCellFormulaAction implements SearchCellFormula { } private void searchFormulaFromCellInfo(CellInfo cellInfo, List formulaInfos) { + Map cellType = SearchCellFormulaManager.getInstance().getCellType(); + CellElement cellElement = ((CellElement) (cellInfo.getContent().getReplaceObject())); if (isCellValueValid(cellInfo)) { - SearchCellFormula searchCellFormula = cellType.get(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName()); + SearchCellFormula searchCellFormula = cellType.get(cellElement.getValue().getClass().getSimpleName()); searchCellFormula.searchFormulaFromCellType(formulaInfos, cellInfo.getContent()); } else if (isChart(cellInfo)) { ITContent chartContent = cellInfo.getContent(); //这边置否的原因是决策报表里面单元格里面放的图表是可以有多个的,每个还是有各自的名字,和普通报表一样处理即可 chartContent.setFrmFlag(false); - SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, cellInfo.getContent(), (ChartCollection) ((CellElement) (cellInfo.getContent().getReplaceObject())).getValue()); + SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, cellInfo.getContent(), (ChartCollection) cellElement.getValue()); } } @@ -258,6 +242,7 @@ public class SearchCellFormulaAction implements SearchCellFormula { } private boolean isCellValueValid(CellInfo cellInfo) { + Map cellType = SearchCellFormulaManager.getInstance().getCellType(); return ((CellElement) (cellInfo.getContent().getReplaceObject())).getValue() != null && cellType.containsKey(((CellElement) (cellInfo.getContent().getReplaceObject())).getValue().getClass().getSimpleName()); } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaManager.java new file mode 100644 index 000000000..eee99bf20 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaManager.java @@ -0,0 +1,110 @@ +package com.fr.design.actions.replace.action.content.formula.cell; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.SearchManager; + +import java.util.HashMap; +import java.util.Map; + +/** + * 管理要搜索的单元格类型(公式) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public class SearchCellFormulaManager implements SearchManager { + private Map cellType = new HashMap<>(); + public static final String DS_COLUMN = "DSColumn"; + public static final String FORMULA = "Formula"; + public static final String RICH_TEXT = "RichText"; + public static final String SUB_REPORT = "SubReport"; + + private SearchCellFormulaManager() { + //数据列 + register(DS_COLUMN, SearchDSColumnFormulaAction.getInstance()); + //公式 + register(FORMULA, SearchCellFormulaTypeAction.getInstance()); + //富文本 + register(RICH_TEXT, SearchRichFormulaAction.getInstance()); + //子报表 + register(SUB_REPORT, SearchSubReportFormulaAction.getInstance()); + + } + + @Override + public void registerAction(String tag, SearchAction searchAction) { + if (searchAction instanceof SearchCellFormula){ + register(tag, (SearchCellFormula) searchAction); + } + + } + + @Override + public void removeAction(String tag) { + remove(tag); + } + + /** + * 注册 + * + * @param tag 用于匹配的类型tag + * @param searchCellFormula 对应的实现类 + */ + private void register(String tag, SearchCellFormula searchCellFormula) { + cellType.put(tag, searchCellFormula); + } + + /** + * 注销 + * + * @param tag 用于匹配的tag + */ + private void remove(String tag) { + cellType.remove(tag); + } + + /** + * 获取单元格类型 + * + * @return + */ + public Map getCellType() { + return cellType; + } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchCellFormulaManager getInstance() { + return SearchCellFormulaManagerEnum.SINGLETON.getInstance(); + } + + + + /** + * 枚举实现单例 + */ + private enum SearchCellFormulaManagerEnum { + /** + * 单例 + */ + SINGLETON; + private SearchCellFormulaManager instance; + + SearchCellFormulaManagerEnum() { + instance = new SearchCellFormulaManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchCellFormulaManager getInstance() { + return instance; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java index d857ecc7e..aed99da75 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java @@ -17,6 +17,8 @@ import java.util.List; public class SearchCellFormulaTypeAction implements SearchCellFormula { + private SearchCellFormulaTypeAction(){} + @Override public void searchFormulaFromCellType(List formulaInfos, ITContent content) { ITContent newContent = ITContent.copy(content); @@ -24,4 +26,37 @@ public class SearchCellFormulaTypeAction implements SearchCellFormula { newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Formula")); formulaInfos.add(new FormulaInfo(newContent)); } + + /** + * 获取单例 + * + * @return + */ + public static SearchCellFormulaTypeAction getInstance() { + return SearchCellFormulaTypeActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchCellFormulaTypeActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchCellFormulaTypeAction instance; + + SearchCellFormulaTypeActionEnum() { + instance = new SearchCellFormulaTypeAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchCellFormulaTypeAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java index a2d9afea8..0048c8456 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java @@ -4,6 +4,7 @@ import com.fr.base.Formula; import com.fr.base.Parameter; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchListConditionAction; import com.fr.design.actions.replace.info.FormulaInfo; @@ -18,6 +19,7 @@ import com.fr.report.core.sort.sortexpression.SortExpression; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 查找公式时单元格格式如果是数据列型则操作此类 @@ -27,35 +29,35 @@ import java.util.List; * created by Destiny.Lin on 2022-08-18 */ public class SearchDSColumnFormulaAction implements SearchCellFormula { - public static HashMap conditionHashMap = new HashMap<>(); - static { - conditionHashMap.put("FormulaCondition", new SearchFormulaConditionAction()); - conditionHashMap.put("CommonCondition", new SearchCommonConditionAction()); - conditionHashMap.put("ListCondition", new SearchListConditionAction()); - } + private SearchDSColumnFormulaAction(){} + @Override public void searchFormulaFromCellType(List formulaInfos, ITContent itContent) { - if (((CellElement) (itContent.getReplaceObject())).getValue() instanceof DSColumn) { - if (((DSColumn) ((CellElement) (itContent.getReplaceObject())).getValue()).getCondition() != null) { - ITContent content = ITContent.copy(itContent); - //数据列 - content.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_DS_Column")); - DSColumn dsColumn = (DSColumn) ((CellElement) (itContent.getReplaceObject())).getValue(); - //过滤条件中的公式 - addFormulaInfos2ArrayFromCondition(content, dsColumn.getCondition(), formulaInfos); - //动态参数中的公式 - addFormulaInfos2ArrayFromPara(content, dsColumn, formulaInfos); - //高级-排序中的公式 - addFormulaInfos2ArrayFromSortExpression(content, dsColumn, formulaInfos); - //高级-显示值中的公式 - addFormulaInfos2ArrayFromResult(content, dsColumn, formulaInfos); + if (itContent.getReplaceObject() instanceof CellElement){ + CellElement cellElement = (CellElement) itContent.getReplaceObject(); + if (cellElement.getValue() instanceof DSColumn) { + if (((DSColumn) cellElement.getValue()).getCondition() != null) { + ITContent content = ITContent.copy(itContent); + //数据列 + content.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_DS_Column")); + DSColumn dsColumn = (DSColumn) ((CellElement) (itContent.getReplaceObject())).getValue(); + //过滤条件中的公式 + addFormulaInfos2ArrayFromCondition(content, dsColumn.getCondition(), formulaInfos); + //动态参数中的公式 + addFormulaInfos2ArrayFromPara(content, dsColumn, formulaInfos); + //高级-排序中的公式 + addFormulaInfos2ArrayFromSortExpression(content, dsColumn, formulaInfos); + //高级-显示值中的公式 + addFormulaInfos2ArrayFromResult(content, dsColumn, formulaInfos); - } + } + } } + } private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, List formulaInfos) { @@ -109,11 +111,49 @@ public class SearchDSColumnFormulaAction implements SearchCellFormula { */ private void addFormulaInfos2ArrayFromCondition(ITContent content, Condition condition, List formulaInfos) { //这边condition有三种情况:FormulaCondition、CommonCondition、ListCondition,分别处理 - SearchConditionFormula searchCondition = conditionHashMap.get(condition.getClass().getSimpleName()); - ITContent newContent = ITContent.copy(content); - //过滤条件 - newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Filter_Conditions")); - searchCondition.searchFormulaFromCondition(formulaInfos, newContent, condition); + Map conditionType = SearchConditionManager.getInstance().getConditionType(); + if (conditionType.containsKey(condition.getClass().getSimpleName())){ + SearchConditionFormula searchCondition = conditionType.get(condition.getClass().getSimpleName()); + ITContent newContent = ITContent.copy(content); + //过滤条件 + newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Filter_Conditions")); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent, condition); + } + + + } + + /** + * 获取单例 + * + * @return + */ + public static SearchDSColumnFormulaAction getInstance() { + return SearchDSColumnFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchDSColumnFormulaActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchDSColumnFormulaAction instance; + + SearchDSColumnFormulaActionEnum() { + instance = new SearchDSColumnFormulaAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchDSColumnFormulaAction getInstance() { + return instance; + } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java index c80c7a610..c6a63e9bd 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java @@ -2,10 +2,13 @@ package com.fr.design.actions.replace.action.content.formula.cell; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; +import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.i18n.Toolkit; import com.fr.report.cell.CellElement; +import com.fr.report.cell.cellattr.core.RichChar; import com.fr.report.cell.cellattr.core.RichText; +import java.util.Iterator; import java.util.List; /** @@ -17,20 +20,61 @@ import java.util.List; */ public class SearchRichFormulaAction implements SearchCellFormula { + private SearchRichFormulaAction() { + } + + @Override public void searchFormulaFromCellType(List formulaInfos, ITContent content) { - //todo 富文本这边直接遍历RichChar来拿公式 - String contain = "${"; - if (((RichText) ((CellElement) (content.getReplaceObject())).getValue()).getContent().contains(contain)) { - ITContent newContent = ITContent.copy(content); - newContent.setReplaceObject(((CellElement) (content.getReplaceObject())).getValue()); - newContent.addOtherPos( - Toolkit.i18nText("Fine-Design_Chart_Rich_Text"), - Toolkit.i18nText("Fine-Design_Basic_Formula") - ); - formulaInfos.add(new FormulaInfo(newContent)); + RichText richText = ((RichText) ((CellElement) (content.getReplaceObject())).getValue()); + Iterator it = richText.charIterator(); + while (it.hasNext()) { + RichChar richChar = it.next(); + if (richChar.isFormula()) { + ITContent newContent = ITContent.copy(content); + newContent.setReplaceObject(richChar); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Chart_Rich_Text"), + Toolkit.i18nText("Fine-Design_Basic_Formula") + ); + formulaInfos.add(new FormulaInfo(newContent)); + } } + } + + + /** + * 获取单例 + * + * @return + */ + public static SearchRichFormulaAction getInstance() { + return SearchRichFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchRichFormulaActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchRichFormulaAction instance; + SearchRichFormulaActionEnum() { + instance = new SearchRichFormulaAction(); + } + /** + * 拿到对象 + * + * @return + */ + public SearchRichFormulaAction getInstance() { + return instance; + } } + + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java index 758b7a638..36c86b29a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java @@ -18,6 +18,10 @@ import java.util.List; * created by Destiny.Lin on 2022-08-18 */ public class SearchSubReportFormulaAction implements SearchCellFormula { + + private SearchSubReportFormulaAction() { + } + @Override public void searchFormulaFromCellType(List formulaInfos, ITContent content) { KV[] kvs = ((SubReport) (((CellElement) content.getReplaceObject()).getValue())).getParameterKVS(); @@ -28,8 +32,39 @@ public class SearchSubReportFormulaAction implements SearchCellFormula { newContent.setReplaceObject(kv); formulaInfos.add(new FormulaInfo(newContent)); } + } + } + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchSubReportFormulaAction getInstance() { + return SearchSubReportFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchSubReportFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchSubReportFormulaAction instance; + + SearchSubReportFormulaActionEnum() { + instance = new SearchSubReportFormulaAction(); } + /** + * 获取单例对象 + * + * @return + */ + public SearchSubReportFormulaAction getInstance() { + return instance; + } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java index c2157241b..15da2cd84 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java @@ -25,7 +25,7 @@ import java.util.List; public class SearchChartCollectionFormulaAction { - public SearchChartCollectionFormulaAction() { + private SearchChartCollectionFormulaAction() { } /** @@ -235,7 +235,7 @@ public class SearchChartCollectionFormulaAction { /** * 枚举实现单例 */ - enum SearchChartCollectionFormulaActionEnum { + private enum SearchChartCollectionFormulaActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java index a794ab1df..bece3ef10 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java @@ -9,6 +9,7 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -106,6 +107,7 @@ public enum DataType { * @param name * @return */ + @Nullable public static DataType match(String name) { DataType[] values = DataType.values(); for (DataType value : values) { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java index bf58d26ed..5cc7acc22 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java @@ -90,7 +90,7 @@ public class SearchDataFormulaAction implements SearchFormula { /** * 枚举实现单例 */ - enum SearchDataFormulaActionEnum { + private enum SearchDataFormulaActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java index 6abb748d1..e71fad688 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java @@ -44,7 +44,7 @@ public class SearchFloatFormulaAction implements SearchFloatFormula { NameJavaScriptGroup nameJavaScriptGroup = ((FloatElement) floatInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); if (nameJavaScriptGroup != null) { for (int i = 0; i < nameJavaScriptGroup.size(); i++) { - SearchJSHighlightAction action = new SearchJSHighlightAction(); + SearchJSHighlightAction action = SearchJSHighlightAction.getInstance(); action.searchJSFormulaFromOther(formulaInfos, floatInfo.getContent(), nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); } } @@ -133,7 +133,7 @@ public class SearchFloatFormulaAction implements SearchFloatFormula { /** * 单例实现枚举 */ - enum SearchFloatFormulaActionEnum { + private enum SearchFloatFormulaActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java index 7c83563bf..0ce61c0a9 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java @@ -8,6 +8,7 @@ import com.fr.report.cell.cellattr.highlight.HighlightAction; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 处理条件属性中各种属性的公式(超级链接、控件...) @@ -17,23 +18,50 @@ import java.util.List; * created by Destiny.Lin on 2022-08-18 */ public class SearchHighlightFormulaAction implements SearchHighlightFormula { - public static HashMap highlightHashMap = new HashMap<>(); - - static { - //这边控件类型不做处理,在SearchWidgetFormulaAction统一处理即可 - //条件属性-超级链接 - highlightHashMap.put("HyperlinkHighlightAction", new SearchJSHighlightAction()); - //条件属性-... - // TODO: 2022/9/14 条件属性的其他类型 - } + private SearchHighlightFormulaAction() { + } @Override public void dealWithHighlightAction(ITContent content, List formulaInfos, HighlightAction highlightAction) { - if (highlightHashMap.containsKey(highlightAction.getClass().getSimpleName())) { - SearchHighlightFormula searchHighlight = highlightHashMap.get(highlightAction.getClass().getSimpleName()); + Map highlightType = SearchHighlightFormulaManager.getInstance().getHighlightType(); + if (highlightType.containsKey(highlightAction.getClass().getSimpleName())) { + SearchHighlightFormula searchHighlight = highlightType.get(highlightAction.getClass().getSimpleName()); searchHighlight.dealWithHighlightAction(content, formulaInfos, highlightAction); } } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchHighlightFormulaAction getInstance() { + return SearchHighlightFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchHighlightFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchHighlightFormulaAction instance; + + SearchHighlightFormulaActionEnum() { + instance = new SearchHighlightFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchHighlightFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java new file mode 100644 index 000000000..bf05d4606 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java @@ -0,0 +1,105 @@ +package com.fr.design.actions.replace.action.content.formula.highlight; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.SearchManager; +import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormula; +import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaManager; +import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; + +import java.util.HashMap; +import java.util.Map; + +/** + * 管理要搜索的条件属性类型(公式) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public class SearchHighlightFormulaManager implements SearchManager { + private Map highlightType = new HashMap<>(); + public static final String HYPERLINK_HIGHLIGHT_ACTION = "HyperlinkHighlightAction"; + private SearchHighlightFormulaManager() { + //这边控件类型不做处理,在SearchWidgetFormulaAction统一处理即可 + //条件属性-超级链接 + register(HYPERLINK_HIGHLIGHT_ACTION, SearchJSHighlightAction.getInstance()); + //条件属性-... + // TODO: 2022/9/14 条件属性的其他类型 + } + + + + @Override + public void registerAction(String tag, SearchAction searchAction) { + if (searchAction instanceof SearchHighlightFormula){ + register(tag, (SearchHighlightFormula) searchAction); + } + } + + @Override + public void removeAction(String tag) { + remove(tag); + } + + /** + * 注册 + * + * @param tag 用于匹配的类型tag + * @param searchHighlightFormula 对应的实现类 + */ + private void register(String tag, SearchHighlightFormula searchHighlightFormula) { + highlightType.put(tag, searchHighlightFormula); + } + + /** + * 注销 + * + * @param tag 用于匹配的tag + */ + private void remove(String tag) { + highlightType.remove(tag); + } + + /** + * 获取单元格类型 + * + * @return + */ + public Map getHighlightType() { + return highlightType; + } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchHighlightFormulaManager getInstance() { + return SearchHighlightFormulaManagerEnum.SINGLETON.getInstance(); + } + + + /** + * 枚举实现单例 + */ + private enum SearchHighlightFormulaManagerEnum { + /** + * 单例 + */ + SINGLETON; + private SearchHighlightFormulaManager instance; + + SearchHighlightFormulaManagerEnum() { + instance = new SearchHighlightFormulaManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchHighlightFormulaManager getInstance() { + return instance; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java index 8439b27e0..ddcda65b0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java @@ -16,12 +16,51 @@ import java.util.List; * created by Destiny.Lin on 2022-08-17 */ public class SearchCommonConditionAction implements SearchConditionFormula { + + private SearchCommonConditionAction() { + } + @Override public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { - if (((CommonCondition) condition).getCompare().getValue() != null && ((CommonCondition) condition).getCompare().getValue() instanceof Formula) { + if (((CommonCondition) condition).getCompare().getValue() instanceof Formula) { ITContent newContent = ITContent.copy(content); newContent.setReplaceObject(((CommonCondition) condition).getCompare()); formulaInfos.add(new FormulaInfo(newContent)); } } + + + + /** + * 获取单例 + * + * @return + */ + public static SearchCommonConditionAction getInstance() { + return SearchCommonConditionActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchCommonConditionActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchCommonConditionAction instance; + + SearchCommonConditionActionEnum() { + instance = new SearchCommonConditionAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchCommonConditionAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java new file mode 100644 index 000000000..e886f26c8 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java @@ -0,0 +1,103 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.condition; + + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.SearchManager; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public class SearchConditionManager implements SearchManager { + private Map conditionType = new HashMap<>(); + public static final String FORMULA_CONDITION = "FormulaCondition"; + public static final String OBJECT_CONDITION = "ObjectCondition"; + public static final String LIST_CONDITION = "ListCondition"; + public static final String COMMON_CONDITION = "CommonCondition"; + + private SearchConditionManager() { + register(FORMULA_CONDITION, SearchFormulaConditionAction.getInstance()); + register(OBJECT_CONDITION, SearchObjectConditionAction.getInstance()); + register(LIST_CONDITION, SearchListConditionAction.getInstance()); + register(COMMON_CONDITION, SearchCommonConditionAction.getInstance()); + } + + @Override + public void registerAction(String tag, SearchAction searchAction) { + if (searchAction instanceof SearchConditionFormula){ + register(tag, (SearchConditionFormula) searchAction); + } + } + + @Override + public void removeAction(String tag) { + remove(tag); + } + + + /** + * 注册 + * + * @param tag 用于匹配的类型tag + * @param searchConditionFormula 对应的实现类 + */ + private void register(String tag, SearchConditionFormula searchConditionFormula) { + conditionType.put(tag, searchConditionFormula); + } + + /** + * 注销 + * + * @param tag 用于匹配的tag + */ + private void remove(String tag) { + conditionType.remove(tag); + } + + /** + * 获取类型 + * @return + */ + public Map getConditionType(){ + return conditionType; + } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchConditionManager getInstance() { + return SearchConditionManagerEnum.SINGLETON.getInstance(); + } + + + /** + * 枚举实现单例 + */ + private enum SearchConditionManagerEnum { + /** + * 单例 + */ + SINGLETON; + private SearchConditionManager instance; + + SearchConditionManagerEnum() { + instance = new SearchConditionManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchConditionManager getInstance() { + return instance; + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java index b1800d7fa..c668ea767 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java @@ -1,6 +1,7 @@ package com.fr.design.actions.replace.action.content.formula.highlight.condition; import com.fr.data.condition.FormulaCondition; +import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaTypeAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; @@ -16,6 +17,12 @@ import java.util.List; * created by Destiny.Lin on 2022-08-17 */ public class SearchFormulaConditionAction implements SearchConditionFormula { + + private SearchFormulaConditionAction() { + } + + + @Override public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { if (((FormulaCondition) (condition)).getFormula() != null) { @@ -23,6 +30,38 @@ public class SearchFormulaConditionAction implements SearchConditionFormula { newContent.setReplaceObject(condition); formulaInfos.add(new FormulaInfo(newContent)); } + } + + /** + * 获取单例 + * + * @return + */ + public static SearchFormulaConditionAction getInstance() { + return SearchFormulaConditionActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchFormulaConditionActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchFormulaConditionAction instance; + + SearchFormulaConditionActionEnum() { + instance = new SearchFormulaConditionAction(); + } + /** + * 拿到对象 + * + * @return + */ + public SearchFormulaConditionAction getInstance() { + return instance; + } } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java index bed57a65e..374062c45 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java @@ -19,20 +19,58 @@ import java.util.List; * created by Destiny.Lin on 2022-08-17 */ public class SearchListConditionAction implements SearchConditionFormula { + + private SearchListConditionAction() { + } + @Override public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { for (int i = 0; i < ((ListCondition) condition).getJoinConditionCount(); i++) { Condition joinCondition = ((ListCondition) condition).getJoinCondition(i).getCondition(); if (joinCondition instanceof CommonCondition) { - SearchCommonConditionAction commonConditionAction = new SearchCommonConditionAction(); + SearchCommonConditionAction commonConditionAction = SearchCommonConditionAction.getInstance(); commonConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); } else if (joinCondition instanceof FormulaCondition) { - SearchFormulaConditionAction formulaConditionAction = new SearchFormulaConditionAction(); + SearchFormulaConditionAction formulaConditionAction = SearchFormulaConditionAction.getInstance(); formulaConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); } else if (joinCondition instanceof ObjectCondition) { - SearchObjectConditionAction objectConditionAction = new SearchObjectConditionAction(); + SearchObjectConditionAction objectConditionAction = SearchObjectConditionAction.getInstance(); objectConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition); } } } + + + /** + * 获取单例 + * + * @return + */ + public static SearchListConditionAction getInstance() { + return SearchListConditionActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchListConditionActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchListConditionAction instance; + + SearchListConditionActionEnum() { + instance = new SearchListConditionAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchListConditionAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java index 51b4c64af..3d9752ef5 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java @@ -16,6 +16,11 @@ import java.util.List; * created by Destiny.Lin on 2022-08-18 */ public class SearchObjectConditionAction implements SearchConditionFormula { + + + private SearchObjectConditionAction() { + } + @Override public void searchFormulaFromCondition(List formulaInfos, ITContent content, Condition condition) { if (((ObjectCondition) condition).getCompare().getValue() != null && ((ObjectCondition) condition).getCompare().getValue() instanceof Formula) { @@ -24,4 +29,37 @@ public class SearchObjectConditionAction implements SearchConditionFormula { formulaInfos.add(new FormulaInfo(newContent)); } } + + /** + * 获取单例 + * + * @return + */ + public static SearchObjectConditionAction getInstance() { + return SearchObjectConditionActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchObjectConditionActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchObjectConditionAction instance; + + SearchObjectConditionActionEnum() { + instance = new SearchObjectConditionAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchObjectConditionAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java index 602090812..76ad5ee2b 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java @@ -1,9 +1,7 @@ package com.fr.design.actions.replace.action.content.formula.highlight.javascript; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchListConditionAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; @@ -14,9 +12,8 @@ import com.fr.write.DBManipulation; import com.fr.write.DMLConfigJob; import com.fr.write.config.DMLConfig; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 获取提交入库中的公式 @@ -27,12 +24,7 @@ import java.util.List; */ public class SearchCommit2DBJSFormulaAction implements SearchJSFormula { - public static HashMap conditionHashMap = new HashMap<>(); - - static { - conditionHashMap.put("FormulaCondition", new SearchFormulaConditionAction()); - conditionHashMap.put("CommonCondition", new SearchCommonConditionAction()); - conditionHashMap.put("ListCondition", new SearchListConditionAction()); + private SearchCommit2DBJSFormulaAction() { } @Override @@ -70,12 +62,12 @@ public class SearchCommit2DBJSFormulaAction implements SearchJSFormula { private void dealWithCallBack(List formulaInfos, ITContent content, Commit2DBJavaScript javaScript) { if (javaScript.getCallBack() != null) { - SearchJSHighlightAction SJSA = new SearchJSHighlightAction(); + SearchJSHighlightAction jsHighlightAction = SearchJSHighlightAction.getInstance(); ITContent newContent = ITContent.copy(content); newContent.addOtherPos( Toolkit.i18nText("Fine-Design_Basic_Set_Callback_Function") ); - SJSA.searchJSFormulaFromOther(formulaInfos, newContent, javaScript.getCallBack()); + jsHighlightAction.searchJSFormulaFromOther(formulaInfos, newContent, javaScript.getCallBack()); } } @@ -84,14 +76,51 @@ public class SearchCommit2DBJSFormulaAction implements SearchJSFormula { if (dmlConfig.getCondition() != null) { //这边condition有三种情况:FormulaCondition、CommonCondition、ListCondition,分别处理 Condition condition = dmlConfig.getCondition(); - SearchConditionFormula searchCondition = conditionHashMap.get(condition.getClass().getSimpleName()); - ITContent newContent = ITContent.copy(content); - newContent.addOtherPos( - Toolkit.i18nText("Fine-Design_Basic_Submit_Condition") - ); - searchCondition.searchFormulaFromCondition(formulaInfos, newContent, condition); + Map conditionType = SearchConditionManager.getInstance().getConditionType(); + if (conditionType.containsKey(condition.getClass().getSimpleName())) { + SearchConditionFormula searchCondition = conditionType.get(condition.getClass().getSimpleName()); + ITContent newContent = ITContent.copy(content); + newContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Submit_Condition") + ); + searchCondition.searchFormulaFromCondition(formulaInfos, newContent, condition); + } + } } + /** + * 获取单例 + * + * @return + */ + public static SearchCommit2DBJSFormulaAction getInstance() { + return SearchCommit2DBJSFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchCommit2DBJSFormulaActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchCommit2DBJSFormulaAction instance; + + SearchCommit2DBJSFormulaActionEnum() { + instance = new SearchCommit2DBJSFormulaAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchCommit2DBJSFormulaAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java index 61e1c14a1..44750feec 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java @@ -18,6 +18,10 @@ import java.util.List; * created by Destiny.Lin on 2022-08-19 */ public class SearchExportJSFormulaAction implements SearchJSFormula { + + private SearchExportJSFormulaAction() { + } + @Override public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { //如果导出当前模板,可以存公式的地方就是命名方式-自定义 @@ -48,4 +52,37 @@ public class SearchExportJSFormulaAction implements SearchJSFormula { formulaInfos.add(new FormulaInfo(newContent)); } } + + /** + * 获取单例 + * + * @return + */ + public static SearchExportJSFormulaAction getInstance() { + return SearchExportJSFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchExportJSFormulaActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchExportJSFormulaAction instance; + + SearchExportJSFormulaActionEnum() { + instance = new SearchExportJSFormulaAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchExportJSFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java index 07f6a019d..780a982bb 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java @@ -27,7 +27,7 @@ public interface SearchJSFormula extends SearchHighlightFormula { default void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { } - ; + /** * 从超链中的参数获取公式 @@ -39,5 +39,5 @@ public interface SearchJSFormula extends SearchHighlightFormula { default void addFormulaInfosFromJSPara(List formulaInfos, ITContent content, JavaScript javaScript) { } - ; + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java new file mode 100644 index 000000000..413f3c24f --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java @@ -0,0 +1,116 @@ +package com.fr.design.actions.replace.action.content.formula.highlight.javascript; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.SearchManager; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public class SearchJSFormulaManager implements SearchManager { + private static Map javaScriptType = new HashMap<>(); + + public static final String COMMIT_2_DB_JAVASCRIPT = "Commit2DBJavaScript"; + public static final String EXPORT_JAVASCRIPT = "ExportJavaScript"; + public static final String MOBILE_POPUP_HYPERLINK = "MobilePopupHyperlink"; + private SearchJSFormulaManager() { + //控件事件里面需要特殊处理的类型 + //EmailJavaScript(这个暂时不做处理) + //ExportJavaScript + //MobilePopupHyperlink + //Commit2DBJavaScript + //单元格条件属性里面需要处理的类型 + //WebHyperlink——只有参数可以放公式,不需要特殊处理 + //ReportletHyperlink——只有参数可以放公式,不需要特殊处理 + //EmailJavaScript(这个暂时不做处理) + //ParameterJavaScript——只有参数可以放公式,不需要特殊处理 + //JavaScriptImpl——只有参数可以放公式,不需要特殊处理 + //MobilePopupHyperlink + //ChartHyperPoplink + //ChartHyperRelateCellLink + //ChartHyperRelateFloatLink + register(COMMIT_2_DB_JAVASCRIPT, SearchCommit2DBJSFormulaAction.getInstance()); + register(EXPORT_JAVASCRIPT, SearchExportJSFormulaAction.getInstance()); + register(MOBILE_POPUP_HYPERLINK, SearchMobileHyperlinkFormulaAction.getInstance()); + } + + @Override + public void registerAction(String tag, SearchAction searchAction) { + if (searchAction instanceof SearchJSFormula){ + register(tag, (SearchJSFormula) searchAction); + } + } + + @Override + public void removeAction(String tag) { + remove(tag); + } + /** + * 注册 + * + * @param tag 用于匹配的类型tag + * @param searchJSFormula 对应的实现类 + */ + private void register(String tag, SearchJSFormula searchJSFormula) { + javaScriptType.put(tag, searchJSFormula); + } + + /** + * 注销 + * + * @param tag 用于匹配的tag + */ + private void remove(String tag) { + javaScriptType.remove(tag); + } + + /** + * 获取类型 + * @return + */ + public Map getJSType(){ + return javaScriptType; + } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchJSFormulaManager getInstance() { + return SearchJSFormulaManagerEnum.SINGLETON.getInstance(); + } + + + /** + * 枚举实现单例 + */ + private enum SearchJSFormulaManagerEnum { + /** + * 单例 + */ + SINGLETON; + private SearchJSFormulaManager instance; + + SearchJSFormulaManagerEnum() { + instance = new SearchJSFormulaManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchJSFormulaManager getInstance() { + return instance; + } + } + +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java index 27fef18dd..4d2bd573b 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java @@ -5,16 +5,14 @@ import com.fr.base.Formula; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; -import com.fr.js.Commit2DBJavaScript; import com.fr.js.JavaScript; import com.fr.js.NameJavaScriptGroup; import com.fr.report.cell.cellattr.highlight.HighlightAction; import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; import com.fr.stable.ParameterProvider; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 处理条件属性中各种超级链接内的公式(也包括事件中的各种超链) @@ -24,33 +22,9 @@ import java.util.List; * created by Destiny.Lin on 2022-08-18 */ public class SearchJSHighlightAction implements SearchJSFormula { - //需要特殊处理的JS类型 - public static HashMap javaScriptHashMap = new HashMap<>(); - public static HashMap hashMap = new HashMap<>(); - static { - hashMap.put(Commit2DBJavaScript.class, new SearchCommit2DBJSFormulaAction()); - } - static { - //控件事件里面需要特殊处理的类型 - //EmailJavaScript(这个暂时不做处理) - //ExportJavaScript - //MobilePopupHyperlink - //Commit2DBJavaScript - //单元格条件属性里面需要处理的类型 - //WebHyperlink——只有参数可以放公式,不需要特殊处理 - //ReportletHyperlink——只有参数可以放公式,不需要特殊处理 - //EmailJavaScript(这个暂时不做处理) - //ParameterJavaScript——只有参数可以放公式,不需要特殊处理 - //JavaScriptImpl——只有参数可以放公式,不需要特殊处理 - //MobilePopupHyperlink - //ChartHyperPoplink - //ChartHyperRelateCellLink - //ChartHyperRelateFloatLink - javaScriptHashMap.put("Commit2DBJavaScript", new SearchCommit2DBJSFormulaAction()); - javaScriptHashMap.put("ExportJavaScript", new SearchExportJSFormulaAction()); - javaScriptHashMap.put("MobilePopupHyperlink", new SearchMobileHyperlinkFormulaAction()); + private SearchJSHighlightAction() { } @Override @@ -102,10 +76,45 @@ public class SearchJSHighlightAction implements SearchJSFormula { public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { //获取JS中的参数中的公式 addFormulaInfosFromJSPara(formulaInfos, content, javaScript); + Map javaScriptType = SearchJSFormulaManager.getInstance().getJSType(); //这里面类型比较多,但是一部分不用处理——公式可能存在的地方只有参数,这部分在addFormulaInfosFromJSPara中就已经把公式拿完了 - if (javaScriptHashMap.containsKey(javaScript.getClass().getSimpleName())) { - SearchJSFormula javaScriptFormula = javaScriptHashMap.get(javaScript.getClass().getSimpleName()); + if (javaScriptType.containsKey(javaScript.getClass().getSimpleName())) { + SearchJSFormula javaScriptFormula = javaScriptType.get(javaScript.getClass().getSimpleName()); javaScriptFormula.searchJSFormulaFromOther(formulaInfos, content, javaScript); } } + + + /** + * 获取单例 + * + * @return + */ + public static SearchJSHighlightAction getInstance() { + return SearchJSHighlightActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchJSHighlightActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchJSHighlightAction instance; + + SearchJSHighlightActionEnum() { + instance = new SearchJSHighlightAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchJSHighlightAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java index 8b2358a08..f30c1a7b0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java @@ -17,6 +17,10 @@ import java.util.List; * created by Destiny.Lin on 2022-08-19 */ public class SearchMobileHyperlinkFormulaAction implements SearchJSFormula { + + private SearchMobileHyperlinkFormulaAction() { + } + @Override public void searchJSFormulaFromOther(List formulaInfos, ITContent content, JavaScript javaScript) { if (((MobilePopupHyperlink) javaScript).getPopupText() instanceof Formula) { @@ -29,4 +33,37 @@ public class SearchMobileHyperlinkFormulaAction implements SearchJSFormula { formulaInfos.add(new FormulaInfo(newContent)); } } + + /** + * 获取单例 + * + * @return + */ + public static SearchMobileHyperlinkFormulaAction getInstance() { + return SearchMobileHyperlinkFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchMobileHyperlinkFormulaActionEnum { + /** + * 单例实现 + */ + SINGLETON; + private SearchMobileHyperlinkFormulaAction instance; + + SearchMobileHyperlinkFormulaActionEnum() { + instance = new SearchMobileHyperlinkFormulaAction(); + } + + /** + * 拿到对象 + * + * @return + */ + public SearchMobileHyperlinkFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java index 96a1437af..d8ff30f79 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java @@ -3,12 +3,9 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.base.Formula; import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; -import com.fr.design.mainframe.JTemplate; import com.fr.form.event.Listener; -import com.fr.form.ui.ComboCheckBox; import com.fr.form.ui.DataControl; import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; @@ -40,10 +37,10 @@ public abstract class AbstractSearchWidgetFormulaAction implements SearchWidgetF Listener listener = widget.getListener(i); ITContent newContent = ITContent.copy(content); //控件的事件可以使用的JS有五种,这边统一交给Highlight那边判断超级链接并进行处理 - SearchJSHighlightAction SJSA = new SearchJSHighlightAction(); + SearchJSHighlightAction jsHighlightAction = SearchJSHighlightAction.getInstance(); newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event"),listener.getName()); - SJSA.searchJSFormulaFromOther(formulaInfos, newContent, listener.getAction()); + jsHighlightAction.searchJSFormulaFromOther(formulaInfos, newContent, listener.getAction()); } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java index be16c095e..22d4cb395 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java @@ -26,29 +26,32 @@ public enum DictionaryType implements DictionaryAction { FORMULA_DICTIONARY("FormulaDictionary") { @Override public void searchFormulaFromDictionary(ITContent content, List formulaInfos, Dictionary dictionary) { - //显示值 - if (((FormulaDictionary) dictionary).getExcuteFormula() != null) { - ITContent excuteContent = ITContent.copy(content); - excuteContent.setReplaceObject(dictionary); - excuteContent.addOtherPos( - Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), - Toolkit.i18nText("Fine-Design_Basic_Formula"), - Toolkit.i18nText("Fine-Design_Basic_Display_Value") - ); - formulaInfos.add(new FormulaInfo(excuteContent)); - } - //实际值 - if (((FormulaDictionary) dictionary).getProduceFormula() != null) { - ITContent produceContent = ITContent.copy(content); - produceContent.setReplaceObject(dictionary); - produceContent.addOtherPos( - Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), - Toolkit.i18nText("Fine-Design_Basic_Formula"), - Toolkit.i18nText("Fine-Design_Basic_Actual_Value") - ); - formulaInfos.add(new FormulaInfo(produceContent)); - } + if (dictionary instanceof FormulaDictionary) { + FormulaDictionary formulaDictionary = (FormulaDictionary) dictionary; + //显示值 + if (formulaDictionary.getExcuteFormula() != null) { + ITContent excuteContent = ITContent.copy(content); + excuteContent.setReplaceObject(dictionary); + excuteContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Formula"), + Toolkit.i18nText("Fine-Design_Basic_Display_Value") + ); + formulaInfos.add(new FormulaInfo(excuteContent)); + } + //实际值 + if (formulaDictionary.getProduceFormula() != null) { + ITContent produceContent = ITContent.copy(content); + produceContent.setReplaceObject(dictionary); + produceContent.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"), + Toolkit.i18nText("Fine-Design_Basic_Formula"), + Toolkit.i18nText("Fine-Design_Basic_Actual_Value") + ); + formulaInfos.add(new FormulaInfo(produceContent)); + } + } } }, /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java index 0c2c0235c..27d921a62 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java @@ -14,9 +14,47 @@ import java.util.List; */ public class SearchCommonWidgetFormulaAction extends AbstractSearchWidgetFormulaAction { + + private SearchCommonWidgetFormulaAction() { + } + @Override public void searchFormulaFromWidget(ITContent content, List formulaInfos) { //每个事件的事件、控件值两部分的公式获取逻辑是一样的,直接调用即可,各自其他地方的公式就需要特殊处理 super.searchFormulaFromWidget(content, formulaInfos); } + + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchCommonWidgetFormulaAction getInstance() { + return SearchCommonWidgetFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchCommonWidgetFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchCommonWidgetFormulaAction instance; + + SearchCommonWidgetFormulaActionEnum() { + instance = new SearchCommonWidgetFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchCommonWidgetFormulaAction getInstance() { + return instance; + } + } } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java index 00c739e8e..a4221c1b9 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java @@ -20,6 +20,9 @@ import java.util.List; public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAction { + private SearchDateEditorFormulaAction() { + } + @Override public void searchFormulaFromWidget(ITContent content, List formulaInfos) { super.searchFormulaFromWidget(content, formulaInfos); @@ -47,4 +50,38 @@ public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAc } } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchDateEditorFormulaAction getInstance() { + return SearchDateEditorFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchDateEditorFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchDateEditorFormulaAction instance; + + SearchDateEditorFormulaActionEnum() { + instance = new SearchDateEditorFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchDateEditorFormulaAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java index abe0ddc5c..2f9072751 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java @@ -17,6 +17,8 @@ import java.util.List; */ public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction { + private SearchDictFormulaAction() { + } @Override public void searchFormulaFromWidget(ITContent content, List formulaInfos) { @@ -36,6 +38,41 @@ public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction { } } } + } + + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchDictFormulaAction getInstance() { + return SearchDictFormulaActionEnum.SINGLETON.getInstance(); } + + /** + * 枚举实现单例 + */ + private enum SearchDictFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchDictFormulaAction instance; + + SearchDictFormulaActionEnum() { + instance = new SearchDictFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchDictFormulaAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java index 1e9e79cd0..88722fc8f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java @@ -21,6 +21,9 @@ import java.util.List; * created by Destiny.Lin on 2022-08-22 */ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAction { + private SearchTreeEditorFormulaAction() { + } + @Override public void searchFormulaFromWidget(ITContent content, List formulaInfos) { //控件值、事件 @@ -73,4 +76,39 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc } } } + + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchTreeEditorFormulaAction getInstance() { + return SearchTreeEditorFormulaActionEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchTreeEditorFormulaActionEnum { + /** + * 单例 + */ + SINGLETON; + private SearchTreeEditorFormulaAction instance; + + SearchTreeEditorFormulaActionEnum() { + instance = new SearchTreeEditorFormulaAction(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchTreeEditorFormulaAction getInstance() { + return instance; + } + } + } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java index 28115d1a5..61b139f05 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java @@ -23,6 +23,7 @@ import com.fr.main.impl.WorkBook; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * 查找控件内的公式 @@ -35,45 +36,6 @@ public class SearchWidgetFormulaAction extends AbstractSearchWidgetFormulaAction private SearchWidgetFormulaAction() { } - public static HashMap widgetHashMap = new HashMap<>(); - - static { - /** - * 可能有控件值、 有事件 - */ - widgetHashMap.put("FormSubmitButton", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("WParameterLayout", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("TextArea", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("Password", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("CheckBox", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("Label", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("FreeButton", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("NumberEditor", new SearchCommonWidgetFormulaAction()); - widgetHashMap.put("TextEditor", new SearchCommonWidgetFormulaAction()); - - /** - * 日期类型 - */ - widgetHashMap.put("DateEditor", new SearchDateEditorFormulaAction()); - - /** - * 控件值、事件、非树形数据字典 - */ - widgetHashMap.put("ComboBox", new SearchDictFormulaAction()); - widgetHashMap.put("RadioGroup", new SearchDictFormulaAction()); - widgetHashMap.put("CheckBoxGroup", new SearchDictFormulaAction()); - widgetHashMap.put("ComboCheckBox", new SearchDictFormulaAction()); - widgetHashMap.put("PageFixedRowComboBox", new SearchDictFormulaAction()); - - /** - * 控件值、事件、树形数据字典 - */ - widgetHashMap.put("TreeComboBoxEditor", new SearchTreeEditorFormulaAction()); - widgetHashMap.put("TreeEditor", new SearchTreeEditorFormulaAction()); - - - } - @Override public void searchFormulaFromObject(JTemplate jTemplate, List formulaInfos) { List result = new ArrayList<>(); @@ -117,8 +79,9 @@ public class SearchWidgetFormulaAction extends AbstractSearchWidgetFormulaAction SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, info.getContent(), (ChartCollection) ((ChartEditor) widget).getChartCollection()); } } - if (widgetHashMap.containsKey(widget.getClass().getSimpleName())) { - SearchWidgetFormula searchWidgetFormula = widgetHashMap.get(widget.getClass().getSimpleName()); + Map widgetType = SearchWidgetFormulaManager.getInstance().getWidgetType(); + if (widgetType.containsKey(widget.getClass().getSimpleName())) { + SearchWidgetFormula searchWidgetFormula = widgetType.get(widget.getClass().getSimpleName()); ITContent content = ITContent.copy(info.getContent()); searchWidgetFormula.searchFormulaFromWidget(content, formulaInfos); } @@ -142,7 +105,7 @@ public class SearchWidgetFormulaAction extends AbstractSearchWidgetFormulaAction /** * 枚举实现单例 */ - enum SearchWidgetFormulaActionEnum { + private enum SearchWidgetFormulaActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java new file mode 100644 index 000000000..08e0ea394 --- /dev/null +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java @@ -0,0 +1,146 @@ +package com.fr.design.actions.replace.action.content.formula.widget; + +import com.fr.design.actions.replace.action.SearchAction; +import com.fr.design.actions.replace.action.SearchManager; +import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormula; +import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormulaManager; + +import java.util.HashMap; +import java.util.Map; + +/** + * 管理要搜索的控件类型(公式) + * + * @author Destiny.Lin + * @version 11.0 + * created by Destiny.Lin on 2022-09-16 + */ +public class SearchWidgetFormulaManager implements SearchManager { + private Map widgetType = new HashMap<>(); + private static final String FORM_SUBMIT_BUTTON = "FormSubmitButton"; + private static final String W_PARAMETER_LAYOUT = "WParameterLayout"; + private static final String TEXT_AREA = "TextArea"; + private static final String PASSWORD = "Password"; + private static final String CHECK_BOX = "CheckBox"; + private static final String LABEL = "Label"; + private static final String FREE_BUTTON = "FreeButton"; + private static final String NUMBER_EDITOR = "NumberEditor"; + private static final String TEXT_EDITOR = "TextEditor"; + private static final String DATE_EDITOR = "DateEditor"; + private static final String COMBO_BOX = "ComboBox"; + private static final String RADIO_GROUP = "RadioGroup"; + private static final String CHECK_BOX_GROUP = "CheckBoxGroup"; + private static final String COMBO_CHECK_BOX = "ComboCheckBox"; + private static final String PAGE_FIXED_ROW_COMBOBOX = "PageFixedRowComboBox"; + private static final String TREE_COMBO_BOX_EDITOR = "TreeComboBoxEditor"; + private static final String TREE_EDITOR = "TreeEditor"; + + private SearchWidgetFormulaManager() { + /** + * 可能有控件值、 有事件 + */ + register(FORM_SUBMIT_BUTTON, SearchCommonWidgetFormulaAction.getInstance()); + register(W_PARAMETER_LAYOUT, SearchCommonWidgetFormulaAction.getInstance()); + register(TEXT_AREA, SearchCommonWidgetFormulaAction.getInstance()); + register(PASSWORD, SearchCommonWidgetFormulaAction.getInstance()); + register(CHECK_BOX, SearchCommonWidgetFormulaAction.getInstance()); + register(LABEL, SearchCommonWidgetFormulaAction.getInstance()); + register(FREE_BUTTON, SearchCommonWidgetFormulaAction.getInstance()); + register(NUMBER_EDITOR, SearchCommonWidgetFormulaAction.getInstance()); + register(TEXT_EDITOR, SearchCommonWidgetFormulaAction.getInstance()); + + /** + * 日期类型 + */ + register(DATE_EDITOR, SearchDateEditorFormulaAction.getInstance()); + + /** + * 控件值、事件、非树形数据字典 + */ + register(COMBO_BOX, SearchDictFormulaAction.getInstance()); + register(RADIO_GROUP, SearchDictFormulaAction.getInstance()); + register(CHECK_BOX_GROUP, SearchDictFormulaAction.getInstance()); + register(COMBO_CHECK_BOX, SearchDictFormulaAction.getInstance()); + register(PAGE_FIXED_ROW_COMBOBOX, SearchDictFormulaAction.getInstance()); + + /** + * 控件值、事件、树形数据字典 + */ + register(TREE_COMBO_BOX_EDITOR, SearchTreeEditorFormulaAction.getInstance()); + register(TREE_EDITOR, SearchTreeEditorFormulaAction.getInstance()); + } + + + @Override + public void registerAction(String tag, SearchAction searchAction) { + if (searchAction instanceof SearchWidgetFormula) { + register(tag, (SearchWidgetFormula) searchAction); + } + } + + @Override + public void removeAction(String tag) { + remove(tag); + } + + /** + * 注册 + * + * @param tag 用于匹配的类型tag + * @param searchWidgetFormula 对应的实现类 + */ + private void register(String tag, SearchWidgetFormula searchWidgetFormula) { + widgetType.put(tag, searchWidgetFormula); + } + + /** + * 注销 + * + * @param tag 用于匹配的tag + */ + private void remove(String tag) { + widgetType.remove(tag); + } + + /** + * 获取单元格类型 + * + * @return + */ + public Map getWidgetType() { + return widgetType; + } + + /** + * 对外开放的获取单例对象的方法 + * + * @return + */ + public static SearchWidgetFormulaManager getInstance() { + return SearchWidgetFormulaManagerEnum.SINGLETON.getInstance(); + } + + /** + * 枚举实现单例 + */ + private enum SearchWidgetFormulaManagerEnum { + /** + * 单例 + */ + SINGLETON; + private SearchWidgetFormulaManager instance; + + SearchWidgetFormulaManagerEnum() { + instance = new SearchWidgetFormulaManager(); + } + + /** + * 获取单例对象 + * + * @return + */ + public SearchWidgetFormulaManager getInstance() { + return instance; + } + } +} diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java index 35b09547e..bbce68996 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java @@ -61,7 +61,7 @@ public class SearchCellJSAction implements SearchJS { //单元格如果是图表还需要额外处理 if (cell.getValue() instanceof ChartCollection) { - SearchChartJSAction.getInstance().searchChartJS((ChartCollection) cell.getValue(),ITContent.copy(cellInfo.getContent()),jsInfos); + SearchChartJSAction.getInstance().searchChartJS((ChartCollection) cell.getValue(), ITContent.copy(cellInfo.getContent()), jsInfos); //List> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue()); //List nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) cell.getValue()); ////图表-样式-标签以及图表-特效-条件显示 @@ -133,7 +133,7 @@ public class SearchCellJSAction implements SearchJS { /** * 枚举实现单例 */ - enum SearchCellJSActionEnum { + private enum SearchCellJSActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java index b02f3ff78..fa2f716f0 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java @@ -24,6 +24,10 @@ import java.util.List; */ public class SearchChartJSAction { + + private SearchChartJSAction() { + } + /** * 寻找图表中的JS * @@ -102,7 +106,7 @@ public class SearchChartJSAction { /** * 枚举实现单例 */ - enum SearchChartJSActionEnum { + private enum SearchChartJSActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java index 7340f3b24..b64a93424 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java @@ -49,19 +49,7 @@ public class SearchFloatJSAction implements SearchJS { //从超级链接搜索 SearchJSUtils.addJSInfosFromHyperLink(floatElement, jsInfos, content); if (floatElement.getValue() instanceof ChartCollection) { - SearchChartJSAction.getInstance().searchChartJS((ChartCollection) floatElement.getValue(),ITContent.copy(floatInfo.getContent()),jsInfos); - //List> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) floatElement.getValue()); - //List nameJavaScripts = SearchJSUtils.getNameJavaScript((ChartCollection) floatElement.getValue()); - ////图表-样式-标签以及图表-特效-条件显示 - //SearchJSUtils.addJSInfosFromHtmlLabel(content, htmlLabels, jsInfos); - ////图表-特效-交互属性 - //ITContent newContent = ITContent.copy(content); - //newContent.addOtherPos( - // Toolkit.i18nText("Fine-Design_Chart_Chart"), - // Toolkit.i18nText("Fine-Design_Chart_Animation_Special"), - // Toolkit.i18nText("Fine-Design_Chart_Interactive") - //); - //SearchJSUtils.addJSInfosFromNameJS(newContent, nameJavaScripts, jsInfos); + SearchChartJSAction.getInstance().searchChartJS((ChartCollection) floatElement.getValue(), ITContent.copy(floatInfo.getContent()), jsInfos); } } } @@ -79,7 +67,7 @@ public class SearchFloatJSAction implements SearchJS { /** * 枚举实现单例 */ - enum SearchFloatJSActionEnum { + private enum SearchFloatJSActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java index 2a233a523..01e12dbd8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java @@ -1,12 +1,10 @@ package com.fr.design.actions.replace.action.content.js; import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.action.content.formula.SearchFormula; +import com.fr.design.actions.replace.action.SearchManager; import com.fr.design.actions.replace.info.JSInfo; -import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.mainframe.JTemplate; -import com.fr.form.ui.Widget; import java.util.ArrayList; import java.util.HashSet; @@ -21,19 +19,19 @@ import java.util.Set; * @version 11.0 * created by Destiny.Lin on 2022-08-12 */ -public class SearchJSManager implements SearchAction { +public class SearchJSManager implements SearchAction, SearchManager { private List jsInfos; private Set searchJSSet = new HashSet<>(); private SearchJSManager() { //从控件 - registerJS(SearchWidgetJSAction.getInstance()); + register(SearchWidgetJSAction.getInstance()); //从单元格获取JS - registerJS(SearchCellJSAction.getInstance()); + register(SearchCellJSAction.getInstance()); //从模板Web属性 - registerJS(SearchWebJSAction.getInstance()); + register(SearchWebJSAction.getInstance()); //从悬浮元素 - registerJS(SearchFloatJSAction.getInstance()); + register(SearchFloatJSAction.getInstance()); } @Override @@ -53,19 +51,33 @@ public class SearchJSManager implements SearchAction { this.jsInfos = jsInfos; } + @Override + public void registerAction(String tag, SearchAction searchAction) { + if (searchAction instanceof SearchJS){ + register((SearchJS) searchAction); + } + } + + @Override + public void removeAction(SearchAction searchAction) { + if (searchAction instanceof SearchJS){ + remove((SearchJS) searchAction); + } + } + /** * 注册对象 * * @param searchJS */ - public void registerJS(SearchJS searchJS) { + private void register(SearchJS searchJS) { searchJSSet.add(searchJS); } /** * 销毁对象 */ - public void removeJS(SearchJS searchJS) { + private void remove(SearchJS searchJS) { searchJSSet.remove(searchJS); } @@ -78,10 +90,12 @@ public class SearchJSManager implements SearchAction { return SearchJSActionEnum.SINGLETON.getInstance(); } + + /** * 枚举实现单例 */ - enum SearchJSActionEnum { + private enum SearchJSActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java index cd41f58b8..137d84b37 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java @@ -149,7 +149,7 @@ public class SearchWebJSAction implements SearchJS { /** * 枚举实现单例 */ - enum SearchWebJSActionEnum { + private enum SearchWebJSActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java index e2379a8de..967cf178c 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java @@ -25,6 +25,9 @@ import java.util.List; */ public class SearchWidgetJSAction implements SearchJS { + private SearchWidgetJSAction() { + } + @Override public void searchJSFromObject(JTemplate jTemplate, List jsInfos) { List widgetJSInfos = new ArrayList<>(); @@ -65,7 +68,7 @@ public class SearchWidgetJSAction implements SearchJS { /** * 枚举实现单例 */ - enum SearchWidgetJSActionEnum { + private enum SearchWidgetJSActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java index 005ae6f3c..10fdd2865 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java @@ -119,7 +119,7 @@ public class SearchSQLAction implements SearchAction { /** * 枚举实现单例 */ - enum SearchSQLActionEnum { + private enum SearchSQLActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java index 19514ff34..66ca91dd1 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java @@ -36,6 +36,8 @@ import java.util.List; public class SearchWidgetAction implements SearchAction { List widgetInfos; + private SearchWidgetAction() { + } @Override public void search4Infos(JTemplate jTemplate) { @@ -96,7 +98,10 @@ public class SearchWidgetAction implements SearchAction { //处理HighlightAction if (isHighlightWidgetExist(highlightAction)) { ITContent content = ITContent.copy(cellInfo.getContent()); - content.addOtherPos("条件属性-超链控件"); + content.addOtherPos( + Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"), + Toolkit.i18nText("Fine-Design_Report_Hyperlink"), + Toolkit.i18nText("Fine-Design_Basic_Widget")); content.setReplaceObject(((WidgetHighlightAction) highlightAction).getWidget()); content.setShowObject(cellInfo.getContent().getReplaceObject()); widgetInfos.add(new WidgetInfo(content)); @@ -140,6 +145,7 @@ public class SearchWidgetAction implements SearchAction { Toolkit.i18nText("Fine-Design_Basic_Widget"), widget.getWidgetName()); newContent.setReplaceObject(widget); + newContent.setJumpAble(false); newContent.setShowObject(Toolkit.i18nText("Fine-Design_Parameter_Panel")); widgetInfos.add(new WidgetInfo(newContent)); } @@ -176,7 +182,7 @@ public class SearchWidgetAction implements SearchAction { /** * 枚举实现单例 */ - enum SearchWidgetActionEnum { + private enum SearchWidgetActionEnum { /** * 单例 */ diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java index dab912818..8dae97110 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java @@ -23,6 +23,7 @@ public class FormulaInfo implements Info { private ITContent content; private static final String DISPLAY = Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Display_Value"); private static final String ACTUAL = Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary") + "-" + Toolkit.i18nText("Fine-Design_Chart_Formula") + "-" + Toolkit.i18nText("Fine-Design_Basic_Actual_Value"); + public FormulaInfo(ITContent content) { this.content = content; } @@ -68,7 +69,7 @@ public class FormulaInfo implements Info { } private Map getCommonValue() { - Map map = new HashMap(); + Map map = new HashMap(); FormulaReplaceObject o = FormulaReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName()); if (o != null) { return o.getValue(this.content.getReplaceObject()); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java index cc3ac6fee..239f4a92f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java @@ -62,6 +62,10 @@ public class ITContent implements Cloneable { */ private boolean selected = true; + /** + * 是否可跳转 + */ + private boolean jumpAble = true; public ITContent() { this.sheetID = StringUtils.EMPTY; @@ -99,6 +103,7 @@ public class ITContent implements Cloneable { result.setLastSearchStr(content.getLastSearchStr()); result.setOperatorArray(content.getOperatorArray()); result.setFrmFlag(content.isFrm()); + result.setJumpAble(content.isJumpAble()); return result; } @@ -260,6 +265,17 @@ public class ITContent implements Cloneable { this.lastSearchStr = lastSearchStr; } + public boolean isJumpAble() { + return jumpAble; + } + + public void setJumpAble(boolean jumpAble) { + this.jumpAble = jumpAble; + } + + public boolean isFrmFlag() { + return frmFlag; + } @Override public String toString() { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java index d4ca27672..a110f6c4a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java @@ -42,17 +42,17 @@ public class ITReplaceNorthPanel { private int maxItemCount = 5; - private int FIND_LABEL_X, FIND_LABEL_Y, FIND_LABEL_WIDTH, FIND_LABEL_HEIGHT; - private int FIND_COMBOBOX_X, FIND_COMBOBOX_Y, FIND_COMBOBOX_WIDTH, FIND_COMBOBOX_HEIGHT; - private int RANGE_LABEL_X, RANGE_LABEL_Y, RANGE_LABEL_WIDTH, RANGE_LABEL_HEIGHT; - private int RANGE_COMBOBOX_X, RANGE_COMBOBOX_Y, RANGE_COMBOBOX_WIDTH, RANGE_COMBOBOX_HEIGHT; - private int MATCH_X, MATCH_Y, MATCH_WIDTH, MATCH_HEIGHT; - private int RESULT_LABEL_X, RESULT_LABEL_Y, RESULT_LABEL_WIDTH, RESULT_LABEL_HEIGHT; - private int FIND_INPUT_COMBOBOX_X, FIND_INPUT_COMBOBOX_Y, FIND_INPUT_COMBOBOX_WIDTH, FIND_INPUT_COMBOBOX_HEIGHT; + private int findLabelX, findLabelY, findLabelWidth, findLabelHeight; + private int findComboBoxX, findComboBoxY, findComboBoxWidth, findComboBoxHeight; + private int rangeLabelX, rangeLabelY, rangeLabelWidth, rangeLabelHeight; + private int rangeComboBoxX, rangeComboBoxY, rangeComboBoxWidth, rangeComboBoxHeight; + private int matchX, matchY, matchWidth, matchHeight; + private int resultLabelX, resultLabelY, resultLabelWidth, resultLabelHeight; + private int findInputComboBoxX, findInputComboBoxY, findInputComboBoxWidth, findInputComboBoxHeight; private int REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT; - private int REPLACE_BUTTON_X, REPLACE_BUTTON_Y, REPLACE_BUTTON_WIDTH, REPLACE_BUTTON_HEIGHT; - private int SEARCH_BUTTON_X, SEARCH_BUTTON_Y, SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT; - private int BUTTON_GAP; + private int replaceButtonX, replaceButtonY, replaceButtonWidth, replaceButtonHeight; + private int searchButtonX, searchButtonY, searchButtonWidth, searchButtonHeight; + private int buttonGap; public static ArrayList findItems = new ArrayList<>(); public static ArrayList findInputItems = new ArrayList<>(); @@ -191,22 +191,22 @@ public class ITReplaceNorthPanel { private void setSearchButtonBounds(int x, int y, int templateWidth) { - BUTTON_GAP = templateWidth / 90; - SEARCH_BUTTON_WIDTH = templateWidth / 30; + buttonGap = templateWidth / 90; + searchButtonWidth = templateWidth / 30; - SEARCH_BUTTON_HEIGHT = 25; - SEARCH_BUTTON_Y = RESULT_LABEL_Y; - SEARCH_BUTTON_X = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - REPLACE_BUTTON_WIDTH * 2 - BUTTON_GAP; - searchButton.setBounds(SEARCH_BUTTON_X, SEARCH_BUTTON_Y, SEARCH_BUTTON_WIDTH, SEARCH_BUTTON_HEIGHT); + searchButtonHeight = 25; + searchButtonY = resultLabelY; + searchButtonX = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - replaceButtonWidth * 2 - buttonGap; + searchButton.setBounds(searchButtonX, searchButtonY, searchButtonWidth, searchButtonHeight); } private void setReplaceButtonBounds(int x, int y, int templateWidth) { - BUTTON_GAP = templateWidth / 90; - REPLACE_BUTTON_WIDTH = templateWidth / 30; - REPLACE_BUTTON_HEIGHT = 25; - REPLACE_BUTTON_Y = RESULT_LABEL_Y; - REPLACE_BUTTON_X = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - REPLACE_BUTTON_WIDTH; - replaceButton.setBounds(REPLACE_BUTTON_X, REPLACE_BUTTON_Y, REPLACE_BUTTON_WIDTH, REPLACE_BUTTON_HEIGHT); + buttonGap = templateWidth / 90; + replaceButtonWidth = templateWidth / 30; + replaceButtonHeight = 25; + replaceButtonY = resultLabelY; + replaceButtonX = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - replaceButtonWidth; + replaceButton.setBounds(replaceButtonX, replaceButtonY, replaceButtonWidth, replaceButtonHeight); } private void setReplaceInputComboboxBounds(int x, int y, int templateWidth) { @@ -218,64 +218,64 @@ public class ITReplaceNorthPanel { } private void setFindInputComboboxBounds(int x, int y, int templateWidth) { - FIND_INPUT_COMBOBOX_X = x + templateWidth / 60; - FIND_INPUT_COMBOBOX_Y = y + 55; - FIND_INPUT_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 30 * 2; - FIND_INPUT_COMBOBOX_HEIGHT = 25; - findInputCombobox.setBounds(FIND_INPUT_COMBOBOX_X, FIND_INPUT_COMBOBOX_Y, FIND_INPUT_COMBOBOX_WIDTH, FIND_INPUT_COMBOBOX_HEIGHT); + findInputComboBoxX = x + templateWidth / 60; + findInputComboBoxY = y + 55; + findInputComboBoxWidth = templateWidth / 3 + templateWidth / 30 * 2; + findInputComboBoxHeight = 25; + findInputCombobox.setBounds(findInputComboBoxX, findInputComboBoxY, findInputComboBoxWidth, findInputComboBoxHeight); } private void setUIRadioButtonBounds(int x, int y, int templateWidth) { - MATCH_X = x + templateWidth / 60; - MATCH_Y = y + 90; - MATCH_WIDTH = templateWidth; - MATCH_HEIGHT = 25; - matchRadioButton.setBounds(MATCH_X, MATCH_Y, MATCH_WIDTH, MATCH_HEIGHT); + matchX = x + templateWidth / 60; + matchY = y + 90; + matchWidth = templateWidth; + matchHeight = 25; + matchRadioButton.setBounds(matchX, matchY, matchWidth, matchHeight); } private void setRangeComboboxBounds(int x, int y, int templateWidth) { - RANGE_COMBOBOX_X = x + templateWidth / 2 + templateWidth / 15 + templateWidth / 60; - RANGE_COMBOBOX_Y = y + 20; - RANGE_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 60; - RANGE_COMBOBOX_HEIGHT = 25; - rangeCombobox.setBounds(RANGE_COMBOBOX_X, RANGE_COMBOBOX_Y, RANGE_COMBOBOX_WIDTH, RANGE_COMBOBOX_HEIGHT); + rangeComboBoxX = x + templateWidth / 2 + templateWidth / 15 + templateWidth / 60; + rangeComboBoxY = y + 20; + rangeComboBoxWidth = templateWidth / 3 + templateWidth / 60; + rangeComboBoxHeight = 25; + rangeCombobox.setBounds(rangeComboBoxX, rangeComboBoxY, rangeComboBoxWidth, rangeComboBoxHeight); } private void setFindComboboxBounds(int x, int y, int templateWidth) { - FIND_COMBOBOX_X = x + templateWidth / 30 * 2; - FIND_COMBOBOX_Y = y + 20; - FIND_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 60; - FIND_COMBOBOX_HEIGHT = 25; - findCombobox.setBounds(FIND_COMBOBOX_X, FIND_COMBOBOX_Y, FIND_COMBOBOX_WIDTH, FIND_COMBOBOX_HEIGHT); + findComboBoxX = x + templateWidth / 30 * 2; + findComboBoxY = y + 20; + findComboBoxWidth = templateWidth / 3 + templateWidth / 60; + findComboBoxHeight = 25; + findCombobox.setBounds(findComboBoxX, findComboBoxY, findComboBoxWidth, findComboBoxHeight); } private void setResultLabelBounds(int x, int y, int templateWidth) { - RESULT_LABEL_X = FIND_LABEL_X; - RESULT_LABEL_Y = y + 125; - RESULT_LABEL_WIDTH = templateWidth; - RESULT_LABEL_HEIGHT = 25; - resultLabel.setBounds(RESULT_LABEL_X, RESULT_LABEL_Y, RESULT_LABEL_WIDTH, RESULT_LABEL_HEIGHT); + resultLabelX = findLabelX; + resultLabelY = y + 125; + resultLabelWidth = templateWidth; + resultLabelHeight = 25; + resultLabel.setBounds(resultLabelX, resultLabelY, resultLabelWidth, resultLabelHeight); } private void setRangeLabelBounds(int x, int y, int templateWidth) { - RANGE_LABEL_X = x + templateWidth / 2 + templateWidth / 30; - RANGE_LABEL_Y = y + 20; - RANGE_LABEL_WIDTH = FIND_LABEL_WIDTH; - RANGE_LABEL_HEIGHT = 25; - rangeLabel.setBounds(RANGE_LABEL_X, RANGE_LABEL_Y, RANGE_LABEL_WIDTH, RANGE_LABEL_HEIGHT); + rangeLabelX = x + templateWidth / 2 + templateWidth / 30; + rangeLabelY = y + 20; + rangeLabelWidth = findLabelWidth; + rangeLabelHeight = 25; + rangeLabel.setBounds(rangeLabelX, rangeLabelY, rangeLabelWidth, rangeLabelHeight); } private void setFindLabelBounds(int x, int y, int templateWidth) { - FIND_LABEL_X = x + templateWidth / 60; - FIND_LABEL_Y = y + 20; - FIND_LABEL_WIDTH = templateWidth / 20; - FIND_LABEL_HEIGHT = 25; - findLabel.setBounds(FIND_LABEL_X, FIND_LABEL_Y, FIND_LABEL_WIDTH, FIND_LABEL_HEIGHT); + findLabelX = x + templateWidth / 60; + findLabelY = y + 20; + findLabelWidth = templateWidth / 20; + findLabelHeight = 25; + findLabel.setBounds(findLabelX, findLabelY, findLabelWidth, findLabelHeight); } public JPanel getUpPanel() { diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java index c754c2c43..a0d2f7e01 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java @@ -60,6 +60,8 @@ public class ITTableButton extends AbstractCellEditor implements TableCellEditor */ @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + ITContent content = (ITContent) table.getValueAt(row, 7); + paraButton.setEnabled(content.isJumpAble()); return paraButton; } @@ -76,6 +78,8 @@ public class ITTableButton extends AbstractCellEditor implements TableCellEditor */ @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + ITContent content = (ITContent) table.getValueAt(row, 7); + paraButton.setEnabled(content.isJumpAble()); return paraButton; } From c4fc5636ef5a0ad700f534659493150e0f597251 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Sat, 17 Sep 2022 15:04:06 +0800 Subject: [PATCH 16/17] =?UTF-8?q?REPORT-75998=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=B8=8D=E5=90=88=E7=90=86=E7=9A=84import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actions/replace/action/SearchManagerCenter.java | 7 ++----- .../com/fr/design/actions/replace/action/ShowValue.java | 1 - .../action/content/component/SearchComponentAction.java | 2 +- .../action/content/floatelement/SearchFloatAction.java | 2 +- .../replace/action/content/formula/SearchFormula.java | 1 - .../action/content/formula/SearchFormulaManager.java | 1 - .../content/formula/cell/SearchCellFormulaAction.java | 2 +- .../content/formula/cell/SearchDSColumnFormulaAction.java | 7 ++----- .../content/formula/cell/SearchRichFormulaAction.java | 1 - .../replace/action/content/formula/data/DataType.java | 6 ++++-- .../content/formula/data/SearchDataFormulaAction.java | 5 ----- .../content/formula/floatelement/SearchFloatFormula.java | 3 --- .../content/formula/highlight/SearchHighlightFormula.java | 1 - .../formula/highlight/SearchHighlightFormulaAction.java | 4 +--- .../formula/highlight/SearchHighlightFormulaManager.java | 2 -- .../highlight/condition/SearchConditionFormula.java | 1 - .../highlight/condition/SearchFormulaConditionAction.java | 1 - .../highlight/javascript/SearchExportJSFormulaAction.java | 2 +- .../formula/highlight/javascript/SearchJSFormula.java | 2 +- .../highlight/javascript/SearchJSFormulaManager.java | 4 +--- .../formula/template/SearchTemplateFormulaAction.java | 3 +-- .../formula/widget/SearchDateEditorFormulaAction.java | 3 +-- .../content/formula/widget/SearchDictFormulaAction.java | 3 +-- .../formula/widget/SearchTreeEditorFormulaAction.java | 1 - .../content/formula/widget/SearchWidgetFormula.java | 1 - .../content/formula/widget/SearchWidgetFormulaAction.java | 3 +-- .../formula/widget/SearchWidgetFormulaManager.java | 2 -- .../replace/action/content/js/SearchCellJSAction.java | 7 +++---- .../replace/action/content/js/SearchChartJSAction.java | 2 +- .../replace/action/content/js/SearchFloatJSAction.java | 8 +++----- .../replace/action/content/sql/SearchSQLAction.java | 1 - .../fr/design/actions/replace/info/DealWithInfoValue.java | 5 ++--- .../java/com/fr/design/actions/replace/info/JSInfo.java | 1 - .../fr/design/actions/replace/info/base/ITContent.java | 1 - .../fr/design/actions/replace/ui/ITReplaceMainDialog.java | 1 - 35 files changed, 28 insertions(+), 69 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java index d1c7054b5..211ab41d6 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchManagerCenter.java @@ -5,12 +5,9 @@ import com.fr.design.actions.replace.action.content.formula.highlight.SearchHigh import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSFormulaManager; import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaManager; -import com.fr.design.actions.replace.action.content.js.SearchCellJSAction; -import com.fr.design.actions.replace.action.content.js.SearchJS; + import com.fr.design.actions.replace.action.content.js.SearchJSManager; -import com.fr.design.actions.replace.action.content.js.SearchWebJSAction; -import com.fr.design.actions.replace.action.content.js.SearchWidgetJSAction; -import com.fr.third.v2.org.apache.poi.ss.formula.functions.T; + import org.jetbrains.annotations.Nullable; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java index c65cee63f..02ded341e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java @@ -3,7 +3,6 @@ package com.fr.design.actions.replace.action; import com.fr.design.actions.replace.info.Info; import com.fr.design.mainframe.JTemplate; -import java.util.ArrayList; import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java index 775d03f5c..4326f6228 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java @@ -1,7 +1,7 @@ package com.fr.design.actions.replace.action.content.component; import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.action.content.cell.SearchCellAction; + import com.fr.design.actions.replace.info.ComponentInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.mainframe.JTemplate; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java index 4d89c5136..6f0a338b9 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java @@ -2,7 +2,7 @@ package com.fr.design.actions.replace.action.content.floatelement; import com.fr.chart.chartattr.ChartCollection; import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.action.content.cell.SearchCellAction; + import com.fr.design.actions.replace.info.FloatInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java index 82a2db327..67bc2e4b1 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java @@ -6,7 +6,6 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.mainframe.JTemplate; -import java.util.ArrayList; import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java index 51c61ef6a..296123405 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java @@ -1,7 +1,6 @@ package com.fr.design.actions.replace.action.content.formula; import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.action.SearchManager; import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaAction; import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; import com.fr.design.actions.replace.action.content.formula.floatelement.SearchFloatFormulaAction; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java index 3882d7721..9cfdd4343 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java @@ -27,7 +27,7 @@ import com.fr.report.core.sort.common.CellSortAttr; import com.fr.report.core.sort.sortexpression.FormulaSortExpression; import com.fr.report.core.sort.sortexpression.SortExpression; -import java.util.HashMap; + import java.util.List; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java index 0048c8456..cc2c1988e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java @@ -2,11 +2,9 @@ package com.fr.design.actions.replace.action.content.formula.cell; import com.fr.base.Formula; import com.fr.base.Parameter; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchListConditionAction; + import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; @@ -16,8 +14,7 @@ import com.fr.report.cell.cellattr.core.group.DSColumn; import com.fr.report.core.sort.sortexpression.FormulaSortExpression; import com.fr.report.core.sort.sortexpression.SortExpression; -import java.util.ArrayList; -import java.util.HashMap; + import java.util.List; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java index c6a63e9bd..5e60e17ff 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java @@ -2,7 +2,6 @@ package com.fr.design.actions.replace.action.content.formula.cell; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.i18n.Toolkit; import com.fr.report.cell.CellElement; import com.fr.report.cell.cellattr.core.RichChar; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java index bece3ef10..2c8fd9316 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java @@ -2,7 +2,9 @@ package com.fr.design.actions.replace.action.content.formula.data; import com.fr.base.Formula; import com.fr.base.TableData; -import com.fr.data.impl.*; +import com.fr.data.impl.ConditionTableData; +import com.fr.data.impl.DBTableData; +import com.fr.data.impl.RecursionTableData; import com.fr.data.impl.storeproc.StoreProcedure; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; @@ -11,7 +13,7 @@ import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; + import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java index 5cc7acc22..472819d6a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java @@ -1,19 +1,14 @@ package com.fr.design.actions.replace.action.content.formula.data; import com.fr.data.TableDataSource; -import com.fr.data.impl.DBTableData; import com.fr.design.actions.replace.action.content.formula.SearchFormula; -import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaAction; import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.SQLInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.data.tabledata.wrapper.TableDataFactory; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.file.TableDataConfig; -import com.fr.main.impl.WorkBook; -import java.util.ArrayList; import java.util.Iterator; import java.util.List; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java index f9f31d5a4..4a74e46b8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java @@ -3,10 +3,7 @@ package com.fr.design.actions.replace.action.content.formula.floatelement; import com.fr.design.actions.replace.action.content.formula.SearchFormula; import com.fr.design.actions.replace.info.FloatInfo; import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.design.mainframe.JTemplate; -import java.util.ArrayList; import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java index 2758a4268..d9dc0b5e3 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java @@ -5,7 +5,6 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.report.cell.cellattr.highlight.HighlightAction; -import java.util.ArrayList; import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java index 0ce61c0a9..28e6cacb8 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java @@ -1,12 +1,10 @@ package com.fr.design.actions.replace.action.content.formula.highlight; -import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.report.cell.cellattr.highlight.HighlightAction; -import java.util.ArrayList; -import java.util.HashMap; + import java.util.List; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java index bf05d4606..28a5b752a 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java @@ -2,8 +2,6 @@ package com.fr.design.actions.replace.action.content.formula.highlight; import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.action.SearchManager; -import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormula; -import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaManager; import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; import java.util.HashMap; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java index 2cc7c595f..85f5a67db 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java @@ -5,7 +5,6 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.general.data.Condition; -import java.util.ArrayList; import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java index c668ea767..c6b853321 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java @@ -1,7 +1,6 @@ package com.fr.design.actions.replace.action.content.formula.highlight.condition; import com.fr.data.condition.FormulaCondition; -import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaTypeAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java index 44750feec..716c2d908 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java @@ -7,7 +7,7 @@ import com.fr.js.ExportJavaScript; import com.fr.js.JavaScript; import com.fr.js.SingleJavaScript; -import java.util.ArrayList; + import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java index 780a982bb..553c55ba5 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java @@ -5,7 +5,7 @@ import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.js.JavaScript; -import java.util.ArrayList; + import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java index 413f3c24f..dafc79d58 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java @@ -2,9 +2,7 @@ package com.fr.design.actions.replace.action.content.formula.highlight.javascrip import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.action.SearchManager; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula; -import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionManager; + import java.util.HashMap; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java index a500bdb7f..977de5a33 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java @@ -5,14 +5,13 @@ import com.fr.base.Parameter; import com.fr.base.ParameterConfig; import com.fr.base.io.AttrMark; import com.fr.base.iofile.attr.WatermarkAttr; -import com.fr.design.actions.replace.action.content.formula.data.SearchDataFormulaAction; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.report.core.ReportUtils; -import java.util.ArrayList; + import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java index a4221c1b9..d7e81a1d6 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java @@ -1,13 +1,12 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.info.FormulaInfo; -import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.i18n.Toolkit; import com.fr.form.ui.DateEditor; import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils; -import java.util.ArrayList; + import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java index 2f9072751..a89e5118e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java @@ -2,10 +2,9 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.base.ITContent; -import com.fr.form.ui.ComboCheckBox; import com.fr.form.ui.DictionaryContainer; -import java.util.ArrayList; + import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java index 88722fc8f..81987a1db 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java @@ -10,7 +10,6 @@ import com.fr.form.ui.TreeEditor; import com.fr.form.ui.tree.LayerConfig; import com.fr.stable.StringUtils; -import java.util.ArrayList; import java.util.List; /** diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java index 355cb0080..166fd215e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java @@ -3,7 +3,6 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.action.content.formula.SearchFormula; import com.fr.design.actions.replace.info.FormulaInfo; import com.fr.design.actions.replace.info.Info; -import com.fr.design.actions.replace.info.WidgetInfo; import com.fr.design.actions.replace.info.base.ITContent; import java.util.List; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java index 61b139f05..f1f214f64 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java @@ -13,7 +13,7 @@ import com.fr.design.actions.replace.utils.ShowValueUtils; import com.fr.design.mainframe.JTemplate; import com.fr.form.main.Form; import com.fr.form.ui.ChartEditor; -import com.fr.form.ui.ComboCheckBox; + import com.fr.form.ui.Widget; import com.fr.form.ui.container.WScaleLayout; import com.fr.form.ui.container.WTitleLayout; @@ -21,7 +21,6 @@ import com.fr.form.ui.widget.CRBoundsWidget; import com.fr.main.impl.WorkBook; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java index 08e0ea394..6ddb7eae7 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaManager.java @@ -2,8 +2,6 @@ package com.fr.design.actions.replace.action.content.formula.widget; import com.fr.design.actions.replace.action.SearchAction; import com.fr.design.actions.replace.action.SearchManager; -import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormula; -import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormulaManager; import java.util.HashMap; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java index bbce68996..d0a00644e 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java @@ -1,7 +1,7 @@ package com.fr.design.actions.replace.action.content.js; import com.fr.chart.chartattr.ChartCollection; -import com.fr.design.actions.replace.action.SearchAction; + import com.fr.design.actions.replace.action.content.cell.SearchCellAction; import com.fr.design.actions.replace.info.CellInfo; import com.fr.design.actions.replace.info.JSInfo; @@ -10,15 +10,14 @@ import com.fr.design.actions.replace.utils.SearchJSUtils; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.JTemplate; import com.fr.js.JavaScriptImpl; -import com.fr.js.NameJavaScript; + import com.fr.js.NameJavaScriptGroup; -import com.fr.plugin.chart.base.VanChartHtmlLabel; + import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.highlight.DefaultHighlight; import com.fr.report.cell.cellattr.highlight.HighlightAction; import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; -import com.fr.stable.collections.combination.Pair; import java.util.ArrayList; import java.util.List; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java index fa2f716f0..768972c67 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java @@ -8,7 +8,7 @@ import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.SearchJSUtils; import com.fr.design.i18n.Toolkit; import com.fr.js.NameJavaScript; -import com.fr.plugin.chart.attr.axis.VanChartAlertValue; + import com.fr.plugin.chart.attr.axis.VanChartAxis; import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.stable.collections.combination.Pair; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java index b64a93424..4270d5bbc 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java @@ -1,20 +1,18 @@ package com.fr.design.actions.replace.action.content.js; import com.fr.chart.chartattr.ChartCollection; -import com.fr.design.actions.replace.action.SearchAction; + import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; import com.fr.design.actions.replace.info.FloatInfo; import com.fr.design.actions.replace.info.JSInfo; import com.fr.design.actions.replace.info.base.ITContent; import com.fr.design.actions.replace.utils.SearchJSUtils; -import com.fr.design.i18n.Toolkit; + import com.fr.design.mainframe.JTemplate; -import com.fr.js.NameJavaScript; -import com.fr.plugin.chart.base.VanChartHtmlLabel; import com.fr.report.cell.FloatElement; -import com.fr.stable.collections.combination.Pair; + import java.util.*; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java index 10fdd2865..10ae23805 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java @@ -3,7 +3,6 @@ package com.fr.design.actions.replace.action.content.sql; import com.fr.data.TableDataSource; import com.fr.data.impl.DBTableData; import com.fr.design.actions.replace.action.SearchAction; -import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; import com.fr.design.actions.replace.info.SQLInfo; import com.fr.design.actions.replace.info.base.ITContent; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java index 14a3ff4d1..feb5cc1a7 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java @@ -1,11 +1,10 @@ package com.fr.design.actions.replace.info; -import com.fr.design.actions.replace.info.base.ITContent; + import com.fr.stable.collections.combination.Pair; -import java.util.ArrayList; -import java.util.HashMap; + import java.util.List; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java index b1123c4eb..4cf9de1fd 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java @@ -7,7 +7,6 @@ import com.fr.stable.AssistUtils; import com.fr.stable.collections.combination.Pair; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java index 239f4a92f..de736cb27 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java @@ -7,7 +7,6 @@ import com.fr.stable.collections.combination.Pair; import java.util.ArrayList; import java.util.List; -import java.util.Map; /** * 主要的存储信息的数据结构 diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java index 0c01a2ec8..b59499c7d 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java @@ -3,7 +3,6 @@ package com.fr.design.actions.replace.ui; import com.fr.design.actions.replace.action.ShowSearchResultAction; -import com.fr.design.actions.replace.action.content.formula.SearchFormulaManager; import com.fr.design.actions.replace.info.Info; import com.fr.design.actions.replace.utils.ShowValueUtils; From b4a29f1a5f3e100bad53ee7fe1850e3866569154 Mon Sep 17 00:00:00 2001 From: "Destiny.Lin" Date: Sat, 17 Sep 2022 15:16:50 +0800 Subject: [PATCH 17/17] =?UTF-8?q?REPORT-75998=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../replace/action/ShowSearchResultAction.java | 6 +++--- .../condition/SearchConditionManager.java | 9 ++++++--- .../javascript/SearchJSFormulaManager.java | 11 ++++++++--- .../actions/replace/ui/ITReplaceNorthPanel.java | 16 ++++++++-------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java index 1cfc978f9..0ec4377a4 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java @@ -74,7 +74,7 @@ public enum ShowSearchResultAction implements ShowValue { } else { Map stringHashMap = info.getValue(); String content = stringHashMap.getOrDefault(objectContentKey, StringUtils.EMPTY); - if (content.contains(str) && !StringUtils.isEmpty(content)) { + if (content.contains(str) && StringUtils.isNotEmpty(content)) { info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str)); info.getContent().setOldShowStr(content); info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str)); @@ -147,7 +147,7 @@ public enum ShowSearchResultAction implements ShowValue { jsInfos.add(nameJSInfo); } } - if (map.containsKey(objectContentKey) && !StringUtils.isEmpty(map.get(objectContentKey))) { + if (map.containsKey(objectContentKey) && StringUtils.isNotEmpty(map.get(objectContentKey))) { String content = map.get(objectContentKey); if (content.contains(str)) { JSInfo contentJSInfo = info.copy(); @@ -191,7 +191,7 @@ public enum ShowSearchResultAction implements ShowValue { } private void searchMap4SQLContent(Map map, List sqlInfos, SQLInfo info, String str) { - if (map.containsKey(objectContentKey) && !StringUtils.isEmpty(map.get(objectContentKey))) { + if (map.containsKey(objectContentKey) && StringUtils.isNotEmpty(map.get(objectContentKey))) { String content = map.get(objectContentKey); if (content.contains(str)) { SQLInfo contentJSInfo = info.copy(); diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java index e886f26c8..6cebe52e7 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionManager.java @@ -8,6 +8,8 @@ import java.util.HashMap; import java.util.Map; /** + * 管理条件类型的注册 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-16 @@ -28,7 +30,7 @@ public class SearchConditionManager implements SearchManager { @Override public void registerAction(String tag, SearchAction searchAction) { - if (searchAction instanceof SearchConditionFormula){ + if (searchAction instanceof SearchConditionFormula) { register(tag, (SearchConditionFormula) searchAction); } } @@ -42,7 +44,7 @@ public class SearchConditionManager implements SearchManager { /** * 注册 * - * @param tag 用于匹配的类型tag + * @param tag 用于匹配的类型tag * @param searchConditionFormula 对应的实现类 */ private void register(String tag, SearchConditionFormula searchConditionFormula) { @@ -60,9 +62,10 @@ public class SearchConditionManager implements SearchManager { /** * 获取类型 + * * @return */ - public Map getConditionType(){ + public Map getConditionType() { return conditionType; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java index dafc79d58..df797a36f 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormulaManager.java @@ -8,6 +8,8 @@ import java.util.HashMap; import java.util.Map; /** + * 管理JS公式的注册 + * * @author Destiny.Lin * @version 11.0 * created by Destiny.Lin on 2022-09-16 @@ -18,6 +20,7 @@ public class SearchJSFormulaManager implements SearchManager { public static final String COMMIT_2_DB_JAVASCRIPT = "Commit2DBJavaScript"; public static final String EXPORT_JAVASCRIPT = "ExportJavaScript"; public static final String MOBILE_POPUP_HYPERLINK = "MobilePopupHyperlink"; + private SearchJSFormulaManager() { //控件事件里面需要特殊处理的类型 //EmailJavaScript(这个暂时不做处理) @@ -41,7 +44,7 @@ public class SearchJSFormulaManager implements SearchManager { @Override public void registerAction(String tag, SearchAction searchAction) { - if (searchAction instanceof SearchJSFormula){ + if (searchAction instanceof SearchJSFormula) { register(tag, (SearchJSFormula) searchAction); } } @@ -50,10 +53,11 @@ public class SearchJSFormulaManager implements SearchManager { public void removeAction(String tag) { remove(tag); } + /** * 注册 * - * @param tag 用于匹配的类型tag + * @param tag 用于匹配的类型tag * @param searchJSFormula 对应的实现类 */ private void register(String tag, SearchJSFormula searchJSFormula) { @@ -71,9 +75,10 @@ public class SearchJSFormulaManager implements SearchManager { /** * 获取类型 + * * @return */ - public Map getJSType(){ + public Map getJSType() { return javaScriptType; } diff --git a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java index a110f6c4a..c35160954 100644 --- a/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java +++ b/designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java @@ -49,7 +49,7 @@ public class ITReplaceNorthPanel { private int matchX, matchY, matchWidth, matchHeight; private int resultLabelX, resultLabelY, resultLabelWidth, resultLabelHeight; private int findInputComboBoxX, findInputComboBoxY, findInputComboBoxWidth, findInputComboBoxHeight; - private int REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT; + private int replaceInputComboBoxX, replaceInputComboBoxY, replaceInputComboBoxWidth, replaceInputComboBoxHeight; private int replaceButtonX, replaceButtonY, replaceButtonWidth, replaceButtonHeight; private int searchButtonX, searchButtonY, searchButtonWidth, searchButtonHeight; private int buttonGap; @@ -196,7 +196,7 @@ public class ITReplaceNorthPanel { searchButtonHeight = 25; searchButtonY = resultLabelY; - searchButtonX = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - replaceButtonWidth * 2 - buttonGap; + searchButtonX = replaceInputComboBoxX + replaceInputComboBoxWidth - replaceButtonWidth * 2 - buttonGap; searchButton.setBounds(searchButtonX, searchButtonY, searchButtonWidth, searchButtonHeight); } @@ -205,16 +205,16 @@ public class ITReplaceNorthPanel { replaceButtonWidth = templateWidth / 30; replaceButtonHeight = 25; replaceButtonY = resultLabelY; - replaceButtonX = REPLACE_INPUT_COMBOBOX_X + REPLACE_INPUT_COMBOBOX_WIDTH - replaceButtonWidth; + replaceButtonX = replaceInputComboBoxX + replaceInputComboBoxWidth - replaceButtonWidth; replaceButton.setBounds(replaceButtonX, replaceButtonY, replaceButtonWidth, replaceButtonHeight); } private void setReplaceInputComboboxBounds(int x, int y, int templateWidth) { - REPLACE_INPUT_COMBOBOX_X = x + templateWidth / 2 + templateWidth / 30; - REPLACE_INPUT_COMBOBOX_Y = y + 55; - REPLACE_INPUT_COMBOBOX_WIDTH = templateWidth / 3 + templateWidth / 30 * 2; - REPLACE_INPUT_COMBOBOX_HEIGHT = 25; - replaceInputCombobox.setBounds(REPLACE_INPUT_COMBOBOX_X, REPLACE_INPUT_COMBOBOX_Y, REPLACE_INPUT_COMBOBOX_WIDTH, REPLACE_INPUT_COMBOBOX_HEIGHT); + replaceInputComboBoxX = x + templateWidth / 2 + templateWidth / 30; + replaceInputComboBoxY = y + 55; + replaceInputComboBoxWidth = templateWidth / 3 + templateWidth / 30 * 2; + replaceInputComboBoxHeight = 25; + replaceInputCombobox.setBounds(replaceInputComboBoxX, replaceInputComboBoxY, replaceInputComboBoxWidth, replaceInputComboBoxHeight); } private void setFindInputComboboxBounds(int x, int y, int templateWidth) {