kerry
3 years ago
53 changed files with 1627 additions and 119 deletions
@ -0,0 +1,277 @@
|
||||
package com.fr.design.data.datapane.preview.sql; |
||||
|
||||
import com.fr.base.Parameter; |
||||
import com.fr.base.ParameterHelper; |
||||
import com.fr.base.ParameterMapNameSpace; |
||||
import com.fr.data.impl.DBTableData; |
||||
import com.fr.data.impl.EscapeSqlHelper; |
||||
import com.fr.data.operator.DataOperator; |
||||
import com.fr.decision.webservice.v10.config.ConfigService; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.dialog.link.MessageWithLink; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.DesignerContext; |
||||
import com.fr.design.parameter.ParameterInputPane; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.general.CloudCenter; |
||||
import com.fr.general.GeneralContext; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.injectable.PluginModule; |
||||
import com.fr.script.Calculator; |
||||
import com.fr.stable.ArrayUtils; |
||||
import com.fr.stable.ParameterProvider; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.fun.TableDataProvider; |
||||
import com.fr.stable.plugin.ExtraClassManagerProvider; |
||||
import com.fr.stable.script.NameSpace; |
||||
|
||||
import javax.swing.BorderFactory; |
||||
import javax.swing.JDialog; |
||||
import javax.swing.JFrame; |
||||
import javax.swing.JLabel; |
||||
import javax.swing.JPanel; |
||||
import javax.swing.JScrollPane; |
||||
import javax.swing.JTextArea; |
||||
import javax.swing.UIManager; |
||||
import javax.swing.text.BadLocationException; |
||||
import javax.swing.text.DefaultHighlighter; |
||||
import javax.swing.text.Highlighter; |
||||
import java.awt.BorderLayout; |
||||
import java.awt.Color; |
||||
import java.awt.Cursor; |
||||
import java.awt.Frame; |
||||
import java.awt.datatransfer.StringSelection; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.util.HashMap; |
||||
import java.util.HashSet; |
||||
import java.util.List; |
||||
import java.util.Locale; |
||||
import java.util.Map; |
||||
import java.util.Set; |
||||
|
||||
public class PreviewPerformedSqlPane extends JDialog implements ActionListener { |
||||
|
||||
private JPanel topPanel; |
||||
private JPanel centerPanel; |
||||
private JPanel bottomPanel; |
||||
|
||||
private UILabel imageLabel; |
||||
|
||||
public PreviewPerformedSqlPane(Frame frame, String sql) { |
||||
this(frame, sql, null, null, false); |
||||
} |
||||
|
||||
public PreviewPerformedSqlPane(Frame frame, String sql, List<int[]> selectedSpecialCharIndex, String[] selectedSpecialChar, boolean highlight) { |
||||
super(frame, true); |
||||
// 提示信息
|
||||
topPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
JPanel imagePanel = new JPanel(); |
||||
JPanel messagePanel; |
||||
|
||||
if (isShowSpecialCharSqlPane(selectedSpecialCharIndex)) { |
||||
imageLabel = new UILabel(UIManager.getIcon("OptionPane.warningIcon")); |
||||
messagePanel = new JPanel(); |
||||
messagePanel.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
messagePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); |
||||
// 日韩取消超链,直接显示文字
|
||||
if (isNotShowLink()) { |
||||
JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql_Message") + Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention") + Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); |
||||
messagePanel.add(label); |
||||
} else { |
||||
MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), CloudCenter.getInstance().acquireConf(Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention_Help"), "https://help.fanruan.com/finereport/doc-view-2219.html"), Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); |
||||
messagePanel.add(message); |
||||
} |
||||
// 提示图标
|
||||
JPanel tipPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
UILabel tipLabel = new UILabel(UIManager.getIcon("OptionPane.tipIcon")); |
||||
StringBuilder textBuilder = new StringBuilder(); |
||||
textBuilder.append("<html>").append(Toolkit.i18nText("Fine-Design_Basic_Processed_Special_Char")).append("<br/>"); |
||||
for (String sChar : selectedSpecialChar) { |
||||
textBuilder.append(sChar).append("<br/>"); |
||||
} |
||||
textBuilder.append("</html>"); |
||||
tipLabel.setToolTipText(textBuilder.toString()); |
||||
tipPanel.add(tipLabel, BorderLayout.SOUTH); |
||||
topPanel.add(tipPanel, BorderLayout.EAST); |
||||
} else { |
||||
imageLabel = new UILabel(UIManager.getIcon("OptionPane.informationIcon")); |
||||
messagePanel = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); |
||||
JLabel label = new JLabel(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql_Message")); |
||||
messagePanel.add(label); |
||||
} |
||||
imagePanel.add(imageLabel); |
||||
|
||||
topPanel.add(imagePanel, BorderLayout.WEST); |
||||
topPanel.add(messagePanel, BorderLayout.CENTER); |
||||
topPanel.setBorder(BorderFactory.createEmptyBorder(10,10,0,10)); |
||||
|
||||
//中间的SQL面板
|
||||
centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
centerPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); |
||||
JScrollPane scrollPane = new JScrollPane(); |
||||
JTextArea checkArea = new JTextArea(sql); |
||||
checkArea.setEditable(false); |
||||
checkArea.setCursor(new Cursor(Cursor.TEXT_CURSOR)); |
||||
if (highlight) { |
||||
Highlighter highLighter = checkArea.getHighlighter(); |
||||
DefaultHighlighter.DefaultHighlightPainter p = new DefaultHighlighter.DefaultHighlightPainter(Color.ORANGE); |
||||
for (int[] specialCharIndex : selectedSpecialCharIndex) { |
||||
try { |
||||
highLighter.addHighlight(specialCharIndex[0], specialCharIndex[1], p); |
||||
} catch (BadLocationException e) { |
||||
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||
} |
||||
} |
||||
} |
||||
scrollPane.setViewportView(checkArea); |
||||
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
||||
centerPanel.add(scrollPane); |
||||
|
||||
//底部的按钮面板
|
||||
UIButton okButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_OK")); |
||||
okButton.addActionListener(this); |
||||
bottomPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
||||
bottomPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); |
||||
bottomPanel.add(okButton, BorderLayout.EAST); |
||||
|
||||
this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); |
||||
this.setResizable(false); |
||||
this.add(topPanel, BorderLayout.NORTH); |
||||
this.add(centerPanel, BorderLayout.CENTER); |
||||
this.add(bottomPanel, BorderLayout.SOUTH); |
||||
this.setSize(600, 400); |
||||
|
||||
GUICoreUtils.centerWindow(this); |
||||
} |
||||
|
||||
private boolean isNotShowLink() { |
||||
return GeneralContext.getLocale().equals(Locale.JAPAN) || GeneralContext.getLocale().equals(Locale.KOREA); |
||||
} |
||||
|
||||
public static void previewPerformedSql(DBTableData tableData) { |
||||
Calculator calculator = Calculator.createCalculator(); |
||||
//参数
|
||||
ParameterProvider[] parameters = DataOperator.getInstance().getTableDataParameters(tableData); |
||||
if (ArrayUtils.isEmpty(parameters)) { |
||||
parameters = tableData.getParameters(calculator); |
||||
} |
||||
Map<String, Object> parameterMap = new HashMap<>(); |
||||
if (needInputParams(parameters)) { |
||||
showParaWindow(parameterMap, parameters); |
||||
} else { |
||||
for (ParameterProvider parameter : parameters) { |
||||
parameterMap.put(parameter.getName(), parameter.getValue()); |
||||
} |
||||
} |
||||
boolean showOriginSql = true; |
||||
for (ParameterProvider parameter : DataOperator.getInstance().getTableDataParameters(tableData)) { |
||||
if (parameterMap.containsKey(parameter.getName())) { |
||||
Object value = parameterMap.get(parameter.getName()); |
||||
if (value != null && !StringUtils.EMPTY.equals(value)) { |
||||
showOriginSql = false; |
||||
} |
||||
parameter.setValue(value); |
||||
} |
||||
} |
||||
String sql; |
||||
// 计算高亮文本位置
|
||||
List<int[]> specialCharParamIndex = null; |
||||
boolean highlight = true; |
||||
if (showOriginSql) { |
||||
sql = tableData.getQuery(); |
||||
} else { |
||||
NameSpace ns = ParameterMapNameSpace.create(parameterMap); |
||||
calculator.pushNameSpace(ns); |
||||
Parameter[] paras = processParameters(tableData, calculator); |
||||
// 所有被转义参数的集合
|
||||
Set<String> specialCharParam = EscapeSqlHelper.getInstance().getSpecialCharParam(paras); |
||||
// 将参数转义等
|
||||
Set<TableDataProvider> tableDataProviders = getTableDataProviders(); |
||||
for (TableDataProvider provider : tableDataProviders) { |
||||
provider.processParametersBeforeAnalyzeSQL(paras, calculator); |
||||
} |
||||
|
||||
if (!specialCharParam.isEmpty()) { |
||||
specialCharParamIndex = ParameterHelper.analyzeCurrentContextTableData4Template(tableData.getQuery(), paras, specialCharParam); |
||||
} |
||||
String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); |
||||
sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); |
||||
if (!StringUtils.equals(oldSql, sql)) { |
||||
highlight = false; |
||||
} |
||||
} |
||||
// sql内容复制到剪切板
|
||||
StringSelection selection = new StringSelection(sql); |
||||
java.awt.Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, selection); |
||||
// 弹窗
|
||||
PreviewPerformedSqlPane pane; |
||||
if (isShowSpecialCharSqlPane(specialCharParamIndex)) { |
||||
pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql, specialCharParamIndex, ConfigService.getInstance().getPSIConfig().getSelectedSpecialChar(), highlight); |
||||
} else { |
||||
pane = new PreviewPerformedSqlPane(DesignerContext.getDesignerFrame(), sql); |
||||
} |
||||
pane.setVisible(true); |
||||
} |
||||
|
||||
private static boolean isShowSpecialCharSqlPane(List<int[]> specialCharParamIndex) { |
||||
return specialCharParamIndex != null && !specialCharParamIndex.isEmpty(); |
||||
} |
||||
|
||||
private static Parameter[] processParameters(DBTableData tableData, Calculator calculator) { |
||||
ParameterProvider[] parameters = tableData.getParameters(); |
||||
if (parameters == null || parameters.length == 0) { |
||||
tableData.setParameters(ParameterHelper.analyze4Parameters(tableData.getQuery(), false)); |
||||
return new Parameter[0]; |
||||
} |
||||
return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters)); |
||||
} |
||||
|
||||
private static String processExtraSQL(Parameter[] ps, String sql, Calculator ca, Set<TableDataProvider> tableDataProviders) { |
||||
for (TableDataProvider provider : tableDataProviders) { |
||||
String newSql = provider.processTableDataSQL(ps, sql, ca); |
||||
if (StringUtils.isNotEmpty(newSql)) { |
||||
sql = newSql; |
||||
} |
||||
} |
||||
return sql; |
||||
} |
||||
|
||||
private static boolean needInputParams(ParameterProvider[] parameters) { |
||||
if (ArrayUtils.isNotEmpty(parameters)) { |
||||
return true; |
||||
} |
||||
for (ParameterProvider parameter : parameters) { |
||||
if (parameter.getValue() == null || StringUtils.EMPTY.equals(parameter.getValue())) { |
||||
return true; |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
private static void showParaWindow(final Map<String, Object> parameterMap, ParameterProvider[] inParameters) { |
||||
final ParameterInputPane pPane = new ParameterInputPane(inParameters); |
||||
pPane.showSmallWindow(new JFrame(), new DialogActionAdapter() { |
||||
@Override |
||||
public void doOk() { |
||||
parameterMap.putAll(pPane.update()); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
|
||||
private static Set<TableDataProvider> getTableDataProviders() { |
||||
ExtraClassManagerProvider classManagerProvider = PluginModule.getAgent(PluginModule.ExtraCore); |
||||
if (classManagerProvider == null) { |
||||
return new HashSet<>(); |
||||
} |
||||
return classManagerProvider.getArray(TableDataProvider.XML_TAG, EscapeSqlHelper.getInstance()); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPerformed(ActionEvent e) { |
||||
this.dispose(); |
||||
} |
||||
} |
@ -0,0 +1,36 @@
|
||||
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.DSColumn4TableDataNameContentReplacer; |
||||
import com.fr.design.mod.impl.repalce.DSColumn4WidgetNameContentReplacer; |
||||
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 DSColumn4TableDataNameContentReplacer()); |
||||
map.put(ChangeItem.WIDGET_NAME, new DSColumn4WidgetNameContentReplacer()); |
||||
} |
||||
|
||||
@Override |
||||
public String type() { |
||||
return DSColumn.class.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Map<ChangeItem, ContentReplacer<DSColumn>> changeInfo() { |
||||
return map; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -0,0 +1,36 @@
|
||||
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.form.ui.CardSwitchButton; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/6/3 |
||||
*/ |
||||
public class CardSwitchButtonContentChange implements ContentChange<CardSwitchButton> { |
||||
|
||||
|
||||
private final Map<ChangeItem, ContentReplacer<CardSwitchButton>> map; |
||||
|
||||
public CardSwitchButtonContentChange() { |
||||
map = new HashMap<>(); |
||||
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CardSwitchButton4WidgetNameContentReplacer); |
||||
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CardSwitchButton4TableDataNameContentReplacer); |
||||
} |
||||
|
||||
@Override |
||||
public String type() { |
||||
return CardSwitchButton.class.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Map<ChangeItem, ContentReplacer<CardSwitchButton>> changeInfo() { |
||||
return map; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
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.CellGUIAttr; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/6/3 |
||||
*/ |
||||
public class CellGUIAttrContentChange implements ContentChange<CellGUIAttr> { |
||||
|
||||
private Map<ChangeItem, ContentReplacer<CellGUIAttr>> map; |
||||
|
||||
public CellGUIAttrContentChange() { |
||||
map = new HashMap<>(); |
||||
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.CellGUIAttr4WidgetNameContentReplacer); |
||||
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.CellGUIAttr4TableDataNameContentReplacer); |
||||
} |
||||
|
||||
@Override |
||||
public String type() { |
||||
return CellGUIAttr.class.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Map<ChangeItem, ContentReplacer<CellGUIAttr>> changeInfo() { |
||||
return map; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
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.group.FunctionGrouper; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/6/3 |
||||
*/ |
||||
public class FunctionGrouperContentChange implements ContentChange<FunctionGrouper> { |
||||
|
||||
private final Map<ChangeItem, ContentReplacer<FunctionGrouper>> map; |
||||
|
||||
public FunctionGrouperContentChange() { |
||||
map = new HashMap<>(); |
||||
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.FunctionGrouper4WidgetNameContentReplacer); |
||||
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.FunctionGrouper4TableDataNameContentReplacer); |
||||
} |
||||
|
||||
@Override |
||||
public String type() { |
||||
return FunctionGrouper.class.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Map<ChangeItem, ContentReplacer<FunctionGrouper>> changeInfo() { |
||||
return map; |
||||
} |
||||
} |
@ -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; |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
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.group.SelectCount; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/6/3 |
||||
*/ |
||||
public class SelectCountContentChange implements ContentChange<SelectCount> { |
||||
|
||||
private final Map<ChangeItem, ContentReplacer<SelectCount>> map; |
||||
|
||||
public SelectCountContentChange() { |
||||
map = new HashMap<>(); |
||||
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.SelectCount4WidgetNameContentReplacer); |
||||
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.SelectCount4TableDataNameContentReplacer); |
||||
} |
||||
|
||||
@Override |
||||
public String type() { |
||||
return SelectCount.class.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Map<ChangeItem, ContentReplacer<SelectCount>> changeInfo() { |
||||
return map; |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
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.form.ui.WidgetTitle; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/6/3 |
||||
*/ |
||||
public class WidgetTitleContentChange implements ContentChange<WidgetTitle> { |
||||
|
||||
private final Map<ChangeItem, ContentReplacer<WidgetTitle>> map; |
||||
|
||||
public WidgetTitleContentChange() { |
||||
map = new HashMap<>(); |
||||
map.put(ChangeItem.WIDGET_NAME, FormulaReplacer.WidgetTitle4WidgetNameContentReplacer); |
||||
map.put(ChangeItem.TABLE_DATA_NAME, FormulaReplacer.WidgetTitle4TableDataNameContentReplacer); |
||||
} |
||||
|
||||
@Override |
||||
public String type() { |
||||
return WidgetTitle.class.getName(); |
||||
} |
||||
|
||||
@Override |
||||
public Map<ChangeItem, ContentReplacer<WidgetTitle>> changeInfo() { |
||||
return map; |
||||
} |
||||
} |
@ -0,0 +1,23 @@
|
||||
package com.fr.design.mod.impl.repalce; |
||||
|
||||
import com.fr.design.mod.ContentReplaceUtil; |
||||
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 DSColumn4TableDataNameContentReplacer implements ContentReplacer<DSColumn> { |
||||
|
||||
@Override |
||||
public void replace(DSColumn dsColumn, String oldName, String newName) { |
||||
if (ComparatorUtils.equals(dsColumn.getDSName(), oldName)) { |
||||
dsColumn.setDSName(newName); |
||||
} |
||||
dsColumn.setResult(ContentReplaceUtil.replacePureFormula4TableDataName(dsColumn.getResult(), oldName, newName)); |
||||
dsColumn.setSortFormula(ContentReplaceUtil.replacePureFormula4TableDataName(dsColumn.getSortFormula(), oldName, newName)); |
||||
} |
||||
} |
@ -0,0 +1,19 @@
|
||||
package com.fr.design.mod.impl.repalce; |
||||
|
||||
import com.fr.design.mod.ContentReplaceUtil; |
||||
import com.fr.design.mod.ContentReplacer; |
||||
import com.fr.report.cell.cellattr.core.group.DSColumn; |
||||
|
||||
/** |
||||
* @author hades |
||||
* @version 10.0 |
||||
* Created by hades on 2021/6/3 |
||||
*/ |
||||
public class DSColumn4WidgetNameContentReplacer implements ContentReplacer<DSColumn> { |
||||
|
||||
@Override |
||||
public void replace(DSColumn dsColumn, String oldName, String newName) { |
||||
dsColumn.setResult(ContentReplaceUtil.replacePureFormula4WidgetName(dsColumn.getResult(), oldName, newName)); |
||||
dsColumn.setSortFormula(ContentReplaceUtil.replacePureFormula4WidgetName(dsColumn.getSortFormula(), oldName, newName)); |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
@ -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())); |
||||
} |
||||
|
||||
} |
@ -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())); |
||||
} |
||||
} |
@ -0,0 +1,247 @@
|
||||
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.form.ui.CardSwitchButton; |
||||
import com.fr.form.ui.WidgetTitle; |
||||
import com.fr.report.cell.cellattr.CellExpandAttr; |
||||
import com.fr.report.cell.cellattr.CellGUIAttr; |
||||
import com.fr.report.cell.cellattr.core.RichChar; |
||||
import com.fr.report.cell.cellattr.core.group.FunctionGrouper; |
||||
import com.fr.report.cell.cellattr.core.group.SelectCount; |
||||
|
||||
/** |
||||
* 持有公式内容对象汇总 |
||||
* |
||||
* @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)); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* 公式分组 |
||||
* |
||||
*/ |
||||
public static final ContentReplacer<FunctionGrouper> FunctionGrouper4TableDataNameContentReplacer = new ContentReplacer<FunctionGrouper>() { |
||||
@Override |
||||
public void replace(FunctionGrouper functionGrouper, String oldName, String newName) { |
||||
functionGrouper.setFormulaContent(ContentReplaceUtil.replacePureFormula4TableDataName(functionGrouper.getFormulaContent(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
public static final ContentReplacer<FunctionGrouper> FunctionGrouper4WidgetNameContentReplacer = new ContentReplacer<FunctionGrouper>() { |
||||
@Override |
||||
public void replace(FunctionGrouper functionGrouper, String oldName, String newName) { |
||||
functionGrouper.setFormulaContent(ContentReplaceUtil.replacePureFormula4WidgetName(functionGrouper.getFormulaContent(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* 结果集筛选 |
||||
*/ |
||||
public static final ContentReplacer<SelectCount> SelectCount4TableDataNameContentReplacer = new ContentReplacer<SelectCount>() { |
||||
@Override |
||||
public void replace(SelectCount selectCount, String oldName, String newName) { |
||||
selectCount.setFormulaCount(ContentReplaceUtil.replacePureFormula4TableDataName(selectCount.getFormulaCount(), oldName, newName)); |
||||
} |
||||
}; |
||||
public static final ContentReplacer<SelectCount> SelectCount4WidgetNameContentReplacer = new ContentReplacer<SelectCount>() { |
||||
@Override |
||||
public void replace(SelectCount selectCount, String oldName, String newName) { |
||||
selectCount.setFormulaCount(ContentReplaceUtil.replacePureFormula4WidgetName(selectCount.getFormulaCount(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* tab块标题 |
||||
*/ |
||||
public static final ContentReplacer<CardSwitchButton> CardSwitchButton4TableDataNameContentReplacer = new ContentReplacer<CardSwitchButton>() { |
||||
@Override |
||||
public void replace(CardSwitchButton cardSwitchButton, String oldName, String newName) { |
||||
cardSwitchButton.setText(ContentReplaceUtil.replaceFormulaString4TableDataName(cardSwitchButton.getText(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
public static final ContentReplacer<CardSwitchButton> CardSwitchButton4WidgetNameContentReplacer = new ContentReplacer<CardSwitchButton>() { |
||||
@Override |
||||
public void replace(CardSwitchButton cardSwitchButton, String oldName, String newName) { |
||||
cardSwitchButton.setText(ContentReplaceUtil.replaceFormulaString4WidgetName(cardSwitchButton.getText(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* 悬浮提示 |
||||
*/ |
||||
public static final ContentReplacer<CellGUIAttr> CellGUIAttr4TableDataNameContentReplacer = new ContentReplacer<CellGUIAttr>() { |
||||
@Override |
||||
public void replace(CellGUIAttr cellGUIAttr, String oldName, String newName) { |
||||
cellGUIAttr.setTooltipText(ContentReplaceUtil.replaceFormulaString4TableDataName(cellGUIAttr.getTooltipText(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
public static final ContentReplacer<CellGUIAttr> CellGUIAttr4WidgetNameContentReplacer = new ContentReplacer<CellGUIAttr>() { |
||||
@Override |
||||
public void replace(CellGUIAttr cellGUIAttr, String oldName, String newName) { |
||||
cellGUIAttr.setTooltipText(ContentReplaceUtil.replaceFormulaString4WidgetName(cellGUIAttr.getTooltipText(), oldName, newName)); |
||||
} |
||||
}; |
||||
|
||||
/** |
||||
* 图表/报表块等标题 |
||||
*/ |
||||
public static final ContentReplacer<WidgetTitle> WidgetTitle4TableDataNameContentReplacer = new ContentReplacer<WidgetTitle>() { |
||||
@Override |
||||
public void replace(WidgetTitle widgetTitle, String oldName, String newName) { |
||||
if (widgetTitle.getTextObject() instanceof String) { |
||||
String content = (String) widgetTitle.getTextObject(); |
||||
widgetTitle.setTextObject(ContentReplaceUtil.replaceFormulaString4TableDataName(content, oldName, newName)); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
public static final ContentReplacer<WidgetTitle> WidgetTitle4WidgetNameContentReplacer = new ContentReplacer<WidgetTitle>() { |
||||
@Override |
||||
public void replace(WidgetTitle widgetTitle, String oldName, String newName) { |
||||
if (widgetTitle.getTextObject() instanceof String) { |
||||
String content = (String) widgetTitle.getTextObject(); |
||||
widgetTitle.setTextObject(ContentReplaceUtil.replaceFormulaString4WidgetName(content, oldName, newName)); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
} |
@ -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); |
||||
} |
||||
} |
@ -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); |
||||
} |
||||
} |
||||
} |
@ -1 +1,5 @@
|
||||
com.fr.design.mainframe.check.CheckButton=305*118 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=630*185 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=630*31 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=630*280 |
||||
com.fr.design.report.ReportColumnsPane=800*600 |
||||
|
@ -0,0 +1,4 @@
|
||||
com.fr.design.mainframe.check.CheckButton=280*118 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=610*185 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=610*31 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=610*280 |
@ -0,0 +1,4 @@
|
||||
com.fr.design.mainframe.check.CheckButton=230*118 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=490*185 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=490*31 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=490*280 |
@ -1 +1,5 @@
|
||||
# \u9ED8\u8BA4\u4E3A\u7C7B\u7684\u5168\u9650\u5B9A\u540D\uFF08\u53EF\u81EA\u5B9A\u4E49key\uFF09= width * height |
||||
com.fr.design.mainframe.check.CheckButton=250*118 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=385*185 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=385*31 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=385*280 |
@ -0,0 +1,4 @@
|
||||
com.fr.design.mainframe.check.CheckButton=250*118 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.collapse=385*185 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.messageWithLink=385*31 |
||||
com.fr.design.mainframe.check.CheckFontInfoDialog.unfold=385*280 |
After Width: | Height: | Size: 402 B |
After Width: | Height: | Size: 366 B |
@ -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)); |
||||
} |
||||
|
||||
} |
@ -1,16 +0,0 @@
|
||||
package com.fr.design.share; |
||||
|
||||
import com.fr.design.base.clipboard.ClipboardFilter; |
||||
import com.fr.design.mainframe.share.collect.SharableCollectorManager; |
||||
import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; |
||||
import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; |
||||
import com.fr.design.mainframe.share.util.SharableXMLUtils; |
||||
|
||||
public class SharableInitManager { |
||||
public static void start() { |
||||
SharableXMLUtils.registerSharableReadHelper(); |
||||
SharableCollectorManager.getInstance().execute(); |
||||
ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); |
||||
ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); |
||||
} |
||||
} |
@ -0,0 +1,49 @@
|
||||
package com.fr.design.share; |
||||
|
||||
import com.fr.design.base.clipboard.ClipboardFilter; |
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.designer.creator.XLayoutContainer; |
||||
import com.fr.design.mainframe.JForm; |
||||
import com.fr.design.mainframe.JTemplate; |
||||
import com.fr.design.mainframe.share.collect.ComponentCollector; |
||||
import com.fr.design.mainframe.share.collect.SharableCollectorManager; |
||||
import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptSelectionClipboardHandler; |
||||
import com.fr.design.mainframe.share.encrypt.clipboard.impl.EncryptTransferableClipboardHandler; |
||||
import com.fr.design.mainframe.share.util.SharableXMLUtils; |
||||
import com.fr.design.mainframe.share.util.ShareComponentUtils; |
||||
import com.fr.design.share.utils.EffectItemUtils; |
||||
import com.fr.json.JSONArray; |
||||
|
||||
import java.util.List; |
||||
|
||||
public class SharableManager { |
||||
public static void start() { |
||||
SharableXMLUtils.registerSharableReadHelper(); |
||||
SharableCollectorManager.getInstance().execute(); |
||||
ClipboardFilter.registerClipboardHandler(EncryptSelectionClipboardHandler.getInstance()); |
||||
ClipboardFilter.registerClipboardHandler(EncryptTransferableClipboardHandler.getInstance()); |
||||
} |
||||
|
||||
public static void saveTemplate(JTemplate jt) { |
||||
if (jt instanceof JForm) { |
||||
int showCount = 0; |
||||
int useCount = 0; |
||||
if (!jt.getProcessInfo().isTestTemplate()) { |
||||
JForm jForm = (JForm) jt; |
||||
XLayoutContainer root = jForm.getFormDesign().getRootComponent(); |
||||
List<XCreator> xCreators = ShareComponentUtils.getHelpConfigXCreatorList(root); |
||||
JSONArray helpConfigUseInfo = ComponentCollector.getInstance().getHelpConfigUseInfoWithTemplate(jForm.getTarget().getTemplateID()); |
||||
for (XCreator xCreator : xCreators) { |
||||
if (EffectItemUtils.hasEffectItem(xCreator.toData())) { |
||||
showCount ++; |
||||
if (helpConfigUseInfo.contains(ShareComponentUtils.getWidgetId(xCreator.toData()))) { |
||||
useCount++; |
||||
} |
||||
} |
||||
} |
||||
|
||||
ComponentCollector.getInstance().collectHelpConfigInfo(jForm.getTarget().getTemplateID(), showCount, useCount); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue