Browse Source

REPORT-75998 搜索公式——控件

feature/x
Destiny.Lin 2 years ago
parent
commit
b12c7f591f
  1. 79
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java
  2. 114
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java
  3. 22
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchCommonWidgetFormulaAction.java
  4. 46
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDateEditorFormulaAction.java
  5. 39
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java
  6. 75
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java
  7. 108
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java

79
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/AbstractSearchWidgetFormulaAction.java

@ -0,0 +1,79 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.base.Formula;
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.WidgetInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.form.event.Listener;
import com.fr.form.ui.DataControl;
import com.fr.form.ui.Widget;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public abstract class AbstractSearchWidgetFormulaAction implements SearchWidgetFormula {
/**
* 用于处理控件共有的事件以及控件值中的公式
*
* @param content
* @param formulaInfos
*/
@Override
public void searchFormulaFromWidget(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
Widget widget = (Widget) content.getReplaceObject();
//控件值中的公式
searchFormulaFromWidgetValue(content,formulaInfos);
for (int i = 0 ; i < widget.getListenerSize() ;i++){
Listener listener = widget.getListener(i);
ITContent newContent = content.copy();
newContent.getContentObject().setListener(listener);
//控件的事件可以使用的JS有五种,这边统一交给Highlight那边判断超级链接并进行处理
SearchJSHighlightAction SJSA = new SearchJSHighlightAction();
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Event"));
SJSA.searchJSFormulaFromOther(formulaInfos,newContent, listener.getAction());
}
}
/**
* 判断一下控件有没有控件值接口如果有再判断一下控件值是否已经设置并且是公式
* @param content
* @param formulaInfos
*/
@Override
public void searchFormulaFromWidgetValue(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
if(content.getReplaceObject() instanceof DataControl){
if (((DataControl) content.getReplaceObject()).getWidgetValue() != null
&& ((DataControl) content.getReplaceObject()).getWidgetValue().getValue() instanceof Formula){
ITContent newContent = content.copy();
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Widget_Value"));
newContent.setReplaceObject(((DataControl)content.getReplaceObject()).getWidgetValue().getValue());
formulaInfos.add(new FormulaInfo(newContent));
}
}
}
@Override
public void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList<FormulaInfo> formulaInfos) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
}

114
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/DictionaryType.java

@ -0,0 +1,114 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.data.Dictionary;
import com.fr.data.impl.DatabaseDictionary;
import com.fr.data.impl.FormulaDictionary;
import com.fr.data.impl.TableDataDictionary;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
/**
* 数据字典处理
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-22
*/
enum DictionaryType implements DictionaryAction {
/**
* 数据字典公式
*/
FORMULA_DICTIONARY("FormulaDictionary") {
@Override
public void searchFormulaFromDictionary(ITContent content, ArrayList<FormulaInfo> formulaInfos, Dictionary dictionary) {
//显示值
if (((FormulaDictionary) dictionary).getExcuteFormula() != null) {
ITContent excuteContent = content.copy();
excuteContent.setReplaceObject(dictionary);
excuteContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"),
Toolkit.i18nText("Fine-Design_Basic_Formula"),
Toolkit.i18nText("Fine-Design_Basic_Display_Value")
);
formulaInfos.add(new FormulaInfo(excuteContent));
}
//实际值
if (((FormulaDictionary) dictionary).getProduceFormula() != null) {
ITContent produceContent = content.copy();
produceContent.setReplaceObject(dictionary);
produceContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"),
Toolkit.i18nText("Fine-Design_Basic_Formula"),
Toolkit.i18nText("Fine-Design_Basic_Actual_Value")
);
formulaInfos.add(new FormulaInfo(produceContent));
}
}
},
/**
* 数据查询
*/
TABLE_DATA_DICTIONARY("TableDataDictionary") {
@Override
public void searchFormulaFromDictionary(ITContent content, ArrayList<FormulaInfo> formulaInfos, Dictionary dictionary) {
if (((TableDataDictionary) dictionary).getFormula() != null) {
ITContent newContent = content.copy();
newContent.setReplaceObject(((TableDataDictionary) dictionary).getFormula());
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"),
Toolkit.i18nText("Fine-Design_Basic_Dic_Data_Query"),
Toolkit.i18nText("Fine-Design_Basic_Display_Value")
);
formulaInfos.add(new FormulaInfo(newContent));
}
}
},
/**
* 数据库表
*/
DATABASE_DICTIONARY("DatabaseDictionary") {
@Override
public void searchFormulaFromDictionary(ITContent content, ArrayList<FormulaInfo> formulaInfos, Dictionary dictionary) {
if (((DatabaseDictionary) dictionary).getFormula() != null) {
ITContent newContent = content.copy();
newContent.setReplaceObject(((DatabaseDictionary) dictionary).getFormula());
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"),
Toolkit.i18nText("Fine-Design_Basic_Datasource_From_Database"),
Toolkit.i18nText("Fine-Design_Basic_Display_Value")
);
formulaInfos.add(new FormulaInfo(newContent));
}
}
};
String name;
DictionaryType(String name) {
this.name = name;
}
/**
* 匹配
*
* @param name
* @return
*/
@Nullable
public static DictionaryType match(String name) {
DictionaryType[] values = DictionaryType.values();
for (DictionaryType value : values) {
if (value.name.equals(name)) {
return value;
}
}
return null;
}
}

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

