package gov.nasa.jpl.mbee.mdk.mms.actions; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.nomagic.magicdraw.annotation.Annotation; import com.nomagic.magicdraw.annotation.AnnotationAction; import com.nomagic.magicdraw.core.Application; import com.nomagic.magicdraw.core.Project; import com.nomagic.uml2.ext.magicdraw.classes.mdkernel.Element; import gov.nasa.jpl.mbee.mdk.api.incubating.convert.Converters; import gov.nasa.jpl.mbee.mdk.util.Utils; import gov.nasa.jpl.mbee.mdk.mms.MMSUtils; import gov.nasa.jpl.mbee.mdk.mms.sync.queue.OutputQueue; import gov.nasa.jpl.mbee.mdk.mms.sync.queue.Request; import gov.nasa.jpl.mbee.mdk.validation.IRuleViolationAction; import gov.nasa.jpl.mbee.mdk.validation.RuleViolationAction; import org.apache.http.client.utils.URIBuilder; import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.Collection; import java.util.Map; public class ExportImage extends RuleViolationAction implements AnnotationAction, IRuleViolationAction { private static final long serialVersionUID = 1L; private Element element; private Map<String, ObjectNode> images; public ExportImage(Element e, Map<String, ObjectNode> images) { super("ExportImage", "Commit image", null, null); this.element = e; this.images = images; } @Override public boolean canExecute(Collection<Annotation> arg0) { return true; } public static boolean postImage(Project project, String key, Map<String, ObjectNode> is) { if (is == null || is.get(key) == null) { Utils.guilog("[ERROR] Image data with id " + key + " not found."); return false; } URIBuilder requestUri = MMSUtils.getServiceProjectsRefsElementsUri(project); if (requestUri == null) { return false; } String id = key.replace(".", "%2E"); requestUri.setPath(requestUri.getPath() + "/" + id); JsonNode value; String cs = ""; if ((value = is.get(key).get("cs")) != null && value.isTextual()) { cs = value.asText(); } requestUri.setParameter("cs", cs); String extension = ""; if ((value = is.get(key).get("extension")) != null && value.isTextual()) { extension = value.asText(); } requestUri.setParameter("extension", extension); String filename = ""; if ((value = is.get(key).get("abspath")) != null && value.isTextual()) { filename = value.asText(); } File imageFile = new File(filename); try { Request imageRequest = new Request(project, requestUri, imageFile, 1, "Image"); OutputQueue.getInstance().offer(imageRequest); } catch (IOException | URISyntaxException e) { Application.getInstance().getGUILog().log("[ERROR] Unable to commit image " + filename + ". Reason: " + e.getMessage()); e.printStackTrace(); return false; } return true; } @Override public void execute(Collection<Annotation> annos) { for (Annotation anno : annos) { Element e = (Element) anno.getTarget(); String key = Converters.getElementToIdConverter().apply(e); postImage(Project.getProject(e), key, images); } Utils.guilog("[INFO] Requests are added to queue."); } @Override public void actionPerformed(ActionEvent e) { String key = Converters.getElementToIdConverter().apply(element); if (postImage(Project.getProject(element), key, images)) { Utils.guilog("[INFO] Request is added to queue."); } } }