001: package com.tagtraum.perf.gcviewer.action;
002:
003: import com.tagtraum.perf.gcviewer.*;
004:
005: import javax.swing.*;
006: import java.awt.*;
007: import java.awt.event.ActionEvent;
008: import java.io.File;
009:
010: /**
011: *
012: * @author <a href="mailto:hs@tagtraum.com">Hendrik Schreiber</a>
013: * Date: May 20, 2005
014: * Time: 2:01:07 PM
015: *
016: */
017: public class Export extends AbstractAction {
018: private GCViewer gcViewer;
019: private JFileChooser saveDialog;
020: private DataWriterFactory writerFactory;
021:
022: public Export(final GCViewer gcViewer) {
023: this .gcViewer = gcViewer;
024: writerFactory = new DataWriterFactory();
025: putValue(NAME, GCViewer.localStrings
026: .getString("main_frame_menuitem_export"));
027: putValue(MNEMONIC_KEY, new Integer(GCViewer.localStrings
028: .getString("main_frame_menuitem_mnemonic_export")
029: .charAt(0)));
030: putValue(SHORT_DESCRIPTION, GCViewer.localStrings
031: .getString("main_frame_menuitem_hint_export"));
032: putValue(ACTION_COMMAND_KEY, "export");
033: putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke('E',
034: Event.CTRL_MASK));
035: putValue(SMALL_ICON, new ImageIcon(Toolkit.getDefaultToolkit()
036: .getImage(
037: gcViewer.getClass().getResource(
038: "images/save.png"))));
039: setEnabled(false);
040: saveDialog = new JFileChooser();
041: saveDialog.setDialogTitle(GCViewer.localStrings
042: .getString("fileexport_dialog_title"));
043: saveDialog.removeChoosableFileFilter(saveDialog
044: .getAcceptAllFileFilter());
045: saveDialog.addChoosableFileFilter(new ExtensionFileFilter(
046: ".csv", GCViewer.localStrings
047: .getString("fileexport_dialog_csv")));
048: saveDialog.addChoosableFileFilter(new ExtensionFileFilter(
049: ".txt", GCViewer.localStrings
050: .getString("fileexport_dialog_txt")));
051: }
052:
053: public void actionPerformed(final ActionEvent e) {
054: final GCDocument gcDocument = gcViewer.getSelectedGCDocument();
055: for (int i = 0; i < gcDocument.getChartPanelViewCount(); i++) {
056: final ChartPanelView chartPanelView = gcDocument
057: .getChartPanelView(i);
058: final File file = new File(chartPanelView.getModel()
059: .getURL().getFile());
060: saveDialog.setCurrentDirectory(file.getParentFile());
061: saveDialog.setSelectedFile(file);
062: final int val = saveDialog.showSaveDialog(gcViewer);
063: if (val == JFileChooser.APPROVE_OPTION) {
064: exportFile(chartPanelView.getModel(), saveDialog
065: .getSelectedFile(),
066: ((ExtensionFileFilter) saveDialog
067: .getFileFilter()).getExtension());
068: } else if (val == JFileChooser.ERROR_OPTION) {
069: JOptionPane
070: .showMessageDialog(
071: gcViewer,
072: GCViewer.localStrings
073: .getString("fileexport_dialog_error_occured"),
074: GCViewer.localStrings
075: .getString("fileexport_dialog_write_file_failed"),
076: JOptionPane.ERROR_MESSAGE);
077: }
078: }
079: }
080:
081: public void exportFile(final GCModel model, File file,
082: final String extension) {
083: DataWriter writer = null;
084: try {
085: if (file.toString().indexOf('.') == -1)
086: file = new File(file.toString() + extension);
087: if (!file.exists()
088: || JOptionPane.YES_OPTION == JOptionPane
089: .showConfirmDialog(
090: gcViewer,
091: GCViewer.localStrings
092: .getString("fileexport_dialog_confirm_overwrite"),
093: GCViewer.localStrings
094: .getString("fileexport_dialog_title"),
095: JOptionPane.YES_NO_OPTION)) {
096: writer = writerFactory.getDataWriter(file, extension);
097: writer.write(model);
098: }
099: } catch (Exception ioe) {
100: //ioe.printStackTrace();
101: JOptionPane.showMessageDialog(gcViewer, ioe
102: .getLocalizedMessage(), GCViewer.localStrings
103: .getString("fileexport_dialog_write_file_failed"),
104: JOptionPane.ERROR_MESSAGE);
105: } finally {
106: if (writer != null) {
107: writer.close();
108: }
109: }
110: }
111:
112: private static class ExtensionFileFilter extends
113: javax.swing.filechooser.FileFilter {
114: private String extension;
115: private String description;
116:
117: public ExtensionFileFilter(final String extension,
118: final String description) {
119: this .extension = extension.toLowerCase();
120: this .description = description;
121:
122: }
123:
124: public boolean accept(final File file) {
125: return file.toString().toLowerCase().endsWith(extension);
126: }
127:
128: public String getExtension() {
129: return extension;
130: }
131:
132: public String getDescription() {
133: return description;
134: }
135: }
136: }
|