Browse Source

REPORT-75998 搜索公式——超链、高亮

feature/x
Destiny.Lin 2 years ago
parent
commit
9da2648551
  1. 31
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/AbstractSearchHighlightAction.java
  2. 37
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaAction.java
  3. 25
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchCommonConditionAction.java
  4. 26
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java
  5. 36
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java
  6. 25
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchObjectConditionAction.java
  7. 42
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/AbstractSearchJSFormulaAction.java
  8. 97
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java
  9. 49
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchExportJSFormulaAction.java
  10. 105
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java
  11. 30
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchMobileHyperlinkFormulaAction.java

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

@ -0,0 +1,31 @@
package com.fr.design.actions.replace.action.content.formula.highlight;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.mainframe.JTemplate;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public abstract class AbstractSearchHighlightAction implements SearchHighlightFormula {
@Override
public void dealWithHighlightAction(ITContent content, ArrayList<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
}
@Override
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) {
}
@Override
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) {
return null;
}
}

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

@ -0,0 +1,37 @@
package com.fr.design.actions.replace.action.content.formula.highlight;
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 处理条件属性中各种属性的公式超级链接控件...
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-18
*/
public class SearchHighlightFormulaAction extends AbstractSearchHighlightAction{
public static HashMap<String, SearchHighlightFormula> highlightHashMap = new HashMap<>();
static {
//这边控件类型不做处理,在SearchWidgetFormulaAction统一处理即可
//条件属性-超级链接
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())){
SearchHighlightFormula searchHighlight = highlightHashMap.get(highlightAction.getClass().getSimpleName());
searchHighlight.dealWithHighlightAction(content,formulaInfos,highlightAction);
}
}
}

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

@ -0,0 +1,25 @@
package com.fr.design.actions.replace.action.content.formula.highlight.condition;
import com.fr.base.Formula;
import com.fr.data.condition.CommonCondition;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.general.data.Condition;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-17
*/
public class SearchCommonConditionAction implements SearchConditionFormula {
@Override
public void searchFormulaFromCondition(ArrayList<FormulaInfo> formulaInfos, ITContent content, Condition condition) {
if (((CommonCondition)condition).getCompare().getValue() != null && ((CommonCondition)condition).getCompare().getValue() instanceof Formula){
ITContent newContent =content.copy();
newContent.setReplaceObject(((CommonCondition) condition).getCompare());
formulaInfos.add(new FormulaInfo(newContent));
}
}
}

26
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchFormulaConditionAction.java

@ -0,0 +1,26 @@
package com.fr.design.actions.replace.action.content.formula.highlight.condition;
import com.fr.data.condition.FormulaCondition;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.general.data.Condition;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-17
*/
public class SearchFormulaConditionAction implements SearchConditionFormula {
@Override
public void searchFormulaFromCondition(ArrayList<FormulaInfo> formulaInfos, ITContent content, Condition condition) {
if (((FormulaCondition)(condition)).getFormula() != null){
ITContent newContent = content.copy();
newContent.setReplaceObject(condition);
formulaInfos.add(new FormulaInfo(newContent));
}
}
}

36
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/condition/SearchListConditionAction.java

@ -0,0 +1,36 @@
package com.fr.design.actions.replace.action.content.formula.highlight.condition;
import com.fr.data.condition.CommonCondition;
import com.fr.data.condition.FormulaCondition;
import com.fr.data.condition.ListCondition;
import com.fr.data.condition.ObjectCondition;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.general.data.Condition;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-17
*/
public class SearchListConditionAction implements SearchConditionFormula {
@Override
public void searchFormulaFromCondition(ArrayList<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){
SearchFormulaConditionAction formulaConditionAction = new SearchFormulaConditionAction();
formulaConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition);
} else if (joinCondition instanceof ObjectCondition){
SearchObjectConditionAction objectConditionAction = new SearchObjectConditionAction();
objectConditionAction.searchFormulaFromCondition(formulaInfos, content, joinCondition);
}
}
}
}

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

@ -0,0 +1,25 @@
package com.fr.design.actions.replace.action.content.formula.highlight.condition;
import com.fr.base.Formula;
import com.fr.data.condition.ObjectCondition;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.general.data.Condition;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-18
*/
public class SearchObjectConditionAction implements SearchConditionFormula {
@Override
public void searchFormulaFromCondition(ArrayList<FormulaInfo> formulaInfos, ITContent content, Condition condition) {
if (((ObjectCondition)condition).getCompare().getValue() != null && ((ObjectCondition)condition).getCompare().getValue() instanceof Formula){
ITContent newContent =content.copy();
newContent.setReplaceObject(((ObjectCondition) condition).getCompare());
formulaInfos.add(new FormulaInfo(newContent));
}
}
}

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

