Browse Source

Merge branch 'feature/10.0' of ssh://code.fineres.com:7999/~tommy/design into feature/10.0

feature/10.0
kuangshuai 3 years ago
parent
commit
2a67148407
  1. 26
      designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java
  2. 3
      designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java
  3. 21
      designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java
  4. 84
      designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java
  5. 22
      designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java
  6. 3
      designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java
  7. 34
      designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java
  8. 34
      designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java
  9. 34
      designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java
  10. 34
      designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java
  11. 37
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java
  12. 37
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java
  13. 9
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java
  14. 37
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java
  15. 38
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java
  16. 38
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java
  17. 37
      designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java
  18. 20
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java
  19. 20
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java
  20. 22
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java
  21. 21
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java
  22. 151
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java
  23. 17
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java
  24. 20
      designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java
  25. 65
      designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java
  26. 7
      designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java

26
designer-base/src/main/java/com/fr/design/data/datapane/connect/DatabaseConnectionPane.java

@ -6,7 +6,7 @@ package com.fr.design.data.datapane.connect;
import com.fr.data.impl.Connection;
import com.fr.data.impl.JDBCDatabaseConnection;
import com.fr.data.impl.JNDIDatabaseConnection;
import com.fr.data.operator.DataOperator;
import com.fr.data.operator.DataOperatorProvider;
import com.fr.data.solution.ExceptionSolutionSelector;
import com.fr.data.solution.entity.DriverPage;
import com.fr.data.solution.processor.ClassNotFoundExceptionSolutionProcessor;
@ -22,9 +22,12 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.scrollruler.ModLineBorder;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.log.FineLoggerFactory;
import com.fr.rpc.ExceptionHandler;
import com.fr.rpc.RPCInvokerExceptionInfo;
import com.fr.stable.ArrayUtils;
import com.fr.stable.EncodeConstants;
import com.fr.stable.StringUtils;
import com.fr.workspace.WorkContext;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
@ -93,7 +96,26 @@ public abstract class DatabaseConnectionPane<E extends com.fr.data.impl.Connecti
Connection database = DatabaseConnectionPane.this.updateBean();
// 返回连接结果
DriverPage.updateCache();
DataOperator.getInstance().testConnectionWithException(database);
final Exception[] exception = new Exception[1];
WorkContext.getCurrent().get(DataOperatorProvider.class, new ExceptionHandler() {
@Override
public Object callHandler(RPCInvokerExceptionInfo exceptionInfo) {
// 正常调用发生的异常也会被捕获,因此需要对异常类型进行判断,如果是NoSuchMethodException 就要去调用 testConnection
// 如果不是 NoSuchMethodException 保存下异常上下文
// 两种情况下异常都需要抛出
if (exceptionInfo.getException() instanceof NoSuchMethodException) {
if (!WorkContext.getCurrent().get(DataOperatorProvider.class).testConnection(database)) {
exception[0] = new Exception(Toolkit.i18nText("Fine-Design_Description_Of_Test_Connection"));
}
} else {
exception[0] = exceptionInfo.getException();
}
return null;
}
}).testConnectionWithException(database);
if (exception[0] != null) {
throw exception[0];
}
return null;
}

3
designer-base/src/main/java/com/fr/design/file/filter/ClassFilter.java

