Browse Source

REPORT-75998 修改格式,大部分不持有属性的对象修改为单例,补充了决策报表的图表部分的搜索逻辑

feature/x
Destiny.Lin 2 years ago
parent
commit
fa7f11c43c
  1. 8
      designer-realize/src/main/java/com/fr/design/actions/replace/action/SearchAction.java
  2. 180
      designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java
  3. 11
      designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowValue.java
  4. 161
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java
  5. 163
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java
  6. 84
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java
  7. 90
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java
  8. 25
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java
  9. 67
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java
  10. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormula.java
  11. 46
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java
  12. 94
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaManager.java
  13. 37
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java
  14. 10
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormula.java
  15. 164
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java
  16. 10
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaTypeAction.java
  17. 63
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchDSColumnFormulaAction.java
  18. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchRichFormulaAction.java
  19. 9
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchSubReportFormulaAction.java
  20. 178
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/chart/SearchChartCollectionFormulaAction.java
  21. 31
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java
  22. 62
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/DataType.java
  23. 22
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java
  24. 70
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormulaAction.java
  25. 26
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java
  26. 7
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormula.java
  27. 75
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/SearchFloatFormulaAction.java
  28. 31
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java
  29. 8
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormula.java
  30. 12
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java
  31. 10
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java
  32. 6
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchConditionFormula.java
  33. 10
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java
  34. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java
  35. 10
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java
  36. 42
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java
  37. 66
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java
  38. 28
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java
  39. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSFormula.java
  40. 48
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java
  41. 14
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java
  42. 27
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java
  43. 10
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormula.java
  44. 59
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java
  45. 55
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java
  46. 7
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryAction.java
  47. 18
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java
  48. 4
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java
  49. 14
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java
  50. 6
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java
  51. 15
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java
  52. 15
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormula.java
  53. 166
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java
  54. 103
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java
  55. 123
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java
  56. 89
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java
  57. 26
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java
  58. 46
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java
  59. 105
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java
  60. 87
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java
  61. 76
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWidgetJSAction.java
  62. 67
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java
  63. 18
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java
  64. 8
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchFrmWidget.java
  65. 73
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java
  66. 35
      designer-realize/src/main/java/com/fr/design/actions/replace/info/CellInfo.java
  67. 12
      designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java
  68. 11
      designer-realize/src/main/java/com/fr/design/actions/replace/info/DealWithInfoValue.java
  69. 26
      designer-realize/src/main/java/com/fr/design/actions/replace/info/FloatInfo.java
  70. 43
      designer-realize/src/main/java/com/fr/design/actions/replace/info/FormulaInfo.java
  71. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/info/Info.java
  72. 29
      designer-realize/src/main/java/com/fr/design/actions/replace/info/JSInfo.java
  73. 69
      designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java
  74. 13
      designer-realize/src/main/java/com/fr/design/actions/replace/info/SQLInfo.java
  75. 35
      designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java
  76. 232
      designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java
  77. 112
      designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ITContent.java
  78. 15
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITComboBoxEditor.java
  79. 95
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java
  80. 58
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java
  81. 1
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceSouthPanel.java
  82. 4
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceWestPanel.java
  83. 18
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableButton.java
  84. 22
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditor.java
  85. 22
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITTableEditorPane.java
  86. 87
      designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java
  87. 36
      designer-realize/src/main/java/com/fr/design/actions/replace/utils/ShowValueUtils.java

8
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<? extends Info> search4Infos(JTemplate jTemplate);
default void search4Infos(JTemplate jTemplate) {
}
}

