|
|
|
@ -16,6 +16,9 @@ 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; |
|
|
|
@ -43,10 +46,10 @@ import java.awt.Frame;
|
|
|
|
|
import java.awt.datatransfer.StringSelection; |
|
|
|
|
import java.awt.event.ActionEvent; |
|
|
|
|
import java.awt.event.ActionListener; |
|
|
|
|
import java.util.Collection; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Locale; |
|
|
|
|
import java.util.Map; |
|
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
@ -71,11 +74,17 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
|
|
|
|
|
if (isShowSpecialCharSqlPane(selectedSpecialCharIndex)) { |
|
|
|
|
imageLabel = new UILabel(UIManager.getIcon("OptionPane.warningIcon")); |
|
|
|
|
MessageWithLink message = new MessageWithLink(Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Front_Message"), Toolkit.i18nText("Fine-Design_Basic_Sql_Injection_Prevention"), "https://help.fanruan.com/finereport/doc-view-2219.html", Toolkit.i18nText("Fine-Design_Basic_Preview_Special_Char_Sql_Back_Message")); |
|
|
|
|
messagePanel = new JPanel(); |
|
|
|
|
messagePanel.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
|
messagePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 0)); |
|
|
|
|
messagePanel.add(message); |
|
|
|
|
// 日韩取消超链,直接显示文字
|
|
|
|
|
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")); |
|
|
|
@ -114,7 +123,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
try { |
|
|
|
|
highLighter.addHighlight(specialCharIndex[0], specialCharIndex[1], p); |
|
|
|
|
} catch (BadLocationException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -139,12 +148,16 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
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.createCalculator()); |
|
|
|
|
parameters = tableData.getParameters(calculator); |
|
|
|
|
} |
|
|
|
|
Map<String, Object> parameterMap = new HashMap<>(); |
|
|
|
|
if (needInputParams(parameters)) { |
|
|
|
@ -187,7 +200,7 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
} |
|
|
|
|
String oldSql = ParameterHelper.analyzeCurrentContextTableData4Templatee(tableData.getQuery(), paras); |
|
|
|
|
sql = processExtraSQL(paras, oldSql, calculator, tableDataProviders); |
|
|
|
|
if (oldSql.length() != sql.length()) { |
|
|
|
|
if (!StringUtils.equals(oldSql, sql)) { |
|
|
|
|
highlight = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -209,12 +222,12 @@ public class PreviewPerformedSqlPane extends JDialog implements ActionListener {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static Parameter[] processParameters(DBTableData tableData, Calculator calculator) { |
|
|
|
|
Collection<ParameterProvider> parameters = tableData.getParameters(); |
|
|
|
|
if (parameters.size() == 0) { |
|
|
|
|
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.toArray(new ParameterProvider[parameters.size()]))); |
|
|
|
|
return Parameter.providers2Parameter(Calculator.processParameters(calculator, parameters)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static String processExtraSQL(Parameter[] ps, String sql, Calculator ca, Set<TableDataProvider> tableDataProviders) { |
|
|
|
|