@ -5,6 +5,8 @@ import java.util.HashSet;
import java.util.Set;
/**
* classloader查找过滤器
*
* 过滤无需遍历的jdk class
*
* @author hades
@ -26,6 +28,7 @@ public class ClassFilter implements Filter<String> {
FILTER_SET.add("java.awt.image.BufferedImage");
FILTER_SET.add("sun.awt.AppContext");
FILTER_SET.add("com.fr.poly.creator.ECBlockCreator");
FILTER_SET.add("com.fr.form.ui.ElementCaseImage");
}
@Override

21
designer-base/src/main/java/com/fr/design/mod/ContentObjectManager.java

@ -1,12 +1,21 @@
package com.fr.design.mod;
import com.fr.base.Formula;
import com.fr.base.headerfooter.FormulaHFElement;
import com.fr.base.present.FormulaPresent;
import com.fr.chart.web.ChartHyperRelateCellLink;
import com.fr.chart.web.ChartHyperRelateFloatLink;
import com.fr.design.file.filter.ClassFilter;
import com.fr.data.SimpleDSColumn;
import com.fr.data.condition.FormulaCondition;
import com.fr.data.impl.FormulaDictionary;
import com.fr.data.impl.NameTableData;
import com.fr.form.main.FormHyperlink;
import com.fr.invoke.ClassHelper;
import com.fr.js.JavaScriptImpl;
import com.fr.plugin.chart.base.VanChartHtmlLabel;
import com.fr.report.cell.cellattr.CellExpandAttr;
import com.fr.report.cell.cellattr.core.RichChar;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.stable.Filter;
import java.util.HashSet;
import java.util.Map;
@ -41,6 +50,16 @@ public class ContentObjectManager {
set.add(ChartHyperRelateCellLink.class.getName());
set.add(ChartHyperRelateFloatLink.class.getName());
set.add(VanChartHtmlLabel.class.getName());
set.add(NameTableData.class.getName());
set.add(SimpleDSColumn.class.getName());
set.add(DSColumn.class.getName());
set.add(FormHyperlink.class.getName());
set.add(CellExpandAttr.class.getName());
set.add(FormulaCondition.class.getName());
set.add(FormulaDictionary.class.getName());
set.add(FormulaHFElement.class.getName());
set.add(FormulaPresent.class.getName());
set.add(RichChar.class.getName());
}
public void searchObject(Object ob) {

84
designer-base/src/main/java/com/fr/design/mod/ContentReplaceUtil.java

@ -1,5 +1,10 @@
package com.fr.design.mod;
import com.fr.parser.FRFormulaTransformer;
import com.fr.stable.StringUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author hades
* @version 10.0
@ -9,12 +14,89 @@ public class ContentReplaceUtil {
public static final String EQ_STRING = "=";
public static final String LEFT_BRACKET = "${";
public static final String RIGHT_BRACKET = "}";
public static String replaceContent(String content, String oldName, String newName) {
return content.replaceAll(generateStr(oldName), generateStr(newName));
String oldNameUpper = oldName.toUpperCase();
Matcher m = Pattern.compile(oldName + "|" + oldNameUpper).matcher(content);
StringBuilder sb = new StringBuilder();
int last = 0;
while (m.find()) {
sb.append(content, last, m.start());
if (oldNameUpper.equals(m.group())) {
// 处理大写情况
sb.append(newName.toUpperCase());
} else {
// 默认情况
sb.append(newName);
}
last = m.end();
}
sb.append(content.substring(last));
return sb.toString();
}
private static String generateStr(String str) {
return "\"" + str + "\"";
}
public static String getFormulaPureContent(String content) {
if (content.startsWith(EQ_STRING)) {
return content.substring(1);
} else {
return content;
}
}
public static String replaceFormulaContent4WidgetName(String content, String oldName, String newName) {
if (StringUtils.isNotEmpty(content)) {
content = getFormulaPureContent(content);
FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer();
frFormulaTransformer.addRenamedWidget(oldName, newName);
return EQ_STRING + frFormulaTransformer.transform(content);
}
return content;
}
public static String replaceFormulaContent4TableDataName(String content, String oldName, String newName) {
if (StringUtils.isNotEmpty(content)) {
content = getFormulaPureContent(content);
FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer();
frFormulaTransformer.addRenamedDataset(oldName, newName);
return EQ_STRING + frFormulaTransformer.transform(content);
}
return content;
}
public static String getRichCharFormulaPureContent(String content) {
if (content.startsWith(LEFT_BRACKET)) {
return content.substring(LEFT_BRACKET.length() + 1, content.length() - 1);
} else {
return content;
}
}
public static String replaceRichCharFormulaContent4TableDataName(String content, String oldName, String newName) {
if (StringUtils.isNotEmpty(content)) {
content = getRichCharFormulaPureContent(content);
FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer();
frFormulaTransformer.addRenamedDataset(oldName, newName);
return LEFT_BRACKET + EQ_STRING + frFormulaTransformer.transform(content) + RIGHT_BRACKET;
}
return content;
}
public static String replaceRichCharFormulaContent4WidgetName(String content, String oldName, String newName) {
if (StringUtils.isNotEmpty(content)) {
content = getRichCharFormulaPureContent(content);
FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer();
frFormulaTransformer.addRenamedWidget(oldName, newName);
return LEFT_BRACKET + EQ_STRING + frFormulaTransformer.transform(content) + RIGHT_BRACKET;
}
return content;
}
}

22
designer-base/src/main/java/com/fr/design/mod/ContentReplacerCenter.java

@ -6,9 +6,19 @@ import com.fr.design.mod.event.TableDataModifyEvent;
import com.fr.design.mod.event.WidgetNameModifyEvent;
import com.fr.design.mod.impl.change.ChartHyperRelateCellLinkContentChange;
import com.fr.design.mod.impl.change.ChartHyperRelateFloatLinkContentChange;
import com.fr.design.mod.impl.change.FormulaContentChange;
import com.fr.design.mod.impl.change.DSColumnContentChange;
import com.fr.design.mod.impl.change.FormHyperlinkContentChange;
import com.fr.design.mod.impl.change.formula.CellExpandAttrContentChange;
import com.fr.design.mod.impl.change.formula.FormulaConditionContentChange;
import com.fr.design.mod.impl.change.formula.FormulaContentChange;
import com.fr.design.mod.impl.change.JavaScriptContentChange;
import com.fr.design.mod.impl.change.NameTableDataContentChange;
import com.fr.design.mod.impl.change.SimpleDSColumnContentChange;
import com.fr.design.mod.impl.change.VanChartHtmlLabelContentChange;
import com.fr.design.mod.impl.change.formula.FormulaDictionaryContentChange;
import com.fr.design.mod.impl.change.formula.FormulaHFElementContentChange;
import com.fr.design.mod.impl.change.formula.FormulaPresentContentChange;
import com.fr.design.mod.impl.change.formula.RichCharContentChange;
import com.fr.event.Event;
import com.fr.event.EventDispatcher;
import com.fr.event.Listener;
@ -73,6 +83,16 @@ public class ContentReplacerCenter {
contentChangeList.add(new FormulaContentChange());
contentChangeList.add(new JavaScriptContentChange());
contentChangeList.add(new VanChartHtmlLabelContentChange());
contentChangeList.add(new NameTableDataContentChange());
contentChangeList.add(new SimpleDSColumnContentChange());
contentChangeList.add(new DSColumnContentChange());
contentChangeList.add(new FormHyperlinkContentChange());
contentChangeList.add(new CellExpandAttrContentChange());
contentChangeList.add(new FormulaConditionContentChange());
contentChangeList.add(new FormulaDictionaryContentChange());
contentChangeList.add(new FormulaHFElementContentChange());
contentChangeList.add(new FormulaPresentContentChange());
contentChangeList.add(new RichCharContentChange());
}
private void onRename(List<ContentChangeItem> contentChangeItemList, List<ContentChange> contentChangeList) {

3
designer-base/src/main/java/com/fr/design/mod/ModClassFilter.java

@ -5,6 +5,8 @@ import java.util.HashSet;
import java.util.Set;
/**
* 联动修改的类过滤器
*
* @author hades
* @version 10.0
* Created by hades on 2021/5/31
@ -24,6 +26,7 @@ public class ModClassFilter implements Filter<String> {
FILTER_SET.add("sun.awt.AppContext");
FILTER_SET.add("com.fr.poly.creator.ECBlockCreator");
FILTER_SET.add("io.netty.channel.nio.SelectedSelectionKeySet");
FILTER_SET.add("com.fr.form.ui.ElementCaseImage");
}
@Override

34
designer-base/src/main/java/com/fr/design/mod/impl/change/DSColumnContentChange.java

@ -0,0 +1,34 @@
package com.fr.design.mod.impl.change;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.DSColumnContentReplacer;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import java.util.HashMap;
import java.util.Map;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class DSColumnContentChange implements ContentChange<DSColumn> {
private final Map<ChangeItem, ContentReplacer<DSColumn>> map;
public DSColumnContentChange() {
map = new HashMap<>();
map.put(ChangeItem.TABLE_DATA_NAME, new DSColumnContentReplacer());
}
@Override
public String type() {
return DSColumn.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<DSColumn>> changeInfo() {
return map;
}
}

34
designer-base/src/main/java/com/fr/design/mod/impl/change/FormHyperlinkContentChange.java

@ -0,0 +1,34 @@
package com.fr.design.mod.impl.change;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormHyperlinkContentReplacer;
import com.fr.form.main.FormHyperlink;
import java.util.HashMap;
import java.util.Map;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormHyperlinkContentChange implements ContentChange<FormHyperlink> {
private final Map<ChangeItem, ContentReplacer<FormHyperlink>> map;
public FormHyperlinkContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, new FormHyperlinkContentReplacer());
}
@Override
public String type() {
return FormHyperlink.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<FormHyperlink>> changeInfo() {
return map;
}
}

34
designer-base/src/main/java/com/fr/design/mod/impl/change/NameTableDataContentChange.java

@ -0,0 +1,34 @@
package com.fr.design.mod.impl.change;
import com.fr.data.impl.NameTableData;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.NameTableDataContentReplacer;
import java.util.HashMap;
import java.util.Map;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class NameTableDataContentChange implements ContentChange<NameTableData> {
private final Map<ChangeItem, ContentReplacer<NameTableData>> map;
public NameTableDataContentChange() {
map = new HashMap<>();
map.put(ChangeItem.TABLE_DATA_NAME, new NameTableDataContentReplacer());
}
@Override
public String type() {
return NameTableData.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<NameTableData>> changeInfo() {
return map;
}
}

34
designer-base/src/main/java/com/fr/design/mod/impl/change/SimpleDSColumnContentChange.java

@ -0,0 +1,34 @@
package com.fr.design.mod.impl.change;
import com.fr.data.SimpleDSColumn;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.SimpleDSColumnContentReplacer;
import java.util.HashMap;
import java.util.Map;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class SimpleDSColumnContentChange implements ContentChange<SimpleDSColumn> {
private Map<ChangeItem, ContentReplacer<SimpleDSColumn>> map;
public SimpleDSColumnContentChange() {
map = new HashMap<>();
map.put(ChangeItem.TABLE_DATA_NAME, new SimpleDSColumnContentReplacer());
}
@Override
public String type() {
return SimpleDSColumn.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<SimpleDSColumn>> changeInfo() {
return map;
}
}

37
designer-base/src/main/java/com/fr/design/mod/impl/change/formula/CellExpandAttrContentChange.java

@ -0,0 +1,37 @@
package com.fr.design.mod.impl.change.formula;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import com.fr.report.cell.cellattr.CellExpandAttr;
import java.util.HashMap;
import java.util.Map;
/**
* 扩展后排序公式
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class CellExpandAttrContentChange implements ContentChange<CellExpandAttr> {
private final Map<ChangeItem, ContentReplacer<CellExpandAttr>> map;
public CellExpandAttrContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CellExpandAttr4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CellExpandAttr4TableDataNameContentReplacer);
}
@Override
public String type() {
return CellExpandAttr.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<CellExpandAttr>> changeInfo() {
return map;
}
}

37
designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaConditionContentChange.java

@ -0,0 +1,37 @@
package com.fr.design.mod.impl.change.formula;
import com.fr.data.condition.FormulaCondition;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import java.util.HashMap;
import java.util.Map;
/**
* 公式条件
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormulaConditionContentChange implements ContentChange<FormulaCondition> {
private final Map<ChangeItem, ContentReplacer<FormulaCondition>> map;
public FormulaConditionContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaCondition4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaCondition4TableDataNameContentReplacer);
}
@Override
public String type() {
return FormulaCondition.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<FormulaCondition>> changeInfo() {
return map;
}
}

9
designer-base/src/main/java/com/fr/design/mod/impl/change/FormulaContentChange.java → designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaContentChange.java

@ -1,11 +1,10 @@
package com.fr.design.mod.impl.change;
package com.fr.design.mod.impl.change.formula;
import com.fr.base.Formula;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.Formula4TableDataNameContentReplacer;
import com.fr.design.mod.impl.repalce.Formula4WidgetNameContentReplacer;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import java.util.HashMap;
import java.util.Map;
@ -20,8 +19,8 @@ public class FormulaContentChange implements ContentChange<Formula> {
public FormulaContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, new Formula4WidgetNameContentReplacer());
map.put(ChangeItem.TABLE_DATA_NAME, new Formula4TableDataNameContentReplacer());
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.Formula4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.Formula4TableDataNameContentReplacer);
}
@Override

37
designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaDictionaryContentChange.java

@ -0,0 +1,37 @@
package com.fr.design.mod.impl.change.formula;
import com.fr.data.impl.FormulaDictionary;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import java.util.HashMap;
import java.util.Map;
/**
* 数据字典公式
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormulaDictionaryContentChange implements ContentChange<FormulaDictionary> {
private final Map<ChangeItem, ContentReplacer<FormulaDictionary>> map;
public FormulaDictionaryContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaDictionary4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaDictionary4TableDataNameContentReplacer);
}
@Override
public String type() {
return FormulaDictionary.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<FormulaDictionary>> changeInfo() {
return map;
}
}

38
designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaHFElementContentChange.java

@ -0,0 +1,38 @@
package com.fr.design.mod.impl.change.formula;
import com.fr.base.headerfooter.FormulaHFElement;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import java.util.HashMap;
import java.util.Map;
/**
* 页面/页脚公式
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormulaHFElementContentChange implements ContentChange<FormulaHFElement> {
private final Map<ChangeItem, ContentReplacer<FormulaHFElement>> map;
public FormulaHFElementContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaHFElement4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaHFElement4TableDataNameContentReplacer);
}
@Override
public String type() {
return FormulaHFElement.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<FormulaHFElement>> changeInfo() {
return map;
}
}

38
designer-base/src/main/java/com/fr/design/mod/impl/change/formula/FormulaPresentContentChange.java

@ -0,0 +1,38 @@
package com.fr.design.mod.impl.change.formula;
import com.fr.base.present.FormulaPresent;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import java.util.HashMap;
import java.util.Map;
/**
* 公式形态
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormulaPresentContentChange implements ContentChange<FormulaPresent> {
private final Map<ChangeItem, ContentReplacer<FormulaPresent>> map;
public FormulaPresentContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FormulaPresent4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FormulaPresent4TableDataNameContentReplacer);
}
@Override
public String type() {
return FormulaPresent.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<FormulaPresent>> changeInfo() {
return map;
}
}

37
designer-base/src/main/java/com/fr/design/mod/impl/change/formula/RichCharContentChange.java

@ -0,0 +1,37 @@
package com.fr.design.mod.impl.change.formula;
import com.fr.design.mod.ContentChange;
import com.fr.design.mod.ContentReplacer;
import com.fr.design.mod.bean.ChangeItem;
import com.fr.design.mod.impl.repalce.FormulaReplacer;
import com.fr.report.cell.cellattr.core.RichChar;
import java.util.HashMap;
import java.util.Map;
/**
* 富文本
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class RichCharContentChange implements ContentChange<RichChar> {
private final Map<ChangeItem, ContentReplacer<RichChar>> map;
public RichCharContentChange() {
map = new HashMap<>();
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.RichChar4WidgetNameContentReplacer);
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.RichChar4TableDataNameContentReplacer);
}
@Override
public String type() {
return RichChar.class.getName();
}
@Override
public Map<ChangeItem, ContentReplacer<RichChar>> changeInfo() {
return map;
}
}

20
designer-base/src/main/java/com/fr/design/mod/impl/repalce/DSColumnContentReplacer.java

@ -0,0 +1,20 @@
package com.fr.design.mod.impl.repalce;
import com.fr.design.mod.ContentReplacer;
import com.fr.general.ComparatorUtils;
import com.fr.report.cell.cellattr.core.group.DSColumn;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class DSColumnContentReplacer implements ContentReplacer<DSColumn> {
@Override
public void replace(DSColumn dsColumn, String oldName, String newName) {
if (ComparatorUtils.equals(dsColumn.getDSName(), oldName)) {
dsColumn.setDSName(newName);
}
}
}

20
designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormHyperlinkContentReplacer.java

@ -0,0 +1,20 @@
package com.fr.design.mod.impl.repalce;
import com.fr.design.mod.ContentReplacer;
import com.fr.form.main.FormHyperlink;
import com.fr.general.ComparatorUtils;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormHyperlinkContentReplacer implements ContentReplacer<FormHyperlink> {
@Override
public void replace(FormHyperlink formHyperlink, String oldName, String newName) {
if (ComparatorUtils.equals(formHyperlink.getRelateEditorName(), oldName)) {
formHyperlink.setRelateEditorName(newName);
}
}
}

22
designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4TableDataNameContentReplacer.java

@ -1,22 +0,0 @@
package com.fr.design.mod.impl.repalce;
import com.fr.base.Formula;
import com.fr.design.mod.ContentReplaceUtil;
import com.fr.design.mod.ContentReplacer;
import com.fr.parser.FRFormulaTransformer;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/5/28
*/
public class Formula4TableDataNameContentReplacer implements ContentReplacer<Formula> {
@Override
public void replace(Formula formula, String oldName, String newName) {
FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer();
frFormulaTransformer.addRenamedDataset(oldName, newName);
formula.setContent(ContentReplaceUtil.EQ_STRING + frFormulaTransformer.transform(formula.getPureContent()));
}
}

