Destiny.Lin
2 years ago
7 changed files with 459 additions and 0 deletions
@ -0,0 +1,31 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.data; |
||||||
|
|
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.Info; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-08-26 |
||||||
|
*/ |
||||||
|
public abstract class AbstractSearchDataFormulaAction implements SearchDataFormula{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchFormulaFromData(JTemplate jTemplate,ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,124 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.data; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.TableData; |
||||||
|
import com.fr.data.impl.*; |
||||||
|
import com.fr.data.impl.storeproc.StoreProcedure; |
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.stable.ParameterProvider; |
||||||
|
import com.fr.stable.StringUtils; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* 分别对不同类型的数据集进行获取公式处理 |
||||||
|
* 暂不支持ClassTableData(用户自定义数据集)、FileTableData(用户自定义数据集),EmbeddedTableData(无公式) |
||||||
|
* |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-08-26 |
||||||
|
*/ |
||||||
|
public enum DataType { |
||||||
|
/** |
||||||
|
* 数据库查询 |
||||||
|
*/ |
||||||
|
DB_TABLE_DATA("DBTableData"){ |
||||||
|
@Override |
||||||
|
public void searchFormula(TableData tableData, ITContent content, ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
if (((DBTableData)tableData).getParameters() != null){ |
||||||
|
for (ParameterProvider provider : ((DBTableData)tableData).getParameters()){ |
||||||
|
dealProvider(provider,content,fomulaInfos); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
}, |
||||||
|
/** |
||||||
|
* 存储过程 |
||||||
|
*/ |
||||||
|
STORE_PROCEDURE("StoreProcedure"){ |
||||||
|
@Override |
||||||
|
public void searchFormula(TableData tableData, ITContent content, ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
if (((StoreProcedure)tableData).getParameters() != null){ |
||||||
|
for (ParameterProvider provider : ((StoreProcedure)tableData).getParameters()){ |
||||||
|
dealProvider(provider,content,fomulaInfos); |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 关联数据集 |
||||||
|
*/ |
||||||
|
CONDITION_TABLE_DATA("ConditionTableData"){ |
||||||
|
@Override |
||||||
|
public void searchFormula(TableData tableData, ITContent content, ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
if (((ConditionTableData)tableData).getDefineParameters() != null){ |
||||||
|
for (ParameterProvider provider : ((ConditionTableData)tableData).getDefineParameters()){ |
||||||
|
dealProvider(provider,content,fomulaInfos); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 树数据集 |
||||||
|
*/ |
||||||
|
RECURSION_TABLE_DATA("RecursionTableData"){ |
||||||
|
@Override |
||||||
|
public void searchFormula(TableData tableData, ITContent content, ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
if (((RecursionTableData)tableData).getParameters() != null){ |
||||||
|
for (ParameterProvider provider : ((RecursionTableData)tableData).getParameters()){ |
||||||
|
dealProvider(provider,content,fomulaInfos); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
String name; |
||||||
|
DataType(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 处理参数 |
||||||
|
* @param provider |
||||||
|
* @param content |
||||||
|
* @param formulaInfos |
||||||
|
*/ |
||||||
|
public void dealProvider(ParameterProvider provider, ITContent content, ArrayList<FormulaInfo> formulaInfos) { |
||||||
|
if (provider .getValue()instanceof Formula && !StringUtils.isEmpty((((Formula) provider.getValue())).getContent() )){ |
||||||
|
ITContent newContent = content.copy(); |
||||||
|
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter")); |
||||||
|
newContent.setReplaceObject(provider); |
||||||
|
formulaInfos.add(new FormulaInfo(newContent)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 匹配 |
||||||
|
* @param name |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static DataType match(String name){ |
||||||
|
DataType[] values = DataType.values(); |
||||||
|
for (DataType value : values) { |
||||||
|
if(value.name.equals(name)){ |
||||||
|
return value; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 从数据集中获取公式 |
||||||
|
* @param tableData |
||||||
|
* @param content |
||||||
|
* @param fomulaInfos |
||||||
|
*/ |
||||||
|
void searchFormula(TableData tableData, ITContent content , ArrayList<FormulaInfo> fomulaInfos){} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,75 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.data; |
||||||
|
|
||||||
|
import com.fr.data.TableDataSource; |
||||||
|
import com.fr.data.impl.DBTableData; |
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.SQLInfo; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.data.tabledata.wrapper.TableDataFactory; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
import com.fr.file.TableDataConfig; |
||||||
|
import com.fr.main.impl.WorkBook; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Iterator; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-08-26 |
||||||
|
*/ |
||||||
|
public class SearchDataFormulaAction extends AbstractSearchDataFormulaAction{ |
||||||
|
|
||||||
|
public SearchDataFormulaAction(JTemplate jTemplate, ArrayList<FormulaInfo> fomulaInfos){ |
||||||
|
searchFormulaFromData(jTemplate,fomulaInfos); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void searchFormulaFromData(JTemplate jTemplate, ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
|
||||||
|
//模板数据集
|
||||||
|
dealTemplateData(jTemplate,fomulaInfos); |
||||||
|
|
||||||
|
//服务器数据集
|
||||||
|
dealServerData(fomulaInfos); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
private void dealServerData(ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
TableDataConfig tableDataConfig = TableDataConfig.getInstance(); |
||||||
|
String[] nameArray = TableDataFactory.getSortOfChineseNameOfServerData(tableDataConfig); |
||||||
|
for (String dataName : nameArray) { |
||||||
|
ITContent content = new ITContent(); |
||||||
|
content.addOtherPos( |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData"), |
||||||
|
dataName |
||||||
|
); |
||||||
|
content.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Server_TableData")); |
||||||
|
DataType dataType = DataType.match(tableDataConfig.getTableData(dataName).getClass().getSimpleName()); |
||||||
|
if (dataType != null){ |
||||||
|
dataType.searchFormula(tableDataConfig.getTableData(dataName),content,fomulaInfos); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void dealTemplateData(JTemplate jTemplate, ArrayList<FormulaInfo> fomulaInfos) { |
||||||
|
if (jTemplate.getTarget() instanceof TableDataSource){ |
||||||
|
TableDataSource source = (TableDataSource) jTemplate.getTarget(); |
||||||
|
Iterator dataIterator = source.getTableDataNameIterator(); |
||||||
|
while (dataIterator.hasNext()){ |
||||||
|
String dataName = (String) dataIterator.next(); |
||||||
|
ITContent content = new ITContent(); |
||||||
|
content.setTemplateName(jTemplate.getTemplateName()); |
||||||
|
content.addOtherPos( |
||||||
|
Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData"), |
||||||
|
dataName |
||||||
|
); |
||||||
|
content.setShowObject(Toolkit.i18nText("Fine-Design_Basic_DS_Report_TableData")); |
||||||
|
DataType dataType = DataType.match(source.getTableData(dataName).getClass().getSimpleName()); |
||||||
|
if (dataType != null){ |
||||||
|
dataType.searchFormula(source.getTableData(dataName),content,fomulaInfos); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.floatelement; |
||||||
|
|
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.Info; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-09-12 |
||||||
|
*/ |
||||||
|
public abstract class AbstractSearchFloatFormula implements SearchFloatFormula{ |
||||||
|
@Override |
||||||
|
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) { |
||||||
|
return new ArrayList<>(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
@ -0,0 +1,111 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.floatelement; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.chart.chartattr.ChartCollection; |
||||||
|
import com.fr.design.actions.replace.action.content.floatelement.SearchFloatAction; |
||||||
|
import com.fr.design.actions.replace.action.content.formula.FormulaReplaceObject; |
||||||
|
import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; |
||||||
|
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction; |
||||||
|
import com.fr.design.actions.replace.info.FloatInfo; |
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
import com.fr.js.NameJavaScriptGroup; |
||||||
|
import com.fr.report.cell.CellElement; |
||||||
|
import com.fr.report.cell.FloatElement; |
||||||
|
import org.jetbrains.annotations.Nullable; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-09-12 |
||||||
|
*/ |
||||||
|
public class SearchFloatFormulaAction extends AbstractSearchFloatFormula { |
||||||
|
|
||||||
|
public SearchFloatFormulaAction(JTemplate jTemplate, ArrayList<FormulaInfo> formulaInfos) { |
||||||
|
SearchFloatAction searchFloatAction = new SearchFloatAction(jTemplate); |
||||||
|
for (FloatInfo floatInfo : searchFloatAction.getFloatInfos()) { |
||||||
|
searchFormulaFromFloat(formulaInfos, floatInfo); |
||||||
|
searchFormulaFromFloatType(formulaInfos, floatInfo); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchFormulaFromFloat(ArrayList<FormulaInfo> formulaInfos, FloatInfo floatInfo) { |
||||||
|
NameJavaScriptGroup nameJavaScriptGroup = ((FloatElement) floatInfo.getContent().getReplaceObject()).getNameHyperlinkGroup(); |
||||||
|
if (nameJavaScriptGroup != null) { |
||||||
|
for (int i = 0; i < nameJavaScriptGroup.size(); i++) { |
||||||
|
SearchJSHighlightAction action = new SearchJSHighlightAction(); |
||||||
|
action.searchJSFormulaFromOther(formulaInfos, floatInfo.getContent(), nameJavaScriptGroup.getNameHyperlink(i).getJavaScript()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchFormulaFromFloatType(ArrayList<FormulaInfo> formulaInfos, FloatInfo floatInfo) { |
||||||
|
Object value = ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); |
||||||
|
FloatFormulaType floatFormulaType = FloatFormulaType.match(value.getClass().getSimpleName()); |
||||||
|
if (floatFormulaType != null) { |
||||||
|
floatFormulaType.searchFormulaFromFloatElementType(formulaInfos, floatInfo); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 悬浮元素的类型 |
||||||
|
*/ |
||||||
|
public enum FloatFormulaType { |
||||||
|
/** |
||||||
|
* 公式 |
||||||
|
*/ |
||||||
|
FORMULA("Formula") { |
||||||
|
@Override |
||||||
|
public void searchFormulaFromFloatElementType(ArrayList<FormulaInfo> formulaInfos, FloatInfo floatInfo) { |
||||||
|
ITContent content = floatInfo.getContent().copy(); |
||||||
|
Formula value = (Formula) ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); |
||||||
|
content.setReplaceObject(value); |
||||||
|
formulaInfos.add(new FormulaInfo(content)); |
||||||
|
} |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 图表 |
||||||
|
*/ |
||||||
|
CHART_COLLECTION("ChartCollection") { |
||||||
|
@Override |
||||||
|
public void searchFormulaFromFloatElementType(ArrayList<FormulaInfo> formulaInfos, FloatInfo floatInfo) { |
||||||
|
ITContent content = floatInfo.getContent().copy(); |
||||||
|
ChartCollection chartCollection = (ChartCollection) ((FloatElement) floatInfo.getContent().getReplaceObject()).getValue(); |
||||||
|
content.addOtherPos(Toolkit.i18nText("Fine-Design_Chart_Chart")); |
||||||
|
new SearchChartCollectionFormulaAction(formulaInfos, content, chartCollection); |
||||||
|
} |
||||||
|
}; |
||||||
|
String name; |
||||||
|
|
||||||
|
FloatFormulaType(String name) { |
||||||
|
this.name = name; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 匹配 |
||||||
|
* |
||||||
|
* @param name |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
@Nullable |
||||||
|
public static FloatFormulaType match(String name) { |
||||||
|
FloatFormulaType[] values = FloatFormulaType.values(); |
||||||
|
for (FloatFormulaType value : values) { |
||||||
|
if (value.name.equals(name)) { |
||||||
|
return value; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public void searchFormulaFromFloatElementType(ArrayList<FormulaInfo> formulaInfos, FloatInfo floatInfo) { |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.template; |
||||||
|
|
||||||
|
|
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.Info; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-09-12 |
||||||
|
*/ |
||||||
|
public abstract class AbstractSearchTemplateFormula implements SearchTemplateFormula{ |
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchFormula(ArrayList<FormulaInfo> formulaInfos, ITContent content) { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ArrayList<? extends Info> search4Infos(JTemplate jTemplate) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package com.fr.design.actions.replace.action.content.formula.template; |
||||||
|
|
||||||
|
import com.fr.base.Formula; |
||||||
|
import com.fr.base.Parameter; |
||||||
|
import com.fr.base.ParameterConfig; |
||||||
|
import com.fr.base.io.AttrMark; |
||||||
|
import com.fr.base.iofile.attr.WatermarkAttr; |
||||||
|
import com.fr.design.actions.replace.info.FormulaInfo; |
||||||
|
import com.fr.design.actions.replace.info.base.ITContent; |
||||||
|
import com.fr.design.i18n.Toolkit; |
||||||
|
import com.fr.design.mainframe.JTemplate; |
||||||
|
import com.fr.main.impl.WorkBook; |
||||||
|
import com.fr.report.core.ReportUtils; |
||||||
|
import com.fr.report.core.watermark.WaterMarkFactory; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Destiny.Lin |
||||||
|
* @version 11.0 |
||||||
|
* created by Destiny.Lin on 2022-09-12 |
||||||
|
*/ |
||||||
|
public class SearchTemplateFormulaAction extends AbstractSearchTemplateFormula { |
||||||
|
|
||||||
|
public SearchTemplateFormulaAction(JTemplate jTemplate, ArrayList<FormulaInfo> formulaInfos) { |
||||||
|
ITContent content = new ITContent(); |
||||||
|
content.setTemplateName(jTemplate.getTemplateName()); |
||||||
|
searchTemplateParaFormula(jTemplate, formulaInfos, content); |
||||||
|
searchTemplateWaterMarkFormula(jTemplate, formulaInfos, content); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchTemplateWaterMarkFormula(JTemplate jTemplate, ArrayList<FormulaInfo> formulaInfos, ITContent content) { |
||||||
|
WatermarkAttr watermarkAttr = ReportUtils.getWatermarkAttrFromTemplateAndGlobal((AttrMark) jTemplate.getTarget()); |
||||||
|
if (watermarkAttr != null) { |
||||||
|
ITContent waterMarkContent = content.copy(); |
||||||
|
waterMarkContent.addOtherPos(Toolkit.i18nText("Fine-Design_Form_WaterMark")); |
||||||
|
waterMarkContent.setReplaceObject(watermarkAttr); |
||||||
|
formulaInfos.add(new FormulaInfo(waterMarkContent)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void searchTemplateParaFormula(JTemplate jTemplate, ArrayList<FormulaInfo> formulaInfos, ITContent content) { |
||||||
|
Parameter[] parameters = jTemplate.getJTemplateParameters(); |
||||||
|
for (Parameter parameter : parameters) { |
||||||
|
if (parameter.getValue() instanceof Formula) { |
||||||
|
ITContent paraContent = content.copy(); |
||||||
|
paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Template_Parameter")); |
||||||
|
paraContent.setReplaceObject(parameter.getValue()); |
||||||
|
formulaInfos.add(new FormulaInfo(paraContent)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
Parameter[] globalParameters = ParameterConfig.getInstance().getGlobalParameters(); |
||||||
|
for (Parameter parameter : globalParameters) { |
||||||
|
if (parameter.getValue() instanceof Formula) { |
||||||
|
ITContent paraContent = content.copy(); |
||||||
|
paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter_Source_Type_Server")); |
||||||
|
paraContent.setReplaceObject(parameter.getValue()); |
||||||
|
formulaInfos.add(new FormulaInfo(paraContent)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue