Browse Source

REPORT-75998 搜索单元格、组件、悬浮元素、SQL、控件

feature/x
Destiny.Lin 2 years ago
parent
commit
82be344119
  1. 388
      designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java
  2. 192
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java
  3. 316
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java
  4. 142
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java
  5. 104
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java
  6. 107
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java
  7. 186
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java
  8. 166
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java

388
designer-realize/src/main/java/com/fr/design/actions/replace/action/ShowSearchResultAction.java

@ -0,0 +1,388 @@
package com.fr.design.actions.replace.action;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.actions.replace.action.content.cell.SearchCellAction;
import com.fr.design.actions.replace.action.content.component.SearchComponentAction;
import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction;
import com.fr.design.actions.replace.action.content.formula.SearchFormulaAction;
import com.fr.design.actions.replace.action.content.js.SearchJSAction;
import com.fr.design.actions.replace.action.content.sql.SearchSQLAction;
import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction;
import com.fr.design.actions.replace.info.*;
import com.fr.design.actions.replace.utils.ShowValueUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.general.GeneralUtils;
import com.fr.report.cell.CellElement;
import com.fr.report.cell.FloatElement;
import com.fr.third.org.apache.poi.hssf.record.formula.functions.Int;
import javafx.util.Pair;
import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-22
*/
public enum ShowSearchResultAction implements ShowValue {
/**
* 搜索单元格
*/
CELL(Toolkit.i18nText("Fine-Design_Basic_Cell")) {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchCellAction(jTemplate).getCellInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<CellInfo> cellInfos = new ArrayList<>();
for (Info info : arrayList) {
if (((CellInfo) info).isChartExist()) {
CellElement cellElement = (CellElement) info.getContent().getReplaceObject();
ChartCollection chartCollection = (ChartCollection) cellElement.getValue();
for (int i = 0; i < chartCollection.getChartCount(); i++) {
String titleName = GeneralUtils.objectToString(chartCollection.getChart(i).getTitle().getTextObject());
if (titleName.contains(str)) {
CellInfo cellInfo = ((CellInfo) info).copy();
cellInfo.setCellChartIndex(i);
cellInfo.getContent().addOtherPos(
Toolkit.i18nText("Fine-Design_Replace_Chart_Title"),
chartCollection.getChartName(i),
titleName
);
setShowInfo(cellInfo, titleName, str);
cellInfos.add(cellInfo);
}
}
} else {
HashMap<String, String> stringHashMap = info.getValue();
String content = stringHashMap.getOrDefault("content", StringUtils.EMPTY);
if (content.contains(str) && !StringUtils.isEmpty(content)) {
info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str));
info.getContent().setOldShowStr(content);
info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str));
info.getContent().setSelected(true);
cellInfos.add((CellInfo) info);
}
}
}
return cellInfos;
}
private void setShowInfo(CellInfo cellInfo, String titleName, String str) {
cellInfo.getContent().setShowStr(ShowValueUtils.getCommonString(titleName, str));
cellInfo.getContent().setOldShowStr(titleName);
cellInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(titleName, str));
cellInfo.getContent().setSelected(true);
}
},
/**
* 搜索JS事件
*/
JS(Toolkit.i18nText("Fine-Design_Replace_JS")) {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchJSAction(jTemplate).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) {
stringHashMap = info.getValue();
if (StringUtils.isEmpty(str)) {
if (!StringUtils.isEmpty(stringHashMap.getOrDefault("content", StringUtils.EMPTY))) {
JSInfo contentJSInfo = ((JSInfo) info).copy();
contentJSInfo.getContent().setShowStr(stringHashMap.get("content"));
contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content"));
contentJSInfo.getContent().setSelected(true);
contentJSInfo.setContentFlag(true);
jsInfos.add(contentJSInfo);
}
if (!StringUtils.isEmpty(stringHashMap.getOrDefault("name", StringUtils.EMPTY))) {
JSInfo nameJSInfo = ((JSInfo) info).copy();
nameJSInfo.getContent().setShowStr(stringHashMap.get("name"));
nameJSInfo.getContent().setOldShowStr(stringHashMap.get("name"));
nameJSInfo.getContent().setSelected(true);
nameJSInfo.setContentFlag(false);
jsInfos.add(nameJSInfo);
}
} else {
searchMap4JS(stringHashMap, jsInfos, ((JSInfo) info), str);
//searchMap4JSContent(stringHashMap, jsInfos, ((JSInfo) info), str);
}
}
return jsInfos;
}
private void searchMap4JS(HashMap<String, String> stringHashMap, ArrayList<JSInfo> jsInfos, JSInfo info, String str) {
if (stringHashMap.containsKey("name") && !StringUtils.isEmpty(stringHashMap.get("name"))) {
String name = stringHashMap.get("name");
if (name.contains(str)) {
JSInfo nameJSInfo = info.copy();
nameJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str));
nameJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str));
nameJSInfo.getContent().setOldShowStr(stringHashMap.get("name"));
nameJSInfo.setContentFlag(false);
nameJSInfo.getContent().setSelected(true);
jsInfos.add(nameJSInfo);
}
}
if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) {
String content = stringHashMap.get("content");
if (content.contains(str)) {
JSInfo contentJSInfo = info.copy();
contentJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(content, str));
contentJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str));
contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content"));
contentJSInfo.setContentFlag(true);
contentJSInfo.getContent().setSelected(true);
jsInfos.add(contentJSInfo);
}
}
}
},
/**
* 搜索SQL
*/
SQL("SQL") {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchSQLAction(jTemplate).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) {
stringHashMap = ((SQLInfo) info).getValue();
if (StringUtils.isEmpty(str)) {
info.getContent().setShowStr(stringHashMap.get("content"));
info.getContent().setOldShowStr(stringHashMap.get("content"));
info.getContent().setSelected(true);
sqlInfos.add((SQLInfo) info);
} else {
searchMap4SQLContent(stringHashMap, sqlInfos, ((SQLInfo) info), str);
}
}
return sqlInfos;
}
private void searchMap4SQLContent(HashMap<String, String> stringHashMap, ArrayList<SQLInfo> sqlInfos, SQLInfo info, String str) {
if (stringHashMap.containsKey("content") && !StringUtils.isEmpty(stringHashMap.get("content"))) {
String content = stringHashMap.get("content");
if (content.contains(str)) {
SQLInfo contentJSInfo = info.copy();
contentJSInfo.getContent().setShowStr(ShowValueUtils.getCommonString(content, str));
contentJSInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str));
contentJSInfo.getContent().setOldShowStr(stringHashMap.get("content"));
contentJSInfo.getContent().setSelected(true);
sqlInfos.add(contentJSInfo);
}
}
}
private void updateOperaotrArray(int index, int preLength, int strLength, SQLInfo sqlInfo) {
ArrayList<Pair<Integer, Integer>> pairs = new ArrayList<>();
pairs.add(new Pair<>(index + preLength, index + preLength + strLength));
sqlInfo.getContent().setOperatorArray(pairs);
}
},
/**
* 搜索悬浮元素
*/
FLOAT(Toolkit.i18nText("Fine-Design_Basic_Float_Element")) {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchFloatAction(jTemplate).getFloatInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<FloatInfo> floatInfos = new ArrayList<>();
for (Info info : arrayList) {
FloatElement floatElement = ((FloatElement) (info.getContent().getReplaceObject()));
//如果存的是图表,就要特殊处理
if (((FloatInfo) info).isChartExist()) {
ChartCollection chartCollection = (ChartCollection) floatElement.getValue();
for (int i = 0; i < chartCollection.getChartCount(); i++) {
String titleName = GeneralUtils.objectToString(chartCollection.getChart(i).getTitle().getTextObject());
if (titleName.contains(str)) {
FloatInfo floatInfo = ((FloatInfo) info).copy();
floatInfo.setFloatChartIndex(i);
floatInfo.getContent().addOtherPos(
Toolkit.i18nText("Fine-Design_Replace_Chart_Title"),
chartCollection.getChartName(i),
titleName);
setShowInfo(floatInfo, titleName, str);
floatInfos.add(floatInfo);
}
}
} else {
if (GeneralUtils.objectToString(floatElement.getValue()).contains(str)) {
FloatInfo floatInfo = ((FloatInfo) info).copy();
setShowInfo(floatInfo, GeneralUtils.objectToString(floatElement.getValue()), str);
floatInfos.add(floatInfo);
}
}
}
return floatInfos;
}
private void setShowInfo(FloatInfo floatInfo, String value, String str) {
floatInfo.getContent().setOldShowStr(value);
floatInfo.getContent().setShowStr(ShowValueUtils.getCommonString(value, str));
floatInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(value, str));
floatInfo.getContent().setSelected(true);
}
},
/**
* 搜索组件
*/
COMPONENT(Toolkit.i18nText("Fine-Design_Replace_Component")) {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchComponentAction(jTemplate).getComponentInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
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);
}
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");
if (content.contains(str)) {
info.getContent().setShowStr(ShowValueUtils.getCommonString(content, str));
info.getContent().setOldShowStr(stringHashMap.get("content"));
info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(content, str));
info.getContent().setSelected(true);
componentInfos.add(info);
}
}
}
},
/**
* 搜索控件
*/
WIDGET(Toolkit.i18nText("Fine-Design_Basic_Widget")) {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchWidgetAction(jTemplate).getWidgetInfos();
}
@Override
public ArrayList<? extends Info> addMatchResult(String str, ArrayList<? extends Info> arrayList) {
ArrayList<WidgetInfo> widgetInfos = new ArrayList<>();
HashMap<String, String> stringHashMap = new HashMap<>();
for (Info info : arrayList) {
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");
if (!StringUtils.isEmpty(name) && name.contains(str)) {
WidgetInfo nameInfo = info.copy(info);
nameInfo.getContent().setShowStr(ShowValueUtils.getCommonString(name, str));
nameInfo.getContent().setOldShowStr(stringHashMap.get("name"));
nameInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str));
nameInfo.getContent().setSelected(true);
nameInfo.setWaterMarkFlag(false);
widgetInfos.add(nameInfo);
}
}
if (stringHashMap.containsKey("waterMark")) {
String waterMark = stringHashMap.get("waterMark");
if (!StringUtils.isEmpty(waterMark) && waterMark.contains(str)) {
WidgetInfo widgetInfo = info.copy(info);
widgetInfo.getContent().setShowStr(ShowValueUtils.getCommonString(waterMark, str));
widgetInfo.getContent().setOldShowStr(stringHashMap.get("waterMark"));
widgetInfo.getContent().setShowObject(widgetInfo.getContent().getShowObject() + "水印");
widgetInfo.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(waterMark, str));
widgetInfo.getContent().setSelected(true);
widgetInfo.setWaterMarkFlag(true);
widgetInfos.add(widgetInfo);
}
}
}
},
/**
* 搜索公式
*/
FORMULA(Toolkit.i18nText("Fine-Design_Basic_Formula")) {
@Override
public ArrayList<? extends Info> showSearchValue(JTemplate jTemplate) {
return new SearchFormulaAction(jTemplate).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) {
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");
if (name.contains(str)) {
info.getContent().setShowStr(ShowValueUtils.getCommonString(name, str));
info.getContent().setOldShowStr(stringHashMap.get("content"));
info.getContent().setOperatorArray(ShowValueUtils.getStringStartAndEndIndex(name, str));
info.getContent().setSelected(true);
formulaInfos.add(info);
}
}
}
};
String name;
ShowSearchResultAction(String name) {
this.name = name;
}
/**
* 匹配
*
* @param name
* @return
*/
@Nullable
public static ShowSearchResultAction match(String name) {
ShowSearchResultAction[] values = ShowSearchResultAction.values();
for (ShowSearchResultAction value : values) {
if (value.name.equals(name)) {
return value;
}
}
return null;
}
}

