|
|
|
@ -6,6 +6,7 @@ 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.config.PreventSqlInjConfig; |
|
|
|
|
import com.fr.decision.webservice.v10.config.ConfigService; |
|
|
|
|
import com.fr.design.dialog.DialogActionAdapter; |
|
|
|
|
import com.fr.design.dialog.link.MessageWithLink; |
|
|
|
@ -18,6 +19,7 @@ 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.invoke.Reflect; |
|
|
|
|
import com.fr.log.FineLoggerFactory; |
|
|
|
|
import com.fr.plugin.injectable.PluginModule; |
|
|
|
|
import com.fr.script.Calculator; |
|
|
|
@ -46,6 +48,8 @@ import java.awt.Frame;
|
|
|
|
|
import java.awt.datatransfer.StringSelection; |
|
|
|
|
import java.awt.event.ActionEvent; |
|
|
|
|
import java.awt.event.ActionListener; |
|
|
|
|
import java.awt.event.WindowAdapter; |
|
|
|
|
import java.awt.event.WindowEvent; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.List; |
|
|
|
@ -107,11 +111,11 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
|
|
|
|
|
topPanel.add(imagePanel, BorderLayout.WEST); |
|
|
|
|
topPanel.add(messagePanel, BorderLayout.CENTER); |
|
|
|
|
topPanel.setBorder(BorderFactory.createEmptyBorder(10,10,0,10)); |
|
|
|
|
topPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10)); |
|
|
|
|
|
|
|
|
|
//中间的SQL面板
|
|
|
|
|
centerPanel = FRGUIPaneFactory.createBorderLayout_L_Pane(); |
|
|
|
|
centerPanel.setBorder(BorderFactory.createEmptyBorder(0,10,10,10)); |
|
|
|
|
centerPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); |
|
|
|
|
JScrollPane scrollPane = new JScrollPane(); |
|
|
|
|
JTextArea checkArea = new JTextArea(sql); |
|
|
|
|
checkArea.setEditable(false); |
|
|
|
@ -135,7 +139,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
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.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); |
|
|
|
|
bottomPanel.add(okButton, BorderLayout.EAST); |
|
|
|
|
|
|
|
|
|
this.setTitle(Toolkit.i18nText("Fine-Design_Basic_Preview_Performed_Sql")); |
|
|
|
@ -144,6 +148,12 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
this.add(centerPanel, BorderLayout.CENTER); |
|
|
|
|
this.add(bottomPanel, BorderLayout.SOUTH); |
|
|
|
|
this.setSize(600, 400); |
|
|
|
|
this.addWindowListener(new WindowAdapter() { |
|
|
|
|
@Override |
|
|
|
|
public void windowClosing(WindowEvent e) { |
|
|
|
|
close(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
GUICoreUtils.centerWindow(this); |
|
|
|
|
} |
|
|
|
@ -167,42 +177,38 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
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); |
|
|
|
|
parameter.setValue(parameterMap.get(parameter.getName())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
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); |
|
|
|
|
} |
|
|
|
|
NameSpace ns = ParameterMapNameSpace.create(parameterMap); |
|
|
|
|
calculator.pushNameSpace(ns); |
|
|
|
|
Parameter[] paras = processParameters(tableData, calculator); |
|
|
|
|
// 所有被转义参数的集合
|
|
|
|
|
// 远程时如何获取服务器上的转义字符?这里比较恶心
|
|
|
|
|
// 方法1是新增rpc接口,交由服务器去获取转义字符。但是要考虑兼容问题:
|
|
|
|
|
// 新设计器jar远程老服务器jar,需要提供Compatible实现,但是这个实现能做什么呢?目前没有老的接口可以去获取服务器的转义字符,仍然啥也做不了;
|
|
|
|
|
// 现在采用方法2,通过反射调用PreventSqlInjConfig的刷新方法(因为它是decision模块的private方法,直接改成public仍然有兼容问题)
|
|
|
|
|
Reflect.on(PreventSqlInjConfig.class).call("refreshPreventSqlInjConfig"); |
|
|
|
|
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; |
|
|
|
|
} |
|
|
|
|
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); |
|
|
|
@ -274,4 +280,8 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
|
this.dispose(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void close() { |
|
|
|
|
this.dispose(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|