package gov.nasa.jpl.mbee.mdk.mms.actions;
import com.nomagic.magicdraw.actions.MDAction;
import com.nomagic.magicdraw.core.Application;
import com.nomagic.magicdraw.core.GUILog;
import com.nomagic.ui.ProgressStatusRunner;
import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element;
import gov.nasa.jpl.mbee.mdk.generator.DocumentGenerator;
import gov.nasa.jpl.mbee.mdk.generator.DocumentValidator;
import gov.nasa.jpl.mbee.mdk.generator.DocumentWriter;
import gov.nasa.jpl.mbee.mdk.generator.PostProcessor;
import gov.nasa.jpl.mbee.mdk.model.Document;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
/**
* generates docgen 3 document
*
* @author dlam
*/
public class GenerateDocumentAction extends MDAction {
private static final long serialVersionUID = 1L;
private Element doc;
public static final String DEFAULT_ID = "GenerateDocument";
public GenerateDocumentAction(Element e) {
super(DEFAULT_ID, "Generate DocGen 3 Document", null, null);
doc = e;
}
@Override
public void actionPerformed(ActionEvent e) {
GUILog gl = Application.getInstance().getGUILog();
try {
File savefile = fileSelect();
if (savefile != null) {
generate(savefile);
}
} catch (Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
gl.log(sw.toString()); // stack trace as a string
ex.printStackTrace();
}
}
private File fileSelect() {
JFileChooser choose = new JFileChooser();
choose.setDialogTitle("Save to output xml...");
int retval = choose.showSaveDialog(null);
if (retval == JFileChooser.APPROVE_OPTION) {
return choose.getSelectedFile();
}
return null;
}
public void generate(File savefile) {
DocumentValidator dv = new DocumentValidator(doc);
dv.validateDocument();
if (dv.isFatal()) {
dv.printErrors();
return;
}
DocumentGenerator dg = new DocumentGenerator(doc, dv, null);
Document dge = dg.parseDocument();
boolean genNewImage = dge.getGenNewImage();
(new PostProcessor()).process(dge);
String userName = savefile.getName();
String filename = userName;
if (userName.length() < 4 || !userName.endsWith(".xml")) {
filename = userName + ".xml";
}
File dir = savefile.getParentFile();
File realfile = new File(dir, filename);
ProgressStatusRunner.runWithProgressStatus(new DocumentWriter(dge, realfile, genNewImage,
dir), "Generating DocGen 3 Document...", true, 0);
dv.printErrors();
}
}