192
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/cell/SearchCellAction.java

@ -0,0 +1,192 @@
package com.fr.design.actions.replace.action.content.cell;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.action.content.component.SearchComponentAction;
import com.fr.design.actions.replace.info.ComponentInfo;
import com.fr.design.actions.replace.info.DealWithInfoValue;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.actions.replace.info.CellInfo;
import com.fr.form.main.Form;
import com.fr.form.ui.ElementCaseEditor;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.*;
import com.fr.form.ui.widget.CRBoundsWidget;
import com.fr.general.GeneralUtils;
import com.fr.main.impl.WorkBook;
import com.fr.report.cell.CellElement;
import com.fr.report.elementcase.ElementCase;
import com.fr.report.poly.PolyECBlock;
import com.fr.report.report.Report;
import com.fr.stable.AssistUtils;
import javafx.util.Pair;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
/**
* 获取有内容的单元格相关信息
*
* tips:这边报表分为两块决策报表dealForm和普通报表dealWorkBook二者最后都会归于ElementCase
* 决策报表虽然分为绝对布局和自适应布局但是单元格可能存在的地方只有report 二者对它report的处理是统一的都属于WTitleLayout因此没必要划分两种布局
* 普通报表获取elementCase拿到cellIterator遍历即可
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-11
*/
public class SearchCellAction implements SearchAction {
private ArrayList<CellInfo> cellInfos;
/**
* 构造时会搜索单元格设置对应的单元格列表信息
* @param jTemplate 要搜索的报表对象
*/
public SearchCellAction(JTemplate jTemplate){
setCellInfos(search4Infos(jTemplate));
}
public ArrayList<CellInfo> getCellInfos() {
return cellInfos;
}
public void setCellInfos(ArrayList<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);
}
return new ArrayList<>();
}
/**
* 处理决策报表
* 流程dealForm>getCellInfosFromBoundsWidget>getCellInfoFromElementCase
* @param jTemplate 要搜索的报表对象
* @return 返回单元格信息Array
*/
private ArrayList<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());
}
return result;
}
/**
* 从组件信息中获取到的layout中的BoundsWidget中获取真正的报表块并且将信息添加到列表中
* @param result 要操作的Array
* @param content 存储查找替换相关信息的类
* @param widget 控件和组件的最高层接口
*/
private void getCellInfosFromBoundsWidget(ArrayList<CellInfo> result, ITContent content, Widget widget) {
//report在两种布局中都属于WTitleLayout
if (widget instanceof WTitleLayout){
for (int i = 0 ; i < ((WTitleLayout) widget).getWidgetCount() ; i++){
//这里它又套了一层BoundsWidget
if (((CRBoundsWidget)((WTitleLayout) widget).getWidget(i)).getWidget() instanceof ElementCaseEditor){
ElementCaseEditor editor = (ElementCaseEditor) ((CRBoundsWidget)((WTitleLayout) widget).getWidget(i)).getWidget();
ITContent newContent = content.copy();
getCellInfoFromElementCase((ElementCase) editor.getElementCase(),result,newContent);
}
}
}
}
/**
* 处理普通报表
* @param jTemplate 要搜索的报表对象
* @return 对应信息Array
*/
private ArrayList<CellInfo> dealWorkBook(JTemplate jTemplate) {
WorkBook workBook = (WorkBook) jTemplate.getTarget();
ArrayList<CellInfo> result = new ArrayList<>();
for (int i = 0 ; i < workBook.getReportCount() ; i++){
Report report = workBook.getReport(i);
ITContent content = new ITContent();
content.setSheetID(String.valueOf(i));
content.setSheetName(workBook.getReportName(i));
content.setTemplateName(jTemplate.getTemplateName());
content.addTRL(jTemplate.getTemplateName());
getCellInfoFromReport(report,result, content);
}
return result;
}
/**
* 处理普通报表的sheet
* @param report sheet
* @param result 要操作的信息Array
* @param content 存储查找替换相关信息的类
*/
private void getCellInfoFromReport(Report report, ArrayList<CellInfo> result,ITContent content){
if (report != null){
Iterator it = report.iteratorOfElementCase();
while (it.hasNext()){
ITContent newContent =content.copy();
ElementCase elementCase = (ElementCase) it.next();
getCellInfoFromElementCase(elementCase,result, newContent);
}
}
}
private void getCellInfoFromElementCase(ElementCase elementCase, ArrayList<CellInfo> result,ITContent content){
Iterator cellIterator = elementCase.cellIterator();
while (cellIterator.hasNext()){
ITContent newContent = content.copy();
CellElement cell = (CellElement) cellIterator.next();
newContent.getContentObject().setCell(cell);
newContent.setReplaceObject(cell);
//单元格
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Cell") +cell);
newContent.setShowObject(cell);
newContent.addTRL(newContent.getSheetID());
if (elementCase instanceof PolyECBlock){
newContent.setBlockName(((PolyECBlock)elementCase).getBlockName());
newContent.addTRL(((PolyECBlock)elementCase).getBlockName());
}
newContent.addTRL(GeneralUtils.objectToString(cell));
CellInfo cellInfo = new CellInfo(newContent);
if (cell.getValue() instanceof ChartCollection){
cellInfo.setChartExist(true);
}
result.add(cellInfo);
}
}
/**
* 对应的单元格信息列表是否有内容
* @return 判断的布尔值
*/
public boolean isCellInfosExist(){
return this.getCellInfos().size() > 0;
}
}