21
designer-base/src/main/java/com/fr/design/mod/impl/repalce/Formula4WidgetNameContentReplacer.java

@ -1,21 +0,0 @@
package com.fr.design.mod.impl.repalce;
import com.fr.base.Formula;
import com.fr.design.mod.ContentReplaceUtil;
import com.fr.design.mod.ContentReplacer;
import com.fr.parser.FRFormulaTransformer;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/5/28
*/
public class Formula4WidgetNameContentReplacer implements ContentReplacer<Formula> {
@Override
public void replace(Formula formula, String oldName, String newName) {
FRFormulaTransformer frFormulaTransformer = new FRFormulaTransformer();
frFormulaTransformer.addRenamedWidget(oldName, newName);
formula.setContent(ContentReplaceUtil.EQ_STRING + frFormulaTransformer.transform(formula.getPureContent()));
}
}

151
designer-base/src/main/java/com/fr/design/mod/impl/repalce/FormulaReplacer.java

@ -0,0 +1,151 @@
package com.fr.design.mod.impl.repalce;
import com.fr.base.Formula;
import com.fr.base.headerfooter.FormulaHFElement;
import com.fr.base.present.FormulaPresent;
import com.fr.data.condition.FormulaCondition;
import com.fr.data.impl.FormulaDictionary;
import com.fr.design.mod.ContentReplaceUtil;
import com.fr.design.mod.ContentReplacer;
import com.fr.report.cell.cellattr.CellExpandAttr;
import com.fr.report.cell.cellattr.core.RichChar;
/**
* 持有公式内容对象汇总
*
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class FormulaReplacer {
/**
* 扩展后排序公式
*/
public static final ContentReplacer<CellExpandAttr> CellExpandAttr4TableDataNameContentReplacer = new ContentReplacer<CellExpandAttr>() {
@Override
public void replace(CellExpandAttr cellExpandAttr, String oldName, String newName) {
cellExpandAttr.setSortFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(cellExpandAttr.getSortFormula(), oldName, newName));
}
};
public static final ContentReplacer<CellExpandAttr> CellExpandAttr4WidgetNameContentReplacer = new ContentReplacer<CellExpandAttr>() {
@Override
public void replace(CellExpandAttr cellExpandAttr, String oldName, String newName) {
cellExpandAttr.setSortFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(cellExpandAttr.getSortFormula(), oldName, newName));
}
};
/**
* 典型单元格公式
*/
public static final ContentReplacer<Formula> Formula4TableDataNameContentReplacer = new ContentReplacer<Formula>() {
@Override
public void replace(Formula formula, String oldName, String newName) {
formula.setContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formula.getPureContent(), oldName, newName));
}
};
public static final ContentReplacer<Formula> Formula4WidgetNameContentReplacer = new ContentReplacer<Formula>() {
@Override
public void replace(Formula formula, String oldName, String newName) {
formula.setContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formula.getPureContent(), oldName, newName));
}
};
/**
* 公式条件
*/
public static final ContentReplacer<FormulaCondition> FormulaCondition4TableDataNameContentReplacer = new ContentReplacer<FormulaCondition>() {
@Override
public void replace(FormulaCondition formulaCondition, String oldName, String newName) {
formulaCondition.setFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaCondition.getFormula(), oldName, newName));
}
};
public static final ContentReplacer<FormulaCondition> FormulaCondition4WidgetNameContentReplacer = new ContentReplacer<FormulaCondition>() {
@Override
public void replace(FormulaCondition formulaCondition, String oldName, String newName) {
formulaCondition.setFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaCondition.getFormula(), oldName, newName));
}
};
/**
* 数据字典公式
*/
public static final ContentReplacer<FormulaDictionary> FormulaDictionary4TableDataNameContentReplacer = new ContentReplacer<FormulaDictionary>() {
@Override
public void replace(FormulaDictionary formulaDictionary, String oldName, String newName) {
formulaDictionary.setExcuteFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaDictionary.getExcuteFormula(), oldName, newName));
formulaDictionary.setProduceFormula(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaDictionary.getProduceFormula(), oldName, newName));
}
};
public static final ContentReplacer<FormulaDictionary> FormulaDictionary4WidgetNameContentReplacer = new ContentReplacer<FormulaDictionary>() {
@Override
public void replace(FormulaDictionary formulaDictionary, String oldName, String newName) {
formulaDictionary.setExcuteFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaDictionary.getExcuteFormula(), oldName, newName));
formulaDictionary.setProduceFormula(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaDictionary.getProduceFormula(), oldName, newName));
}
};
/**
* 页面/页脚公式
*/
public static final ContentReplacer<FormulaHFElement> FormulaHFElement4TableDataNameContentReplacer = new ContentReplacer<FormulaHFElement>() {
@Override
public void replace(FormulaHFElement formulaHFElement, String oldName, String newName) {
formulaHFElement.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaHFElement.getFormulaContent(), oldName, newName));
}
};
public static final ContentReplacer<FormulaHFElement> FormulaHFElement4WidgetNameContentReplacer = new ContentReplacer<FormulaHFElement>() {
@Override
public void replace(FormulaHFElement formulaHFElement, String oldName, String newName) {
formulaHFElement.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaHFElement.getFormulaContent(), oldName, newName));
}
};
/**
* 公式形态
*/
public static final ContentReplacer<FormulaPresent> FormulaPresent4TableDataNameContentReplacer = new ContentReplacer<FormulaPresent>() {
@Override
public void replace(FormulaPresent formulaPresent, String oldName, String newName) {
formulaPresent.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4TableDataName(formulaPresent.getFormulaContent(), oldName, newName));
}
};
public static final ContentReplacer<FormulaPresent> FormulaPresent4WidgetNameContentReplacer = new ContentReplacer<FormulaPresent>() {
@Override
public void replace(FormulaPresent formulaPresent, String oldName, String newName) {
formulaPresent.setFormulaContent(ContentReplaceUtil.replaceFormulaContent4WidgetName(formulaPresent.getFormulaContent(), oldName, newName));
}
};
/**
* 富文本公式
*/
public static final ContentReplacer<RichChar> RichChar4TableDataNameContentReplacer = new ContentReplacer<RichChar>() {
@Override
public void replace(RichChar richChar, String oldName, String newName) {
if (richChar.isFormula()) {
richChar.setText(ContentReplaceUtil.replaceRichCharFormulaContent4TableDataName(richChar.getText(), oldName, newName));
}
}
};
public static final ContentReplacer<RichChar> RichChar4WidgetNameContentReplacer = new ContentReplacer<RichChar>() {
@Override
public void replace(RichChar richChar, String oldName, String newName) {
if (richChar.isFormula()) {
richChar.setText(ContentReplaceUtil.replaceRichCharFormulaContent4WidgetName(richChar.getText(), oldName, newName));
}
}
};
}

