Browse Source

REPORT-140361 【数据集替换】图表的特效-图表超链悬浮图表的数据-数据集,没有替换

release/11.0
Destiny.Lin 1 month ago
parent
commit
ad5d78ff92
  1. 13
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java
  2. 2
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java
  3. 12
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java
  4. 12
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java
  5. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java
  6. 239
      designer-realize/src/main/java/com/fr/design/actions/replace/utils/ReplaceUtils.java
  7. 57
      designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java

13
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchCellJSAction.java

@ -9,6 +9,7 @@ import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.actions.replace.utils.SearchJSUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.js.JavaScript;
import com.fr.js.JavaScriptImpl;
import com.fr.js.NameJavaScriptGroup;
@ -42,6 +43,18 @@ public class SearchCellJSAction implements SearchJS {
jsInfos.addAll(CellJSInfos);
}
@Override
public List<JavaScript> getTemplateJSDependenceTables(JTemplate jTemplate) {
List<JavaScript> scripts = new ArrayList<>();
SearchCellAction searchCellAction = SearchCellAction.getInstance();
searchCellAction.search4Infos(jTemplate);
for (CellInfo cellInfo : searchCellAction.getCellInfos()) {
CellElement cell = (CellElement) cellInfo.getContent().getReplaceObject();
scripts.addAll(SearchJSUtils.getJSDependenceTables(cell));
}
return scripts;
}
private void addJSInfos2ListFromCell(JTemplate jTemplate, List<JSInfo> jsInfos) {
SearchCellAction searchCellAction = SearchCellAction.getInstance();
searchCellAction.search4Infos(jTemplate);

2
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchChartJSAction.java

@ -9,7 +9,6 @@ import com.fr.design.actions.replace.utils.SearchJSUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.js.JavaScriptImpl;
import com.fr.js.NameJavaScript;
import com.fr.js.NameJavaScriptGroup;
import com.fr.plugin.chart.attr.axis.VanChartAxis;
import com.fr.plugin.chart.attr.plot.VanChartPlot;
@ -21,7 +20,6 @@ import com.fr.plugin.chart.custom.VanChartCustomPlot;
import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.stable.collections.combination.Pair;
import java.util.ArrayList;
import java.util.List;
/**

12
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchFloatJSAction.java

@ -11,6 +11,7 @@ import com.fr.design.actions.replace.utils.SearchJSUtils;
import com.fr.design.mainframe.JTemplate;
import com.fr.js.JavaScript;
import com.fr.report.cell.FloatElement;
@ -37,6 +38,17 @@ public class SearchFloatJSAction implements SearchJS {
jsInfos.addAll(floatJSInfos);
}
@Override
public List<JavaScript> getTemplateJSDependenceTables(JTemplate jTemplate) {
List<JavaScript> scripts = new ArrayList<>();
SearchFloatAction searchFloatAction = SearchFloatAction.getInstance();
searchFloatAction.search4Infos(jTemplate);
for (FloatInfo floatInfo : searchFloatAction.getFloatInfos()) {
FloatElement floatElement = (FloatElement) floatInfo.getContent().getReplaceObject();
scripts.addAll(SearchJSUtils.getJSDependenceTables(floatElement));
}
return scripts;
}
private void addJSInfos2ListFromFloat(JTemplate jTemplate, List<JSInfo> jsInfos) {
SearchFloatAction searchFloatAction = SearchFloatAction.getInstance();

12
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJS.java

@ -3,7 +3,9 @@ package com.fr.design.actions.replace.action.content.js;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.info.JSInfo;
import com.fr.design.mainframe.JTemplate;
import com.fr.js.JavaScript;
import java.util.ArrayList;
import java.util.List;
/**
@ -23,4 +25,14 @@ public interface SearchJS extends SearchAction {
*/
default void searchJSFromObject(JTemplate jTemplate, List<JSInfo> jsInfos) {
}
/**
* 获取模板中的涉及数据集的所有超链
*
* @param jTemplate 模板
* @return 超链集合
*/
default List<JavaScript> getTemplateJSDependenceTables(JTemplate jTemplate) {
return new ArrayList<>();
}
}

16
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchJSManager.java

@ -5,6 +5,7 @@ import com.fr.design.actions.replace.action.SearchManager;
import com.fr.design.actions.replace.info.JSInfo;
import com.fr.design.mainframe.JTemplate;
import com.fr.js.JavaScript;
import java.util.ArrayList;
import java.util.HashSet;
@ -45,6 +46,21 @@ public class SearchJSManager implements SearchAction, SearchManager {
setJsInfos(jsInfos);
}
/**
* 查找超链
*
* @param jTemplate 模板
* @return 超链集合
*/
public List<JavaScript> getTemplateJSDependenceTables(JTemplate jTemplate) {
List<JavaScript> javaScripts = new ArrayList<>();
for (SearchJS searchJS : searchJSSet) {
javaScripts.addAll(searchJS.getTemplateJSDependenceTables(jTemplate));
}
return javaScripts;
}
public List<JSInfo> getJsInfos() {
return jsInfos;
}

239
designer-realize/src/main/java/com/fr/design/actions/replace/utils/ReplaceUtils.java