@ -0,0 +1,42 @@
package com.fr.design.actions.replace.action.content.formula.highlight.javascript;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.mainframe.JTemplate;
import com.fr.js.JavaScript;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public abstract class AbstractSearchJSFormulaAction implements SearchJSFormula {
@Override
public void searchJSFormulaFromOther(ArrayList<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) {
}
}

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

@ -0,0 +1,97 @@
package com.fr.design.actions.replace.action.content.formula.highlight.javascript;
import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchCommonConditionAction;
import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchConditionFormula;
import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchFormulaConditionAction;
import com.fr.design.actions.replace.action.content.formula.highlight.condition.SearchListConditionAction;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.general.data.Condition;
import com.fr.js.Commit2DBJavaScript;
import com.fr.js.JavaScript;
import com.fr.write.DBManipulation;
import com.fr.write.DMLConfigJob;
import com.fr.write.config.DMLConfig;
import java.util.ArrayList;
import java.util.HashMap;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public class SearchCommit2DBJSFormulaAction extends AbstractSearchJSFormulaAction{
public static HashMap<String, SearchConditionFormula> conditionHashMap = new HashMap<>();
static {
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()){
//处理回调函数——这里单独摘出来是因为这边逻辑比较复杂,提交事件会再循环产生一个新的DBManipulation,后续统一处理
dealWithCallBack(formulaInfos,content,((Commit2DBJavaScript)javaScript));
//处理DBManipulation
for (int i = 0 ; i < ((Commit2DBJavaScript)javaScript).getDBManipulation().size() ; i++){
dealWithDBManipulation(formulaInfos,content, (DBManipulation) ((Commit2DBJavaScript)javaScript).getDBManipulation().get(i));
}
}
}
private void dealWithDBManipulation(ArrayList<FormulaInfo> formulaInfos, ITContent content, DBManipulation dbManipulation) {
DMLConfig dmlConfig = dbManipulation.getDmlConfig();
//处理提交条件中的公式
dealWithCommit2DBCondition(formulaInfos,content,dmlConfig);
//处理DBManipulation
dealWithSubmitJob(formulaInfos,content,dmlConfig);
}
private void dealWithSubmitJob(ArrayList<FormulaInfo> formulaInfos, ITContent content, DMLConfig dmlConfig) {
for (int i = 0 ;i < dmlConfig.getSubmitJobCount() ; i ++){
//这边自定义事件不需要处理,只处理提交事件
if (dmlConfig.getSubmitJob(i) instanceof DMLConfigJob){
ITContent newContent = content.copy();
newContent.addOtherPos(
Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"),
Toolkit.i18nText("Fine-Design_Basic_Write_Submit_Event")
);
dealWithDBManipulation(formulaInfos,newContent,(((DMLConfigJob)dmlConfig.getSubmitJob(i)).getDBManipulation()));
}
}
}
private void dealWithCallBack(ArrayList<FormulaInfo> formulaInfos, ITContent content, Commit2DBJavaScript javaScript) {
if (javaScript.getCallBack() != null){
SearchJSHighlightAction SJSA = new SearchJSHighlightAction();
ITContent newContent = content.copy();
newContent.addOtherPos(
Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"),
Toolkit.i18nText("Fine-Design_Basic_Set_Callback_Function")
);
SJSA.searchJSFormulaFromOther(formulaInfos,newContent, javaScript.getCallBack());
}
}
private void dealWithCommit2DBCondition(ArrayList<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();
newContent.addOtherPos(
Toolkit.i18nText("Fine-Engine_Report_JavaScript_Commit_To_Database"),
Toolkit.i18nText("Fine-Design_Basic_Submit_Condition")
);
searchCondition.searchFormulaFromCondition(formulaInfos, newContent,condition);
}
}
}

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

@ -0,0 +1,49 @@
package com.fr.design.actions.replace.action.content.formula.highlight.javascript;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.js.ExportJavaScript;
import com.fr.js.JavaScript;
import com.fr.js.SingleJavaScript;
import java.util.ArrayList;
import java.util.List;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public class SearchExportJSFormulaAction extends AbstractSearchJSFormulaAction{
@Override
public void searchJSFormulaFromOther(ArrayList<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
//如果导出当前模板,可以存公式的地方就是命名方式-自定义
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);
}
}
}
}
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();
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));
}
}
}

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