17
designer-base/src/main/java/com/fr/design/mod/impl/repalce/NameTableDataContentReplacer.java

@ -0,0 +1,17 @@
package com.fr.design.mod.impl.repalce;
import com.fr.data.impl.NameTableData;
import com.fr.design.mod.ContentReplacer;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class NameTableDataContentReplacer implements ContentReplacer<NameTableData> {
@Override
public void replace(NameTableData nameTableData, String oldName, String newName) {
nameTableData.rename(oldName, newName);
}
}

20
designer-base/src/main/java/com/fr/design/mod/impl/repalce/SimpleDSColumnContentReplacer.java

@ -0,0 +1,20 @@
package com.fr.design.mod.impl.repalce;
import com.fr.data.SimpleDSColumn;
import com.fr.design.mod.ContentReplacer;
import com.fr.general.ComparatorUtils;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class SimpleDSColumnContentReplacer implements ContentReplacer<SimpleDSColumn> {
@Override
public void replace(SimpleDSColumn simpleDSColumn, String oldName, String newName) {
if (ComparatorUtils.equals(simpleDSColumn.getDsName(), oldName)) {
simpleDSColumn.setDsName(newName);
}
}
}

65
designer-base/src/test/java/com/fr/design/mod/ContentReplaceUtilTest.java