@ -2,12 +2,21 @@ package com.fr.design.actions.replace.utils;
import com.fr.base.Formula;
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.core.Compare;
import com.fr.data.impl.NameTableData;
import com.fr.data.impl.TableDataDictionary;
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 +26,18 @@ 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.ui.DictionaryContainer;
import com.fr.form.ui.ElementCaseEditor;
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.main.impl.WorkBook;
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.elementcase.ElementCase;
import com.fr.report.report.Report;
import com.fr.report.utils.ElementCaseHelper;
@ -180,6 +199,8 @@ public class ReplaceUtils {
List<FormulaInfo> formulaInfos = new ArrayList<>();
SearchChartCollectionFormulaAction.getInstance().searchChartCollectionFormula(formulaInfos, new ITContent(), chartCollection);
replaceFormulaInfos(formulaInfos, entities);
// 超链部分
replaceChartJs(chartCollection, entities);
}
/**
@ -190,13 +211,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 +230,73 @@ public class ReplaceUtils {
public static void replaceCpt(JTemplate template, List<TableReplacementEntity> entity) {
if (template.getTarget() instanceof WorkBook) {
WorkBook workBook = (WorkBook) template.getTarget();
// 非公式部分替换
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 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 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 +305,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 +349,158 @@ 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);
}
}
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条条件
if (condition instanceof CommonCondition) {
dealWithTableDataNameChange((CommonCondition) 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) {
if (obCondition instanceof CommonCondition) {
dealWithTableDataNameChange((CommonCondition) obCondition, entity);
}
}
}
}
}
}
private static void dealWithTableDataNameChange(CommonCondition condition, List<TableReplacementEntity> entities) {
Compare compare = condition.getCompare();
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;
// 处理单元格的控件
replaceCellWidget(cellElement, entities);
// 处理形态
ElementCaseHelper.replacePresent(cellElement.getPresent(), entities);
}
/**
* 处理单元格控件
*
* @param cellElement 单元格
* @param entities 替换信息
*/
private static void replaceCellWidget(TemplateCellElement cellElement, List<TableReplacementEntity> entities) {
if (cellElement.getWidget() instanceof DictionaryContainer) {
DictionaryContainer db = (DictionaryContainer) (cellElement.getWidget());
if (db != null) {
if (db.getDictionary() instanceof TableDataDictionary) {
TableDataDictionary tdd = (TableDataDictionary) db.getDictionary();
NameTableData ndd = (NameTableData) tdd.getTableData();
// 控件持有的数据字典也得处理
ElementCaseHelper.replaceTableDataDictionary(tdd, ndd, 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);
}
}
}
}

57
designer-realize/src/main/java/com/fr/design/actions/replace/utils/SearchJSUtils.java

@ -36,7 +36,6 @@ import com.fr.report.cell.Elem;
import com.fr.stable.StringUtils;
import com.fr.stable.collections.combination.Pair;
import java.util.ArrayList;
import java.util.List;
@ -379,6 +378,27 @@ public class SearchJSUtils {
}
/**
* 获取图表-特效-交互属性中的JS
*/
public static List<NameJavaScript> getChartJavaScript(ChartCollection chartCollection) {
ArrayList<NameJavaScript> nameJavaScriptArrayList = new ArrayList<>();
for (int i = 0; i < chartCollection.getChartCount(); i++) {
if (chartCollection.getChart(i) instanceof VanChart) {
VanChart chart = ((VanChart) chartCollection.getChart(i));
if (chart.getPlot() != null) {
NameJavaScriptGroup nameJavaScriptGroup = chart.getPlot().getHotHyperLink();
if (isNameJavaScriptGroupExist(nameJavaScriptGroup)) {
for (int j = 0; j < nameJavaScriptGroup.size(); j++) {
nameJavaScriptArrayList.add(nameJavaScriptGroup.getNameHyperlink(j));
}
}
}
}
}
return nameJavaScriptArrayList;
}
/**
* 处理图表的交互属性可能存在多种地图
* @param content 存储信息的数据结构
@ -493,6 +513,41 @@ public class SearchJSUtils {
}
}
/**
* 获取涉及数据集的超链
*
* @param elem 单元对象
* @return 超链集合
*/
public static List<JavaScript> getJSDependenceTables(Elem elem) {
List<JavaScript> scripts = new ArrayList<>();
if (elem.getNameHyperlinkGroup() != null) {
for (int j = 0; j < elem.getNameHyperlinkGroup().size(); j++) {
NameJavaScript nameJavaScript = elem.getNameHyperlinkGroup().getNameHyperlink(j);
JavaScript javaScript = nameJavaScript.getJavaScript();
if (isChartHyperPopLinkValid(javaScript)) {
ChartHyperPoplink chartHyperPoplink = (ChartHyperPoplink) javaScript;
scripts.add(javaScript);
dealWithChartHyperPoplink(chartHyperPoplink, scripts);
}
}
}
return scripts;
}
private static void dealWithChartHyperPoplink(ChartHyperPoplink chartHyperPoplink, List<JavaScript> scripts) {
if (chartHyperPoplink.getChartCollection() instanceof ChartCollection) {
List<NameJavaScript> nameJavaScripts = getNameJavaScript((ChartCollection) chartHyperPoplink.getChartCollection(), new ITContent(), new ArrayList<>());
for(NameJavaScript javaScript : nameJavaScripts) {
if (javaScript.getJavaScript() instanceof ChartHyperPoplink) {
scripts.add(javaScript.getJavaScript());
}
}
}
}
/**
* 是否图表悬浮超链且内部图表是否可用
*

Loading…
Cancel
Save