316
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java

@ -0,0 +1,316 @@
package com.fr.design.actions.replace.action.content.component;
import com.fr.design.actions.replace.action.content.widget.FrmWidgetType;
import com.fr.design.actions.replace.action.content.widget.SearchFrmWidget;
import com.fr.design.actions.replace.info.ComponentInfo;
import com.fr.design.actions.replace.info.DealWithInfoValue;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.WidgetInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.actions.replace.utils.ShowValueUtils;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.container.WScaleLayout;
import com.fr.form.ui.container.WTitleLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.form.ui.container.cardlayout.WCardTagLayout;
import com.fr.form.ui.container.cardlayout.WCardTitleLayout;
import com.fr.form.ui.container.cardlayout.WTabFitLayout;
import com.fr.form.ui.widget.CRBoundsWidget;
import com.fr.stable.StringUtils;
import javafx.util.Pair;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 决策报表组件类型
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-09-08
*/
public enum ComponentType implements DealWithInfoValue{
/**
* WCardMainBorderLayout属于Tab块组件中的最外层默认命名方式为tablayout0的类型
* WCardMainBorderLayout里面放两个一个WCardTitleLayout,一个WCardLayout
* 处理该类型时需要先将该对象加入我们的组件列表中再对其包含的内容进行递归处理
* TIP:该类型对其设置组件名时直接setWidgetName即可设计器右侧上方和右侧下方面板中的组件名称会同步更改
*/
W_CARD_MAIN_BORDER_LAYOUT("WCardMainBorderLayout"){
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
super.addComponent2Array(componentInfos, bodyContent, widget);
ITContent content = bodyContent.copy();
content.addOtherPos(widget.getWidgetName());
for (int i = 0 ; i < ((WCardMainBorderLayout)widget).getWidgetCount() ; i ++){
Widget cardLayoutWidget = ((WCardMainBorderLayout)widget).getWidget(i);
if (cardLayoutWidget instanceof WCardTitleLayout){
for (int j = 0 ; j <((WCardTitleLayout) cardLayoutWidget).getWidgetCount() ; j++){
if (((WCardTitleLayout) cardLayoutWidget).getWidget(j) instanceof WCardTagLayout){
content.addOtherPos(((WCardTitleLayout) cardLayoutWidget).getWidget(j).getWidgetName());
}
}
}
}
searchLayout4Component(componentInfos,content,((WCardMainBorderLayout)widget));
}
},
/**
* WCardTitleLayout里面两个一个CardAddButton不必处理一个WCardTagLayout默认命名方式为tabpane0的类型
* 处理该类型时不用对该对象进行处理直接对其包含的内容进行递归处理即可
*/
W_CARD_TITLE_LAYOUT("WCardTitleLayout"){
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
searchLayout4Component(componentInfos,bodyContent,(WCardTitleLayout) widget);
}
},
/**
* 对于WCardLayout 里面就是放的WTabFitLayouttab00tab10
* 处理该类型时不用对该对象进行处理直接对其包含的内容进行递归处理即可
*/
W_CARD_LAYOUT("WCardLayout"){
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
searchLayout4Component(componentInfos,bodyContent,(WCardLayout) widget);
}
},
/**
* WCardTagLayout默认命名方式为tabpane0的类型
* TIP:该类型对其设置组件名时直接setWidgetName即可设计器右侧上方和右侧下方面板中的组件名称会同步更改
*/
W_CARD_TAG_LAYOUT("WCardTagLayout"){
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
super.addComponent2Array(componentInfos, bodyContent, widget);
searchLayout4Component(componentInfos,bodyContent,(WCardTagLayout) widget);
}
},
/**
* WAbsoluteLayout属于绝对布局块
* 处理该类型时需要先将该对象加入我们的组件列表中再对其包含的内容进行递归处理
* TIP:该类型对其设置组件名时直接setWidgetName即可设计器右侧上方和右侧下方面板中的组件名称会同步更改
*/
W_ABSOLUTE_LAYOUT("WAbsoluteLayout"){
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
super.addComponent2Array(componentInfos, bodyContent, widget);
serachCRBoundsWidget4Component(componentInfos,bodyContent,(WAbsoluteLayout) widget);
}
},
/**
* WTabFitLayout里面放的是命名方式为tab00tab10的tab块在该块内部可以递归存放所有决策报表组件
* 处理该类型时需要先将该对象加入我们的组件列表中再对其包含的内容进行递归处理
* TIP:该类型对其设置组件名时直接setWidgetName即可设计器右侧上方和右侧下方面板中的组件名称会同步更改
*/
W_TAB_FIT_LAYOUT("WTabFitLayout"){
@Override
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
super.addComponent2Array(componentInfos, bodyContent, widget);
serachCRBoundsWidget4Component(componentInfos,bodyContent,(WTabFitLayout) widget);
}
},
/**
* 自适应布局下报表块和图表的存储方式
* TIP:该类型对其设置组件名时需要对内外层进行setWidgetName设计器右侧上方和右侧下方面板中的组件名称不会同步更改
*/
W_TITLE_LAYOUT("WTitleLayout"){
@Override
public void setValue(Info info, String findStr, String replaceStr, ArrayList<Pair<Integer, Integer>> operatorArray) {
Object replaceObject = info.getContent().getReplaceObject();
if (replaceObject instanceof WTitleLayout){
WTitleLayout titleLayout = (WTitleLayout) replaceObject;
info.updateOldStr(titleLayout.getWidgetName(),findStr);
titleLayout.setWidgetName(ShowValueUtils.replaceAll(titleLayout.getWidgetName(),findStr,replaceStr));
CRBoundsWidget crBoundsWidget = ((CRBoundsWidget)titleLayout.getWidget(0));
crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(),findStr,replaceStr));
}
}
},
/**
* 自适应布局下下拉框控件下拉复选框控件日期控件数字控件下拉树控件密码控件都属于该类型
* TIP:该类型对其设置组件名时需要对内外层进行setWidgetName设计器右侧上方和右侧下方面板中的组件名称不会同步更改
*/
W_SCALE_LAYOUT("WScaleLayout"){
@Override
public void setValue(Info info, String findStr, String replaceStr, ArrayList<Pair<Integer, Integer>> operatorArray) {
Object replaceObject = info.getContent().getReplaceObject();
if (replaceObject instanceof WScaleLayout){
WScaleLayout scaleLayout = (WScaleLayout) replaceObject;
info.updateOldStr(scaleLayout.getWidgetName(),findStr);
scaleLayout.setWidgetName(ShowValueUtils.replaceAll(scaleLayout.getWidgetName(),findStr,replaceStr));
CRBoundsWidget crBoundsWidget = ((CRBoundsWidget)scaleLayout.getWidget(0));
crBoundsWidget.getWidget().setWidgetName(ShowValueUtils.replaceAll(crBoundsWidget.getWidget().getWidgetName(),findStr,replaceStr));
}
}
},
/**
* 绝对布局文本控件
*/
TEXT_EDITOR("TextEditor"),
/**
* 自适应布局和绝对布局标签控件
*/
LABEL("Label"),
/**
* 自适应布局和绝对布局按钮控件
*/
FREE_BUTTON("FreeButton"),
/**
* 下绝对布局拉框控件
*/
COMBO_BOX("ComboBox"),
/**
* 绝对布局下拉复选框控件
*/
COMBO_CHECK_BOX("ComboCheckBox"),
/**
* 绝对布局日期控件
*/
DATE_EDITOR("DateEditor"),
/**
* 绝对布局数字控件
*/
NUMBER_EDITOR("NumberEditor"),
/**
* 绝对布局下拉树控件
*/
TREE_COMBO_BOX_EDITOR("TreeComboBoxEditor"),
/**
* 自适应布局和绝对布局单选按钮组控件
*/
RADIO_GROUP("RadioGroup"),
/**
* 自适应布局和绝对布局复选按钮组控件
*/
CHECK_BOX_GROUP("CheckBoxGroup"),
/**
* 自适应布局和绝对布局查询按钮
*/
FORM_SUBMIT_BUTTON("FormSubmitButton"),
/**
* 自适应布局和绝对布局文本域控件
*/
TEXT_AREA("TextArea"),
/**
* 绝对布局密码控件
*/
PASS_WORD("Password"),
/**
* 自适应布局和绝对布局复选按钮控件
*/
CHECK_BOX("CheckBox"),
/**
* 自适应布局和绝对布局视图树
*/
TREE_EDITOR("TreeEditor"),
/**
* 自适应布局和绝对布局文件控件
*/
MULTI_FILE_EDITOR("MultiFileEditor");
String name;
ComponentType(String name) {
this.name = name;
}
@Nullable
public static ComponentType match(String name){
ComponentType[] values = ComponentType.values();
for (ComponentType value : values) {
if(value.name.equals(name)){
return value;
}
}
return null;
}
public void addComponent2Array(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, Widget widget) {
componentInfos.add(new ComponentInfo(getComponentContent(bodyContent,widget)));
}
public ITContent getComponentContent(ITContent componentContent,Widget widget){
ITContent content = componentContent.copy();
content.setReplaceObject(widget);
String widgetName = widget.getWidgetName();
if (!(widget instanceof WCardTagLayout)){
content.addOtherPos(widgetName);
}
content.setBlockName(widgetName);
content.setShowObject(widgetName);
content.addTRL(widgetName);
return content;
}
public void searchLayout4Component(ArrayList<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){
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 ++){
//这边会套一层CRBoundsWidget
ComponentType componentType = ComponentType.match(((CRBoundsWidget)(layout.getWidget(i))).getWidget().getClass().getSimpleName());
if (componentType != null){
ITContent content = bodyContent.copy();
content.addOtherPos(layout.getWidgetName());
componentType.addComponent2Array(componentInfos, content, ((CRBoundsWidget)(layout.getWidget(i))).getWidget());
}
}
}
@Override
public HashMap<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) {
Object replaceObject = info.getContent().getReplaceObject();
if (replaceObject instanceof Widget){
Widget widget = ((Widget) replaceObject);
info.updateOldStr(widget.getWidgetName(),findStr);
widget.setWidgetName(widget.getWidgetName().replaceAll(findStr,replaceStr));
}
}
@Override
public String getInfoShowStr(Info info) {
if (info instanceof ComponentInfo && info.getContent().getReplaceObject() instanceof Widget){
return ((Widget) info.getContent().getReplaceObject()).getWidgetName();
}
return StringUtils.EMPTY;
}
}