@ -0,0 +1,65 @@
package com.fr.design.mod;
import junit.framework.TestCase;
import org.junit.Assert;
/**
* @author hades
* @version 10.0
* Created by hades on 2021/6/2
*/
public class ContentReplaceUtilTest extends TestCase {
public void testReplaceContent() {
String text = "setTimeout(function() {\n" +
"\n" +
"\t$(\"div[widgetname=DATEEDITOR0]\").css({\n" +
"\n" +
"\t\t'opacity': '0.3'\n" +
"\n" +
"\t});\n" +
"\n" +
"}, 50);\n" +
"var a = \"dateEditor0\"";
String oldName = "dateEditor0";
String newName = "dateEditor00";
String result = "setTimeout(function() {\n" +
"\n" +
"\t$(\"div[widgetname=DATEEDITOR00]\").css({\n" +
"\n" +
"\t\t'opacity': '0.3'\n" +
"\n" +
"\t});\n" +
"\n" +
"}, 50);\n" +
"var a = \"dateEditor00\"";
Assert.assertEquals(result, ContentReplaceUtil.replaceContent(text, oldName, newName));
String text1 = "setInterval(function() {\n" +
"\t//获取当前body中tab的索引位置\n" +
" var aa = _g().getWidgetByName(\"tabpane00\").getShowIndex();\n" +
" //根据tab索引轮播tab块,索引从0开始,到最后一个tab块后跳转到第一个\n" +
"\tif(aa == TAB轮播-测试-2) {\n" +
" _g().getWidgetByName('tabpane00').showCardByIndex(0);\n" +
" } else {\n" +
"\n" +
" _g().getWidgetByName('tabpane00').showCardByIndex(aa + TAB轮播-测试-1);\n" +
" }\n" +
"}, TAB轮播-测试-2000);";
String oldName1 = "tabpane00";
String newName1 = "tabpane0";
String result1 = "setInterval(function() {\n" +
"\t//获取当前body中tab的索引位置\n" +
" var aa = _g().getWidgetByName(\"tabpane0\").getShowIndex();\n" +
" //根据tab索引轮播tab块,索引从0开始,到最后一个tab块后跳转到第一个\n" +
"\tif(aa == TAB轮播-测试-2) {\n" +
" _g().getWidgetByName('tabpane0').showCardByIndex(0);\n" +
" } else {\n" +
"\n" +
" _g().getWidgetByName('tabpane0').showCardByIndex(aa + TAB轮播-测试-1);\n" +
" }\n" +
"}, TAB轮播-测试-2000);";
Assert.assertEquals(result1, ContentReplaceUtil.replaceContent(text1, oldName1, newName1));
}
}

