|
|
|
@ -3,7 +3,6 @@ package com.fr.design.javascript;
|
|
|
|
|
import com.fr.base.BaseFormula; |
|
|
|
|
import com.fr.base.Parameter; |
|
|
|
|
import com.fr.base.extension.FileExtension; |
|
|
|
|
import com.fr.design.border.UITitledBorder; |
|
|
|
|
import com.fr.design.dialog.BasicDialog; |
|
|
|
|
import com.fr.design.dialog.BasicPane; |
|
|
|
|
import com.fr.design.dialog.DialogActionAdapter; |
|
|
|
@ -16,10 +15,6 @@ import com.fr.design.gui.icheckbox.UICheckBox;
|
|
|
|
|
import com.fr.design.gui.icombobox.UIComboBox; |
|
|
|
|
import com.fr.design.gui.icombobox.UIComboBoxRenderer; |
|
|
|
|
import com.fr.design.gui.ilable.UILabel; |
|
|
|
|
import com.fr.design.gui.itableeditorpane.ParameterTableModel; |
|
|
|
|
import com.fr.design.gui.itableeditorpane.UITableEditAction; |
|
|
|
|
import com.fr.design.gui.itableeditorpane.UITableEditorPane; |
|
|
|
|
import com.fr.design.gui.itableeditorpane.UITableModelAdapter; |
|
|
|
|
import com.fr.design.gui.itextfield.UITextField; |
|
|
|
|
import com.fr.design.gui.itree.filetree.TemplateFileTree; |
|
|
|
|
import com.fr.design.hyperlink.AbstractHyperLinkPane; |
|
|
|
@ -28,40 +23,32 @@ import com.fr.design.layout.FRGUIPaneFactory;
|
|
|
|
|
import com.fr.design.layout.TableLayout; |
|
|
|
|
import com.fr.design.layout.TableLayoutHelper; |
|
|
|
|
import com.fr.design.mainframe.DesignerContext; |
|
|
|
|
import com.fr.design.scrollruler.ModLineBorder; |
|
|
|
|
import com.fr.file.filetree.IOFileNodeFilter; |
|
|
|
|
import com.fr.general.GeneralUtils; |
|
|
|
|
import com.fr.js.ExportJavaScript; |
|
|
|
|
import com.fr.js.SingleJavaScript; |
|
|
|
|
import com.fr.stable.ParameterProvider; |
|
|
|
|
import com.fr.stable.StringUtils; |
|
|
|
|
|
|
|
|
|
import javax.swing.AbstractButton; |
|
|
|
|
import javax.swing.AbstractCellEditor; |
|
|
|
|
import javax.swing.BorderFactory; |
|
|
|
|
import javax.swing.ButtonGroup; |
|
|
|
|
import javax.swing.DefaultComboBoxModel; |
|
|
|
|
import javax.swing.JList; |
|
|
|
|
import javax.swing.JPanel; |
|
|
|
|
import javax.swing.JScrollPane; |
|
|
|
|
import javax.swing.JTable; |
|
|
|
|
import javax.swing.SwingUtilities; |
|
|
|
|
import javax.swing.event.CellEditorListener; |
|
|
|
|
import javax.swing.event.ChangeEvent; |
|
|
|
|
import javax.swing.event.TableModelEvent; |
|
|
|
|
import javax.swing.event.TableModelListener; |
|
|
|
|
import javax.swing.table.TableCellEditor; |
|
|
|
|
import javax.swing.table.TableCellRenderer; |
|
|
|
|
import java.awt.BorderLayout; |
|
|
|
|
import java.awt.CardLayout; |
|
|
|
|
import java.awt.Component; |
|
|
|
|
import java.awt.Dimension; |
|
|
|
|
import java.awt.event.ActionEvent; |
|
|
|
|
import java.awt.event.ActionListener; |
|
|
|
|
import java.awt.event.ItemEvent; |
|
|
|
|
import java.awt.event.ItemListener; |
|
|
|
|
import java.awt.event.MouseAdapter; |
|
|
|
|
import java.awt.event.MouseEvent; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.HashMap; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.List; |
|
|
|
@ -72,20 +59,21 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
private ExportRadioGroup templateRadioGroup; |
|
|
|
|
private UIRadioButton currentTemplateRadio; |
|
|
|
|
private UIRadioButton otherTemplateRadio; |
|
|
|
|
private CardLayout card; |
|
|
|
|
private JPanel templatePanel; |
|
|
|
|
private CurrentTemplatePane currentTemplatePane; |
|
|
|
|
private OtherTemplatePane otherTemplatePane; |
|
|
|
|
private UITextField reportPathTextField; |
|
|
|
|
private UIButton browserButton; |
|
|
|
|
private UIComboBox exportTypeComboBox; |
|
|
|
|
private ExportRadioGroup fileNameRadioGroup; |
|
|
|
|
private UIRadioButton defaultNameRadio; |
|
|
|
|
private UIRadioButton customNameRadio; |
|
|
|
|
private FormulaEditor fileNameFormulaEditor; |
|
|
|
|
private UICheckBox extendParametersCheckBox; |
|
|
|
|
private ReportletParameterViewPane parameterViewPane; |
|
|
|
|
|
|
|
|
|
private static final double p = TableLayout.PREFERRED; |
|
|
|
|
private static final Map<String, String> EXPORT_TYPES_MAP = new HashMap<>(); |
|
|
|
|
private static final Map<String, String> FILENAME_TYPE_MAP = new HashMap<>(); |
|
|
|
|
private static final Map<String, String> PARAMETER_TYPE_MAP = new HashMap<>(); |
|
|
|
|
private static final String DEFAULT = "default"; |
|
|
|
|
private static final String CUSTOM = "custom"; |
|
|
|
|
private static final String CURRENT_TEMPLATE = "cur"; |
|
|
|
|
private static final String OTHER_TEMPLATE = "other"; |
|
|
|
|
private static final UILabel EMPTY_LABEL = new UILabel(); |
|
|
|
|
private static final String CURRENT_TEMPLATE = "current"; |
|
|
|
|
private static final String DEFAULT_FILENAME = "default"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static { |
|
|
|
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_PDF, Toolkit.i18nText("Fine-Design_Basic_Export_JS_PDF")); |
|
|
|
@ -94,29 +82,23 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_EXCEL_SHEET, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Excel_Sheet")); |
|
|
|
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_WORD, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Word")); |
|
|
|
|
EXPORT_TYPES_MAP.put(ExportJavaScript.EXPORT_IMAGE, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Image")); |
|
|
|
|
FILENAME_TYPE_MAP.put(DEFAULT, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Default")); |
|
|
|
|
FILENAME_TYPE_MAP.put(CUSTOM, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Custom")); |
|
|
|
|
PARAMETER_TYPE_MAP.put(DEFAULT, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Extend_Parameters")); |
|
|
|
|
PARAMETER_TYPE_MAP.put(CUSTOM, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Custom")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 当前模板
|
|
|
|
|
class CurrentTemplatePane extends BasicPane { |
|
|
|
|
|
|
|
|
|
private ExportRadioGroup fileNameRadioGroup; |
|
|
|
|
private UIRadioButton defaultNameRadio; |
|
|
|
|
private UIRadioButton customNameRadio; |
|
|
|
|
private FormulaEditor fileNameFormulaEditor; |
|
|
|
|
private UICheckBox extendParametersCheckBox; |
|
|
|
|
private ReportletParameterViewPane parameterViewPane; |
|
|
|
|
private UIComboBox exportTypeComboBox; |
|
|
|
|
private UILabel fileNameTipLabel; |
|
|
|
|
public ExportJavaScriptPane() { |
|
|
|
|
initComponents(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public CurrentTemplatePane() { |
|
|
|
|
private void initComponents() { |
|
|
|
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
|
this.setBorder(UITitledBorder.createBorderWithTitle(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Current"))); |
|
|
|
|
this.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Toolkit.i18nText("Fine-Design_Basic_Export_JS_Setting"))); |
|
|
|
|
|
|
|
|
|
//导出模板+导出方式+导出文件名
|
|
|
|
|
JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
|
|
|
|
|
//导出模板
|
|
|
|
|
JPanel chooseTemplatePane = initChooseTemplatePane(); |
|
|
|
|
northPane.add(chooseTemplatePane, BorderLayout.NORTH); |
|
|
|
|
|
|
|
|
|
//导出方式
|
|
|
|
|
JPanel exportTypePane = initExportTypePane(); |
|
|
|
|
northPane.add(exportTypePane, BorderLayout.CENTER); |
|
|
|
@ -135,12 +117,27 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private JPanel initParamsPane() { |
|
|
|
|
UILabel parameterLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Parameters_Setting") + ':'); |
|
|
|
|
extendParametersCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Extend_Parameters")); |
|
|
|
|
extendParametersCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Basic_Hyperlink_Extends_Report_Parameters")); |
|
|
|
|
extendParametersCheckBox.setSelected(true); |
|
|
|
|
parameterViewPane = new ReportletParameterViewPane(getChartParaType(), getValueEditorPane(), getValueEditorPane()); |
|
|
|
|
parameterViewPane.setVisible(false); |
|
|
|
|
addListener(parameterViewPane); |
|
|
|
|
parameterViewPane.addTableEditorListener(new TableModelListener() { |
|
|
|
|
public void tableChanged(TableModelEvent e) { |
|
|
|
|
List<ParameterProvider> list = parameterViewPane.update(); |
|
|
|
|
HashSet<String> tempSet = new HashSet<>(); |
|
|
|
|
for (int i = 0; i < list.size(); i++) { |
|
|
|
|
if (StringUtils.isEmpty(list.get(i).getName())) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (tempSet.contains(list.get(i).toString())) { |
|
|
|
|
list.remove(i); |
|
|
|
|
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Parameter_Duplicate_Name") + "!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
tempSet.add(list.get(i).toString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
extendParametersCheckBox.addItemListener(new ItemListener() { |
|
|
|
|
@Override |
|
|
|
|
public void itemStateChanged(ItemEvent e) { |
|
|
|
@ -148,12 +145,10 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
JPanel paramsPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
Component[][] components = new Component[][]{{parameterLabel, extendParametersCheckBox}}; |
|
|
|
|
JPanel paramsCheckPane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p}); |
|
|
|
|
paramsCheckPane.setBorder(BorderFactory.createEmptyBorder(0, 2, 5, 2)); |
|
|
|
|
paramsPane.setBorder(BorderFactory.createTitledBorder(new ModLineBorder(ModLineBorder.TOP), Toolkit.i18nText("Fine-Design_Basic_Parameters"))); |
|
|
|
|
paramsPane.add(extendParametersCheckBox, BorderLayout.NORTH); |
|
|
|
|
JPanel dynamicPaneWrapper = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
dynamicPaneWrapper.add(parameterViewPane); |
|
|
|
|
paramsPane.add(paramsCheckPane, BorderLayout.NORTH); |
|
|
|
|
paramsPane.add(dynamicPaneWrapper, BorderLayout.CENTER); |
|
|
|
|
return paramsPane; |
|
|
|
|
} |
|
|
|
@ -163,24 +158,17 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
fileNameRadioGroup = new ExportRadioGroup(); |
|
|
|
|
defaultNameRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Default")); |
|
|
|
|
defaultNameRadio.setSelected(true); |
|
|
|
|
customNameRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Custom")); |
|
|
|
|
customNameRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Custom")); |
|
|
|
|
addRadioToGroup(fileNameRadioGroup, defaultNameRadio, customNameRadio); |
|
|
|
|
fileNameFormulaEditor = new FormulaEditor(Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
|
|
|
|
fileNameFormulaEditor.setVisible(false); |
|
|
|
|
fileNameFormulaEditor.setEnabled(false); |
|
|
|
|
fileNameTipLabel = new UILabel("<html><body style=\"color:rgb(147,147,147)\">" + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Title_Tip_Front") + "\\/:*?\"<>|" + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Title_Tip_Back") + "</html>"); |
|
|
|
|
fileNameTipLabel.setVisible(false); |
|
|
|
|
fileNameRadioGroup.addActionListener(new ActionListener() { |
|
|
|
|
@Override |
|
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
|
if (defaultNameRadio.isSelected()) { |
|
|
|
|
fileNameFormulaEditor.setVisible(false); |
|
|
|
|
fileNameFormulaEditor.setEnabled(false); |
|
|
|
|
fileNameTipLabel.setVisible(false); |
|
|
|
|
} else { |
|
|
|
|
fileNameFormulaEditor.setVisible(true); |
|
|
|
|
fileNameFormulaEditor.setEnabled(true); |
|
|
|
|
fileNameTipLabel.setVisible(true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
@ -188,6 +176,7 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
JPanel fileNameRadioPane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p, p, p}); |
|
|
|
|
|
|
|
|
|
JPanel fileNameTipPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
UILabel fileNameTipLabel = new UILabel("<html><body style=\"color:red\">" + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Title_Tip_Front") + "\\/:*?\"<>|" + Toolkit.i18nText("Fine-Design_Basic_Export_JS_Title_Tip_Back") + "</html>"); |
|
|
|
|
fileNameTipPane.add(fileNameTipLabel); |
|
|
|
|
|
|
|
|
|
JPanel fileNamePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
@ -197,209 +186,64 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
fileNamePane.setBorder(BorderFactory.createEmptyBorder(5,2,5,2)); |
|
|
|
|
return fileNamePane; |
|
|
|
|
} |
|
|
|
|
public void updateSingleJavaScript(SingleJavaScript js){ |
|
|
|
|
js.setTemplatePath(DEFAULT); |
|
|
|
|
js.setExportType(GeneralUtils.objectToString(exportTypeComboBox.getSelectedItem())); |
|
|
|
|
js.setDefaultFileName(defaultNameRadio.isSelected()); |
|
|
|
|
js.setFileName(getFileName()); |
|
|
|
|
js.setExtendParameters(extendParametersCheckBox.isSelected()); |
|
|
|
|
if (extendParametersCheckBox.isSelected()) { |
|
|
|
|
js.setParameters(null); |
|
|
|
|
} else { |
|
|
|
|
if (parameterViewPane != null) { |
|
|
|
|
List<ParameterProvider> parameterList = parameterViewPane.update(); |
|
|
|
|
if (!parameterList.isEmpty()) { |
|
|
|
|
Parameter[] parameters = new Parameter[parameterList.size()]; |
|
|
|
|
parameterList.toArray(parameters); |
|
|
|
|
js.setParameters(parameters); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
public void populateSingleJavaScript(SingleJavaScript js){ |
|
|
|
|
exportTypeComboBox.setSelectedItem(js.getExportType()); |
|
|
|
|
fileNameRadioGroup.selectIndexButton(js.isDefaultFileName() ? 0 : 1); |
|
|
|
|
if (!js.isDefaultFileName()) { |
|
|
|
|
fileNameFormulaEditor.setEnabled(true); |
|
|
|
|
fileNameFormulaEditor.setVisible(true); |
|
|
|
|
fileNameTipLabel.setVisible(true); |
|
|
|
|
fileNameFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build(js.getFileName())); |
|
|
|
|
} |
|
|
|
|
if (js.isExtendParameters()) { |
|
|
|
|
extendParametersCheckBox.setSelected(true); |
|
|
|
|
} else { |
|
|
|
|
extendParametersCheckBox.setSelected(false); |
|
|
|
|
if (this.parameterViewPane != null) { |
|
|
|
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
|
|
|
|
parameterList.clear(); |
|
|
|
|
ParameterProvider[] parameters = js.getParameters(); |
|
|
|
|
this.parameterViewPane.populate(parameters); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private JPanel initExportTypePane() { |
|
|
|
|
UILabel typeLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Type") + ":"); |
|
|
|
|
exportTypeComboBox = getComboBoxWithModel(new String[]{ExportJavaScript.EXPORT_PDF, ExportJavaScript.EXPORT_EXCEL_PAGE, ExportJavaScript.EXPORT_EXCEL_SIMPLE, ExportJavaScript.EXPORT_EXCEL_SHEET, ExportJavaScript.EXPORT_WORD, ExportJavaScript.EXPORT_IMAGE} |
|
|
|
|
, EXPORT_TYPES_MAP); |
|
|
|
|
Component[][] components = new Component[][]{{typeLabel, exportTypeComboBox}}; |
|
|
|
|
|
|
|
|
|
JPanel exportTypePane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p}); |
|
|
|
|
exportTypePane.setBorder(BorderFactory.createEmptyBorder(5, 2, 5, 2)); |
|
|
|
|
return exportTypePane; |
|
|
|
|
exportTypeComboBox = new UIComboBox(new DefaultComboBoxModel<String>()); |
|
|
|
|
DefaultComboBoxModel<String> comboBoxModel = (DefaultComboBoxModel<String>) exportTypeComboBox.getModel(); |
|
|
|
|
String[] allExportTypes = new String[]{ExportJavaScript.EXPORT_PDF, ExportJavaScript.EXPORT_EXCEL_PAGE, ExportJavaScript.EXPORT_EXCEL_SIMPLE, ExportJavaScript.EXPORT_EXCEL_SHEET, ExportJavaScript.EXPORT_WORD, ExportJavaScript.EXPORT_IMAGE}; |
|
|
|
|
for (int i = 0; i < allExportTypes.length; i++) { |
|
|
|
|
comboBoxModel.addElement(allExportTypes[i]); |
|
|
|
|
} |
|
|
|
|
this.exportTypeComboBox.setRenderer(new UIComboBoxRenderer() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected String title4PopupWindow() { |
|
|
|
|
return Toolkit.i18nText("Fine-Design_Basic_Export_JS_Setting"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 其他模板
|
|
|
|
|
class OtherTemplatePane extends BasicPane { |
|
|
|
|
|
|
|
|
|
private UITableEditorPane<SingleJavaScript> editorPane; |
|
|
|
|
|
|
|
|
|
public OtherTemplatePane() { |
|
|
|
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
|
this.setBorder(UITitledBorder.createBorderWithTitle(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Other"))); |
|
|
|
|
|
|
|
|
|
editorPane = new UITableEditorPane<>(new ExportJSTableModel()); |
|
|
|
|
editorPane.setHeaderResizing(false); |
|
|
|
|
|
|
|
|
|
this.add(editorPane, BorderLayout.CENTER); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void reset() { |
|
|
|
|
editorPane.populate(new SingleJavaScript[0]); |
|
|
|
|
} |
|
|
|
|
public void updateExportJavaScript(ExportJavaScript exportJavaScript){ |
|
|
|
|
List<SingleJavaScript> javaScripts = editorPane.update(); |
|
|
|
|
for (SingleJavaScript js : javaScripts) { |
|
|
|
|
exportJavaScript.addOtherTemplateJS(js); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected String title4PopupWindow() { |
|
|
|
|
return Toolkit.i18nText("Fine-Design_Basic_Export_JS_Setting"); |
|
|
|
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
|
|
|
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
|
|
|
|
if (value instanceof String) { |
|
|
|
|
this.setText(EXPORT_TYPES_MAP.get(value)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class ExportJSTableModel extends UITableModelAdapter<SingleJavaScript> { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = -3697206557955735642L; |
|
|
|
|
|
|
|
|
|
public ExportJSTableModel() { |
|
|
|
|
super(new String[]{ |
|
|
|
|
Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_File"), |
|
|
|
|
Toolkit.i18nText("Fine-Design_Basic_Export_JS_Type"), |
|
|
|
|
Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename"), |
|
|
|
|
Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Custom"), |
|
|
|
|
Toolkit.i18nText("Fine-Design_Basic_Export_JS_Parameters_Setting"), |
|
|
|
|
StringUtils.EMPTY}); |
|
|
|
|
this.setColumnClass(new Class[]{ |
|
|
|
|
ExportTemplateChooser.class, |
|
|
|
|
ExportTypeCombobox.class, |
|
|
|
|
FileNameCombobox.class, |
|
|
|
|
FileNameFormulaEditor.class, |
|
|
|
|
ParameterCombobox.class, |
|
|
|
|
ParameterSettingButton.class |
|
|
|
|
}); |
|
|
|
|
this.setDefaultEditor(ExportTemplateChooser.class, new ExportTemplateChooser()); |
|
|
|
|
this.setDefaultRenderer(ExportTemplateChooser.class, new ExportTemplateChooser()); |
|
|
|
|
this.setDefaultEditor(ExportTypeCombobox.class, new ExportTypeCombobox()); |
|
|
|
|
this.setDefaultEditor(FileNameCombobox.class, new FileNameCombobox()); |
|
|
|
|
this.setDefaultEditor(FileNameFormulaEditor.class, new FileNameFormulaEditor()); |
|
|
|
|
this.setDefaultEditor(ParameterCombobox.class, new ParameterCombobox()); |
|
|
|
|
this.setDefaultEditor(ParameterSettingButton.class, new ParameterSettingButton()); |
|
|
|
|
this.setDefaultRenderer(ParameterSettingButton.class, new ParameterSettingButton()); |
|
|
|
|
this.createTable().getColumnModel().getColumn(2).setMaxWidth(60); |
|
|
|
|
this.createTable().getColumnModel().getColumn(4).setMaxWidth(60); |
|
|
|
|
this.createTable().getColumnModel().getColumn(5).setMaxWidth(50); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public UITableEditAction[] createAction() { |
|
|
|
|
return new UITableEditAction[]{new AddJSAction(), new DeleteAction()}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getValueAt(int rowIndex, int columnIndex) { |
|
|
|
|
SingleJavaScript js = this.getList().get(rowIndex); |
|
|
|
|
switch (columnIndex) { |
|
|
|
|
case 0: |
|
|
|
|
return js.getTemplatePath(); |
|
|
|
|
case 1: |
|
|
|
|
return EXPORT_TYPES_MAP.get(js.getExportType()); |
|
|
|
|
case 2: |
|
|
|
|
return js.isDefaultFileName() ? Toolkit.i18nText("Fine-Design_Basic_Export_JS_Filename_Default") : Toolkit.i18nText("Fine-Design_Basic_Export_JS_Custom"); |
|
|
|
|
case 3: |
|
|
|
|
return js.getFileName(); |
|
|
|
|
case 4: |
|
|
|
|
return js.isExtendParameters() ? Toolkit.i18nText("Fine-Design_Basic_Export_JS_Extend_Parameters") : Toolkit.i18nText("Fine-Design_Basic_Export_JS_Custom"); |
|
|
|
|
case 5: |
|
|
|
|
return js.getParameters(); |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean isCellEditable(int row, int col) { |
|
|
|
|
if (col == 3) { |
|
|
|
|
// 命名详情
|
|
|
|
|
return this.getList().get(row) != null && !this.getList().get(row).isDefaultFileName(); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private class AddJSAction extends AddTableRowAction { |
|
|
|
|
|
|
|
|
|
public AddJSAction() { |
|
|
|
|
Component[][] components = new Component[][]{{typeLabel, exportTypeComboBox}}; |
|
|
|
|
|
|
|
|
|
JPanel exportTypePane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p}); |
|
|
|
|
exportTypePane.setBorder(BorderFactory.createEmptyBorder(5,2,5,2)); |
|
|
|
|
return exportTypePane; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private JPanel initChooseTemplatePane() { |
|
|
|
|
UILabel templateLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template") + ":"); |
|
|
|
|
templateRadioGroup = new ExportRadioGroup(); |
|
|
|
|
currentTemplateRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Current")); |
|
|
|
|
currentTemplateRadio.setSelected(true); |
|
|
|
|
otherTemplateRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Other")); |
|
|
|
|
addRadioToGroup(templateRadioGroup, currentTemplateRadio, otherTemplateRadio); |
|
|
|
|
templateRadioGroup.addActionListener(new ActionListener() { |
|
|
|
|
@Override |
|
|
|
|
public void actionPerformed(ActionEvent e) { |
|
|
|
|
super.actionPerformed(e); |
|
|
|
|
if (otherTemplatePane.editorPane.getTableModel().getList().size() <= 50) { |
|
|
|
|
addJS(); |
|
|
|
|
if (currentTemplateRadio.isSelected()) { |
|
|
|
|
browserButton.setEnabled(false); |
|
|
|
|
} else { |
|
|
|
|
FineJOptionPane.showMessageDialog(otherTemplatePane, Toolkit.i18nText("Fine-Design_Basic_Export_JS_Batch_Export_Limit")); |
|
|
|
|
} |
|
|
|
|
browserButton.setEnabled(true); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
Component[][] components = new Component[][]{{templateLabel, currentTemplateRadio, otherTemplateRadio}}; |
|
|
|
|
JPanel reportletRadioPane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p, p}); |
|
|
|
|
|
|
|
|
|
private void addJS() { |
|
|
|
|
SingleJavaScript js = new SingleJavaScript(); |
|
|
|
|
addRow(js); |
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
table.getSelectionModel().setSelectionInterval(table.getRowCount() - 1, table.getRowCount() - 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 导出文件选择
|
|
|
|
|
class ExportTemplateChooser extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = -9112506131272704717L; |
|
|
|
|
private JPanel reportletNamePane; |
|
|
|
|
private UITextField reportPathTextField; |
|
|
|
|
private UIButton browserButton; |
|
|
|
|
|
|
|
|
|
public ExportTemplateChooser() { |
|
|
|
|
JPanel reportletNamePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
// 路径输入框
|
|
|
|
|
reportPathTextField = new UITextField(8); |
|
|
|
|
reportPathTextField = new UITextField(20); |
|
|
|
|
reportPathTextField.setEnabled(false); |
|
|
|
|
reportletNamePane.add(reportPathTextField, BorderLayout.CENTER); |
|
|
|
|
|
|
|
|
|
// 选择路径按钮
|
|
|
|
|
browserButton = new UIButton("..."); |
|
|
|
|
browserButton.setVisible(true); |
|
|
|
|
|
|
|
|
|
Component[][] templateChooserComponent = {{reportPathTextField, browserButton}}; |
|
|
|
|
double[] rowSize = {TableLayout.PREFERRED}; |
|
|
|
|
double[] columnSize = {TableLayout.FILL, 22}; |
|
|
|
|
reportletNamePane = TableLayoutHelper.createCommonTableLayoutPane(templateChooserComponent, rowSize, columnSize, 0); |
|
|
|
|
|
|
|
|
|
browserButton = new UIButton(Toolkit.i18nText("Fine-Design_Basic_Select")); |
|
|
|
|
browserButton.setPreferredSize(new Dimension(browserButton.getPreferredSize().width, 20)); |
|
|
|
|
browserButton.setEnabled(false); |
|
|
|
|
reportletNamePane.add(browserButton, BorderLayout.EAST); |
|
|
|
|
browserButton.addActionListener(new ActionListener() { |
|
|
|
|
@Override |
|
|
|
|
public void actionPerformed(ActionEvent evt) { |
|
|
|
@ -416,408 +260,11 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
reportletDialog.setVisible(true); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
this.addCellEditorListener(new CellEditorListener() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingCanceled(ChangeEvent e) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingStopped(ChangeEvent e) { |
|
|
|
|
if (table.getSelectedRow() == -1) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
SingleJavaScript js = getList().get(table.getSelectedRow()); |
|
|
|
|
String value = StringUtils.trimToNull(reportPathTextField.getText()); |
|
|
|
|
js.setTemplatePath(value); |
|
|
|
|
js.setCurrentTemplate(false); |
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
|
|
|
|
reportPathTextField.setText((String) value); |
|
|
|
|
return reportletNamePane; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getCellEditorValue() { |
|
|
|
|
return reportPathTextField.getText(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
|
|
|
|
reportPathTextField.setText((String) value); |
|
|
|
|
return reportletNamePane; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 导出方式下拉框
|
|
|
|
|
class ExportTypeCombobox extends AbstractCellEditor implements TableCellEditor { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = -6564079764032351372L; |
|
|
|
|
|
|
|
|
|
private UIComboBox exportTypeComboBox; |
|
|
|
|
|
|
|
|
|
public ExportTypeCombobox() { |
|
|
|
|
exportTypeComboBox = getComboBoxWithModel(new String[]{ExportJavaScript.EXPORT_PDF, ExportJavaScript.EXPORT_EXCEL_PAGE, ExportJavaScript.EXPORT_EXCEL_SIMPLE, ExportJavaScript.EXPORT_EXCEL_SHEET, ExportJavaScript.EXPORT_WORD, ExportJavaScript.EXPORT_IMAGE} |
|
|
|
|
, EXPORT_TYPES_MAP); |
|
|
|
|
this.addCellEditorListener(new CellEditorListener() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingCanceled(ChangeEvent e) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingStopped(ChangeEvent e) { |
|
|
|
|
if (table.getSelectedRow() == -1) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
SingleJavaScript js = getList().get(table.getSelectedRow()); |
|
|
|
|
Object ob = exportTypeComboBox.getSelectedItem(); |
|
|
|
|
if (ob != null) { |
|
|
|
|
String value = ob.toString(); |
|
|
|
|
js.setExportType(value); |
|
|
|
|
} |
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
|
|
|
|
exportTypeComboBox.setSelectedItem(getList().get(row).getExportType()); |
|
|
|
|
return exportTypeComboBox; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getCellEditorValue() { |
|
|
|
|
Object ob = exportTypeComboBox.getSelectedItem(); |
|
|
|
|
if (ob != null) { |
|
|
|
|
return ob.toString(); |
|
|
|
|
} |
|
|
|
|
return ExportJavaScript.EXPORT_PDF; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 命名方式下拉框
|
|
|
|
|
class FileNameCombobox extends AbstractCellEditor implements TableCellEditor { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = 1829005772744444269L; |
|
|
|
|
private UIComboBox fileNameComboBox; |
|
|
|
|
|
|
|
|
|
public FileNameCombobox() { |
|
|
|
|
fileNameComboBox = getComboBoxWithModel(new String[]{DEFAULT, CUSTOM}, FILENAME_TYPE_MAP); |
|
|
|
|
fileNameComboBox.addItemListener(e -> { |
|
|
|
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
|
|
|
|
final int row = table.getSelectedRow(); |
|
|
|
|
if (row == -1) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
SingleJavaScript js = getList().get(row); |
|
|
|
|
Object ob = fileNameComboBox.getSelectedItem(); |
|
|
|
|
if (ob != null) { |
|
|
|
|
String value = ob.toString(); |
|
|
|
|
js.setDefaultFileName(StringUtils.equals(value, DEFAULT)); |
|
|
|
|
if (js.isDefaultFileName()) { |
|
|
|
|
js.setFileName(StringUtils.EMPTY); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
table.repaint(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
this.addCellEditorListener(new CellEditorListener() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingCanceled(ChangeEvent e) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingStopped(ChangeEvent e) { |
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
|
|
|
|
fileNameComboBox.setSelectedItem(getList().get(row).isDefaultFileName() ? DEFAULT : CUSTOM); |
|
|
|
|
return fileNameComboBox; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getCellEditorValue() { |
|
|
|
|
return fileNameComboBox.getSelectedItem().toString(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 命名方式公式框
|
|
|
|
|
class FileNameFormulaEditor extends AbstractCellEditor implements TableCellEditor { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = 7120075192535645493L; |
|
|
|
|
private FormulaEditor fileNameFormulaEditor; |
|
|
|
|
|
|
|
|
|
public FileNameFormulaEditor() { |
|
|
|
|
fileNameFormulaEditor = new FormulaEditor(Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
|
|
|
|
this.addCellEditorListener(new CellEditorListener() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingCanceled(ChangeEvent e) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingStopped(ChangeEvent e) { |
|
|
|
|
if (table.getSelectedRow() == -1) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
SingleJavaScript js = getList().get(table.getSelectedRow()); |
|
|
|
|
String value = fileNameFormulaEditor.getUITextField().getText(); |
|
|
|
|
js.setFileName(value); |
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
|
|
|
|
if (value != null) { |
|
|
|
|
fileNameFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build(value)); |
|
|
|
|
} else { |
|
|
|
|
fileNameFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build()); |
|
|
|
|
} |
|
|
|
|
return fileNameFormulaEditor; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getCellEditorValue() { |
|
|
|
|
return fileNameFormulaEditor.getUITextField().getText(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public FormulaEditor getFileNameEditor() { |
|
|
|
|
return fileNameFormulaEditor; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//参数设置下拉框
|
|
|
|
|
class ParameterCombobox extends AbstractCellEditor implements TableCellEditor { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = 2630964402770993584L; |
|
|
|
|
private UIComboBox parameterSetting; |
|
|
|
|
|
|
|
|
|
public ParameterCombobox() { |
|
|
|
|
parameterSetting = getComboBoxWithModel(new String[]{DEFAULT, CUSTOM}, PARAMETER_TYPE_MAP); |
|
|
|
|
parameterSetting.addItemListener(e -> { |
|
|
|
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
|
|
|
|
final int row = table.getSelectedRow(); |
|
|
|
|
if (row == -1) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
SingleJavaScript js = getList().get(row); |
|
|
|
|
Object ob = parameterSetting.getSelectedItem(); |
|
|
|
|
if (ob != null) { |
|
|
|
|
String value = ob.toString(); |
|
|
|
|
js.setExtendParameters(StringUtils.equals(value, DEFAULT)); |
|
|
|
|
} |
|
|
|
|
// 单纯为了刷新表格,使某些联动生效
|
|
|
|
|
table.repaint(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
this.addCellEditorListener(new CellEditorListener() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingCanceled(ChangeEvent e) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingStopped(ChangeEvent e) { |
|
|
|
|
// 这里重新触发是为了触发某些编辑后事件
|
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
|
|
|
|
parameterSetting.setSelectedItem(getList().get(row).isExtendParameters() ? DEFAULT : CUSTOM); |
|
|
|
|
return parameterSetting; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getCellEditorValue() { |
|
|
|
|
return parameterSetting.getSelectedItem().toString(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 参数设置按钮
|
|
|
|
|
class ParameterSettingButton extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { |
|
|
|
|
|
|
|
|
|
private static final long serialVersionUID = 4021592871993049137L; |
|
|
|
|
private UIButton paraButton; |
|
|
|
|
private ParameterSettingPane paraSettingPane; |
|
|
|
|
ParameterProvider[] parameterArr; |
|
|
|
|
|
|
|
|
|
public ParameterSettingButton() { |
|
|
|
|
paraSettingPane = new ParameterSettingPane(); |
|
|
|
|
paraButton = new UIButton(Toolkit.i18nText("Fine-Design_Report_Set")); |
|
|
|
|
paraButton.addMouseListener(new MouseAdapter() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void mousePressed(MouseEvent e) { |
|
|
|
|
BasicDialog dialog = paraSettingPane.showWindow(SwingUtilities.getWindowAncestor(ExportJavaScriptPane.this)); |
|
|
|
|
dialog.addDialogActionListener(new DialogActionAdapter() { |
|
|
|
|
@Override |
|
|
|
|
public void doOk() { |
|
|
|
|
List<ParameterProvider> parameterList = paraSettingPane.getParameterList(); |
|
|
|
|
parameterArr = parameterList.toArray(new Parameter[parameterList.size()]); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
dialog.setVisible(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}); |
|
|
|
|
this.addCellEditorListener(new CellEditorListener() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingCanceled(ChangeEvent e) { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void editingStopped(ChangeEvent e) { |
|
|
|
|
if (table.getSelectedRow() == -1) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
SingleJavaScript js = getList().get(table.getSelectedRow()); |
|
|
|
|
if (parameterArr != null) { |
|
|
|
|
js.setParameters(parameterArr); |
|
|
|
|
} |
|
|
|
|
fireTableDataChanged(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
|
|
|
|
if (getList().get(row) == null || getList().get(row).isExtendParameters()) { |
|
|
|
|
return EMPTY_LABEL; |
|
|
|
|
} |
|
|
|
|
ParameterProvider[] providers = (ParameterProvider[]) value; |
|
|
|
|
if (providers != null) { |
|
|
|
|
paraSettingPane.refresh(new ArrayList<>(Arrays.asList(providers))); |
|
|
|
|
} |
|
|
|
|
return paraButton; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Object getCellEditorValue() { |
|
|
|
|
return paraSettingPane.getParameterList(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { |
|
|
|
|
if (getList().get(row) == null || getList().get(row).isExtendParameters()) { |
|
|
|
|
return EMPTY_LABEL; |
|
|
|
|
} |
|
|
|
|
return paraButton; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 参数设置弹出框
|
|
|
|
|
class ParameterSettingPane extends BasicPane { |
|
|
|
|
|
|
|
|
|
private ReportletParameterViewPane parameterViewPane; |
|
|
|
|
|
|
|
|
|
public ParameterSettingPane() { |
|
|
|
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
|
parameterViewPane = new ReportletParameterViewPane(ParameterTableModel.NO_CHART_USE, getValueEditorPane(), getValueEditorPane()); |
|
|
|
|
addListener(parameterViewPane); |
|
|
|
|
this.add(parameterViewPane); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected String title4PopupWindow() { |
|
|
|
|
return Toolkit.i18nText("Fine-Design_Basic_Export_JS_Parameters_Setting"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public List<ParameterProvider> getParameterList() { |
|
|
|
|
return parameterViewPane.update(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void refresh(List list) { |
|
|
|
|
parameterViewPane.update(list); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public ExportJavaScriptPane() { |
|
|
|
|
initComponents(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void initComponents() { |
|
|
|
|
JPanel totalPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
totalPanel.setBorder(UITitledBorder.createBorderWithTitle(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Setting"))); |
|
|
|
|
|
|
|
|
|
// 导出模板
|
|
|
|
|
JPanel northPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
JPanel chooseTemplatePane = initChooseTemplatePane(); |
|
|
|
|
northPane.add(chooseTemplatePane, BorderLayout.NORTH); |
|
|
|
|
|
|
|
|
|
// 默认当前模板
|
|
|
|
|
currentTemplatePane = new CurrentTemplatePane(); |
|
|
|
|
otherTemplatePane = new OtherTemplatePane(); |
|
|
|
|
templatePanel = FRGUIPaneFactory.createCardLayout_S_Pane(); |
|
|
|
|
card = new CardLayout(); |
|
|
|
|
templatePanel.setLayout(card); |
|
|
|
|
templatePanel.add(CURRENT_TEMPLATE, currentTemplatePane); |
|
|
|
|
templatePanel.add(OTHER_TEMPLATE, otherTemplatePane); |
|
|
|
|
|
|
|
|
|
totalPanel.add(northPane, BorderLayout.NORTH); |
|
|
|
|
totalPanel.add(templatePanel, BorderLayout.CENTER); |
|
|
|
|
|
|
|
|
|
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
|
|
|
|
this.add(totalPanel); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private JPanel initChooseTemplatePane() { |
|
|
|
|
UILabel templateLabel = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template") + ":"); |
|
|
|
|
templateRadioGroup = new ExportRadioGroup(); |
|
|
|
|
currentTemplateRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Current")); |
|
|
|
|
currentTemplateRadio.setSelected(true); |
|
|
|
|
otherTemplateRadio = new UIRadioButton(Toolkit.i18nText("Fine-Design_Basic_Export_JS_Template_Other")); |
|
|
|
|
addRadioToGroup(templateRadioGroup, currentTemplateRadio, otherTemplateRadio); |
|
|
|
|
currentTemplateRadio.addItemListener(new ItemListener() { |
|
|
|
|
@Override |
|
|
|
|
public void itemStateChanged(ItemEvent e) { |
|
|
|
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
|
|
|
|
card.show(templatePanel, CURRENT_TEMPLATE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
otherTemplateRadio.addItemListener(new ItemListener() { |
|
|
|
|
@Override |
|
|
|
|
public void itemStateChanged(ItemEvent e) { |
|
|
|
|
if (e.getStateChange() == ItemEvent.SELECTED) { |
|
|
|
|
card.show(templatePanel, OTHER_TEMPLATE); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
Component[][] components = new Component[][]{{templateLabel, currentTemplateRadio, otherTemplateRadio}}; |
|
|
|
|
JPanel reportletRadioPane = TableLayoutHelper.createTableLayoutPane(components, new double[]{p}, new double[]{p, p, p}); |
|
|
|
|
|
|
|
|
|
JPanel chooseTemplatePane = FRGUIPaneFactory.createLeftFlowZeroGapBorderPane(); |
|
|
|
|
JPanel chooseTemplatePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
|
|
|
|
chooseTemplatePane.add(reportletRadioPane, BorderLayout.NORTH); |
|
|
|
|
chooseTemplatePane.setBorder(BorderFactory.createEmptyBorder(0, 7, 5, 2)); |
|
|
|
|
chooseTemplatePane.add(reportletNamePane, BorderLayout.CENTER); |
|
|
|
|
chooseTemplatePane.setBorder(BorderFactory.createEmptyBorder(0,2,5,2)); |
|
|
|
|
|
|
|
|
|
return chooseTemplatePane; |
|
|
|
|
} |
|
|
|
@ -826,13 +273,31 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
public void populateBean(ExportJavaScript ob) { |
|
|
|
|
if (ob == null) { |
|
|
|
|
ob = new ExportJavaScript(); |
|
|
|
|
otherTemplatePane.reset(); |
|
|
|
|
} |
|
|
|
|
this.templateRadioGroup.selectIndexButton(ob.isCurrentTemplate() ? 0 : 1); |
|
|
|
|
currentTemplatePane.populateSingleJavaScript(ob.getCurrentTemplateJavaScript()); |
|
|
|
|
|
|
|
|
|
OtherTemplatePane pane = (OtherTemplatePane) this.templatePanel.getComponent(1); |
|
|
|
|
pane.editorPane.populate(ob.getJsListForOtherTemplates().toArray(new SingleJavaScript[ob.getJsListForOtherTemplates().size()])); |
|
|
|
|
if (ob.isCurrentTemplate()) { |
|
|
|
|
this.browserButton.setEnabled(false); |
|
|
|
|
} else { |
|
|
|
|
this.browserButton.setEnabled(true); |
|
|
|
|
this.reportPathTextField.setText(ob.getTemplatePath()); |
|
|
|
|
} |
|
|
|
|
this.exportTypeComboBox.setSelectedItem(ob.getExportType()); |
|
|
|
|
this.fileNameRadioGroup.selectIndexButton(ob.isDefaultFileName() ? 0 : 1); |
|
|
|
|
if (ob.isDefaultFileName()) { |
|
|
|
|
this.fileNameFormulaEditor.setEnabled(false); |
|
|
|
|
} else { |
|
|
|
|
this.fileNameFormulaEditor.setEnabled(true); |
|
|
|
|
this.fileNameFormulaEditor.setValue(BaseFormula.createFormulaBuilder().build(ob.getFileName())); |
|
|
|
|
} |
|
|
|
|
if (ob.isExtendParameters()) { |
|
|
|
|
this.extendParametersCheckBox.setSelected(true); |
|
|
|
|
} else { |
|
|
|
|
this.extendParametersCheckBox.setSelected(false); |
|
|
|
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
|
|
|
|
parameterList.clear(); |
|
|
|
|
ParameterProvider[] parameters = ob.getParameters(); |
|
|
|
|
this.parameterViewPane.populate(parameters); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@ -844,60 +309,33 @@ public class ExportJavaScriptPane extends AbstractHyperLinkPane<ExportJavaScript
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void updateBean(ExportJavaScript exportJavaScript) { |
|
|
|
|
boolean selected = currentTemplateRadio.isSelected(); |
|
|
|
|
exportJavaScript.setCurrentTemplate(selected); |
|
|
|
|
SingleJavaScript js = new SingleJavaScript(); |
|
|
|
|
js.setCurrentTemplate(selected); |
|
|
|
|
currentTemplatePane.updateSingleJavaScript(js); |
|
|
|
|
exportJavaScript.addCurrentTemplateJS(js); |
|
|
|
|
|
|
|
|
|
otherTemplatePane.updateExportJavaScript(exportJavaScript); |
|
|
|
|
exportJavaScript.setCurrentTemplate(this.currentTemplateRadio.isSelected()); |
|
|
|
|
exportJavaScript.setTemplatePath(getTemplatePath()); |
|
|
|
|
exportJavaScript.setExportType(GeneralUtils.objectToString(this.exportTypeComboBox.getSelectedItem())); |
|
|
|
|
exportJavaScript.setDefaultFileName(this.defaultNameRadio.isSelected()); |
|
|
|
|
exportJavaScript.setFileName(getFileName()); |
|
|
|
|
exportJavaScript.setExtendParameters(this.extendParametersCheckBox.isSelected()); |
|
|
|
|
if (extendParametersCheckBox.isSelected()) { |
|
|
|
|
exportJavaScript.setParameters(null); |
|
|
|
|
} else { |
|
|
|
|
List<ParameterProvider> parameterList = this.parameterViewPane.update(); |
|
|
|
|
if (!parameterList.isEmpty()) { |
|
|
|
|
Parameter[] parameters = new Parameter[parameterList.size()]; |
|
|
|
|
parameterList.toArray(parameters); |
|
|
|
|
exportJavaScript.setParameters(parameters); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private String getFileName() { |
|
|
|
|
return currentTemplatePane.defaultNameRadio.isSelected() ? DEFAULT : currentTemplatePane.fileNameFormulaEditor.getUITextField().getText(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private UIComboBox getComboBoxWithModel(String[] itemTextArr, Map<String, String> itemTextDic) { |
|
|
|
|
UIComboBox comboBox = new UIComboBox(new DefaultComboBoxModel<String>()); |
|
|
|
|
DefaultComboBoxModel<String> comboBoxModel = (DefaultComboBoxModel<String>) comboBox.getModel(); |
|
|
|
|
for (int i = 0; i < itemTextArr.length; i++) { |
|
|
|
|
comboBoxModel.addElement(itemTextArr[i]); |
|
|
|
|
} |
|
|
|
|
comboBox.setRenderer(new UIComboBoxRenderer() { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
|
|
|
|
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
|
|
|
|
if (value instanceof String) { |
|
|
|
|
this.setText(itemTextDic.get(value)); |
|
|
|
|
} |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
return comboBox; |
|
|
|
|
private String getTemplatePath() { |
|
|
|
|
return currentTemplateRadio.isSelected() ? CURRENT_TEMPLATE : reportPathTextField.getText(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void addListener(ReportletParameterViewPane paraPane) { |
|
|
|
|
paraPane.addTableEditorListener(new TableModelListener() { |
|
|
|
|
public void tableChanged(TableModelEvent e) { |
|
|
|
|
List<ParameterProvider> list = paraPane.update(); |
|
|
|
|
HashSet<String> tempSet = new HashSet<>(); |
|
|
|
|
for (int i = 0; i < list.size(); i++) { |
|
|
|
|
if (StringUtils.isEmpty(list.get(i).getName())) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (tempSet.contains(list.get(i).toString())) { |
|
|
|
|
list.remove(i); |
|
|
|
|
FineJOptionPane.showMessageDialog(DesignerContext.getDesignerFrame(), Toolkit.i18nText("Fine-Design_Basic_Parameter_Duplicate_Name") + "!"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
tempSet.add(list.get(i).toString()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
private String getFileName() { |
|
|
|
|
return defaultNameRadio.isSelected() ? DEFAULT_FILENAME : fileNameFormulaEditor.getUITextField().getText(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean accept(Object ob) { |
|
|
|
|
return ob instanceof ExportJavaScript; |
|
|
|
|