@ -0,0 +1,22 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import java.util.ArrayList;
/**
* 控件中的公式只会在事件控件值
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public class SearchCommonWidgetFormulaAction extends AbstractSearchWidgetFormulaAction {
@Override
public void searchFormulaFromWidget(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
//每个事件的事件、控件值两部分的公式获取逻辑是一样的,直接调用即可,各自其他地方的公式就需要特殊处理
super.searchFormulaFromWidget(content, formulaInfos);
}
}

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

@ -0,0 +1,46 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.form.ui.DateEditor;
import org.gradle.internal.impldep.org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
/**
* 日期类型控件特殊处理
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-26
*/
public class SearchDateEditorFormulaAction extends AbstractSearchWidgetFormulaAction {
@Override
public void searchFormulaFromWidget(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
super.searchFormulaFromWidget(content, formulaInfos);
dealStratDateFormula(content, formulaInfos);
dealEndDateFormula(content, formulaInfos);
}
private void dealEndDateFormula(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
DateEditor dateEditor = (DateEditor) content.getReplaceObject();
if (dateEditor.getEndDateFM() != null && !StringUtils.isEmpty(dateEditor.getEndDateFM().getContent())) {
ITContent newContent = content.copy();
newContent.setReplaceObject(dateEditor.getEndDateFM());
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_End_Time"));
formulaInfos.add(new FormulaInfo(newContent));
}
}
private void dealStratDateFormula(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
DateEditor dateEditor = (DateEditor) content.getReplaceObject();
if (dateEditor.getStartDateFM() != null && !StringUtils.isEmpty(dateEditor.getStartDateFM().getContent())) {
ITContent newContent = content.copy();
newContent.setReplaceObject(dateEditor.getStartDateFM());
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Start_Time"));
formulaInfos.add(new FormulaInfo(newContent));
}
}
}

39
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchDictFormulaAction.java

@ -0,0 +1,39 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.form.ui.DictionaryContainer;
import java.util.ArrayList;
/**
* 控件中的公式会存在 控件值 非树形结构数据字典 事件
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-20
*/
public class SearchDictFormulaAction extends AbstractSearchWidgetFormulaAction {
@Override
public void searchFormulaFromWidget(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
//控件值、事件
super.searchFormulaFromWidget(content, formulaInfos);
//数据字典
searchFormulaFromDict(content, formulaInfos);
}
private void searchFormulaFromDict(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
if (content.getReplaceObject() instanceof DictionaryContainer) {
if (((DictionaryContainer) content.getReplaceObject()).getDictionary() != null) {
DictionaryType type = DictionaryType.match(((DictionaryContainer) content.getReplaceObject()).getDictionary().getClass().getSimpleName());
if (type != null) {
type.searchFormulaFromDictionary(content, formulaInfos, ((DictionaryContainer) content.getReplaceObject()).getDictionary());
}
}
}
}
}

75
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchTreeEditorFormulaAction.java

