diff --git a/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java b/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java index 24dd314844..bc298f1b6f 100644 --- a/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java +++ b/designer-base/src/main/java/com/fr/design/DesignModelAdapter.java @@ -1,8 +1,11 @@ package com.fr.design; import com.fr.base.Parameter; +import com.fr.base.ParameterConfig; +import com.fr.base.TableData; import com.fr.base.io.BaseBook; import com.fr.data.TableDataSource; +import com.fr.data.operator.DataOperator; import com.fr.design.file.HistoryTemplateListCache; import com.fr.design.mainframe.DesignerFrameFileDealerPane; import com.fr.design.mainframe.JTemplate; @@ -11,9 +14,14 @@ import com.fr.form.ui.DataControl; import com.fr.form.ui.MultiFileEditor; import com.fr.form.ui.Widget; import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; +import com.fr.stable.Filter; +import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; import com.fr.stable.js.WidgetName; +import com.fr.util.ParameterApplyHelper; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -40,7 +48,7 @@ public abstract class DesignModelAdapter tableDataParametersMap = new HashMap<>(); + + public DesignModelAdapter(S jTemplate) { this.jTemplate = jTemplate; @@ -241,6 +255,85 @@ public abstract class DesignModelAdapter map, Filter filter) { + Iterator it = this.getBook().getTableDataNameIterator(); + try { + // 清空下缓存 + tableDataParametersMap.clear(); + while (it.hasNext()) { + String name = it.next(); + TableData tableData = this.getBook().getTableData(name); + ParameterProvider[] parameterProviders = DataOperator.getInstance().getTableDataParameters(tableData); + if (filter != null) { + ParameterApplyHelper.addPara2Map(map, parameterProviders, filter); + } else { + ParameterApplyHelper.addPara2Map(map, parameterProviders); + } + tableDataParametersMap.put(name, parameterProviders); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + } + + protected void updateTableDataParameters(String oldName, + String tdName, + TableData tableData, + Map map, + Filter filter) { + + // 处理初始化添加 + if (tableDataParametersMap.isEmpty()) { + addTableDataParameters(map, filter); + return; + } + + ParameterProvider[] providers = null; + + if (!ComparatorUtils.equals(oldName, tdName)) { + // 更新下缓存名称 替换下数据集名称 + providers = tableDataParametersMap.remove(oldName); + if (providers != null) { + tableDataParametersMap.put(tdName, providers); + } + } + + + try { + for (Map.Entry entry : tableDataParametersMap.entrySet()) { + ParameterProvider[] parameterProviders; + if (ComparatorUtils.equals(entry.getKey(), tdName)) { + parameterProviders = DataOperator.getInstance().getTableDataParameters(tableData); + // 用来更新缓存 + providers = parameterProviders; + } else { + parameterProviders = entry.getValue(); + } + + if (filter != null) { + ParameterApplyHelper.addPara2Map(map, parameterProviders, filter); + } else { + ParameterApplyHelper.addPara2Map(map, parameterProviders); + } + + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + + if (providers != null) { + // 更新缓存 + tableDataParametersMap.put(tdName, providers); + } + } + + protected void addGlobalParameters(Map map) { + // 添加全局参数 + Parameter[] glbParas = ParameterConfig.getInstance().getGlobalParameters(); + ParameterApplyHelper.addPara2Map(map, glbParas); + + } + /** * 环境改变. */ @@ -251,6 +344,11 @@ public abstract class DesignModelAdapter