7
designer-form/src/main/java/com/fr/design/mainframe/FormCreatorDropTarget.java

@ -5,6 +5,7 @@ import com.fr.base.chart.BaseChartCollection;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chartx.attr.ChartProvider;
import com.fr.design.DesignModelAdapter;
import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.datapane.TableDataTreePane;
import com.fr.design.designer.beans.AdapterBus;
import com.fr.design.designer.beans.HoverPainter;
@ -34,6 +35,7 @@ import com.fr.stable.Constants;
import com.fr.stable.StringUtils;
import java.util.Collections;
import java.util.HashMap;
import javax.swing.BorderFactory;
import javax.swing.JWindow;
import java.util.List;
@ -112,8 +114,13 @@ public class FormCreatorDropTarget extends DropTarget {
tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource(), true);
//合并数据集之后,可能会有数据集名称变化,做一下联动
//共享的组件拿的时候都是克隆的,这边改拖拽中克隆的对象而非新克隆对象,上面这个新克隆的对象只是为了拿数据集
Map<String, String> map = new HashMap<>();
for (Map.Entry<String, String> entry : tdNameMap.entrySet()) {
designer.getTarget().renameTableData(widget, entry.getKey(), entry.getValue());
map.put(entry.getKey(), entry.getValue());
}
if (!map.isEmpty()) {
DesignTableDataManager.fireDSChanged(map);
}
}
EventDispatcher.fire(TableDataModifyEvent.INSTANCE, new ContentChangeItem(tdNameMap, widget, ChangeItem.TABLE_DATA_NAME));

Loading…
Cancel
Save