142
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/SearchComponentAction.java

@ -0,0 +1,142 @@
package com.fr.design.actions.replace.action.content.component;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.info.ComponentInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.mainframe.JTemplate;
import com.fr.form.main.Form;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WAbsoluteLayout;
import com.fr.form.ui.container.WCardLayout;
import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.container.cardlayout.WCardMainBorderLayout;
import com.fr.form.ui.container.cardlayout.WCardTagLayout;
import com.fr.form.ui.container.cardlayout.WCardTitleLayout;
import com.fr.form.ui.container.cardlayout.WTabFitLayout;
import com.fr.form.ui.widget.CRBoundsWidget;
import com.fr.stable.StringUtils;
import com.teamdev.jxbrowser.deps.org.checkerframework.checker.units.qual.C;
import java.util.ArrayList;
/**
* 获取决策报表组件
* TIPS:组件只在决策报表中只用考虑决策报表Form分为para和body两部分来处理
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-29
*/
public class SearchComponentAction implements SearchAction {
private ArrayList<ComponentInfo> componentInfos;
public ArrayList<ComponentInfo> getComponentInfos() {
return componentInfos;
}
public void setComponentInfos(ArrayList<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<>();
if (jTemplate.getTarget() instanceof Form) {
Form form = (Form) jTemplate.getTarget();
ITContent content = new ITContent();
content.setTemplateName(jTemplate.getTemplateName());
content.addTRL(jTemplate.getTemplateName());
content.setFrmFlag(true);
//参数面板
dealPara(componentInfos, content, form.getParaContainer());
//body面板
dealBody(componentInfos, content, form.getBody());
}
return componentInfos;
}
private void dealBody(ArrayList<ComponentInfo> componentInfos, ITContent content, Widget body) {
if (body instanceof WLayout) {
ITContent bodyContent = content.copy();
bodyContent.addOtherPos(body.getWidgetName());
//单独处理一下body组件
dealBodyContainer(componentInfos, bodyContent, (WLayout) body);
//处理body的子组件
searchBodyComponent(componentInfos, bodyContent, body);
//searchBodyComponent();
}
}
private void searchBodyComponent(ArrayList<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());
}
}
}
private void dealBodyContainer(ArrayList<ComponentInfo> componentInfos, ITContent bodyContent, WLayout body) {
ITContent content = bodyContent.copy();
content.setReplaceObject(body);
dealContent(content, body.getWidgetName());
//WParameterLayout
componentInfos.add(new ComponentInfo(content));
}
private void dealPara(ArrayList<ComponentInfo> componentInfos, ITContent content, WLayout paraContainer) {
if (paraContainer != null) {
ITContent paraContent = content.copy();
paraContent.addOtherPos(paraContainer.getWidgetName());
//单独处理一下para组件
dealParaContainer(componentInfos, paraContent, paraContainer);
//处理para的子组件
searchParaComponent(componentInfos, paraContent, paraContainer);
}
}
private void searchParaComponent(ArrayList<ComponentInfo> componentInfos, ITContent paraContent, WLayout paraContainer) {
for (int i = 0; i < paraContainer.getWidgetCount(); i++) {
ITContent content = paraContent.copy();
String widgetName = ((CRBoundsWidget) (paraContainer.getWidget(i))).getWidget().getWidgetName();
content.addOtherPos(widgetName);
content.setReplaceObject(((CRBoundsWidget) (paraContainer.getWidget(i))).getWidget());
dealContent(content, widgetName);
componentInfos.add(new ComponentInfo(content));
}
}
//单独处理WParameterLayout组件
private void dealParaContainer(ArrayList<ComponentInfo> componentInfos, ITContent content, WLayout paraContainer) {
ITContent paraContent = content.copy();
paraContent.setReplaceObject(paraContainer);
dealContent(paraContent, paraContainer.getWidgetName());
//WParameterLayout
componentInfos.add(new ComponentInfo(paraContent));
}
private void dealContent(ITContent content, String widgetName) {
content.setBlockName(widgetName);
content.setShowObject(widgetName);
content.addTRL(widgetName);
}
}