180
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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchCellAction(jTemplate).getCellInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchCellAction.getInstance().search4Infos(jTemplate);
return SearchCellAction.getInstance().getCellInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<CellInfo> cellInfos = new ArrayList<>();
for (Info info : arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
List<CellInfo> 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<String, String> stringHashMap = info.getValue();
String content = stringHashMap.getOrDefault("content", StringUtils.EMPTY);
Map<String, String> 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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchJSAction(jTemplate).getJsInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchJSManager.getInstance().search4Infos(jTemplate);
return SearchJSManager.getInstance().getJsInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<JSInfo> jsInfos = new ArrayList<>();
HashMap<String, String> stringHashMap = new HashMap<>();
for (Info info : arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
List<JSInfo> jsInfos = new ArrayList<>();
Map<String, String> 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<String, String> stringHashMap, ArrayList<JSInfo> jsInfos, JSInfo info, String str) {
if (stringHashMap.containsKey("name") && !StringUtils.isEmpty(stringHashMap.get("name"))) {
String name = stringHashMap.get("name");
private void searchMap4JS(Map<String, String> map, List<JSInfo> 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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchSQLAction(jTemplate).getSqlInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchSQLAction.getInstance().search4Infos(jTemplate);
return SearchSQLAction.getInstance().getSqlInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<SQLInfo> sqlInfos = new ArrayList<>();
HashMap<String, String> stringHashMap = new HashMap<>();
for (Info info : arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
List<SQLInfo> sqlInfos = new ArrayList<>();
Map<String, String> 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<String, String> stringHashMap, ArrayList<SQLInfo> sqlInfos, SQLInfo info, String str) {
if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) {
String content = stringHashMap.get("content");
private void searchMap4SQLContent(Map<String, String> map, List<SQLInfo> 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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchFloatAction(jTemplate).getFloatInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchFloatAction.getInstance().search4Infos(jTemplate);
return SearchFloatAction.getInstance().getFloatInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<FloatInfo> floatInfos = new ArrayList<>();
for (Info info : arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
List<FloatInfo> 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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchComponentAction(jTemplate).getComponentInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchComponentAction.getInstance().search4Infos(jTemplate);
return SearchComponentAction.getInstance().getComponentInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
ArrayList<ComponentInfo> componentInfos = new ArrayList<>();
HashMap<String, String> stringHashMap = new HashMap<>();
for (Info info : arrayList) {
stringHashMap = info.getValue(info.getContent().getReplaceObject());
searchMap4Component(stringHashMap, componentInfos, ((ComponentInfo) info), str);
Map<String, String> 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<String, String> stringHashMap, ArrayList<ComponentInfo> componentInfos, ComponentInfo info, String str) {
if (stringHashMap.containsKey("content")) {
String content = stringHashMap.get("content");
private void searchMap4Component(Map<String, String> stringHashMap, ArrayList<ComponentInfo> 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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchWidgetAction(jTemplate).getWidgetInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchWidgetAction.getInstance().search4Infos(jTemplate);
return SearchWidgetAction.getInstance().getWidgetInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
ArrayList<WidgetInfo> widgetInfos = new ArrayList<>();
HashMap<String, String> stringHashMap = new HashMap<>();
for (Info info : arrayList) {
Map<String, String> stringHashMap = new HashMap<>();
for (Info info : list) {
stringHashMap = info.getValue();
searchMap4Widget(stringHashMap, widgetInfos, ((WidgetInfo) info), str);
}
return widgetInfos;
}
private void searchMap4Widget(HashMap<String, String> stringHashMap, ArrayList<WidgetInfo> widgetInfos, WidgetInfo info, String str) {
if (stringHashMap.containsKey("name")) {
String name = stringHashMap.get("name");
private void searchMap4Widget(Map<String, String> map, List<WidgetInfo> 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<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchFormulaAction(jTemplate).getFormulaInfos();
public List<? extends Info> showSearchValue(JTemplate jTemplate) {
SearchFormulaManager.getInstance().search4Infos(jTemplate);
return SearchFormulaManager.getInstance().getFormulaInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<FormulaInfo> formulaInfos = new ArrayList<>();
HashMap<String, String> stringHashMap = new HashMap<>();
for (Info info : arrayList) {
public List<? extends Info> addMatchResult(String str, List<? extends Info> list) {
List<FormulaInfo> formulaInfos = new ArrayList<>();
Map<String, String> stringHashMap = new HashMap<>();
for (Info info : list) {
stringHashMap = info.getValue();
searchMap4Formula(stringHashMap, formulaInfos, ((FormulaInfo) info), str);
}
return formulaInfos;
}
private void searchMap4Formula(HashMap<String, String> stringHashMap, ArrayList<FormulaInfo> formulaInfos, FormulaInfo info, String str) {
if (stringHashMap.containsKey("content")) {
String name = stringHashMap.get("content");
private void searchMap4Formula(Map<String, String> stringHashMap, List<FormulaInfo> 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;

11
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<? extends Info> showSearchValue(JTemplate jTemplate);
List<? extends Info> showSearchValue(JTemplate jTemplate);
/**
* 对搜索结果进行过滤
*
* @param str
* @param arrayList
* @param list
* @return
*/
ArrayList<? extends Info> addMatchResult(String str,ArrayList<? extends Info> arrayList);
List<? extends Info> addMatchResult(String str, List<? extends Info> list);
}

161
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;
/**
* 获取有内容的单元格相关信息
*
* <p>
* 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<CellInfo> cellInfos;
private List<CellInfo> cellInfos;
/**
* 构造时会搜索单元格设置对应的单元格列表信息
* @param jTemplate 要搜索的报表对象
*/
public SearchCellAction(JTemplate jTemplate){
setCellInfos(search4Infos(jTemplate));
private SearchCellAction() {
}
;
public ArrayList<CellInfo> getCellInfos() {
public List<CellInfo> getCellInfos() {
return cellInfos;
}
public void setCellInfos(ArrayList<CellInfo> cellInfos) {
public void setCellInfos(List<CellInfo> cellInfos) {
this.cellInfos = cellInfos;
}
/**
* 搜索对应的信息
*
* @param jTemplate 要搜索的报表对象
* @return 返回单元格信息Array
*/
@Override
public ArrayList<CellInfo> 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<CellInfo> dealForm(JTemplate jTemplate) {
private List<CellInfo> dealForm(JTemplate jTemplate) {
ArrayList<CellInfo> 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<CellInfo> result, ITContent content, Widget widget) {
private void getCellInfosFromBoundsWidget(List<CellInfo> 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<CellInfo> dealWorkBook(JTemplate jTemplate) {
WorkBook workBook = (WorkBook) jTemplate.getTarget();
public List<CellInfo> dealWorkBook(WorkBook workBook,ITContent workBookContent) {
ArrayList<CellInfo> 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<CellInfo> result,ITContent content){
private void getCellInfoFromReport(Report report, List<CellInfo> 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<CellInfo> result,ITContent content){
private void getCellInfoFromElementCase(ElementCase elementCase, List<CellInfo> 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;
}
}
}

163
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<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
public void addComponent2Array(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
searchLayout4Component(componentInfos,bodyContent,(WCardTitleLayout) widget);
public void addComponent2Array(List<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
searchLayout4Component(componentInfos, bodyContent, (WCardTitleLayout) widget);
}
},
/**
* 对于WCardLayout 里面就是放的WTabFitLayouttab00tab10
* 处理该类型时不用对该对象进行处理直接对其包含的内容进行递归处理即可
*/
W_CARD_LAYOUT("WCardLayout"){
W_CARD_LAYOUT("WCardLayout") {
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
searchLayout4Component(componentInfos,bodyContent,(WCardLayout) widget);
public void addComponent2Array(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
public void addComponent2Array(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
public void addComponent2Array(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
public void addComponent2Array(List<ComponentInfo> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
componentInfos.add(new ComponentInfo(getComponentContent(bodyContent,widget)));
public void addComponent2Array(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, WLayout layout){
for (int i = 0 ; i < layout.getWidgetCount() ; i ++){
/**
* 从Layout里面拿组件
*
* @param componentInfos
* @param bodyContent
* @param layout
*/
public void searchLayout4Component(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, WLayout layout){
for (int i = 0 ; i < layout.getWidgetCount() ; i ++){
/**
* 从CRBoundWidget里面拿组件
*
* @param componentInfos
* @param bodyContent
* @param layout
*/
public void serachCRBoundsWidget4Component(List<ComponentInfo> 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<String, String> getValue(Object... o) {
HashMap<String,String> hashMap = new HashMap<>();
if (o != null && o[0] instanceof Widget){
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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;

84
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<ComponentInfo> componentInfos;
private List<ComponentInfo> componentInfos;
public ArrayList<ComponentInfo> getComponentInfos() {
public List<ComponentInfo> getComponentInfos() {
return componentInfos;
}
public void setComponentInfos(ArrayList<ComponentInfo> componentInfos) {
public void setComponentInfos(List<ComponentInfo> componentInfos) {
this.componentInfos = componentInfos;
}
/**
* 构造时会搜索组件设置对应的组件列表信息
* @param jTemplate 要搜索的模板
*/
public SearchComponentAction(JTemplate jTemplate) {
setComponentInfos(search4Infos(jTemplate));
}
/**
* 搜索决策报表参数面板以及body面板两个地方的组件
*
* @param jTemplate 要搜索的模板
* @return 组件信息Array
*/
@Override
public ArrayList<ComponentInfo> search4Infos(JTemplate jTemplate) {
ArrayList<ComponentInfo> componentInfos = new ArrayList<>();
public void search4Infos(JTemplate jTemplate) {
List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent content, Widget body) {
private void dealBody(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, Widget body) {
for (int i = 0 ; i < ((WLayout) body).getWidgetCount(); i++){
private void searchBodyComponent(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent bodyContent, WLayout body) {
ITContent content = bodyContent.copy();
private void dealBodyContainer(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent content, WLayout paraContainer) {
private void dealPara(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent paraContent, WLayout paraContainer) {
private void searchParaComponent(List<ComponentInfo> 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<ComponentInfo> componentInfos, ITContent content, WLayout paraContainer) {
ITContent paraContent = content.copy();
/**
* 单独处理WParameterLayout组件
*
* @param componentInfos
* @param content
* @param paraContainer
*/
private void dealParaContainer(List<ComponentInfo> 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;
}
}
}

90
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;
/**
* 查找悬浮元素的信息
*
* <p>
* 由于决策报表没有悬浮元素因此不用考虑决策报表只需要考虑普通报表即可
*
* @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<FloatInfo> floatInfos;
/**
* 构造时会搜索悬浮元素设置对应的悬浮元素信息列表
* @param jTemplate 指定搜索的模板
*/
public SearchFloatAction(JTemplate jTemplate){ setFloatInfos(search4Infos(jTemplate));}
private List<FloatInfo> floatInfos;
/**
* 查找悬浮元素信息只需要考虑普通报表
*
* @param jTemplate 指定搜索模板
* @return 悬浮元素信息列表
*/
@Override
public ArrayList<FloatInfo> search4Infos(JTemplate jTemplate) {
ArrayList<FloatInfo> result = new ArrayList<>();
if (jTemplate.getTarget() instanceof WorkBook){
public void search4Infos(JTemplate jTemplate) {
List<FloatInfo> 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<FloatInfo> result, ITContent content) {
private void getFloatInfoFromReport(Report report, List<FloatInfo> 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<FloatInfo> result, ITContent content) {
private void getFloatInfoFromElementCase(ElementCase elementCase, List<FloatInfo> 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<FloatInfo> getFloatInfos() {
public List<FloatInfo> getFloatInfos() {
return floatInfos;
}
public void setFloatInfos(ArrayList<FloatInfo> floatInfos) {
public void setFloatInfos(List<FloatInfo> 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;
}
}
}

25
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/AbstractSearchFormulaAction.java

@ -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<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
}

67
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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> operatorArray) {
//todo 富文本公式处理
}
@ -127,7 +126,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue {
*/
KV("KV") {
@Override
public HashMap<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> operatorArray) {
WorkBook workBook = (WorkBook) HistoryTemplateListCache.getInstance().getCurrentEditingTemplate().getTarget();
WatermarkAttr watermarkAttr = (WatermarkAttr) info.getContent().getReplaceObject();
info.updateOldStr(watermarkAttr.getText(), findStr);

16
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<FormulaInfo> formulaInfos, ITContent content);
default void searchFormula(List<FormulaInfo> formulaInfos, ITContent content) {
}
/**
* 获取各个地方的公式
*
* @param jTemplate
* @param formulaInfos
*/
default void searchFormulaFromObject(JTemplate jTemplate, List<FormulaInfo> formulaInfos) {
}
}

46
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/SearchFormulaAction.java

@ -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<FormulaInfo> formulaInfos;
public SearchFormulaAction(JTemplate jTemplate) {
setFormulaInfos(search4Infos(jTemplate));
}
@Override
public ArrayList<FormulaInfo> search4Infos(JTemplate jTemplate) {
ArrayList<FormulaInfo> 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<FormulaInfo> getFormulaInfos() {
return formulaInfos;
}
public void setFormulaInfos(ArrayList<FormulaInfo> formulaInfos) {
this.formulaInfos = formulaInfos;
}
}

94
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<FormulaInfo> formulaInfos;
private Set<SearchFormula> 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<FormulaInfo> 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<FormulaInfo> getFormulaInfos() {
return formulaInfos;
}
public void setFormulaInfos(List<FormulaInfo> 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;
}
}
}

37
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/AbstractSearchCellFormulaAction.java

@ -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<FormulaInfo> formulaInfos) {
}
@Override
public void searchFormulaFromCellType(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return new ArrayList<>();
}
}

10
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<FormulaInfo> formulaInfos);
default void searchFormulaFromCell(JTemplate jTemplate, List<FormulaInfo> formulaInfos) {
}
/**
* 查找不同单元格内容类型各自可能存在的公式
@ -30,5 +31,8 @@ public interface SearchCellFormula extends SearchFormula {
* @param formulaInfos
* @param content
*/
void searchFormulaFromCellType(ArrayList<FormulaInfo> formulaInfos, ITContent content);
default void searchFormulaFromCellType(List<FormulaInfo> formulaInfos, ITContent content) {
}
}

164
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<String, SearchCellFormula> cellType = new HashMap<>();
@ -54,8 +61,12 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction {
conditionHashMap.put("ListCondition", new SearchListConditionAction());
}
public SearchCellFormulaAction(JTemplate jTemplate, ArrayList<FormulaInfo> fomulaInfos) {
searchFormulaFromCell(jTemplate, fomulaInfos);
private SearchCellFormulaAction() {
}
@Override
public void searchFormulaFromObject(JTemplate jTemplate, List<FormulaInfo> formulaInfos) {
searchFormulaFromCell(jTemplate, formulaInfos);
}
/**
@ -65,8 +76,9 @@ public class SearchCellFormulaAction extends AbstractSearchCellFormulaAction {
* @param formulaInfos 指定添加信息的数组
*/
@Override
public void searchFormulaFromCell(JTemplate jTemplate, ArrayList<FormulaInfo> formulaInfos) {
SearchCellAction searchCellAction = new SearchCellAction(jTemplate);
public void searchFormulaFromCell(JTemplate jTemplate, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
private void searchCellHyperLink4Formula(CellInfo cellInfo, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null) {
private void searchCellHighlightPara4Formula(CellInfo cellInfo, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
if (((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getHighlightGroup() != null) {
private void searchCellConditionPara4Formula(CellInfo cellInfo, List<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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;
}
}
}

10
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<FormulaInfo> formulaInfos, ITContent content) {
ITContent newContent = content.copy();
newContent.setReplaceObject(((CellElement)(content.getReplaceObject())).getValue());
public void searchFormulaFromCellType(List<FormulaInfo> 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));
}

63
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<String, SearchConditionFormula> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> formulaInfos) {
if (dsColumn.getResult().length() > 0 && dsColumn.getResult().charAt(0) == '='){
ITContent newContent =content.copy();
private void addFormulaInfos2ArrayFromResult(ITContent content, DSColumn dsColumn, List<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> formulaInfos) {
for (Parameter parameter : dsColumn.getParameters()){
if (parameter.getValue() instanceof Formula){
ITContent newContent = content.copy();
private void addFormulaInfos2ArrayFromPara(ITContent content, DSColumn dsColumn, List<FormulaInfo> 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<FormulaInfo> formulaInfos){
private void addFormulaInfos2ArrayFromCondition(ITContent content, Condition condition, List<FormulaInfo> 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);
}
}

16
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<FormulaInfo> formulaInfos, ITContent content) {
public void searchFormulaFromCellType(List<FormulaInfo> 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));
}

9
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<FormulaInfo> formulaInfos, ITContent content) {
public void searchFormulaFromCellType(List<FormulaInfo> 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));

178
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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, Chart chart) {
if (chart.defaultChartData() instanceof NormalChartData){
private void searchChartDataFormula(List<FormulaInfo> formulaInfos, ITContent content, Chart chart) {
if (chart.defaultChartData() instanceof NormalChartData) {
NormalChartData chartData = (NormalChartData) chart.defaultChartData();
//todo
}
}
private void SearchChartPatternFormula(ArrayList<FormulaInfo> formulaInfos, ITContent chartContent, Chart chart){
private void searchChartPatternFormula(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent chartContent, Chart chart) {
private void searchChartPatternFormulaFromAlertLine(List<FormulaInfo> 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<VanChartAlertValue> 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<VanChartAlertValue> 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<FormulaInfo> formulaInfos, ITContent content, VanChartAlertValue alertValue) {
if (alertValue.getAlertContentFormula() != null){
ITContent alertContent = content.copy();
private void dealAlertContent(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, VanChartAlertValue alertValue) {
if (alertValue.getAlertValueFormula() != null){
ITContent valueContent = content.copy();
private void dealAlertValue(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent chartContent, Chart chart) {
private void searchChartPatternFormulaFromAxisValue(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent axisContent, Axis axis) {
ITContent content = axisContent.copy();
private void dealChartValueDefine(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, Axis axis) {
if (axis instanceof VanChartValueAxis){
if (axis.isLog() && ((VanChartValueAxis) axis).getLogBase() != null){
ITContent logContent =content.copy();
private void dealChartLogBase(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, Axis axis) {
if (axis.isCustomMainUnit() && axis.getMainUnit() != null){
ITContent mainContent = content.copy();
private void dealChartMainAndSecUnit(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent axisContent, Axis axis) {
if (axis.isCustomMaxValue() && axis.getMaxValue() != null){
ITContent maxContent = axisContent.copy();
private void dealChartMaxAndMinValue(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent chartContent, Chart chart){
private void searchChartPatternFormulaFromTitle(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent chartContent, Title title) {
if (title !=null && title.getTextObject() instanceof Formula){
ITContent content = chartContent.copy();
private void dealTitle(List<FormulaInfo> 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;
}
}
}

31
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/AbstractSearchDataFormulaAction.java

@ -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<FormulaInfo> fomulaInfos) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
}

62
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<FormulaInfo> fomulaInfos) {
if (((DBTableData)tableData).getParameters() != null){
for (ParameterProvider provider : ((DBTableData)tableData).getParameters()){
dealProvider(provider,content,fomulaInfos);
public void searchFormula(TableData tableData, ITContent content, List<FormulaInfo> 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<FormulaInfo> fomulaInfos) {
if (((StoreProcedure)tableData).getParameters() != null){
for (ParameterProvider provider : ((StoreProcedure)tableData).getParameters()){
dealProvider(provider,content,fomulaInfos);
public void searchFormula(TableData tableData, ITContent content, List<FormulaInfo> 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<FormulaInfo> fomulaInfos) {
if (((ConditionTableData)tableData).getDefineParameters() != null){
for (ParameterProvider provider : ((ConditionTableData)tableData).getDefineParameters()){
dealProvider(provider,content,fomulaInfos);
public void searchFormula(TableData tableData, ITContent content, List<FormulaInfo> 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<FormulaInfo> fomulaInfos) {
if (((RecursionTableData)tableData).getParameters() != null){
for (ParameterProvider provider : ((RecursionTableData)tableData).getParameters()){
dealProvider(provider,content,fomulaInfos);
public void searchFormula(TableData tableData, ITContent content, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
if (provider .getValue()instanceof Formula && !StringUtils.isEmpty((((Formula) provider.getValue())).getContent() )){
ITContent newContent = content.copy();
public void dealProvider(ParameterProvider provider, ITContent content, List<FormulaInfo> 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<FormulaInfo> fomulaInfos){}
abstract void searchFormula(TableData tableData, ITContent content, List<FormulaInfo> formulaInfos);
}

22
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/data/SearchDataFormula.java

@ -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<FormulaInfo> fomulaInfos);
}

70
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<FormulaInfo> fomulaInfos){
searchFormulaFromData(jTemplate,fomulaInfos);
private SearchDataFormulaAction() {
}
@Override
public void searchFormulaFromData(JTemplate jTemplate, ArrayList<FormulaInfo> fomulaInfos) {
@Override
public void searchFormulaFromObject(JTemplate jTemplate, List<FormulaInfo> formulaInfos) {
//模板数据集
dealTemplateData(jTemplate,fomulaInfos);
dealTemplateData(jTemplate, formulaInfos);
//服务器数据集
dealServerData(fomulaInfos);
dealServerData(formulaInfos);
}
private void dealServerData(ArrayList<FormulaInfo> fomulaInfos) {
private void dealServerData(List<FormulaInfo> 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<FormulaInfo> fomulaInfos) {
if (jTemplate.getTarget() instanceof TableDataSource){
private void dealTemplateData(JTemplate jTemplate, List<FormulaInfo> 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;
}
}
}

26
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/floatelement/AbstractSearchFloatFormula.java

@ -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<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return new ArrayList<>();
}
}

7
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<FormulaInfo> formulaInfos, FloatInfo floatInfo);
void searchFormulaFromCommonFloat(List<FormulaInfo> formulaInfos, FloatInfo floatInfo);
/**
* 查找不同悬浮元素内容类型各自可能存在的公式
@ -29,5 +32,5 @@ public interface SearchFloatFormula extends SearchFormula {
* @param formulaInfos 要存储对应信息列表的数据结构
* @param floatInfo FloatInfo信息
*/
void searchFormulaFromFloatType(ArrayList<FormulaInfo> formulaInfos, FloatInfo floatInfo);
void searchFormulaFromFloatType(List<FormulaInfo> formulaInfos, FloatInfo floatInfo);
}

75
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<FormulaInfo> formulaInfos) {
SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate);
private SearchFloatFormulaAction() {
}
@Override
public void searchFormulaFromObject(JTemplate jTemplate, List<FormulaInfo> 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<FormulaInfo> formulaInfos, FloatInfo floatInfo) {
public void searchFormulaFromCommonFloat(List<FormulaInfo> 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<FormulaInfo> formulaInfos, FloatInfo floatInfo) {
public void searchFormulaFromFloatType(List<FormulaInfo> 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<FormulaInfo> formulaInfos, FloatInfo floatInfo) {
ITContent content = floatInfo.getContent().copy();
public void searchFormulaFromFloatElementType(List<FormulaInfo> 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<FormulaInfo> formulaInfos, FloatInfo floatInfo) {
ITContent content = floatInfo.getContent().copy();
public void searchFormulaFromFloatElementType(List<FormulaInfo> 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<FormulaInfo> formulaInfos, FloatInfo floatInfo) {
/**
* 从特殊类型的悬浮元素值中获取到所需的公式
*
* @param formulaInfos
* @param floatInfo
*/
abstract public void searchFormulaFromFloatElementType(List<FormulaInfo> 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;
}
}
}

31
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java

@ -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<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
}

8
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<FormulaInfo> formulaInfos, HighlightAction highlightAction);
default void dealWithHighlightAction(ITContent content, List<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
}
}

12
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<String, SearchHighlightFormula> 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<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
if (highlightHashMap.containsKey(highlightAction.getClass().getSimpleName())){
public void dealWithHighlightAction(ITContent content, List<FormulaInfo> 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);
}
}

10
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<FormulaInfo> 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<FormulaInfo> 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));
}

6
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<FormulaInfo> formulaInfos, ITContent content, Condition condition);
void searchFormulaFromCondition(List<FormulaInfo> formulaInfos, ITContent content, Condition condition);
}

10
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<FormulaInfo> formulaInfos, ITContent content, Condition condition) {
if (((FormulaCondition)(condition)).getFormula() != null){
ITContent newContent = content.copy();
public void searchFormulaFromCondition(List<FormulaInfo> formulaInfos, ITContent content, Condition condition) {
if (((FormulaCondition) (condition)).getFormula() != null) {
ITContent newContent = ITContent.copy(content);
newContent.setReplaceObject(condition);
formulaInfos.add(new FormulaInfo(newContent));
}

16
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<FormulaInfo> 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<FormulaInfo> 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);
}

10
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<FormulaInfo> 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<FormulaInfo> 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));
}

42
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java

@ -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<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
}
@Override
public void dealWithHighlightAction(ITContent content, ArrayList<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
@Override
public void addFormulaInfosFromJSPara(ArrayList<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
}
}

66
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<String, SearchConditionFormula> 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<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
if (!((Commit2DBJavaScript)javaScript).getDBManipulation().isEmpty()){
@Override
public void searchJSFormulaFromOther(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, DBManipulation dbManipulation) {
private void dealWithDBManipulation(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, DMLConfig dmlConfig) {
for (int i = 0 ;i < dmlConfig.getSubmitJobCount() ; i ++){
private void dealWithSubmitJob(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, Commit2DBJavaScript javaScript) {
if (javaScript.getCallBack() != null){
private void dealWithCallBack(List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, DMLConfig dmlConfig){
if (dmlConfig.getCondition() != null){
private void dealWithCommit2DBCondition(List<FormulaInfo> 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);
}
}

28
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<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
public void searchJSFormulaFromOther(List<FormulaInfo> 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<SingleJavaScript> list = ((ExportJavaScript)javaScript).getJsListForOtherTemplates();
if (isListExist(list)){
for (SingleJavaScript singleJavaScript : list){
dealSingleJavaScript(formulaInfos,content,singleJavaScript);
List<SingleJavaScript> list = ((ExportJavaScript) javaScript).getJsListForOtherTemplates();
if (isListExist(list)) {
for (SingleJavaScript singleJavaScript : list) {
dealSingleJavaScript(formulaInfos, content, singleJavaScript);
}
}
}
}
public boolean isListExist(List<SingleJavaScript> list){
public boolean isListExist(List<SingleJavaScript> list) {
return list != null && list.size() > 0;
}
private void dealSingleJavaScript(ArrayList<FormulaInfo> formulaInfos, ITContent content, SingleJavaScript javaScript){
if (!javaScript.isDefaultFileName()){
ITContent newContent = content.copy();
private void dealSingleJavaScript(List<FormulaInfo> 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));
}
}

16
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<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript);
default void searchJSFormulaFromOther(List<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
}
;
/**
* 从超链中的参数获取公式
*
* @param formulaInfos
* @param content
* @param javaScript
*/
void addFormulaInfosFromJSPara(ArrayList<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript);
default void addFormulaInfosFromJSPara(List<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
}
;
}

48
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<String, SearchJSFormula> javaScriptHashMap = new HashMap<>();
public static HashMap<Class,SearchJSFormula> hashMap = new HashMap<>();
public static HashMap<Class, SearchJSFormula> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
public void searchJSFormulaFromOther(List<FormulaInfo> 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);
}
}
}

14
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<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
if (((MobilePopupHyperlink)javaScript).getPopupText() instanceof Formula){
ITContent newContent = content.copy();
newContent.setReplaceObject(((MobilePopupHyperlink)javaScript).getPopupText());
public void searchJSFormulaFromOther(List<FormulaInfo> 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")

27
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/AbstractSearchTemplateFormula.java

@ -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<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
}

10
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<FormulaInfo> formulaInfos, ITContent content);
void searchTemplateWaterMarkFormula(JTemplate jTemplate, List<FormulaInfo> formulaInfos, ITContent content);
/**
* 搜索全局参数中的公式
*
* @param jTemplate
* @param formulaInfos
* @param content
*/
void searchTemplateParaFormula(JTemplate jTemplate, ArrayList<FormulaInfo> formulaInfos, ITContent content);
void searchTemplateParaFormula(JTemplate jTemplate, List<FormulaInfo> formulaInfos, ITContent content);
}

59
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<FormulaInfo> formulaInfos) {
private SearchTemplateFormulaAction() {
}
@Override
public void searchFormulaFromObject(JTemplate jTemplate, List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content) {
public void searchTemplateWaterMarkFormula(JTemplate jTemplate, List<FormulaInfo> 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<FormulaInfo> formulaInfos, ITContent content) {
public void searchTemplateParaFormula(JTemplate jTemplate, List<FormulaInfo> 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;
}
}
}

55
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<FormulaInfo> formulaInfos) {
public void searchFormulaFromWidget(ITContent content, List<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> 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<FormulaInfo> formulaInfos) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
private boolean isWidgetValueValid(DataControl control){
return control.getWidgetValue() != null
&& control.getWidgetValue().getValue() instanceof Formula;
}
}

7
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<FormulaInfo> formulaInfos, Dictionary dictionary);
void searchFormulaFromDictionary(ITContent content, List<FormulaInfo> formulaInfos, Dictionary dictionary);
}

18
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<FormulaInfo> formulaInfos, Dictionary dictionary) {
public void searchFormulaFromDictionary(ITContent content, List<FormulaInfo> 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<FormulaInfo> formulaInfos, Dictionary dictionary) {
public void searchFormulaFromDictionary(ITContent content, List<FormulaInfo> 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<FormulaInfo> formulaInfos, Dictionary dictionary) {
public void searchFormulaFromDictionary(ITContent content, List<FormulaInfo> 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"),

4
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<FormulaInfo> formulaInfos) {
public void searchFormulaFromWidget(ITContent content, List<FormulaInfo> formulaInfos) {
//每个事件的事件、控件值两部分的公式获取逻辑是一样的,直接调用即可,各自其他地方的公式就需要特殊处理
super.searchFormulaFromWidget(content, formulaInfos);
}

14
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<FormulaInfo> formulaInfos) {
public void searchFormulaFromWidget(ITContent content, List<FormulaInfo> formulaInfos) {
super.searchFormulaFromWidget(content, formulaInfos);
dealStratDateFormula(content, formulaInfos);
dealEndDateFormula(content, formulaInfos);
}
private void dealEndDateFormula(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
private void dealEndDateFormula(ITContent content, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
private void dealStratDateFormula(ITContent content, List<FormulaInfo> 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));

6
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<FormulaInfo> formulaInfos) {
public void searchFormulaFromWidget(ITContent content, List<FormulaInfo> formulaInfos) {
//控件值、事件
super.searchFormulaFromWidget(content, formulaInfos);
//数据字典
@ -25,7 +27,7 @@ public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction {
}
private void searchFormulaFromDict(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
private void searchFormulaFromDict(ITContent content, List<FormulaInfo> formulaInfos) {
if (content.getReplaceObject() instanceof DictionaryContainer) {
if (((DictionaryContainer) content.getReplaceObject()).getDictionary() != null) {
DictionaryType type = DictionaryType.match(((DictionaryContainer) content.getReplaceObject()).getDictionary().getClass().getSimpleName());

15
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<FormulaInfo> formulaInfos) {
public void searchFormulaFromWidget(ITContent content, List<FormulaInfo> formulaInfos) {
//控件值、事件
super.searchFormulaFromWidget(content, formulaInfos);
//树形结构数据字典
@ -29,7 +28,7 @@ public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAc
}
private void SearchFormulaFromModelConfig(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
private void SearchFormulaFromModelConfig(ITContent content, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
private void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, ITContent content, List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
private void dealWithLayerConfigs(LayerConfig[] layerConfigs, ITContent content, List<FormulaInfo> 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"),

15
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<FormulaInfo> formulaInfos);
default void searchFormulaFromWidgetInfos(Info info, List<FormulaInfo> formulaInfos){}
/**
* 从控件的不同类型中获取公式
@ -29,7 +30,7 @@ public interface SearchWidgetFormula extends SearchFormula {
* @param content 对应的ITContent数据结构
* @param formulaInfos 要存储进去的公式信息列表
*/
void searchFormulaFromWidget(ITContent content, ArrayList<FormulaInfo> formulaInfos);
void searchFormulaFromWidget(ITContent content, List<FormulaInfo> formulaInfos);
/**
* 从控件值中获取公式
@ -37,6 +38,6 @@ public interface SearchWidgetFormula extends SearchFormula {
* @param content 对应的ITContent数据结构
* @param formulaInfos 要存储进去的公式信息列表
*/
void searchFormulaFromWidgetValue(ITContent content, ArrayList<FormulaInfo> formulaInfos);
void searchFormulaFromWidgetValue(ITContent content, List<FormulaInfo> formulaInfos);
}

166
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<String,SearchWidgetFormula> widgetHashMap = new HashMap<>();
private SearchWidgetFormulaAction() {
}
public static HashMap<String, SearchWidgetFormula> 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<FormulaInfo> fomulaInfos){
fomulaInfos.addAll(search4Infos(jTemplate));
}
@Override
public ArrayList<FormulaInfo> search4Infos(JTemplate jTemplate) {
ArrayList<FormulaInfo> 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<FormulaInfo> formulaInfos) {
List<FormulaInfo> 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<FormulaInfo> formulaInfos) {
if (widgetInfo.isReplaceObjectExist()){
searchFormulaFromWidgetValue(widgetInfo,formulaInfos);
public void searchFormulaFromWidgetInfos(Info info, List<FormulaInfo> formulaInfos) {
if (isReplaceObjectExist(info)) {
searchFormulaFromWidgetValue(info, formulaInfos);
}
}
private void searchFormulaFromWidgetValue(WidgetInfo widgetInfo, ArrayList<FormulaInfo> formulaInfos) {
Widget widget = (Widget)widgetInfo.getContent().getReplaceObject();
if (widgetHashMap.containsKey(widget.getClass().getSimpleName())){
private void searchFormulaFromWidgetValue(Info info, List<FormulaInfo> 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;
}
}
}

103
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<JSInfo> jsInfos) {
jsInfos.addAll(search4Infos(jTemplate));
private SearchCellJSAction() {
}
@Override
public ArrayList<JSInfo> search4Infos(JTemplate jTemplate) {
ArrayList<JSInfo> jsInfos = new ArrayList<>();
addJSInfos2ListFromCell(jTemplate, jsInfos);
return jsInfos;
public void searchJSFromObject(JTemplate jTemplate, List<JSInfo> jsInfos) {
List<JSInfo> CellJSInfos = new ArrayList<>();
addJSInfos2ListFromCell(jTemplate, CellJSInfos);
jsInfos.addAll(CellJSInfos);
}
private void addJSInfos2ListFromCell(JTemplate jTemplate, ArrayList<JSInfo> jsInfos) {
SearchCellAction searchCellAction = new SearchCellAction(jTemplate);
private void addJSInfos2ListFromCell(JTemplate jTemplate, List<JSInfo> 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<Pair<VanChartHtmlLabel, String>> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue());
ArrayList<NameJavaScript> 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<Pair<VanChartHtmlLabel, String>> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) cell.getValue());
//List<NameJavaScript> 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<JSInfo> jsInfos, ITContent content) {
private void searchCellConditionJS(CellElement cell, List<JSInfo> 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<JSInfo> jsInfos, NameJavaScriptGroup njsg, ITContent content) {
private void getAllJSFromNameJavaScriptGroup(CellElement cell, List<JSInfo> 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;
}
}
}

123
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<JSInfo> jsInfos) {
List<Pair<VanChartHtmlLabel, String>> htmlLabels = SearchJSUtils.getHtmlLabel(chartCollection);
List<NameJavaScript> 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<JSInfo> 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<JSInfo> 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;
}
}
}

89
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<JSInfo> jsInfos) {
jsInfos.addAll(search4Infos(jTemplate));
private SearchFloatJSAction() {
}
@Override
public ArrayList<JSInfo> search4Infos(JTemplate jTemplate) {
ArrayList<JSInfo> jsInfos = new ArrayList<>();
addJSInfos2ListFromFloat(jTemplate, jsInfos);
return jsInfos;
public void searchJSFromObject(JTemplate jTemplate, List<JSInfo> jsInfos) {
List<JSInfo> floatJSInfos = new ArrayList<>();
addJSInfos2ListFromFloat(jTemplate, floatJSInfos);
jsInfos.addAll(floatJSInfos);
}
private void addJSInfos2ListFromFloat(JTemplate jTemplate, ArrayList<JSInfo> jsInfos) {
SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate);
private void addJSInfos2ListFromFloat(JTemplate jTemplate, List<JSInfo> 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<Pair<VanChartHtmlLabel, String>> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) floatElement.getValue());
ArrayList<NameJavaScript> 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<Pair<VanChartHtmlLabel, String>> htmlLabels = SearchJSUtils.getHtmlLabel((ChartCollection) floatElement.getValue());
//List<NameJavaScript> 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;
}
}
}

26
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<JSInfo> jsInfos) {
}
}

46
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSAction.java

@ -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<JSInfo> jsInfos;
public SearchJSAction(JTemplate jTemplate) {
setJsInfos(search4Infos(jTemplate));
}
@Override
public ArrayList<JSInfo> search4Infos(JTemplate jTemplate) {
ArrayList<JSInfo> 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<JSInfo> getJsInfos() {
return jsInfos;
}
public void setJsInfos(ArrayList<JSInfo> jsInfos) {
this.jsInfos = jsInfos;
}
}

105
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<JSInfo> jsInfos;
private Set<SearchJS> 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<JSInfo> jsInfos = new ArrayList<>();
for (SearchJS searchJS : searchJSSet) {
searchJS.searchJSFromObject(jTemplate, jsInfos);
}
setJsInfos(jsInfos);
}
public List<JSInfo> getJsInfos() {
return jsInfos;
}
public void setJsInfos(List<JSInfo> 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;
}
}
}

87
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<String, String> map = new HashMap<>();
private ArrayList<WebContent> arrayList = new ArrayList<>();
private List<WebContent> 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<JSInfo> jsInfos) {
jsInfos.addAll(search4Infos(jTemplate));
}
@Override
public ArrayList<JSInfo> search4Infos(JTemplate jTemplate) {
ArrayList<JSInfo> jsInfos = new ArrayList<>();
addJSInfos2ListFromWeb(jTemplate, jsInfos);
return jsInfos;
public void searchJSFromObject(JTemplate jTemplate, List<JSInfo> jsInfos) {
arrayList.clear();
List<JSInfo> webJSInfos = new ArrayList<>();
addJSInfos2ListFromWeb(jTemplate, webJSInfos);
jsInfos.addAll(webJSInfos);
}
private void addJSInfos2ListFromWeb(JTemplate jTemplate, ArrayList<JSInfo> jsInfos) {
private void addJSInfos2ListFromWeb(JTemplate jTemplate, List<JSInfo> 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<JSInfo> jsInfos, WebContent webContent) {
ITContent newContent = content.copy();
private void addJSInfos2ListFromArray(ITContent content, List<JSInfo> 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<JSInfo> jsInfos, WebContent webContent) {
private void addJSInfos2ListFromWebListener(ITContent content, List<JSInfo> 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<JSInfo> jsInfos, WebContent webContent) {
private void addJSInfos2ListFromWebButton(ITContent content, List<JSInfo> 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<WebContent> arrayList, WebContent webContent) {
private void addContent(List<WebContent> arrayList, WebContent webContent) {
if (webContent != null) {
arrayList.add(webContent);
}
}
private void dealWithCustonToolBarButtonImpl(ITContent content, ArrayList<JSInfo> jsInfos, ToolBarManager toolBarManager) {
private void dealWithCustonToolBarButtonImpl(ITContent content, List<JSInfo> 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<JSInfo> jsInfos) {
private void addJSInfos2ListFromButtonImpl(ITContent content, List<JSInfo> 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;
}
}
}

76
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<JSInfo> jsInfos){
jsInfos.addAll(search4Infos(jTemplate));
}
public class SearchWidgetJSAction implements SearchJS {
@Override
public ArrayList<JSInfo> search4Infos(JTemplate jTemplate) {
ArrayList<JSInfo> jsInfos = new ArrayList<>();
addJSInfos2ListFromWidget(jTemplate,jsInfos);
return jsInfos;
public void searchJSFromObject(JTemplate jTemplate, List<JSInfo> jsInfos) {
List<JSInfo> widgetJSInfos = new ArrayList<>();
addJSInfos2ListFromWidget(jTemplate, widgetJSInfos);
jsInfos.addAll(widgetJSInfos);
}
private void addJSInfos2ListFromWidget(JTemplate jTemplate, ArrayList<JSInfo> 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<JSInfo> 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;
}
}
}

67
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<SQLInfo> sqlInfos;
private List<SQLInfo> sqlInfos;
public SearchSQLAction(JTemplate jTemplate) {
setSqlInfos(search4Infos(jTemplate));
private SearchSQLAction() {
}
@Override
public ArrayList<SQLInfo> search4Infos(JTemplate jTemplate) {
ArrayList<SQLInfo> sqlInfos = new ArrayList<>();
public void search4Infos(JTemplate jTemplate) {
List<SQLInfo> 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<SQLInfo> sqlInfos) {
private void addServerDataInfos2Array(ITContent content, List<SQLInfo> 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<SQLInfo> sqlInfos) {
private void addModelDataInfos2Array(JTemplate jTemplate, ITContent content, List<SQLInfo> 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<SQLInfo> getSqlInfos() {
public List<SQLInfo> getSqlInfos() {
return sqlInfos;
}
public void setSqlInfos(ArrayList<SQLInfo> sqlInfos) {
public void setSqlInfos(List<SQLInfo> 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;
}
}
}

18
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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<WidgetInfo> dealAbsoluteWidget(ITContent content, Widget widget) {
public List<WidgetInfo> dealAbsoluteWidget(ITContent content, Widget widget) {
ArrayList<WidgetInfo> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
return new HashMap<>();
}
@Override
public void setValue(Info info, String findStr, String replaceStr, ArrayList<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<WidgetInfo> addFrmWidget2Array(ITContent content, Widget widget) {
public List<WidgetInfo> addFrmWidget2Array(ITContent content, Widget widget) {
return dealAbsoluteWidget(content, widget);
}

8
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<WidgetInfo> addFrmWidget2Array(ITContent content, Widget widget);
List<WidgetInfo> addFrmWidget2Array(ITContent content, Widget widget);
}

73
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<WidgetInfo> widgetInfos;
List<WidgetInfo> widgetInfos;
public SearchWidgetAction(JTemplate jTemplate) {
setWidgetInfos(search4Infos(jTemplate));
}
@Override
public ArrayList<WidgetInfo> search4Infos(JTemplate jTemplate) {
public void search4Infos(JTemplate jTemplate) {
ArrayList<WidgetInfo> 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<WidgetInfo> 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<WidgetInfo> 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<WidgetInfo> getWidgetInfos() {
public List<WidgetInfo> getWidgetInfos() {
return widgetInfos;
}
public void setWidgetInfos(ArrayList<WidgetInfo> widgetInfos) {
public void setWidgetInfos(List<WidgetInfo> 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;
}
}
}

35
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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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())));

12
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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> operatorArray) {
ComponentType componentType = ComponentType.match(this.content.getReplaceObject().getClass().getSimpleName());
if (componentType != null) {
componentType.setValue(info, findStr, replaceStr, operatorArray);

11
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<String, String> getValue(Object... o);
Map<String, String> getValue(Object... o);
/**
@ -32,7 +35,7 @@ public interface DealWithInfoValue {
* @param replaceStr 用于替换的字符串
* @param operatorArray 存储内容类替换所要操作的所有位置Pair<起始位置,结束位置>
*/
void setValue(Info info, String findStr, String replaceStr, ArrayList<Pair<Integer, Integer>> operatorArray);
void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> operatorArray);
/**

26
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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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());

43
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<String,String> getValue(Object... o){
HashMap<String,String> map = new HashMap<>();
public Map<String, String> getValue(Object... o) {
Map<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String,String> getCommonValue(){
private Map<String, String> 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;
}
}

16
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;
};
}
;
}

29
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<String, String> getValue(Object... object) {
public Map<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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;
}

69
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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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);
}
}
}

13
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<String, String> getValue(Object... objects) {
public Map<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> operatorArray) {
ReplaceObject o = ReplaceObject.match(this.content.getReplaceObject().getClass().getSimpleName());
if (o != null) {
o.setValue(this, findStr, replaceStr, operatorArray);

35
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<String, String> getValue(Object... o) {
public Map<String, String> getValue(Object... o) {
HashMap<String, String> 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<Pair<Integer, Integer>> operatorArray) {
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> 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);

232
designer-realize/src/main/java/com/fr/design/actions/replace/info/base/ContentObject.java

@ -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;
}
}

112
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<Pair<Integer, Integer>> operatorArray;
//是否是决策报表——用于判断一些决策报表的特殊操作(比如决策报表控件在设置值时要多设置几个地方,一层套一层)
/**
* 为操作字符串提供操作位置的定位信息Pair中存储的是开始操作的索引以及结束操作的索引
*/
private List<Pair<Integer, Integer>> 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<Pair<Integer, Integer>> getOperatorArray() {
public List<Pair<Integer, Integer>> getOperatorArray() {
return operatorArray;
}
public void setOperatorArray(ArrayList<Pair<Integer, Integer>> operatorArray) {
public void setOperatorArray(List<Pair<Integer, Integer>> 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;
}

15
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

95
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<? extends Info> searchResultList = new ArrayList<>();
List<? extends Info> 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<? extends Info> searchResultList) {
private Boolean checkTemplateChanged(List<? extends Info> 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
}

58
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<String> findItems = new ArrayList<>();
public static ArrayList<String> 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;
}
}

1
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;
/**
* 下面板

4
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(""));
}
}

18
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("<html><font color = 'rgb(61,153,249)'>定位</font> ");
paraButton = new UIButton("<html><font color = 'rgb(61,153,249)'>" + Toolkit.i18nText("Fine-Design_Chart_Location") + "</font> ");
paraButton.setVisible(true);
paraButton.setBorderPainted(false);
paraButton.addActionListener(new ActionListener() {

22
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<? extends Info> arrayList) {
for (Info info : arrayList) {
public void add(List<? extends Info> list) {
for (Info info : list) {
addRow(info.getContent());
fireTableDataChanged();
}

22
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<T> extends BasicPane {
public ITTableEditorPane(UITableModelAdapter<T> model) {
this.tableModel = model;
this.initComponent(model.createAction());
//((DefaultCellEditor) editTable.getCellEditor()).setClickCountToStart(1);
editTable.setGridColor(new Color(218, 218, 221));
}

87
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<JSInfo> jsInfos, ITContent content) {
public static void searchJSFromListener(List<JSInfo> 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<Pair<VanChartHtmlLabel, String>> getHtmlLabel(ChartCollection collection) {
public static List<Pair<VanChartHtmlLabel, String>> getHtmlLabel(ChartCollection collection) {
ArrayList<Pair<VanChartHtmlLabel, String>> arrayList = new ArrayList<>();
addHtmlLabel2Array(arrayList, collection);
return arrayList;
@ -59,7 +64,7 @@ public class SearchJSUtils {
* @param arrayList
* @param collection
*/
private static void addHtmlLabel2Array(ArrayList<Pair<VanChartHtmlLabel, String>> arrayList, ChartCollection collection) {
private static void addHtmlLabel2Array(List<Pair<VanChartHtmlLabel, String>> 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<Pair<VanChartHtmlLabel, String>> arrayList) {
private static void addAttrLabelHtmlLabel(VanChart chart, List<Pair<VanChartHtmlLabel, String>> 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<Pair<VanChartHtmlLabel, String>> arrayList) {
if (plot.getAttrTooltipFromConditionCollection() != null && ((AttrTooltip) plot.getAttrTooltipFromConditionCollection()).isEnable() && plot.getAttrTooltipFromConditionCollection() instanceof AttrTooltip) {
private static void addAttrToolTipCondition2Array(VanChartPlot plot, List<Pair<VanChartHtmlLabel, String>> 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<Pair<VanChartHtmlLabel, String>> 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<Pair<VanChartHtmlLabel, String>> 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<Pair<VanChartHtmlLabel, String>> arrayList) {
if (plot.getAttrLabelFromConditionCollection() != null
&& plot.getAttrLabelFromConditionCollection().getSecondLabelDetail() != null
&& plot.getAttrLabelFromConditionCollection().getSecondLabelDetail().getContent().getHtmlLabel() != null) {
private static void addAttrSecondLabelDetail2Array(VanChartPlot plot, List<Pair<VanChartHtmlLabel, String>> 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<Pair<VanChartHtmlLabel, String>> arrayList, ConditionAttr conditionAttr) {
private static void searchConditionCollection(List<Pair<VanChartHtmlLabel, String>> 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<NameJavaScript> getNameJavaScript(ChartCollection chartCollection) {
public static List<NameJavaScript> getNameJavaScript(ChartCollection chartCollection) {
ArrayList<NameJavaScript> 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<NameJavaScript> nameJavaScriptArrayList, NameJavaScriptGroup nameJavaScriptGroup) {
private static void addNameJavaScript2Array(List<NameJavaScript> 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<JSInfo> jsInfos, JSInfo jsInfo) {
jsInfo.setContent(jsInfo.getContent().copy());
public static void addJSInfos(List<JSInfo> 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<Pair<VanChartHtmlLabel, String>> htmlLabels, ArrayList<JSInfo> jsInfos) {
if (!htmlLabels.isEmpty()) {
public static void addJSInfosFromHtmlLabel(ITContent content, List<Pair<VanChartHtmlLabel, String>> htmlLabels, List<JSInfo> 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<NameJavaScript> nameJavaScripts, ArrayList<JSInfo> jsInfos) {
if (!nameJavaScripts.isEmpty()) {
public static void addJSInfosFromNameJS(ITContent content, List<NameJavaScript> nameJavaScripts, List<JSInfo> 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<JSInfo> jsInfos, ITContent content) {
public static void addJSInfosFromHyperLink(Elem elem, List<JSInfo> 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<JSInfo> jsInfos, ITContent content) {
public static void selectJSAction(List<JSInfo> 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);

36
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<Pair<Integer, Integer>> getStringStartAndEndIndex(String str, String find) {
ArrayList<Pair<Integer, Integer>> pairs = new ArrayList<>();
int frontLength = 0;//定义该变量用于记录匹配元素前面的长度
public static List<Pair<Integer, Integer>> getStringStartAndEndIndex(String str, String find) {
List<Pair<Integer, Integer>> 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;
}
}

Loading…
Cancel
Save