package no.ntnu.fp.gui;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import no.ntnu.fp.storage.FileStorage;
import no.ntnu.fp.swingutil.FPFileFilter;
/**
* Implements the action for saving {@link no.ntnu.fp.model.Project} to an alternative file.
*
* @author Thomas Østerlie
* @author Rune Molden
*
* @version $Revision: 1.3 $ - $Date: 2005/02/22 08:46:51 $
*/
public class SaveAsAction extends AbstractAction {
/**
* Parent component.
*/
private ProjectPanel aProjectPanel;
/**
* Filter used by the {@link javax.swing.JFileChooser.
*/
private static FPFileFilter fileFilterXml = new FPFileFilter();
/**
* Filter used by the {@link javax.swing.JFileChooser.
*/
private static FPFileFilter fileFilterData = new FPFileFilter();
/**
*
*/
private FileStorage storage = new FileStorage();
/**
* Default constructor. Initialises member variables.
*
* @param projectPanel Parent component.
*/
public SaveAsAction(ProjectPanel projectPanel) {
this.aProjectPanel = projectPanel;
}
/**
* Invoked when an action occurs.
*
* @param e The action event.
*/
public void actionPerformed(ActionEvent arg0) {
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("Save As");
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
fileFilterXml.addExtension("XML");
fileFilterData.addExtension("DATA");
fileFilterXml.setDescription("XML data files");
fileFilterData.setDescription("Flat data files");
chooser.addChoosableFileFilter(fileFilterXml);
chooser.addChoosableFileFilter(fileFilterData);
int result = chooser.showSaveDialog(aProjectPanel);
if (result == JFileChooser.APPROVE_OPTION) {
File aFile = chooser.getSelectedFile();
PersonListModel plm = aProjectPanel.getModel();
try {
FPFileFilter chosenFilter = (FPFileFilter) chooser
.getFileFilter();
String chosenExtension = chosenFilter.getExtension().toLowerCase();
if (aFile.getPath().endsWith("." + chosenExtension)) {
storage.save(plm.getProject(), aFile);
} else if (FPFileFilter.getExtension(aFile) == null){
StringBuffer strBuffer = new StringBuffer(aFile.getPath());
strBuffer.append("." + chosenExtension.toLowerCase());
storage.save(plm.getProject(), new File(strBuffer.toString()));
} else {
String filePath = aFile.getPath();
String substFilePath =
filePath.replaceAll("${1}\\.(.+)", "." +
chosenExtension.toLowerCase());
storage.save(plm.getProject(), new File(substFilePath));
}
plm.setUrl(aFile.toURL());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}