|
|
|
@ -1,13 +1,27 @@
|
|
|
|
|
package com.fr.design.actions.replace.utils; |
|
|
|
|
|
|
|
|
|
import com.fr.base.Formula; |
|
|
|
|
import com.fr.base.present.DictPresent; |
|
|
|
|
import com.fr.base.present.Present; |
|
|
|
|
import com.fr.chart.chartattr.ChartCollection; |
|
|
|
|
import com.fr.chart.web.ChartHyperPoplink; |
|
|
|
|
import com.fr.data.SimpleDSColumn; |
|
|
|
|
import com.fr.data.TableReplacementEntity; |
|
|
|
|
import com.fr.data.condition.CommonCondition; |
|
|
|
|
import com.fr.data.condition.JoinCondition; |
|
|
|
|
import com.fr.data.condition.ListCondition; |
|
|
|
|
import com.fr.data.condition.ObjectCondition; |
|
|
|
|
import com.fr.data.core.Compare; |
|
|
|
|
import com.fr.data.impl.NameTableData; |
|
|
|
|
import com.fr.data.impl.TableDataDictionary; |
|
|
|
|
import com.fr.data.impl.TreeNodeAttr; |
|
|
|
|
import com.fr.data.impl.TreeNodeWrapper; |
|
|
|
|
import com.fr.design.actions.replace.action.content.cell.SearchCellAction; |
|
|
|
|
import com.fr.design.actions.replace.action.content.formula.SearchFormulaManager; |
|
|
|
|
import com.fr.design.actions.replace.action.content.formula.cell.SearchCellFormulaAction; |
|
|
|
|
import com.fr.design.actions.replace.action.content.formula.chart.SearchChartCollectionFormulaAction; |
|
|
|
|
import com.fr.design.actions.replace.action.content.formula.widget.SearchWidgetFormulaAction; |
|
|
|
|
import com.fr.design.actions.replace.action.content.js.SearchJSManager; |
|
|
|
|
import com.fr.design.actions.replace.action.content.tabledata.TableDataFormulaType; |
|
|
|
|
import com.fr.design.actions.replace.action.content.tabledata.TableDataFormulaUtils; |
|
|
|
|
import com.fr.design.actions.replace.action.content.widget.SearchWidgetAction; |
|
|
|
@ -17,8 +31,32 @@ 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.FormElementCaseProvider; |
|
|
|
|
import com.fr.form.data.DataBinding; |
|
|
|
|
import com.fr.form.ui.DataControl; |
|
|
|
|
import com.fr.form.ui.DictionaryContainer; |
|
|
|
|
import com.fr.form.ui.ElementCaseEditor; |
|
|
|
|
import com.fr.form.ui.TreeEditor; |
|
|
|
|
import com.fr.form.ui.Widget; |
|
|
|
|
import com.fr.form.ui.concept.data.ValueInitializer; |
|
|
|
|
import com.fr.form.ui.tree.LayerConfig; |
|
|
|
|
import com.fr.general.ComparatorUtils; |
|
|
|
|
import com.fr.general.data.Condition; |
|
|
|
|
import com.fr.general.data.TableDataColumn; |
|
|
|
|
import com.fr.js.JavaScript; |
|
|
|
|
import com.fr.js.NameJavaScript; |
|
|
|
|
import com.fr.js.NameJavaScriptGroup; |
|
|
|
|
import com.fr.main.impl.WorkBook; |
|
|
|
|
import com.fr.main.parameter.ReportParameterAttr; |
|
|
|
|
import com.fr.report.cell.CellElement; |
|
|
|
|
import com.fr.report.cell.FloatElement; |
|
|
|
|
import com.fr.report.cell.TemplateCellElement; |
|
|
|
|
import com.fr.report.cell.cellattr.core.group.DSColumn; |
|
|
|
|
import com.fr.report.cell.cellattr.highlight.DefaultHighlight; |
|
|
|
|
import com.fr.report.cell.cellattr.highlight.Highlight; |
|
|
|
|
import com.fr.report.cell.cellattr.highlight.HighlightGroup; |
|
|
|
|
import com.fr.report.cell.cellattr.highlight.HyperlinkHighlightAction; |
|
|
|
|
import com.fr.report.cell.cellattr.highlight.PresentHighlightAction; |
|
|
|
|
import com.fr.report.cell.cellattr.highlight.WidgetHighlightAction; |
|
|
|
|
import com.fr.report.elementcase.ElementCase; |
|
|
|
|
import com.fr.report.report.Report; |
|
|
|
|
import com.fr.report.utils.ElementCaseHelper; |
|
|
|
@ -86,8 +124,18 @@ public class ReplaceUtils {
|
|
|
|
|
* @return 报表块使用的数据集 |
|
|
|
|
*/ |
|
|
|
|
public static Set<String> getElementCaseDependenceTables(ElementCaseEditor elementCaseEditor) { |
|
|
|
|
FormElementCaseProvider elementCase = elementCaseEditor.getElementCase(); |
|
|
|
|
return elementCase.getCellTableDataSet(); |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
FormElementCaseProvider provider = elementCaseEditor.getElementCase(); |
|
|
|
|
if (provider instanceof ElementCase) { |
|
|
|
|
// 非公式部分
|
|
|
|
|
ans.addAll(searchTableDataWithOutFormula((ElementCase)provider)); |
|
|
|
|
// 公式部分——理论上就只有单元格和控件(超链那些都包含)
|
|
|
|
|
List<FormulaInfo> formulaInfos = getElementCaseFormulas((ElementCase) provider); |
|
|
|
|
ans.addAll(searchFormulaInfos(formulaInfos)); |
|
|
|
|
// 超链部分
|
|
|
|
|
ans.addAll(searchElementCasJs((ElementCase)provider)); |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -180,6 +228,8 @@ public class ReplaceUtils {
|
|
|
|
|
List<FormulaInfo> formulaInfos = new ArrayList<>(); |
|
|
|
|
SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, new ITContent(), chartCollection); |
|
|
|
|
replaceFormulaInfos(formulaInfos, entities); |
|
|
|
|
// 超链部分
|
|
|
|
|
replaceChartJs(chartCollection, entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -190,13 +240,16 @@ public class ReplaceUtils {
|
|
|
|
|
*/ |
|
|
|
|
public static void replaceElementCase(ElementCase elementCase, List<TableReplacementEntity> entities) { |
|
|
|
|
// 非公式部分
|
|
|
|
|
ElementCaseHelper.replaceTableDataWithOutFormula(elementCase, entities); |
|
|
|
|
replaceTableDataWithOutFormula(elementCase, entities); |
|
|
|
|
// 公式部分——理论上就只有单元格和控件(超链那些都包含)
|
|
|
|
|
List<FormulaInfo> formulaInfos = getElementCaseFormulas(elementCase); |
|
|
|
|
replaceFormulaInfos(formulaInfos, entities); |
|
|
|
|
// 超链部分
|
|
|
|
|
replaceElementCasJs(elementCase, entities); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 替换CPT使用的数据集(包含公式里的) |
|
|
|
|
* |
|
|
|
@ -206,18 +259,130 @@ public class ReplaceUtils {
|
|
|
|
|
public static void replaceCpt(JTemplate template, List<TableReplacementEntity> entity) { |
|
|
|
|
if (template.getTarget() instanceof WorkBook) { |
|
|
|
|
WorkBook workBook = (WorkBook) template.getTarget(); |
|
|
|
|
|
|
|
|
|
// 非公式部分替换
|
|
|
|
|
// 参数面板
|
|
|
|
|
replaceWorkBookPara(workBook, entity); |
|
|
|
|
// 主体非公式部分替换
|
|
|
|
|
replaceWorkBook(workBook, entity); |
|
|
|
|
// 公式部分
|
|
|
|
|
SearchFormulaManager.getInstance().search4Infos(template); |
|
|
|
|
List<FormulaInfo> formulaInfos = SearchFormulaManager.getInstance().getFormulaInfos(); |
|
|
|
|
replaceFormulaInfos(formulaInfos, entity); |
|
|
|
|
// 超链部分
|
|
|
|
|
replaceTemplateJs(template, entity); |
|
|
|
|
// 触发响应
|
|
|
|
|
template.fireTargetModified(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* ----------------------------------------------private-------------------------------------------------- |
|
|
|
|
*/ |
|
|
|
|
private static void replaceWorkBookPara(WorkBook workBook, List<TableReplacementEntity> entity) { |
|
|
|
|
ReportParameterAttr attr = workBook.getReportParameterAttr(); |
|
|
|
|
if (attr != null && attr.getParameterUI() != null) { |
|
|
|
|
Widget[] widgets = attr.getParameterUI().getAllWidgets(); |
|
|
|
|
for (Widget widget : widgets) { |
|
|
|
|
replaceWidget(widget, entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceTemplateJs(JTemplate template, List<TableReplacementEntity> entity) { |
|
|
|
|
List<JavaScript> javaScripts = SearchJSManager.getInstance().getTemplateJSDependenceTables(template); |
|
|
|
|
replaceJs(javaScripts, entity); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceChartJs(ChartCollection chartCollection, List<TableReplacementEntity> entities) { |
|
|
|
|
List<JavaScript> scripts = new ArrayList<>(); |
|
|
|
|
List<NameJavaScript> nameJavaScripts = SearchJSUtils.getChartJavaScript(chartCollection); |
|
|
|
|
for(NameJavaScript javaScript : nameJavaScripts) { |
|
|
|
|
if (javaScript.getJavaScript() instanceof ChartHyperPoplink) { |
|
|
|
|
scripts.add(javaScript.getJavaScript()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
replaceJs(scripts, entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceElementCasJs(ElementCase elementCase, List<TableReplacementEntity> entities) { |
|
|
|
|
if (elementCase == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
List<JavaScript> javaScripts = new ArrayList<>(); |
|
|
|
|
// 替换悬浮元素
|
|
|
|
|
Iterator floatIterator = elementCase.floatIterator(); |
|
|
|
|
while (floatIterator.hasNext()) { |
|
|
|
|
FloatElement floatCell = (FloatElement) floatIterator.next(); |
|
|
|
|
javaScripts.addAll(SearchJSUtils.getJSDependenceTables(floatCell)); |
|
|
|
|
} |
|
|
|
|
// 替换通用元素
|
|
|
|
|
Iterator cellIterator = elementCase.cellIterator(); |
|
|
|
|
while (cellIterator.hasNext()) { |
|
|
|
|
CellElement cell = (CellElement) cellIterator.next(); |
|
|
|
|
javaScripts.addAll(SearchJSUtils.getJSDependenceTables(cell)); |
|
|
|
|
} |
|
|
|
|
replaceJs(javaScripts, entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceCellHighlight(CellElement cell, List<TableReplacementEntity> entities) { |
|
|
|
|
if (cell instanceof TemplateCellElement) { |
|
|
|
|
HighlightGroup group = ((TemplateCellElement) cell).getHighlightGroup(); |
|
|
|
|
if (group != null) { |
|
|
|
|
for (int i = 0 ; i < group.size(); i++) { |
|
|
|
|
Highlight highlight = group.getHighlight(i); |
|
|
|
|
replaceHighlight(highlight, entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceHighlight(Highlight highlight, List<TableReplacementEntity> entities) { |
|
|
|
|
if (highlight instanceof DefaultHighlight) { |
|
|
|
|
DefaultHighlight defaultHighlight = (DefaultHighlight) highlight; |
|
|
|
|
replaceCondition(defaultHighlight.getCondition(), entities); |
|
|
|
|
for (int i = 0 ; i < defaultHighlight.actionCount() ; i++) { |
|
|
|
|
if (defaultHighlight.getHighlightAction(i) instanceof PresentHighlightAction) { |
|
|
|
|
PresentHighlightAction action = (PresentHighlightAction) defaultHighlight.getHighlightAction(i); |
|
|
|
|
ElementCaseHelper.replacePresent(action.getPresent(), entities); |
|
|
|
|
} else if (defaultHighlight.getHighlightAction(i) instanceof WidgetHighlightAction) { |
|
|
|
|
WidgetHighlightAction action = (WidgetHighlightAction) defaultHighlight.getHighlightAction(i); |
|
|
|
|
replaceWidget(action.getWidget(), entities); |
|
|
|
|
} else if (defaultHighlight.getHighlightAction(i) instanceof HyperlinkHighlightAction) { |
|
|
|
|
HyperlinkHighlightAction action = (HyperlinkHighlightAction) defaultHighlight.getHighlightAction(i); |
|
|
|
|
NameJavaScriptGroup group = action.getHperlink(); |
|
|
|
|
dealNameJavaScriptGroup(group, entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void dealNameJavaScriptGroup(NameJavaScriptGroup group, List<TableReplacementEntity> entities) { |
|
|
|
|
if (group != null) { |
|
|
|
|
for (int i = 0 ; i < group.size(); i++) { |
|
|
|
|
NameJavaScript javaScript = group.getNameHyperlink(i); |
|
|
|
|
if (javaScript.getJavaScript() instanceof ChartHyperPoplink) { |
|
|
|
|
if (((ChartHyperPoplink) javaScript.getJavaScript()).getChartCollection() instanceof ChartCollection) { |
|
|
|
|
replaceChart((ChartCollection) ((ChartHyperPoplink) javaScript.getJavaScript()).getChartCollection(), entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void replaceJs(List<JavaScript> javaScripts, List<TableReplacementEntity> entity) { |
|
|
|
|
for (JavaScript javaScript : javaScripts) { |
|
|
|
|
if (javaScript instanceof ChartHyperPoplink) { |
|
|
|
|
ChartHyperPoplink chartHyperPoplink = (ChartHyperPoplink) javaScript; |
|
|
|
|
if (chartHyperPoplink.getChartCollection() instanceof ChartCollection) { |
|
|
|
|
replaceChart((ChartCollection) chartHyperPoplink.getChartCollection(), entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void replaceWorkBook(WorkBook workBook, List<TableReplacementEntity> entity) { |
|
|
|
|
if (acceptTableReplacement(entity)) { |
|
|
|
|
for (int i = 0; i < workBook.getReportCount(); i++) { |
|
|
|
@ -226,7 +391,7 @@ public class ReplaceUtils {
|
|
|
|
|
Iterator it = report.iteratorOfElementCase(); |
|
|
|
|
while (it.hasNext()) { |
|
|
|
|
ElementCase elementCase = (ElementCase) it.next(); |
|
|
|
|
ElementCaseHelper.replaceTableDataWithOutFormula(elementCase, entity); |
|
|
|
|
replaceTableDataWithOutFormula(elementCase, entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -270,4 +435,430 @@ public class ReplaceUtils {
|
|
|
|
|
} |
|
|
|
|
return formulaInfos; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 替换数据集 |
|
|
|
|
* |
|
|
|
|
* @param elementCase 可以是报表块、组件、WorkBook... |
|
|
|
|
* @param entity 数据集替换信息 |
|
|
|
|
*/ |
|
|
|
|
private static void replaceTableDataWithOutFormula(ElementCase elementCase, List<TableReplacementEntity> entity) { |
|
|
|
|
if (elementCase == null) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// -------非公式部分-------
|
|
|
|
|
// 替换悬浮元素
|
|
|
|
|
replaceFloatCell(elementCase, entity); |
|
|
|
|
// 替换通用元素
|
|
|
|
|
replaceNormalCell(elementCase, entity); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 替换通用元素,主要是单元格的各个地方 |
|
|
|
|
* |
|
|
|
|
* <li>单元格形态</li> |
|
|
|
|
* <li>单元格控件</li> |
|
|
|
|
* <li>单元格数据字典</li> |
|
|
|
|
* <li>单元格值</li> |
|
|
|
|
* |
|
|
|
|
* @param elementCase |
|
|
|
|
* @param entity |
|
|
|
|
*/ |
|
|
|
|
private static void replaceNormalCell(ElementCase elementCase, List<TableReplacementEntity> entity) { |
|
|
|
|
Iterator cellIterator = elementCase.cellIterator(); |
|
|
|
|
|
|
|
|
|
while (cellIterator.hasNext()) { |
|
|
|
|
CellElement cell = (CellElement) cellIterator.next(); |
|
|
|
|
// 处理【形态、控件、数据字典】
|
|
|
|
|
replacePresentAndDictionary(cell, entity); |
|
|
|
|
// 处理【单元格值】
|
|
|
|
|
replaceCellValue(cell, entity); |
|
|
|
|
// 处理【条件属性】
|
|
|
|
|
replaceCellHighlight(cell, entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceCellValue(CellElement cell, List<TableReplacementEntity> entity) { |
|
|
|
|
Object value = cell.getValue(); |
|
|
|
|
if (value instanceof DSColumn) { |
|
|
|
|
// 替换【数据列】
|
|
|
|
|
replaceDSColumn( (DSColumn) value, entity); |
|
|
|
|
// 替换【条件属性】
|
|
|
|
|
replaceCondition(((DSColumn) value).getCondition(), entity); |
|
|
|
|
} else if (value instanceof ChartCollection) { |
|
|
|
|
((ChartCollection) value).replaceTableData(entity); |
|
|
|
|
replaceChartJs((ChartCollection) value, entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceCondition(Condition condition, List<TableReplacementEntity> entity) { |
|
|
|
|
if (condition != null) { |
|
|
|
|
//公式条件不需要修改,里面不会涉及到,有问题再加
|
|
|
|
|
//普通条件
|
|
|
|
|
//1条条件
|
|
|
|
|
replaceSingleCondition(condition, entity); |
|
|
|
|
//N条条件
|
|
|
|
|
if (condition instanceof ListCondition) { |
|
|
|
|
for (int k = 0; k < ((ListCondition) condition).getJoinConditionCount(); k++) { |
|
|
|
|
JoinCondition joinCondition = ((ListCondition) condition).getJoinCondition(k); |
|
|
|
|
Condition obCondition = joinCondition.getCondition(); |
|
|
|
|
if (obCondition != null) { |
|
|
|
|
replaceSingleCondition(obCondition, entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceSingleCondition(Condition condition, List<TableReplacementEntity> entity) { |
|
|
|
|
if (condition instanceof CommonCondition) { |
|
|
|
|
dealWithTableDataNameChange((CommonCondition) condition, entity); |
|
|
|
|
} |
|
|
|
|
if (condition instanceof ObjectCondition) { |
|
|
|
|
dealWithCompare(((ObjectCondition) condition).getCompare(), entity); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void dealWithTableDataNameChange(CommonCondition condition, List<TableReplacementEntity> entities) { |
|
|
|
|
Compare compare = condition.getCompare(); |
|
|
|
|
dealWithCompare(compare, entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void dealWithCompare(Compare compare, List<TableReplacementEntity> entities) { |
|
|
|
|
if (compare != null) { |
|
|
|
|
Object ob = compare.getValue(); |
|
|
|
|
if (ob instanceof SimpleDSColumn) { |
|
|
|
|
for (TableReplacementEntity entity : entities) { |
|
|
|
|
if (ComparatorUtils.equals(((SimpleDSColumn) ob).getDsName(), entity.getOldName())) { |
|
|
|
|
((SimpleDSColumn) ob).setDsName(entity.getNewName()); |
|
|
|
|
((SimpleDSColumn) ob).setColumn(TableDataColumn.createColumn(entity.getTargetField(TableDataColumn.getColumnName(((SimpleDSColumn) ob).getColumn())))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replaceDSColumn(DSColumn dsColumn, List<TableReplacementEntity> entities) { |
|
|
|
|
for (TableReplacementEntity entity : entities) { |
|
|
|
|
if (ComparatorUtils.equals(dsColumn.getDSName(), entity.getOldName())) { |
|
|
|
|
// 数据集替换
|
|
|
|
|
dsColumn.setDSName(entity.getNewName()); |
|
|
|
|
// 数据集字段替换
|
|
|
|
|
dsColumn.setColumn(TableDataColumn.createColumn(entity.getTargetField(dsColumn.getColumnName()))); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void replacePresentAndDictionary(CellElement cell, List<TableReplacementEntity> entities) { |
|
|
|
|
TemplateCellElement cellElement = (TemplateCellElement) cell; |
|
|
|
|
// 处理单元格的控件
|
|
|
|
|
replaceWidget(cellElement.getWidget(), entities); |
|
|
|
|
// 处理形态
|
|
|
|
|
ElementCaseHelper.replacePresent(cellElement.getPresent(), entities); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 处理控件 |
|
|
|
|
* |
|
|
|
|
* @param widget 控件 |
|
|
|
|
* @param entities 替换信息 |
|
|
|
|
*/ |
|
|
|
|
private static void replaceWidget(Widget widget, List<TableReplacementEntity> entities) { |
|
|
|
|
if (widget instanceof DictionaryContainer) { |
|
|
|
|
DictionaryContainer db = (DictionaryContainer) widget; |
|
|
|
|
if (widget instanceof TreeEditor) { |
|
|
|
|
Object config = ((TreeEditor) widget).getBuildModelConfig(); |
|
|
|
|
replaceTreeConfig(config, entities); |
|
|
|
|
((TreeEditor) widget).setBuildModelConfig(config); |
|
|
|
|
} |
|
|
|
|
if (db.getDictionary() instanceof TableDataDictionary) { |
|
|
|
|
TableDataDictionary tdd = (TableDataDictionary) db.getDictionary(); |
|
|
|
|
NameTableData ndd = (NameTableData) tdd.getTableData(); |
|
|
|
|
// 控件持有的数据字典也得处理
|
|
|
|
|
ElementCaseHelper.replaceTableDataDictionary(tdd, ndd, entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (widget instanceof DataControl) { |
|
|
|
|
ValueInitializer value = ((DataControl) widget).getWidgetValue(); |
|
|
|
|
if (value != null && value.getValue() instanceof DataBinding) { |
|
|
|
|
DataBinding binding = (DataBinding) value.getValue(); |
|
|
|
|
for (TableReplacementEntity entity : entities) { |
|
|
|
|
if (StringUtils.equals(entity.getOldName(), binding.getDataSourceName())) { |
|
|
|
|
value.setValue(new DataBinding(entity.getNewName(), entity.getTargetField(binding.getDataBindingKey()))); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 处理树结构的config |
|
|
|
|
* |
|
|
|
|
* @param config 树结构配置 |
|
|
|
|
* @param entities 替换信息 |
|
|
|
|
*/ |
|
|
|
|
public static void replaceTreeConfig(Object config, List<TableReplacementEntity> entities) { |
|
|
|
|
if (config instanceof LayerConfig[]) { |
|
|
|
|
LayerConfig[] layerConfigs = (LayerConfig[]) config; |
|
|
|
|
dealWithLayerConfigs(layerConfigs, entities); |
|
|
|
|
} else if (config instanceof TreeNodeWrapper) { |
|
|
|
|
TreeNodeWrapper wrapper = (TreeNodeWrapper) config; |
|
|
|
|
dealWithTreeNodeWrapper(wrapper, entities); |
|
|
|
|
} else if (config instanceof TableDataDictionary) { |
|
|
|
|
TableDataDictionary tableDataDictionary = (TableDataDictionary) config; |
|
|
|
|
ElementCaseHelper.replaceTableDataDictionary(tableDataDictionary, (NameTableData) tableDataDictionary.getTableData(), entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void dealWithTreeNodeWrapper(TreeNodeWrapper wrapper, List<TableReplacementEntity> entities) { |
|
|
|
|
for (TreeNodeAttr attr : wrapper.getTreeNodeAttrs()) { |
|
|
|
|
if (attr.getDictionary() instanceof TableDataDictionary) { |
|
|
|
|
TableDataDictionary tableDataDictionary = (TableDataDictionary) attr.getDictionary(); |
|
|
|
|
ElementCaseHelper.replaceTableDataDictionary(tableDataDictionary, (NameTableData) tableDataDictionary.getTableData(), entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static void dealWithLayerConfigs(LayerConfig[] layerConfigs, List<TableReplacementEntity> entities) { |
|
|
|
|
for (LayerConfig layerConfig : layerConfigs) { |
|
|
|
|
if (layerConfig.getDictionary() != null ) { |
|
|
|
|
for (TableReplacementEntity entity : entities) { |
|
|
|
|
if (layerConfig.getTableData() instanceof NameTableData && StringUtils.equals(layerConfig.getTableData().getName(), entity.getOldName())) { |
|
|
|
|
layerConfig.setTableData(new NameTableData(entity.getNewName())); |
|
|
|
|
layerConfig.setViewColumn(entity.getTargetIndex(layerConfig.getViewColumn())); |
|
|
|
|
layerConfig.setModelColumn(entity.getTargetIndex(layerConfig.getModelColumn())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ElementCaseHelper.replaceTableDataDictionary(layerConfig.getDictionary(), (NameTableData) layerConfig.getDictionary().getTableData(), entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 替换悬浮元素中的数据集 |
|
|
|
|
* |
|
|
|
|
* @param elementCase 组件 |
|
|
|
|
* @param entities 替换信息 |
|
|
|
|
*/ |
|
|
|
|
private static void replaceFloatCell(ElementCase elementCase, List<TableReplacementEntity> entities) { |
|
|
|
|
Iterator floatIterator = elementCase.floatIterator(); |
|
|
|
|
while (floatIterator.hasNext()) { |
|
|
|
|
FloatElement floatCell = (FloatElement) floatIterator.next(); |
|
|
|
|
Object value = floatCell.getValue(); |
|
|
|
|
if (value instanceof ChartCollection) { |
|
|
|
|
((ChartCollection) value).replaceTableData(entities); |
|
|
|
|
replaceChartJs((ChartCollection) value, entities); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* ------------------------private search----------------------------------- |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static Set<String> searchElementCasJs(ElementCase elementCase) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
List<JavaScript> javaScripts = new ArrayList<>(); |
|
|
|
|
// 替换通用元素
|
|
|
|
|
Iterator cellIterator = elementCase.cellIterator(); |
|
|
|
|
while (cellIterator.hasNext()) { |
|
|
|
|
CellElement cell = (CellElement) cellIterator.next(); |
|
|
|
|
javaScripts.addAll(SearchJSUtils.getJSDependenceTables(cell)); |
|
|
|
|
} |
|
|
|
|
ans.addAll(searchJs(javaScripts)); |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchJs(List<JavaScript> javaScripts) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
for (JavaScript javaScript : javaScripts) { |
|
|
|
|
if (javaScript instanceof ChartHyperPoplink) { |
|
|
|
|
ChartHyperPoplink chartHyperPoplink = (ChartHyperPoplink) javaScript; |
|
|
|
|
if (chartHyperPoplink.getChartCollection() instanceof ChartCollection) { |
|
|
|
|
ans.addAll((chartHyperPoplink.getChartCollection().getDataSetNames())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchFormulaInfos(List<FormulaInfo> formulaInfos) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
for (FormulaInfo formulaInfo : formulaInfos) { |
|
|
|
|
ans.addAll(TableDataFormulaUtils.search4TableData(formulaInfo.getPureValue())); |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchTableDataWithOutFormula(ElementCase elementCase) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
Iterator cellIterator = elementCase.cellIterator(); |
|
|
|
|
while (cellIterator.hasNext()) { |
|
|
|
|
CellElement cell = (CellElement) cellIterator.next(); |
|
|
|
|
// 处理【形态、控件、数据字典】
|
|
|
|
|
ans.addAll(searchPresentAndDictionary(cell)); |
|
|
|
|
// 处理【单元格值】
|
|
|
|
|
ans.addAll(searchCellValue(cell)); |
|
|
|
|
// 处理【条件属性】
|
|
|
|
|
ans.addAll(searchCellHighlight(cell)); |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchCellHighlight(CellElement cell) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
if (cell instanceof TemplateCellElement) { |
|
|
|
|
HighlightGroup group = ((TemplateCellElement) cell).getHighlightGroup(); |
|
|
|
|
if (group != null) { |
|
|
|
|
for (int i = 0 ; i < group.size(); i++) { |
|
|
|
|
Highlight highlight = group.getHighlight(i); |
|
|
|
|
ans.addAll(searchHighlight(highlight)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchHighlight(Highlight highlight) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
if (highlight instanceof DefaultHighlight) { |
|
|
|
|
DefaultHighlight defaultHighlight = (DefaultHighlight) highlight; |
|
|
|
|
for (int i = 0 ; i < defaultHighlight.actionCount() ; i++) { |
|
|
|
|
if (defaultHighlight.getHighlightAction(i) instanceof PresentHighlightAction) { |
|
|
|
|
PresentHighlightAction action = (PresentHighlightAction) defaultHighlight.getHighlightAction(i); |
|
|
|
|
ans.addAll(searchPresent(action.getPresent())); |
|
|
|
|
} else if (defaultHighlight.getHighlightAction(i) instanceof WidgetHighlightAction) { |
|
|
|
|
WidgetHighlightAction action = (WidgetHighlightAction) defaultHighlight.getHighlightAction(i); |
|
|
|
|
ans.addAll(searchWidget(action.getWidget())); |
|
|
|
|
} else if (defaultHighlight.getHighlightAction(i) instanceof HyperlinkHighlightAction) { |
|
|
|
|
HyperlinkHighlightAction action = (HyperlinkHighlightAction) defaultHighlight.getHighlightAction(i); |
|
|
|
|
NameJavaScriptGroup group = action.getHperlink(); |
|
|
|
|
ans.addAll(searchNameJavaScriptGroup(group)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchNameJavaScriptGroup(NameJavaScriptGroup group) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
if (group != null) { |
|
|
|
|
for (int i = 0 ; i < group.size(); i++) { |
|
|
|
|
NameJavaScript javaScript = group.getNameHyperlink(i); |
|
|
|
|
if (javaScript.getJavaScript() instanceof ChartHyperPoplink) { |
|
|
|
|
if (((ChartHyperPoplink) javaScript.getJavaScript()).getChartCollection() instanceof ChartCollection) { |
|
|
|
|
ans.addAll((((ChartHyperPoplink) javaScript.getJavaScript()).getChartCollection().getDataSetNames())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchCellValue(CellElement cell) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
Object value = cell.getValue(); |
|
|
|
|
if (value instanceof DSColumn) { |
|
|
|
|
// 查找【数据列】
|
|
|
|
|
ans.add(((DSColumn) value).getDSName()); |
|
|
|
|
// 查找【条件属性】
|
|
|
|
|
ans.addAll(searchCondition(((DSColumn) value).getCondition())); |
|
|
|
|
} else if (value instanceof ChartCollection) { |
|
|
|
|
ans.addAll(((ChartCollection) value).getDataSetNames()); |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchCondition(Condition condition) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
if (condition != null) { |
|
|
|
|
//普通条件
|
|
|
|
|
//1条条件
|
|
|
|
|
if (condition instanceof CommonCondition) { |
|
|
|
|
ans.addAll(searchCondition0((CommonCondition) condition)); |
|
|
|
|
} |
|
|
|
|
//N条条件
|
|
|
|
|
if (condition instanceof ListCondition) { |
|
|
|
|
for (int k = 0; k < ((ListCondition) condition).getJoinConditionCount(); k++) { |
|
|
|
|
JoinCondition joinCondition = ((ListCondition) condition).getJoinCondition(k); |
|
|
|
|
Condition obCondition = joinCondition.getCondition(); |
|
|
|
|
if (obCondition instanceof CommonCondition) { |
|
|
|
|
ans.addAll(searchCondition0((CommonCondition) obCondition)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchCondition0(CommonCondition condition) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
Compare compare = condition.getCompare(); |
|
|
|
|
Object ob = compare.getValue(); |
|
|
|
|
if (ob instanceof SimpleDSColumn) { |
|
|
|
|
ans.add(((SimpleDSColumn) ob).getDsName()); |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static Set<String> searchPresentAndDictionary(CellElement cell) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
TemplateCellElement cellElement = (TemplateCellElement) cell; |
|
|
|
|
// 处理单元格的控件
|
|
|
|
|
ans.addAll(searchWidget(cellElement.getWidget())); |
|
|
|
|
// 处理形态
|
|
|
|
|
ans.addAll(searchPresent(cellElement.getPresent())); |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchPresent(Present p) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
if (!(p instanceof DictPresent)) { |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
DictPresent dp = (DictPresent) p; |
|
|
|
|
if (!(dp.getDictionary() instanceof TableDataDictionary)) { |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
TableDataDictionary td = (TableDataDictionary) dp.getDictionary(); |
|
|
|
|
if (!(td.getTableData() instanceof NameTableData)) { |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
NameTableData nd = (NameTableData) td.getTableData(); |
|
|
|
|
ans.add(nd.getName()); |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Set<String> searchWidget(Widget widget) { |
|
|
|
|
Set<String> ans = new HashSet<>(); |
|
|
|
|
if (widget instanceof DictionaryContainer) { |
|
|
|
|
DictionaryContainer db = (DictionaryContainer) widget; |
|
|
|
|
if (db.getDictionary() instanceof TableDataDictionary) { |
|
|
|
|
TableDataDictionary tdd = (TableDataDictionary) db.getDictionary(); |
|
|
|
|
NameTableData ndd = (NameTableData) tdd.getTableData(); |
|
|
|
|
if (ndd != null) { |
|
|
|
|
ans.add(ndd.getName()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (widget instanceof DataControl) { |
|
|
|
|
ValueInitializer value = ((DataControl) widget).getWidgetValue(); |
|
|
|
|
if (value != null && value.getValue() instanceof DataBinding) { |
|
|
|
|
DataBinding binding = (DataBinding) value.getValue(); |
|
|
|
|
ans.add(binding.getDataSourceName()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return ans; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|