104
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/floatelement/SearchFloatAction.java

@ -0,0 +1,104 @@
package com.fr.design.actions.replace.action.content.floatelement;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.info.FloatInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.main.impl.WorkBook;
import com.fr.report.cell.FloatElement;
import com.fr.report.elementcase.ElementCase;
import com.fr.report.poly.PolyECBlock;
import com.fr.report.report.Report;
import java.util.ArrayList;
import java.util.Iterator;
/**
* 查找悬浮元素的信息
*
* 由于决策报表没有悬浮元素因此不用考虑决策报表只需要考虑普通报表即可
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-16
*/
public class SearchFloatAction implements SearchAction {
private ArrayList<FloatInfo> floatInfos;
/**
* 构造时会搜索悬浮元素设置对应的悬浮元素信息列表
* @param jTemplate 指定搜索的模板
*/
public SearchFloatAction(JTemplate jTemplate){ setFloatInfos(search4Infos(jTemplate));}
/**
* 查找悬浮元素信息只需要考虑普通报表
* @param jTemplate 指定搜索模板
* @return 悬浮元素信息列表
*/
@Override
public ArrayList<FloatInfo> search4Infos(JTemplate jTemplate) {
ArrayList<FloatInfo> result = new ArrayList<>();
if (jTemplate.getTarget() instanceof WorkBook){
WorkBook workBook = (WorkBook) jTemplate.getTarget();
for (int i = 0 ; i < workBook.getReportCount() ; i++){
Report report = workBook.getReport(i);
ITContent content = new ITContent();
content.setTemplateName(jTemplate.getTemplateName());
content.setSheetID(String.valueOf(i));
content.setSheetName(workBook.getReportName(i));
content.addTRL(jTemplate.getTemplateName());
content.addTRL(String.valueOf(i));
getFloatInfoFromReport(report,result, content);
}
}
return result;
}
private void getFloatInfoFromReport(Report report, ArrayList<FloatInfo> result, ITContent content) {
if (report != null){
Iterator it = report.iteratorOfElementCase();
while (it.hasNext()){
ITContent newContent = content.copy();
ElementCase elementCase = (ElementCase) it.next();
getFloatInfoFromElementCase(elementCase,result, newContent);
}
}
}
private void getFloatInfoFromElementCase(ElementCase elementCase, ArrayList<FloatInfo> result, ITContent content) {
Iterator floatIterator = elementCase.floatIterator();
while (floatIterator.hasNext()){
ITContent newContent = content.copy();
FloatElement floatElement = (FloatElement) floatIterator.next();
newContent.getContentObject().setFloatElement(floatElement);
newContent.setReplaceObject(floatElement);
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Float_Element"));
if (elementCase instanceof PolyECBlock){
newContent.setBlockName(((PolyECBlock)elementCase).getBlockName());
newContent.addTRL(((PolyECBlock)elementCase).getBlockName());
}
newContent.setShowObject(floatElement.getName());
newContent.addTRL(floatElement.getName());
FloatInfo floatInfo = new FloatInfo(newContent);
if (floatElement.getValue() instanceof ChartCollection){
floatInfo.setChartExist(true);
}
result.add(floatInfo);
}
}
public ArrayList<FloatInfo> getFloatInfos() {
return floatInfos;
}
public void setFloatInfos(ArrayList<FloatInfo> floatInfos) {
this.floatInfos = floatInfos;
}
}

