package org.enhydra.jawe.base.controller.actions;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import org.enhydra.jawe.ActionBase;
import org.enhydra.jawe.BarFactory;
import org.enhydra.jawe.JaWEComponent;
import org.enhydra.jawe.JaWEManager;
import org.enhydra.jawe.base.controller.JaWEController;
import org.enhydra.shark.xpdl.StandardPackageValidator;
import org.enhydra.shark.xpdl.elements.Package;
/**
* Class that realizes <B>save</B> action.
* @author Sasa Bojanic
*/
public class Save extends ActionBase {
private String myName;
public Save(JaWEComponent jawecomponent) {
super(jawecomponent);
}
public Save(JaWEComponent jawecomponent, String name) {
super(jawecomponent, name);
this.myName = name;
}
public void enableDisableAction() {
setEnabled(JaWEManager.getInstance().getJaWEController().isSaveEnabled(false));
}
public void actionPerformed(ActionEvent e) {
JaWEController jc = JaWEManager.getInstance().getJaWEController();
boolean save = true;
boolean allowInvalidPackageSaving = jc.getControllerSettings().allowInvalidPackageSaving() && !"Released".equalsIgnoreCase(jc.getMainPackage().getRedefinableHeader().getPublicationStatus());
boolean isModelOK = false;
if (!allowInvalidPackageSaving) {
StandardPackageValidator xpdlValidator = JaWEManager.getInstance().getXPDLValidator();
xpdlValidator.init(
JaWEManager.getInstance().getXPDLHandler(),
jc.getMainPackage(),
false,
jc.getControllerSettings().getEncoding(),
JaWEManager.getInstance().getStartingLocale());
isModelOK = jc.checkValidity(jc.getMainPackage(), false).size() == 0;
if (!isModelOK) {
String msg = jc.getSettings().getLanguageDependentString("ErrorCannotSaveIncorrectPackage");
jc.getJaWEFrame().message(msg, JOptionPane.ERROR_MESSAGE);
save = false;
}
}
if (save) {
String oldFilename = jc.getPackageFilename(jc.getMainPackageId());
String newFilename = null;
Package pkg = jc.getMainPackage();
if (oldFilename == null || myName != null) {
newFilename = jc.getJaWEFrame().saveDialog(
jc.getSettings().getLanguageDependentString("SaveAs" + BarFactory.LABEL_POSTFIX), 0,
pkg.getId());
if (!newFilename.endsWith(".xpdl")) {
newFilename = newFilename + ".xpdl";
}
} else {
newFilename = oldFilename;
}
if (newFilename != null) {
jc.savePackage(pkg.getId(), newFilename);
}
}
}
}