package gov.nasa.jpl.mbee.mdk.actions;
import com.nomagic.magicdraw.actions.MDAction;
import com.nomagic.magicdraw.core.Application;
import com.nomagic.magicdraw.openapi.uml.SessionManager;
import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element;
import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Package;
import gov.nasa.jpl.mbee.mdk.generator.DocumentGenerator;
import gov.nasa.jpl.mbee.mdk.util.Utils;
import gov.nasa.jpl.mbee.mdk.model.Document;
import gov.nasa.jpl.mbee.mdk.model.HierarchyMigrationVisitor;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
/**
* given a viewpoint composition hierarchy, makes the views, and have them
* conform to the respective viewpoints
*
* @author dlam
*/
public class MigrateToClassViewAction extends MDAction {
private static final long serialVersionUID = 1L;
private Element doc;
public static final String DEFAULT_ID = "MigrateToClassViews";
public MigrateToClassViewAction(Element e) {
super(DEFAULT_ID, "Migrate to Class Views", null, null);
doc = e;
}
@Override
public void actionPerformed(ActionEvent e) {
DocumentGenerator dg = new DocumentGenerator(doc, null, null);
Document dge = dg.parseDocument(false, true, true);
List packages = new ArrayList();
packages.add(Package.class);
Element owner = (Element) Utils.getUserSelection(packages, "Pick a package to create under");
if (owner != null) {
Boolean preserveId = Utils.getUserYesNoAnswer("Preserve Ids? (This will swap the ids of the existing views and new class views created.)");
boolean preserve = false;
if (preserveId != null && preserveId) {
preserve = true;
}
SessionManager.getInstance().createSession("docgen migration");
try {
HierarchyMigrationVisitor hmv = new HierarchyMigrationVisitor(owner, preserve);
dge.accept(hmv);
if (preserve && hmv.changeIdFailed()) {
Application.getInstance().getGUILog().log("[ERROR] Not all existing views are editable, cannot preserve ids, aborted.");
throw new Exception("failed cannot preserve ids on old document migrations");
}
SessionManager.getInstance().closeSession();
Application.getInstance().getGUILog().log("[INFO] Done (note previous 'nosection' views are now views under the parent view).");
} catch (Exception ex) {
SessionManager.getInstance().cancelSession();
Utils.printException(ex);
}
}
}
}