107
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java

@ -0,0 +1,107 @@
package com.fr.design.actions.replace.action.content.sql;
import com.fr.data.TableDataSource;
import com.fr.data.impl.DBTableData;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.info.SQLInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.data.tabledata.wrapper.TableDataFactory;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.file.TableDataConfig;
import com.fr.form.main.Form;
import com.fr.main.impl.WorkBook;
import com.fr.stable.AssistUtils;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-16
*/
public class SearchSQLAction implements SearchAction {
private ArrayList<SQLInfo> sqlInfos;
public SearchSQLAction(JTemplate jTemplate) {
setSqlInfos(search4Infos(jTemplate));
}
@Override
public ArrayList<SQLInfo> search4Infos(JTemplate jTemplate) {
ArrayList<SQLInfo> sqlInfos = new ArrayList<>();
ITContent content = new ITContent();
content.setTemplateName(jTemplate.getTemplateName());
addModelDataInfos2Array(jTemplate, content, sqlInfos);
addServerDataInfos2Array(content, sqlInfos);
return sqlInfos;
}
/**
* 服务器数据集
* @param content
* @param sqlInfos
*/
private void addServerDataInfos2Array(ITContent content, ArrayList<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();
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData"),
dataName
);
newContent.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData"));
newContent.setReplaceObject(tableDataConfig.getTableData(dataName));
newContent.getContentObject().setDbTableData((DBTableData) tableDataConfig.getTableData(dataName));
sqlInfos.add(new SQLInfo(newContent));
}
}
}
/**
* 模板数据集
* @param jTemplate
* @param content
* @param sqlInfos
*/
private void addModelDataInfos2Array(JTemplate jTemplate, ITContent content, ArrayList<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();
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData"),
dataName
);
newContent.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData"));
newContent.setReplaceObject(source.getTableData(dataName));
newContent.getContentObject().setDbTableData(((DBTableData) source.getTableData(dataName)));
sqlInfos.add(new SQLInfo(newContent));
}
}
}
}
public ArrayList<SQLInfo> getSqlInfos() {
return sqlInfos;
}
public void setSqlInfos(ArrayList<SQLInfo> sqlInfos) {
this.sqlInfos = sqlInfos;
}
@Override
public String toString() {
return AssistUtils.toString(this);
}
}