@ -0,0 +1,105 @@
package com.fr.design.actions.replace.action.content.formula.highlight.javascript;
import com.fr.base.Formula;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.js.Commit2DBJavaScript;
import com.fr.js.JavaScript;
import com.fr.js.NameJavaScriptGroup;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction;
import com.fr.stable.ParameterProvider;
import java.util.ArrayList;
import java.util.HashMap;
/**
* 处理条件属性中各种超级链接内的公式也包括事件中的各种超链
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-18
*/
public class SearchJSHighlightAction extends AbstractSearchJSFormulaAction {
//需要特殊处理的JS类型
public static HashMap<String, SearchJSFormula> javaScriptHashMap = new HashMap<>();
public static HashMap<Class,SearchJSFormula> hashMap = new HashMap<>();
static {
hashMap.put(Commit2DBJavaScript.class, new SearchCommit2DBJSFormulaAction());
}
static {
//控件事件里面需要特殊处理的类型
//EmailJavaScript(这个暂时不做处理)
//ExportJavaScript
//MobilePopupHyperlink
//Commit2DBJavaScript
//单元格条件属性里面需要处理的类型
//WebHyperlink——只有参数可以放公式,不需要特殊处理
//ReportletHyperlink——只有参数可以放公式,不需要特殊处理
//EmailJavaScript(这个暂时不做处理)
//ParameterJavaScript——只有参数可以放公式,不需要特殊处理
//JavaScriptImpl——只有参数可以放公式,不需要特殊处理
//MobilePopupHyperlink
//ChartHyperPoplink
//ChartHyperRelateCellLink
//ChartHyperRelateFloatLink
javaScriptHashMap.put("Commit2DBJavaScript",new SearchCommit2DBJSFormulaAction());
javaScriptHashMap.put("ExportJavaScript",new SearchExportJSFormulaAction());
javaScriptHashMap.put("MobilePopupHyperlink",new SearchMobileHyperlinkFormulaAction());
}
@Override
public void dealWithHighlightAction( ITContent content, ArrayList<FormulaInfo> formulaInfos,HighlightAction highlightAction) {
NameJavaScriptGroup nameJavaScriptGroup = ((HyperlinkHighlightAction)highlightAction).getHperlink();
if (nameJavaScriptGroup != null){
for (int i = 0 ; i < nameJavaScriptGroup.size() ; i ++){
//单元格条件属性-属性-超级链接里面参数的公式统一判断获取一下
ITContent newContent =content.copy();
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_Cell"),
Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"),
Toolkit.i18nText("Fine-Design_Report_Hyperlink"),
Toolkit.i18nText("Fine-Design_Basic_Parameters"));
addFormulaInfosFromJSPara(formulaInfos,newContent,nameJavaScriptGroup.getNameHyperlink(i).getJavaScript());
}
}
}
/**
* 仅仅获取JS中的参数中的公式
* @param formulaInfos
* @param content
* @param javaScript
*/
@Override
public void addFormulaInfosFromJSPara(ArrayList<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
if (javaScript.getParameters() != null){
for (ParameterProvider provider : javaScript.getParameters()){
if (provider.getValue() instanceof Formula){
ITContent newContent = content.copy();
newContent.setReplaceObject(provider);
formulaInfos.add(new FormulaInfo(newContent));
}
}
}
}
/**
* 对各种类型的JS分别处理获取公式
* @param formulaInfos
* @param content
* @param javaScript
*/
@Override
public void searchJSFormulaFromOther(ArrayList<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
//获取JS中的参数中的公式
addFormulaInfosFromJSPara(formulaInfos, content, javaScript);
//这里面类型比较多,但是一部分不用处理——公式可能存在的地方只有参数,这部分在addFormulaInfosFromJSPara中就已经把公式拿完了
if (javaScriptHashMap.containsKey(javaScript.getClass().getSimpleName())){
SearchJSFormula javaScriptFormula = javaScriptHashMap.get(javaScript.getClass().getSimpleName());
javaScriptFormula.searchJSFormulaFromOther(formulaInfos,content,javaScript);
}
}
}

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

@ -0,0 +1,30 @@
package com.fr.design.actions.replace.action.content.formula.highlight.javascript;
import com.fr.base.Formula;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.js.JavaScript;
import com.fr.js.MobilePopupHyperlink;
import java.util.ArrayList;
/**
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-08-19
*/
public class SearchMobileHyperlinkFormulaAction extends AbstractSearchJSFormulaAction{
@Override
public void searchJSFormulaFromOther(ArrayList<FormulaInfo> formulaInfos, ITContent content, JavaScript javaScript) {
if (((MobilePopupHyperlink)javaScript).getPopupText() instanceof Formula){
ITContent newContent = content.copy();
newContent.setReplaceObject(((MobilePopupHyperlink)javaScript).getPopupText());
newContent.addOtherPos(
Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup"),
Toolkit.i18nText("FR-Plugin-Designer_Mobile_Popup_Text")
);
formulaInfos.add(new FormulaInfo(newContent));
}
}
}
Loading…
Cancel
Save