/*
* This file is part of the OSMembrane project.
* More informations under www.osmembrane.de
*
* The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0.
* for more details about the license see http://www.osmembrane.de/license/
*
* Source: $HeadURL$ ($Revision$)
* Last changed: $Date$
*/
package de.osmembrane.controller.actions;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import de.osmembrane.Application;
import de.osmembrane.exceptions.ControlledException;
import de.osmembrane.exceptions.ExceptionSeverity;
import de.osmembrane.model.ModelProxy;
import de.osmembrane.model.persistence.FileException;
import de.osmembrane.model.persistence.FileType;
import de.osmembrane.model.settings.SettingType;
import de.osmembrane.resources.Resource;
import de.osmembrane.tools.HeadlessSafe;
import de.osmembrane.tools.I18N;
import de.osmembrane.tools.IconLoader.Size;
import de.osmembrane.tools.Tools;
/**
* Action to export the created pipeline to a file.
*
* @author tobias_kuhn
*
*/
public class ExportPipelineAction extends AbstractAction {
private static final long serialVersionUID = 8382050986007810817L;
/**
* Creates a new {@link ExportPipelineAction}
*/
public ExportPipelineAction() {
putValue(
Action.NAME,
I18N.getInstance().getString(
"Controller.Actions.ExportPipeline.Name"));
putValue(
Action.SHORT_DESCRIPTION,
I18N.getInstance().getString(
"Controller.Actions.ExportPipeline.Description"));
putValue(Action.SMALL_ICON, Resource.PROGRAM_ICON.getImageIcon(
"export_pipeline.png", Size.SMALL));
putValue(Action.LARGE_ICON_KEY, Resource.PROGRAM_ICON.getImageIcon(
"export_pipeline.png", Size.NORMAL));
putValue(
Action.ACCELERATOR_KEY,
KeyStroke.getKeyStroke(KeyEvent.VK_E,
HeadlessSafe.getMenuShortcutKeyMask()));
}
@Override
public void actionPerformed(ActionEvent e) {
/* Check if the pipeline is complete */
if (!ModelProxy.getInstance().getPipeline().isComplete()) {
if (!(JOptionPane.showConfirmDialog(
null,
I18N.getInstance().getString(
"Controller.Actions.PipelineNotComplete"),
I18N.getInstance().getString(
"Controller.Actions.PipelineNotComplete.Title"),
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION)) {
return;
}
}
File startDir = new File((String) ModelProxy.getInstance()
.getSettings()
.getValue((SettingType.DEFAULT_WORKING_DIRECTORY)));
JFileChooser fileChooser = new JFileChooser(startDir);
fileChooser.setFileFilter(FileType.OSMEMBRANE.getFileFilter());
fileChooser.addChoosableFileFilter(FileType.BASH.getFileFilter());
fileChooser.addChoosableFileFilter(FileType.CMD.getFileFilter());
fileChooser.addChoosableFileFilter(FileType.ALLTYPES.getFileFilter());
int result = fileChooser.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
try {
/* parse the file to an URL */
URL file = fileChooser.getSelectedFile().toURI().toURL();
FileType type = FileType.fileTypeFor(fileChooser
.getSelectedFile());
if (type == null) {
/*
* could not find out which type the file has, add the
* system dependent extension.
*/
String fileWithExplicitExtensionString = fileChooser
.getSelectedFile().getAbsolutePath();
/* check if it is windows */
if (System.getProperty("os.name").toLowerCase()
.contains("win")) {
fileWithExplicitExtensionString += FileType.CMD
.getExtension();
type = FileType.CMD;
} else {
/* should be a unix based os, use bash */
fileWithExplicitExtensionString += FileType.BASH
.getExtension();
type = FileType.BASH;
}
file = new File(fileWithExplicitExtensionString).toURI()
.toURL();
}
/* Check if the file does not already exists. */
if (Tools.urlToFile(file).isFile()) {
int confirmResult = JOptionPane.showConfirmDialog(
null,
I18N.getInstance().getString(
"Controller.Actions.File.Override"),
I18N.getInstance().getString(
"Controller.Actions.File.Override.Title"),
JOptionPane.YES_NO_OPTION);
if (confirmResult == JOptionPane.NO_OPTION
|| result == JOptionPane.CLOSED_OPTION) {
return;
}
}
ModelProxy.getInstance().getPipeline()
.exportPipeline(file, type);
} catch (FileException e1) {
String message = I18N.getInstance().getString(
"Controller.Actions.Save.Failed." + e1.getType(),
e1.getParentException().getMessage());
Application.handleException(new ControlledException(this,
ExceptionSeverity.WARNING, e1, message));
} catch (MalformedURLException e1) {
}
}
}
}