186
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/FrmWidgetType.java

@ -0,0 +1,186 @@
package com.fr.design.actions.replace.action.content.widget;
import com.fr.design.actions.replace.action.content.component.ComponentType;
import com.fr.design.actions.replace.info.DealWithInfoValue;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.WidgetInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.actions.replace.utils.ShowValueUtils;
import com.fr.form.ui.WaterMark;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WScaleLayout;
import com.fr.form.ui.widget.CRBoundsWidget;
import javafx.util.Pair;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashMap;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-29
*/
public enum FrmWidgetType implements SearchFrmWidget, DealWithInfoValue {
/**
* 自适应布局
*/
W_SCALE_LAYOUT("WScaleLayout") {
@Override
public void setValue(Info info, String findStr, String replaceStr, ArrayList<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());
if (frmWidgetType != null) {
frmWidgetType.setValue(info, findStr, replaceStr, operatorArray);
}
} else {
ComponentType componentType = ComponentType.match(widget.getClass().getSimpleName());
if (componentType != null) {
componentType.setValue(info, findStr, replaceStr, operatorArray);
}
}
}
},
/**
* 文本控件
*/
TEXT_EDITOR("TextEditor"),
/**
* 标签控件
*/
LABEL("Label"),
/**
* 按钮控件
*/
FREE_BUTTON("FreeButton"),
/**
* 下拉框控件
*/
COMBO_BOX("ComboBox"),
/**
* 下拉复选框控件
*/
COMBO_CHECK_BOX("ComboCheckBox"),
/**
* 日期控件
*/
DATE_EDITOR("DateEditor"),
/**
* 数字控件
*/
NUMBER_EDITOR("NumberEditor"),
/**
* 下拉树控件
*/
TREE_COMBO_BOX_EDITOR("TreeComboBoxEditor"),
/**
* 单选按钮组控件
*/
RADIO_GROUP("RadioGroup"),
/**
* 复选按钮组控件
*/
CHECK_BOX_GROUP("CheckBoxGroup"),
/**
* 查询按钮
*/
FORM_SUBMIT_BUTTON("FormSubmitButton"),
/**
* 文本域控件
*/
TEXT_AREA("TextArea"),
/**
* 密码控件
*/
PASS_WORD("Password"),
/**
* 复选按钮控件
*/
CHECK_BOX("CheckBox"),
/**
* 视图树
*/
TREE_EDITOR("TreeEditor"),
/**
* 文件控件
*/
MULTI_FILE_EDITOR("MultiFileEditor");
String name;
FrmWidgetType(String name) {
this.name = name;
}
/**
* 处理绝对布局或者已经是真正存储对象的控件
*
* @param content
* @param widget
* @return
*/
public ArrayList<WidgetInfo> dealAbsoluteWidget(ITContent content, Widget widget) {
ArrayList<WidgetInfo> widgetInfos = new ArrayList<>();
ITContent newContent = content.copy();
widgetInfos.add(new WidgetInfo(newContent));
return widgetInfos;
}
/**
* 匹配
*
* @param name
* @return
*/
@Nullable
public static FrmWidgetType match(String name) {
FrmWidgetType[] values = FrmWidgetType.values();
for (FrmWidgetType value : values) {
if (value.name.equals(name)) {
return value;
}
}
return null;
}
@Override
public HashMap<String, String> getValue(Object... o) {
return new HashMap<>();
}
@Override
public void setValue(Info info, String findStr, String replaceStr, ArrayList<Pair<Integer, Integer>> operatorArray) {
Widget widget = (Widget) info.getContent().getReplaceObject();
if (widget instanceof WScaleLayout) {
widget = ((CRBoundsWidget) ((WScaleLayout) widget).getWidget(0)).getWidget();
}
if (((WidgetInfo) info).isWaterMark()) {
WaterMark waterMark = (WaterMark) widget;
info.updateOldStr(waterMark.getWaterMark(), findStr);
waterMark.setWaterMark(ShowValueUtils.replaceAll(waterMark.getWaterMark(), findStr, replaceStr));
} else {
info.updateOldStr(widget.getWidgetName(), findStr);
ComponentType componentType = ComponentType.match(widget.getClass().getSimpleName());
if (componentType != null) {
componentType.setValue(info, findStr, replaceStr, operatorArray);
}
}
}
@Override
public String getInfoShowStr(Info info) {
return info.getContent().getOldShowStr();
}
@Override
public ArrayList<WidgetInfo> addFrmWidget2Array(ITContent content, Widget widget) {
return dealAbsoluteWidget(content, widget);
}
}

166
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/widget/SearchWidgetAction.java

