From 3cac7d171070bebc951517b470acac461f6f4630 Mon Sep 17 00:00:00 2001 From: vito Date: Sat, 28 Apr 2018 15:48:30 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-5208=20=E4=BD=BF=E7=94=A8=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=89=A9=E5=B1=95=E5=90=8D=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/mainframe/App.java | 2 +- .../fr/design/mainframe/DesignerFrame.java | 2 +- .../com/fr/design/mainframe/JTemplate.java | 2 +- .../src/com/fr/file/FILEChooserPane.java | 169 ++++++++++++------ .../com/fr/file/filter/ChooseFileFilter.java | 121 +++++++++---- .../com/fr/file/FILEChooserPane4Chart.java | 12 +- .../fr/design/module/FormDesignerModule.java | 2 +- .../file/export/AbstractExportAction.java | 3 +- .../actions/file/export/CSVExportAction.java | 7 +- .../export/EmbeddedExportExportAction.java | 7 +- .../actions/file/export/PDFExportAction.java | 5 +- .../export/PageToSheetExcelExportAction.java | 23 +-- .../actions/file/export/SVGExportAction.java | 21 +-- .../actions/file/export/TextExportAction.java | 19 +- .../actions/file/export/WordExportAction.java | 19 +- .../com/fr/design/module/DesignerModule.java | 17 +- 16 files changed, 275 insertions(+), 156 deletions(-) diff --git a/designer-base/src/com/fr/design/mainframe/App.java b/designer-base/src/com/fr/design/mainframe/App.java index b7d208b639..ef2c989f90 100644 --- a/designer-base/src/com/fr/design/mainframe/App.java +++ b/designer-base/src/com/fr/design/mainframe/App.java @@ -18,7 +18,7 @@ public interface App extends Mutable, Aftermath { * * @return 类型 */ - String[] defaultExtentions(); + String[] defaultExtensions(); /** * 打开模板 diff --git a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java index 013c9e26bd..41d755905f 100644 --- a/designer-base/src/com/fr/design/mainframe/DesignerFrame.java +++ b/designer-base/src/com/fr/design/mainframe/DesignerFrame.java @@ -855,7 +855,7 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta String fileExtention = fileName.substring(indexOfLastDot + 1); for (int i = 0, len = appList.size(); i < len; i++) { App app = appList.get(i); - String[] defaultAppExtentions = app.defaultExtentions(); + String[] defaultAppExtentions = app.defaultExtensions(); boolean opened = false; for (int j = 0; j < defaultAppExtentions.length; j++) { if (defaultAppExtentions[j].equalsIgnoreCase(fileExtention)) { diff --git a/designer-base/src/com/fr/design/mainframe/JTemplate.java b/designer-base/src/com/fr/design/mainframe/JTemplate.java index d9f5fa8832..5304a2c0fc 100644 --- a/designer-base/src/com/fr/design/mainframe/JTemplate.java +++ b/designer-base/src/com/fr/design/mainframe/JTemplate.java @@ -626,7 +626,7 @@ public abstract class JTemplate> } protected FILEChooserPane getFILEChooserPane(boolean isShowLoc) { - return new FILEChooserPane(true, isShowLoc); + return FILEChooserPane.getInstance(true, isShowLoc); } protected boolean saveFile() { diff --git a/designer-base/src/com/fr/file/FILEChooserPane.java b/designer-base/src/com/fr/file/FILEChooserPane.java index 29febcb359..3b5f71a60c 100644 --- a/designer-base/src/com/fr/file/FILEChooserPane.java +++ b/designer-base/src/com/fr/file/FILEChooserPane.java @@ -1,6 +1,7 @@ package com.fr.file; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.base.FRContext; import com.fr.dav.LocalEnv; import com.fr.design.DesignerEnvManager; @@ -25,19 +26,60 @@ import com.fr.file.filter.FILEFilter; import com.fr.general.ComparatorUtils; import com.fr.general.GeneralContext; import com.fr.general.Inter; -import com.fr.stable.*; +import com.fr.stable.CoreConstants; +import com.fr.stable.OperatingSystem; +import com.fr.stable.ProductConstants; +import com.fr.stable.StableUtils; +import com.fr.stable.StringUtils; import com.fr.stable.project.ProjectConstants; -import javax.swing.*; +import javax.swing.AbstractAction; +import javax.swing.AbstractListModel; +import javax.swing.ActionMap; +import javax.swing.BorderFactory; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.DefaultListModel; +import javax.swing.Icon; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.KeyStroke; +import javax.swing.ListCellRenderer; +import javax.swing.ListModel; +import javax.swing.ListSelectionModel; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileSystemView; import javax.swing.plaf.basic.BasicArrowButton; import javax.swing.plaf.basic.BasicButtonUI; -import java.awt.*; -import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Insets; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.io.File; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -46,6 +88,7 @@ import java.util.regex.Pattern; * FileChooserPane要高亮显示某Button,以显示当前路径 * 边距要调整 * postfix还没有处理 + * 该文件选择器,整理行为如下: */ public class FILEChooserPane extends BasicPane { /** @@ -180,6 +223,7 @@ public class FILEChooserPane extends BasicPane { // transfer focus to CurrentEditor inputMapAncestor.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "dialogExit"); actionMap.put("dialogExit", new AbstractAction() { + @Override public void actionPerformed(ActionEvent evt) { returnValue = CANCEL_OPTION; dialogExit(); @@ -240,17 +284,20 @@ public class FILEChooserPane extends BasicPane { new double[]{TableLayout.PREFERRED, TableLayout.FILL}); this.add(contentPane, BorderLayout.CENTER); okButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { doOK(); } }); cancelButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { returnValue = CANCEL_OPTION; doCancel(); } }); fileNameTextField.addKeyListener(new KeyAdapter() { + @Override public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ENTER) { returnValue = CANCEL_OPTION; @@ -356,6 +403,7 @@ public class FILEChooserPane extends BasicPane { /** * 删除文件过滤器 + * 这命名太乱了,完全是误导 * * @param filter 过滤 */ @@ -392,7 +440,7 @@ public class FILEChooserPane extends BasicPane { */ public void setFileNameTextField(String text, String suffix) { if (StringUtils.isEmpty(suffix)) { - suffix = ".cpt"; + suffix = FileExtension.CPT.getSuffix(); } this.suffix = suffix; @@ -428,7 +476,7 @@ public class FILEChooserPane extends BasicPane { * @return 类型 */ public int showOpenDialog(Component parent) { - return showOpenDialog(parent, ".cpt"); + return showOpenDialog(parent, FileExtension.CPT.getSuffix()); } /** @@ -449,7 +497,7 @@ public class FILEChooserPane extends BasicPane { * @return 类型 */ public int showSaveDialog(Component parent) { - return showSaveDialog(parent, ".cpt"); + return showSaveDialog(parent, FileExtension.CPT.getSuffix()); } /** @@ -482,10 +530,12 @@ public class FILEChooserPane extends BasicPane { okButton.setText(dialogName()); // kel:打开界面的时候让文本域获得焦点,支持enter打开或保存。 dialog.addWindowListener(new WindowAdapter() { + @Override public void windowActivated(WindowEvent e) { fileNameTextField.requestFocusInWindow(); } + @Override public void windowClosing(WindowEvent e) { returnValue = CANCEL_OPTION; dialogExit(); @@ -494,7 +544,7 @@ public class FILEChooserPane extends BasicPane { // neil:默认打开pane里显示所有支持的格式 // daniel 从templateFileTree中取 - if (!showWebReport) { + if (!showWebReport && filterList.isEmpty()) { fileType(); } chooseType(); @@ -514,49 +564,48 @@ public class FILEChooserPane extends BasicPane { protected void fileType() { String appName = ProductConstants.APP_NAME; JTemplate editing = HistoryTemplateListPane.getInstance().getCurrentEditingTemplate(); - if (ComparatorUtils.equals(suffix, ".crt")) { - this.addChooseFILEFilter(new ChooseFileFilter("crt", appName + Inter.getLocText(new String[]{"Utils-The-Chart", "FR-App-All_File"}))); + if (FileExtension.CRT.matchExtension(suffix)) { + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.CRT, appName + Inter.getLocText(new String[]{"Utils-The-Chart", "FR-App-All_File"}))); return; } if (editing == null || !editing.isChartBook()) { String[] fileSuffix_local = LocalEnv.FILE_TYPE; - String[] fileSuffix = {"cpt", "cptx", "frm", "form", "cht", "chart"}; + EnumSet fileExtensions = EnumSet.of(FileExtension.CPT, FileExtension.CPTX, FileExtension.FRM, FileExtension.FRMX, FileExtension.CHT); if (type == JFileChooser.OPEN_DIALOG) { if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) { //本地连接 this.addChooseFILEFilter(new ChooseFileFilter(fileSuffix_local, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); } else { - this.addChooseFILEFilter(new ChooseFileFilter(fileSuffix, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); + this.addChooseFILEFilter(new ChooseFileFilter(fileExtensions, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); } } // ben:filefilter设置初值为cpt过滤 - this.addChooseFILEFilter(new ChooseFileFilter("cpt", appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); - this.addChooseFILEFilter(new ChooseFileFilter("cptx", appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.CPT, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.CPTX, appName + Inter.getLocText(new String[]{"FR-App-Report_Template", "FR-App-All_File"}))); // richer:form文件 daniel 改成三个字 - this.addChooseFILEFilter(new ChooseFileFilter("frm", appName + Inter.getLocText(new String[]{"FR-App-Template_Form", "FR-App-All_File"}))); - this.addChooseFILEFilter(new ChooseFileFilter("form", appName + Inter.getLocText(new String[]{"FR-App-Template_Form", "FR-App-All_File"}))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.FRM, appName + Inter.getLocText(new String[]{"FR-App-Template_Form", "FR-App-All_File"}))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.FRMX, appName + Inter.getLocText(new String[]{"FR-App-Template_Form", "FR-App-All_File"}))); } else { - String[] fileSuffix_local = {"xls", "xlsx"}; if (type == JFileChooser.OPEN_DIALOG) { - this.addChooseFILEFilter(new ChooseFileFilter(fileSuffix_local, Inter.getLocText("Import-Excel_Source"))); + this.addChooseFILEFilter(new ChooseFileFilter(EnumSet.of(FileExtension.XLS, FileExtension.XLSX), Inter.getLocText("Import-Excel_Source"))); } } // 添加 xls 文件类型过滤 kt if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) { //本地连接 - this.addChooseFILEFilter(new ChooseFileFilter("xls", Inter.getLocText("Import-Excel_Source"))); - this.addChooseFILEFilter(new ChooseFileFilter("xlsx", Inter.getLocText("Import-Excel2007_Source"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.XLS, Inter.getLocText("Import-Excel_Source"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.XLSX, Inter.getLocText("Import-Excel2007_Source"))); } - if (ComparatorUtils.equals(suffix, ".png")) { - this.addChooseFILEFilter(new ChooseFileFilter("png", Inter.getLocText("FR-App-Export_png"))); + if (FileExtension.PNG.matchExtension(suffix)) { + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.PNG, Inter.getLocText("FR-App-Export_png"))); } if (type == JFileChooser.SAVE_DIALOG) { - this.addChooseFILEFilter(new ChooseFileFilter("pdf", Inter.getLocText("FR-Import-Export_PDF"))); - this.addChooseFILEFilter(new ChooseFileFilter("svg", Inter.getLocText("FR-Import-Export_SVG"))); - this.addChooseFILEFilter(new ChooseFileFilter("csv", Inter.getLocText("FR-Import-Export_CSV"))); - this.addChooseFILEFilter(new ChooseFileFilter("doc", Inter.getLocText("FR-Import-Export_Word"))); - this.addChooseFILEFilter(new ChooseFileFilter("txt", Inter.getLocText("FR-Import-Export_Text"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.PDF, Inter.getLocText("FR-Import-Export_PDF"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.SVG, Inter.getLocText("FR-Import-Export_SVG"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.CSV, Inter.getLocText("FR-Import-Export_CSV"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.DOC, Inter.getLocText("FR-Import-Export_Word"))); + this.addChooseFILEFilter(new ChooseFileFilter(FileExtension.TXT, Inter.getLocText("FR-Import-Export_Text"))); } } @@ -564,8 +613,8 @@ public class FILEChooserPane extends BasicPane { private void chooseType() { DefaultComboBoxModel defaultComboBoxModel = (DefaultComboBoxModel) postfixComboBox.getModel(); defaultComboBoxModel.removeAllElements(); - for (int i = 0; i < filterList.size(); i++) { - defaultComboBoxModel.addElement(filterList.get(i)); + for (FILEFilter aFilterList : filterList) { + defaultComboBoxModel.addElement(aFilterList); } if (FRContext.getCurrentEnv().isSupportLocalFileOperate()) { //本地连接 if (!showWebReport) { @@ -578,38 +627,22 @@ public class FILEChooserPane extends BasicPane { defaultComboBoxModel.setSelectedItem(filterList.get(0)); } // richer:根据不同的文件类型显示不同的后缀名 - if (ComparatorUtils.equals(suffix, ".cpt")) { - postfixComboBox.setSelectedIndex(suffixIndex("cpt")); - } else if (ComparatorUtils.equals(suffix, ".cptx")) { - postfixComboBox.setSelectedIndex(suffixIndex("cptx")); - } else if (ComparatorUtils.equals(suffix, ".frm") || ComparatorUtils.equals(suffix, ".form")) { -// postfixComboBox.setSelectedIndex(2); - // daniel 改成三个字保证兼容 - // 现在默认用的是".frm" - postfixComboBox.setSelectedIndex(suffixIndex("frm")); - } else if (ComparatorUtils.equals(suffix, ".xls")) { - postfixComboBox.setSelectedIndex(suffixIndex("xls")); - } else if (ComparatorUtils.equals(suffix, ".xlsx")) { - postfixComboBox.setSelectedIndex(suffixIndex("xlsx")); - } else if (ComparatorUtils.equals(suffix, ".pdf")) { - postfixComboBox.setSelectedIndex(suffixIndex("pdf")); - } else if (ComparatorUtils.equals(suffix, ".svg")) { - postfixComboBox.setSelectedIndex(suffixIndex("svg")); - } else if (ComparatorUtils.equals(suffix, ".csv")) { - postfixComboBox.setSelectedIndex(suffixIndex("csv")); - } else if (ComparatorUtils.equals(suffix, ".doc")) { - postfixComboBox.setSelectedIndex(suffixIndex("doc")); - } else if (ComparatorUtils.equals(suffix, ".txt")) { - postfixComboBox.setSelectedIndex(suffixIndex("txt")); - } else if (ComparatorUtils.equals(suffix, ".png")) { - postfixComboBox.setSelectedIndex(suffixIndex("png")); + EnumSet fileExtensions = EnumSet.of( + FileExtension.CPT, FileExtension.CPTX, FileExtension.FRM, FileExtension.FRMX, + FileExtension.XLS, FileExtension.XLSX, FileExtension.PDF, FileExtension.SVG, + FileExtension.CSV, FileExtension.DOC, FileExtension.TXT, FileExtension.PNG); + for (FileExtension fileExtension : fileExtensions) { + if (fileExtension.matchExtension(suffix)) { + postfixComboBox.setSelectedIndex(suffixIndex(fileExtension.getExtension())); + break; + } } //jerry 26216 只保留.cpt .frm有用的格式,并且不可编辑 -// if (type == JFileChooser.OPEN_DIALOG) { -// postfixComboBox.setEnabled(true); -// } else { -// postfixComboBox.setEnabled(false); -// } + if (type == JFileChooser.OPEN_DIALOG) { + postfixComboBox.setEnabled(true); + } else { + postfixComboBox.setEnabled(false); + } //只有一个类型时不可下拉 if (filterList.size() == 1) { @@ -749,6 +782,7 @@ public class FILEChooserPane extends BasicPane { } } + @Override protected String title4PopupWindow() { return dialogName(); } @@ -761,6 +795,7 @@ public class FILEChooserPane extends BasicPane { PlaceListModel() { if (FILEChooserPane.this.showEnv) { envFILE = new FileNodeFILE(new FileNode(ProjectConstants.REPORTLETS_NAME, true)) { + @Override public String getName() { return getEnvProjectName(); } @@ -871,6 +906,7 @@ public class FILEChooserPane extends BasicPane { private ListCellRenderer placelistRenderer = new DefaultListCellRenderer() { + @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); @@ -898,6 +934,7 @@ public class FILEChooserPane extends BasicPane { */ private ListCellRenderer listRenderer = new DefaultListCellRenderer() { + @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); @@ -920,6 +957,7 @@ public class FILEChooserPane extends BasicPane { }; // placeList listener ListSelectionListener placeListener = new ListSelectionListener() { + @Override public void valueChanged(ListSelectionEvent e) { Object selValue = placesList.getSelectedValue(); if (selValue instanceof FILE) { @@ -932,6 +970,7 @@ public class FILEChooserPane extends BasicPane { * placeList mouseListener */ private MouseListener placeMouseListener = new MouseAdapter() { + @Override public void mousePressed(MouseEvent e) { Object selValue = placesList.getSelectedValue(); if (selValue instanceof FILE) { @@ -944,6 +983,7 @@ public class FILEChooserPane extends BasicPane { * right list. */ private KeyListener subFileListKeyListener = new KeyAdapter() { + @Override public void keyReleased(KeyEvent e) { Object source = e.getSource(); if (!(source instanceof JList)) { @@ -973,6 +1013,7 @@ public class FILEChooserPane extends BasicPane { * 鼠标点击JList时的listener */ private MouseListener subFileListMouseListener = new MouseAdapter() { + @Override public void mousePressed(MouseEvent e) { Object source = e.getSource(); if (!(source instanceof JList)) { @@ -1114,11 +1155,13 @@ public class FILEChooserPane extends BasicPane { this.setLayout(FRGUIPaneFactory.createBoxFlowLayout()); leftArrowButton = new BasicArrowButton(BasicArrowButton.WEST) { + @Override public Dimension getPreferredSize() { return new Dimension(21, 21); } }; leftArrowButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (pathIndex > 0) { pathIndex--; @@ -1129,11 +1172,13 @@ public class FILEChooserPane extends BasicPane { }); rightArrowButton = new BasicArrowButton(BasicArrowButton.EAST) { + @Override public Dimension getPreferredSize() { return new Dimension(21, 21); } }; rightArrowButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (pathIndex < maxPathIndex) { pathIndex++; @@ -1212,6 +1257,7 @@ public class FILEChooserPane extends BasicPane { } // doLayout + @Override public void doLayout() { this.removeAll(); @@ -1310,6 +1356,7 @@ public class FILEChooserPane extends BasicPane { this.dir = file; } + @Override public void actionPerformed(ActionEvent evt) { if (dir != null) { setSelectedDirectory(dir); @@ -1338,18 +1385,21 @@ public class FILEChooserPane extends BasicPane { repaint(); } + @Override public void mouseExited(MouseEvent e) { blankButton.setBackground(FILEChooserPane.this.getBackground().darker()); blankButton.setBorderPainted(false); repaint(); } + @Override public void mousePressed(MouseEvent e) { blankButton.setBackground(FILEChooserPane.this.getBackground().brighter()); blankButton.setBorderPainted(false); repaint(); } + @Override public void mouseReleased(MouseEvent e) { blankButton.setBackground(FILEChooserPane.this.getBackground().brighter()); blankButton.setBorderPainted(true); @@ -1363,6 +1413,7 @@ public class FILEChooserPane extends BasicPane { private ActionListener createFolderActionListener = new ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { if (currentDirectory == null) { return; diff --git a/designer-base/src/com/fr/file/filter/ChooseFileFilter.java b/designer-base/src/com/fr/file/filter/ChooseFileFilter.java index 461cabaef6..a25ebe7b6e 100644 --- a/designer-base/src/com/fr/file/filter/ChooseFileFilter.java +++ b/designer-base/src/com/fr/file/filter/ChooseFileFilter.java @@ -1,25 +1,26 @@ package com.fr.file.filter; -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.filechooser.FileFilter; - +import com.fr.base.extension.FileExtension; import com.fr.file.FILE; import com.fr.file.FileFILE; import com.fr.general.ComparatorUtils; -public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io.FileFilter { +import javax.swing.filechooser.FileFilter; +import java.io.File; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; + +public class ChooseFileFilter extends FileFilter implements FILEFilter, java.io.FileFilter { private List filters = null; private String description = null; private String fullDescription = null; private boolean useExtensionsInDescription = true; private boolean isExtend = false; - + public ChooseFileFilter() { - if (filters==null) { + if (filters == null) { this.filters = new ArrayList(); } } @@ -51,9 +52,51 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io public ChooseFileFilter(String[] filters, String description) { this(); - for (int i = 0; i < filters.length; i++) { + for (String filter : filters) { // add filters one by one - addExtension(filters[i]); + addExtension(filter); + } + + if (description != null) { + setDescription(description); + } + + } + + public ChooseFileFilter(FileExtension extension) { + this(extension, null); + } + + public ChooseFileFilter(FileExtension extension, String description) { + this(); + if (extension != null) { + addExtension(extension.getExtension()); + } + + if (description != null) { + setDescription(description); + } + } + + /** + * 使用指定枚举类集合构建文件过滤器 + * + * @param filters 文件扩展名枚举类集合 + */ + public ChooseFileFilter(EnumSet filters) { + this(filters, null); + } + + /** + * 使用指定枚举类集合构建文件过滤器 + * + * @param filters 文件扩展名枚举类集合 + * @param description 描述 + */ + public ChooseFileFilter(EnumSet filters, String description) { + this(); + for (FileExtension filter : filters) { + addExtension(filter.getExtension()); } if (description != null) { @@ -64,9 +107,11 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io /** * 是否支持改文档 + * * @param f 文件 * @return 支持返回true */ + @Override public boolean accept(File f) { if (f != null) { if (this.filters == null) { //all file types. @@ -89,9 +134,11 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io /** * 是否支持 + * * @param f 文件 * @return 支持返回 true */ + @Override public boolean accept(FILE f) { if (f != null) { if (this.filters == null) { //all file types. @@ -103,7 +150,7 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io } String extension = getExtension(f); - + if (extension != null && filters.contains(extension)) { return !isExtend; @@ -112,7 +159,7 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io return isExtend; } - + public String getExtension(File f) { if (f != null) { String filename = f.getName(); @@ -125,12 +172,12 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io return null; } - + public String getExtension(FILE f) { if (f != null) { String filename = f.getName(); if (f instanceof FileFILE) { - filename = ((FileFILE)f).getTotalName(); + filename = ((FileFILE) f).getTotalName(); } int i = filename.lastIndexOf('.'); @@ -144,13 +191,14 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io /** * 加扩展 + * * @param extension 扩展 */ public void addExtension(String extension) { if (filters == null) { filters = new ArrayList(); } - + if (!filters.contains(extension.toLowerCase())) { filters.add(extension.toLowerCase()); } @@ -160,13 +208,16 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io /** * 是否包含该扩展 - * @param extension 扩展 + * + * @param extension 扩展 * @return 是则返回true */ - public boolean containsExtension(String extension){ - return filters.contains(extension.toLowerCase()); + @Override + public boolean containsExtension(String extension) { + return filters.contains(extension.toLowerCase()); } + @Override public String getDescription() { if (this.filters == null) { //all file types. return fullDescription; @@ -187,13 +238,13 @@ public class ChooseFileFilter extends FileFilter implements FILEFilter , java.io // } // } - if (!filters.isEmpty()){ - fullDescription += "." + filters.get(0); - for (int i=1;i() { @Override - public String[] defaultExtentions() { + public String[] defaultExtensions() { return new String[]{"frm", "form"}; } diff --git a/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java index f270cf2bf4..5ba9688b44 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/AbstractExportAction.java @@ -57,6 +57,7 @@ public abstract class AbstractExportAction extends JWorkBookAction { /** * 执行方法 */ + @Override public void actionPerformed(ActionEvent e) { JWorkBook jwb = this.getEditingComponent(); FILE editingFILE = jwb.getEditingFILE(); @@ -80,7 +81,7 @@ public abstract class AbstractExportAction extends JWorkBookAction { // Choose a file name.... FILEChooserPane fileChooserPane = FILEChooserPane.getInstance(true, true); - fileChooserPane.setFILEFilter(this.getChooseFileFilter()); + fileChooserPane.addChooseFILEFilter(this.getChooseFileFilter()); // 打开文件后输出文件名修改,eg:w.cpt.doc / w.svg.doc,去掉中间的后缀名~~ w.doc String filenName = editingFILE.getName(); diff --git a/designer-realize/src/com/fr/design/actions/file/export/CSVExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/CSVExportAction.java index 2b760b84d9..d52f350d28 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/CSVExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/CSVExportAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -40,16 +41,16 @@ public class CSVExportAction extends AbstractExportAction { @Override protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"csv"}, Inter.getLocText("Export-CSV")); + return new ChooseFileFilter(FileExtension.CSV, Inter.getLocText("Export-CSV")); } @Override protected String getDefaultExtension() { TemplateWorkBook tpl = this.getTemplateWorkBook(); if (hasLayerReport(tpl)) { - return "zip"; + return FileExtension.ZIP.getExtension(); } else { - return "csv"; + return FileExtension.CSV.getExtension(); } } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/actions/file/export/EmbeddedExportExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/EmbeddedExportExportAction.java index 935a161686..81581feefe 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/EmbeddedExportExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/EmbeddedExportExportAction.java @@ -1,6 +1,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -8,6 +9,8 @@ import com.fr.general.Inter; import com.fr.io.exporter.EmbeddedTableDataExporter; import com.fr.io.exporter.Exporter; +import java.util.EnumSet; + /** * Export Embedded. */ @@ -30,13 +33,13 @@ public class EmbeddedExportExportAction extends AbstractExportAction { @Override protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"cpt"}, + return new ChooseFileFilter(EnumSet.of(FileExtension.CPTX, FileExtension.CPT), Inter.getLocText("Export-Template(embedded_data)")); } @Override protected String getDefaultExtension() { - return "cpt"; + return getEditingComponent().suffix().substring(1); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/actions/file/export/PDFExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/PDFExportAction.java index 13e6a8eed8..3c0d70fe42 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/PDFExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/PDFExportAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -34,12 +35,12 @@ public class PDFExportAction extends AbstractExportAction { @Override protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"pdf"}, Inter.getLocText("FR-Designer_Export-PDF")); + return new ChooseFileFilter(FileExtension.PDF, Inter.getLocText("FR-Designer_Export-PDF")); } @Override protected String getDefaultExtension() { - return "pdf"; + return FileExtension.PDF.getExtension(); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/actions/file/export/PageToSheetExcelExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/PageToSheetExcelExportAction.java index 1a159ee6a4..a3fc1e9910 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/PageToSheetExcelExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/PageToSheetExcelExportAction.java @@ -1,6 +1,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -12,28 +13,28 @@ import com.fr.report.core.ReportUtils; public class PageToSheetExcelExportAction extends AbstractExcelExportAction { - public PageToSheetExcelExportAction(JWorkBook jwb) { - super(jwb); - + public PageToSheetExcelExportAction(JWorkBook jwb) { + super(jwb); + this.setMenuKeySet(KeySetUtils.PAGETOSHEET_EXCEL_EXPORT); - this.setName(getMenuKeySet().getMenuKeySetName()+"..."); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/excel.png")); } @Override - protected Exporter getExporter() { - TemplateWorkBook tpl = this.getTemplateWorkBook(); + protected Exporter getExporter() { + TemplateWorkBook tpl = this.getTemplateWorkBook(); return new PageToSheetExcelExporter(ReportUtils.getPaperSettingListFromWorkBook(tpl)); } - + @Override - protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"xls"}, Inter.getLocText("Export-Excel")); + protected ChooseFileFilter getChooseFileFilter() { + return new ChooseFileFilter(FileExtension.XLS, Inter.getLocText("Export-Excel")); } @Override - protected String getDefaultExtension() { - return "xls"; + protected String getDefaultExtension() { + return FileExtension.XLS.getExtension(); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/actions/file/export/SVGExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/SVGExportAction.java index 8dba5ee33e..9c62d587a8 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/SVGExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/SVGExportAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -18,27 +19,27 @@ public class SVGExportAction extends AbstractExportAction { /** * Constructor */ - public SVGExportAction(JWorkBook jwb) { - super(jwb); - + public SVGExportAction(JWorkBook jwb) { + super(jwb); + this.setMenuKeySet(KeySetUtils.SVG_EXPORT); - this.setName(getMenuKeySet().getMenuKeySetName()+"..."); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/svg.png")); } - + @Override - protected Exporter getExporter() { + protected Exporter getExporter() { return new SVGExporter(); } @Override - protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"svg"}, Inter.getLocText("Export-SVG")); + protected ChooseFileFilter getChooseFileFilter() { + return new ChooseFileFilter(FileExtension.SVG, Inter.getLocText("Export-SVG")); } @Override - protected String getDefaultExtension() { - return "svg"; + protected String getDefaultExtension() { + return FileExtension.SVG.getExtension(); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/actions/file/export/TextExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/TextExportAction.java index 7a584b7eca..1dcf36d410 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/TextExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/TextExportAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -18,26 +19,26 @@ public class TextExportAction extends AbstractExportAction { /** * Constructor */ - public TextExportAction(JWorkBook jwb) { - super(jwb); + public TextExportAction(JWorkBook jwb) { + super(jwb); this.setMenuKeySet(KeySetUtils.TEXT_EXPORT); - this.setName(getMenuKeySet().getMenuKeySetName()+ "..."); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/text.png")); } - + @Override - protected Exporter getExporter() { + protected Exporter getExporter() { return new TextExporter(); } @Override - protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"txt"}, Inter.getLocText("Export-Text")); + protected ChooseFileFilter getChooseFileFilter() { + return new ChooseFileFilter(FileExtension.TXT, Inter.getLocText("Export-Text")); } @Override - protected String getDefaultExtension() { - return "txt"; + protected String getDefaultExtension() { + return FileExtension.TXT.getExtension(); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/actions/file/export/WordExportAction.java b/designer-realize/src/com/fr/design/actions/file/export/WordExportAction.java index ea73361b96..991ff122a1 100644 --- a/designer-realize/src/com/fr/design/actions/file/export/WordExportAction.java +++ b/designer-realize/src/com/fr/design/actions/file/export/WordExportAction.java @@ -4,6 +4,7 @@ package com.fr.design.actions.file.export; import com.fr.base.BaseUtils; +import com.fr.base.extension.FileExtension; import com.fr.design.mainframe.JWorkBook; import com.fr.design.menu.KeySetUtils; import com.fr.file.filter.ChooseFileFilter; @@ -18,26 +19,26 @@ public class WordExportAction extends AbstractExportAction { /** * Constructor */ - public WordExportAction(JWorkBook jwb) { - super(jwb); + public WordExportAction(JWorkBook jwb) { + super(jwb); this.setMenuKeySet(KeySetUtils.WORD_EXPORT); - this.setName(getMenuKeySet().getMenuKeySetName()+ "..."); + this.setName(getMenuKeySet().getMenuKeySetName() + "..."); this.setMnemonic(getMenuKeySet().getMnemonic()); this.setSmallIcon(BaseUtils.readIcon("/com/fr/design/images/m_file/word.png")); } - + @Override - protected Exporter getExporter() { + protected Exporter getExporter() { return new WordExporter(); } @Override - protected ChooseFileFilter getChooseFileFilter() { - return new ChooseFileFilter(new String[]{"doc"}, Inter.getLocText("Export-Word")); + protected ChooseFileFilter getChooseFileFilter() { + return new ChooseFileFilter(FileExtension.DOC, Inter.getLocText("Export-Word")); } @Override - protected String getDefaultExtension() { - return "doc"; + protected String getDefaultExtension() { + return FileExtension.DOC.getExtension(); } } \ No newline at end of file diff --git a/designer-realize/src/com/fr/design/module/DesignerModule.java b/designer-realize/src/com/fr/design/module/DesignerModule.java index 4471c6df3b..d2697fa69e 100644 --- a/designer-realize/src/com/fr/design/module/DesignerModule.java +++ b/designer-realize/src/com/fr/design/module/DesignerModule.java @@ -7,6 +7,7 @@ import com.fr.base.Formula; import com.fr.base.MultiFieldParameter; import com.fr.base.Style; import com.fr.base.TempNameStyle; +import com.fr.base.extension.FileExtension; import com.fr.base.frpx.exception.FRPackageRunTimeException; import com.fr.base.frpx.exception.InvalidWorkBookException; import com.fr.base.io.XMLEncryptUtils; @@ -302,8 +303,8 @@ public class DesignerModule extends DesignModule { private AbstractWorkBookApp getXlsxApp() { return new AbstractWorkBookApp() { @Override - public String[] defaultExtentions() { - return new String[]{"xlsx"}; + public String[] defaultExtensions() { + return new String[]{FileExtension.XLSX.getExtension()}; } @Override @@ -322,8 +323,8 @@ public class DesignerModule extends DesignModule { private AbstractWorkBookApp getXlsApp() { return new AbstractWorkBookApp() { @Override - public String[] defaultExtentions() { - return new String[]{"xls"}; + public String[] defaultExtensions() { + return new String[]{FileExtension.XLS.getExtension()}; } @Override @@ -342,8 +343,8 @@ public class DesignerModule extends DesignModule { private AbstractWorkBookApp getCptApp() { return new AbstractWorkBookApp() { @Override - public String[] defaultExtentions() { - return new String[]{"cpt"}; + public String[] defaultExtensions() { + return new String[]{FileExtension.CPT.getExtension()}; } @Override @@ -381,8 +382,8 @@ public class DesignerModule extends DesignModule { return new AbstractWorkBookApp() { @Override - public String[] defaultExtentions() { - return new String[]{"cptx"}; + public String[] defaultExtensions() { + return new String[]{FileExtension.CPTX.getExtension()}; } @Override