@ -0,0 +1,75 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.data.impl.DatabaseDictionary;
import com.fr.data.impl.FormulaDisplayDictionary;
import com.fr.data.impl.TableDataDictionary;
import com.fr.data.impl.TreeNodeAttr;
import com.fr.data.impl.TreeNodeWrapper;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.form.ui.TreeEditor;
import com.fr.form.ui.tree.LayerConfig;
import com.fr.stable.StringUtils;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-22
*/
public class SearchTreeEditorFormulaAction extends AbstractSearchWidgetFormulaAction {
@Override
public void searchFormulaFromWidget(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
//控件值、事件
super.searchFormulaFromWidget(content, formulaInfos);
//树形结构数据字典
SearchFormulaFromModelConfig(content, formulaInfos);
}
private void SearchFormulaFromModelConfig(ITContent content, ArrayList<FormulaInfo> formulaInfos) {
if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() != null) {
//LayerConfig[] 急速分层构建
//TreeNodeWrapper 普通分层构建
if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() instanceof LayerConfig[]) {
LayerConfig[] layerConfigs = (LayerConfig[]) ((TreeEditor) content.getReplaceObject()).getBuildModelConfig();
dealWithLayerConfigs(layerConfigs, content, formulaInfos);
} else if (((TreeEditor) content.getReplaceObject()).getBuildModelConfig() instanceof TreeNodeWrapper) {
TreeNodeWrapper wrapper = (TreeNodeWrapper) ((TreeEditor) content.getReplaceObject()).getBuildModelConfig();
dealWithTreeNodeWrapper(wrapper, content, formulaInfos);
}
}
}
private void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, ITContent content, ArrayList<FormulaInfo> formulaInfos) {
for (TreeNodeAttr attr : wrapper.getTreeNodeAttrs()) {
if (((FormulaDisplayDictionary) attr.getDictionary()).getFormula() != null
&& !StringUtils.isEmpty(((FormulaDisplayDictionary) attr.getDictionary()).getFormula().getContent())) {
ITContent newContent = content.copy();
newContent.setReplaceObject(((FormulaDisplayDictionary) attr.getDictionary()).getFormula());
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"),
Toolkit.i18nText("Fine-Design_Basic_Layer_Build")
);
formulaInfos.add(new FormulaInfo(newContent));
}
}
}
private void dealWithLayerConfigs(LayerConfig[] layerConfigs, ITContent content, ArrayList<FormulaInfo> formulaInfos) {
for (LayerConfig layerConfig : layerConfigs) {
if (layerConfig.getDictionary().getFormula() != null
&& !StringUtils.isEmpty(layerConfig.getDictionary().getFormula().getContent())) {
ITContent newContent = content.copy();
newContent.setReplaceObject(layerConfig.getDictionary().getFormula());
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_DS_Dictionary"),
Toolkit.i18nText("Fine-Design_Basic_DataTable_Build")
);
formulaInfos.add(new FormulaInfo(newContent));
}
}
}
}

108
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/widget/SearchWidgetFormulaAction.java

@ -0,0 +1,108 @@
package com.fr.design.actions.replace.action.content.formula.widget;
import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.WidgetInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.mainframe.JTemplate;
import com.fr.form.ui.Widget;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 查找控件内的公式
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public class SearchWidgetFormulaAction extends AbstractSearchWidgetFormulaAction {
public static HashMap<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("DateEditor",new SearchDateEditorFormulaAction());
/**
* 控件值事件非树形数据字典
*/
widgetHashMap.put("ComboBox",new SearchDictFormulaAction());
widgetHashMap.put("RadioGroup",new SearchDictFormulaAction());
widgetHashMap.put("CheckBoxGroup",new SearchDictFormulaAction());
widgetHashMap.put("ComboCheckBox",new SearchDictFormulaAction());
widgetHashMap.put("PageFixedRowComboBox",new SearchDictFormulaAction());
/**
* 控件值事件树形数据字典
*/
widgetHashMap.put("TreeComboBoxEditor",new SearchTreeEditorFormulaAction());
widgetHashMap.put("TreeEditor",new SearchTreeEditorFormulaAction());
}
public SearchWidgetFormulaAction(JTemplate jTemplate,ArrayList<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);
}
}
return formulaInfos;
}
@Override
public void searchFormulaFromWidgetInfos(WidgetInfo widgetInfo, ArrayList<FormulaInfo> formulaInfos) {
if (widgetInfo.isReplaceObjectExist()){
searchFormulaFromWidgetValue(widgetInfo,formulaInfos);
}
}
private void searchFormulaFromWidgetValue(WidgetInfo widgetInfo, ArrayList<FormulaInfo> formulaInfos) {
Widget widget = (Widget)widgetInfo.getContent().getReplaceObject();
if (widgetHashMap.containsKey(widget.getClass().getSimpleName())){
SearchWidgetFormula searchWidgetFormula = widgetHashMap.get(widget.getClass().getSimpleName());
ITContent content = widgetInfo.getContent().copy();
searchWidgetFormula.searchFormulaFromWidget(content,formulaInfos);
}
}
}
Loading…
Cancel
Save