@ -0,0 +1,166 @@
package com.fr.design.actions.replace.action.content.widget;
import com.fr.base.parameter.ParameterUI;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.action.content.cell.SearchCellAction;
import com.fr.design.actions.replace.action.content.component.SearchComponentAction;
import com.fr.design.actions.replace.info.CellInfo;
import com.fr.design.actions.replace.info.ComponentInfo;
import com.fr.design.actions.replace.info.WidgetInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.mainframe.JTemplate;
import com.fr.form.main.Form;
import com.fr.form.ui.Widget;
import com.fr.form.ui.container.WLayout;
import com.fr.form.ui.widget.CRBoundsWidget;
import com.fr.main.impl.WorkBook;
import com.fr.main.parameter.ReportParameterAttr;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.highlight.DefaultHighlight;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import com.fr.report.cell.cellattr.highlight.HighlightGroup;
import com.fr.report.cell.cellattr.highlight.WidgetHighlightAction;
import com.fr.stable.StringUtils;
import java.util.ArrayList;
/**
* 获取控件
* 目前获取位置单元格本身单元格条件属性内超链控件参数面板控件决策报表的组件
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-16
*/
public class SearchWidgetAction implements SearchAction {
ArrayList<WidgetInfo> widgetInfos;
public SearchWidgetAction(JTemplate jTemplate) {
setWidgetInfos(search4Infos(jTemplate));
}
@Override
public ArrayList<WidgetInfo> search4Infos(JTemplate jTemplate) {
ArrayList<WidgetInfo> widgetInfos = new ArrayList<>();
ITContent content = new ITContent();
content.setTemplateName(jTemplate.getTemplateName());
//这边拿SearchCellAction里的CellInfo来查找,由于在SearchCellAction里面已经考虑了决策报表和普通报表两种情况了,这边就不用再做区分
addCellWidget2Array(widgetInfos, jTemplate);
content.addTRL(jTemplate.getTemplateName());
if (jTemplate.getTarget() instanceof WorkBook) {
addWorkBookParaWidget2Array(content, widgetInfos, jTemplate);
} else if (jTemplate.getTarget() instanceof Form) {
addFrmWidget2Array(content, widgetInfos, jTemplate);
}
return widgetInfos;
}
private void addFrmWidget2Array(ITContent content, ArrayList<WidgetInfo> widgetInfos, JTemplate jTemplate) {
SearchComponentAction searchComponentAction = new SearchComponentAction(jTemplate);
for (ComponentInfo componentInfo : searchComponentAction.getComponentInfos()) {
FrmWidgetType frmWidgetType = FrmWidgetType.match(componentInfo.getContent().getReplaceObject().getClass().getSimpleName());
if (frmWidgetType != null) {
widgetInfos.addAll(frmWidgetType.addFrmWidget2Array(componentInfo.getContent(), (Widget) componentInfo.getContent().getReplaceObject()));
}
}
}
private void addCellWidget2Array(ArrayList<WidgetInfo> widgetInfos, JTemplate jTemplate) {
SearchCellAction searchCellAction = new SearchCellAction(jTemplate);
if (searchCellAction.getCellInfos().size() > 0) {
for (CellInfo cellInfo : searchCellAction.getCellInfos()) {
//单元格本身的控件
addWidget2ArrayFromCell(widgetInfos, cellInfo);
//单元格条件属性中超链内的控件
addWidget2ArrayFromCellHighlight(widgetInfos, cellInfo);
}
}
}
private void addWidget2ArrayFromCellHighlight(ArrayList<WidgetInfo> widgetInfos, CellInfo cellInfo) {
if (cellInfo.getContent().getReplaceObject() instanceof TemplateCellElement) {
TemplateCellElement cell = (TemplateCellElement) cellInfo.getContent().getReplaceObject();
if (cell.getHighlightGroup() != null) {
HighlightGroup highlightGroup = cell.getHighlightGroup();
dealWithHighlightGroup4Widget(highlightGroup, widgetInfos, cellInfo);
}
}
}
private void dealWithHighlightGroup4Widget(HighlightGroup highlightGroup, ArrayList<WidgetInfo> widgetInfos, CellInfo cellInfo) {
for (int i = 0; i < highlightGroup.size(); i++) {
for (int j = 0; j < ((DefaultHighlight) highlightGroup.getHighlight(i)).actionCount(); j++) {
HighlightAction highlightAction = ((DefaultHighlight) highlightGroup.getHighlight(i)).getHighlightAction(j);
//处理HighlightAction
if (isHighlightWidgetExist(highlightAction)) {
ITContent content = cellInfo.getContent().copy();
content.addOtherPos("条件属性-超链控件");
content.setReplaceObject(((WidgetHighlightAction) highlightAction).getWidget());
content.setShowObject(cellInfo.getContent().getReplaceObject());
widgetInfos.add(new WidgetInfo(content));
}
}
}
}
private boolean isHighlightWidgetExist(HighlightAction highlightAction) {
return highlightAction instanceof WidgetHighlightAction && ((WidgetHighlightAction) highlightAction).getWidget() != null;
}
private void addWidget2ArrayFromCell(ArrayList<WidgetInfo> widgetInfos, CellInfo cellInfo) {
if (cellInfo.getContent().getReplaceObject() instanceof TemplateCellElement
&& ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget() != null) {
// 单元格内有控件
ITContent newContent = cellInfo.getContent().copy();
Widget widget = ((TemplateCellElement) cellInfo.getContent().getReplaceObject()).getWidget();
newContent.addOtherPos("控件");
if (!StringUtils.isEmpty(widget.getWidgetName())) {
newContent.addOtherPos(widget.getWidgetName());
}
newContent.getContentObject().setWidget(widget);
newContent.setReplaceObject(widget);
newContent.setShowObject(cellInfo.getContent().getReplaceObject());
widgetInfos.add(new WidgetInfo(newContent));
}
}
private void addWorkBookParaWidget2Array(ITContent content, ArrayList<WidgetInfo> widgetInfos, JTemplate jTemplate) {
WorkBook workBook = (WorkBook) jTemplate.getTarget();
ReportParameterAttr reportParameterAttr = workBook.getReportParameterAttr();
if (reportParameterAttr != null && reportParameterAttr.getParameterUI() != null) {
ParameterUI parameterUI = reportParameterAttr.getParameterUI();
Widget[] widgets = parameterUI.getAllWidgets();
for (Widget widget : widgets) {
ITContent newContent = content.copy();
newContent.addOtherPos("参数面板控件-" + widget.getWidgetName());
newContent.setReplaceObject(widget);
newContent.getContentObject().setWidget(widget);
newContent.setShowObject("参数面板控件");
widgetInfos.add(new WidgetInfo(newContent));
}
}
}
/**
* 是否为空
* @return 为空返回true
*/
public boolean isWidgetInfosEmpty() {
return widgetInfos.isEmpty();
}
public ArrayList<WidgetInfo> getWidgetInfos() {
return widgetInfos;
}
public void setWidgetInfos(ArrayList<WidgetInfo> widgetInfos) {
this.widgetInfos = widgetInfos;
}
}
Loading…
Cancel
Save