diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/provider/SignavioDiffProvider.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/provider/SignavioDiffProvider.java index 824f88e57782ba5f752dd482e69e1175e139ebee..bd5d375b29f1e35997face0e7a116daf1555be44 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/provider/SignavioDiffProvider.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/provider/SignavioDiffProvider.java @@ -11,6 +11,9 @@ import org.activiti.cycle.RepositoryException; import org.activiti.cycle.impl.connector.signavio.SignavioConnector; import org.activiti.cycle.impl.connector.signavio.SignavioPluginDefinition; import org.activiti.cycle.impl.connector.signavio.util.SignavioSvgApiBuilder; +import org.activiti.cycle.impl.connector.signavio.util.SignavioSvgHighlight; +import org.activiti.cycle.impl.connector.signavio.util.SignavioSvgHighlightType; +import org.activiti.cycle.impl.connector.signavio.util.SignavioSvgNodeType; import org.oryxeditor.server.diagram.Diagram; import org.oryxeditor.server.diagram.DiagramBuilder; import org.oryxeditor.server.diagram.Shape; @@ -36,17 +39,17 @@ public class SignavioDiffProvider extends SignavioContentRepresentationProvider diffTarget = artifact; } - Map> missingSourceElements = new HashMap>(); - Map> missingTargetElements = new HashMap>(); - + List missingSourceElements = new ArrayList(); + List missingTargetElements = new ArrayList(); + // create DIFF String sourceJson = connector.getContent(artifact.getNodeId(), SignavioPluginDefinition.CONTENT_REPRESENTATION_ID_JSON).asString(); String targetJson = connector.getContent(diffTarget.getNodeId(), SignavioPluginDefinition.CONTENT_REPRESENTATION_ID_JSON).asString(); - + try { Diagram sourceDiagram = DiagramBuilder.parseJson(sourceJson); Diagram targetDiagram = DiagramBuilder.parseJson(targetJson); - + // First quick HACKY way to find missing elements on the top level for (Shape sourceShape : sourceDiagram.getShapes()) { String sourceId = sourceShape.getResourceId(); @@ -58,10 +61,8 @@ public class SignavioDiffProvider extends SignavioContentRepresentationProvider } } if (!existant) { - // add to missing nodes in target artifact - ArrayList messages = new ArrayList(); - messages.add("MISSING"); - missingSourceElements.put(sourceId, messages); + // add to missing nodes in target artifact + missingSourceElements.add(new SignavioSvgHighlight(SignavioSvgNodeType.NODE, SignavioSvgHighlightType.INFO, sourceId, "MISSING")); } } for (Shape targetShape : targetDiagram.getShapes()) { @@ -74,10 +75,8 @@ public class SignavioDiffProvider extends SignavioContentRepresentationProvider } } if (!existant) { - // add to missing nodes in target artifact - ArrayList messages = new ArrayList(); - messages.add("MISSING"); - missingTargetElements.put(targetId, messages); + // add to missing nodes in target artifact + missingTargetElements.add(new SignavioSvgHighlight(SignavioSvgNodeType.NODE, SignavioSvgHighlightType.INFO, targetId, "MISSING")); } } } catch (Exception e) { @@ -85,20 +84,20 @@ public class SignavioDiffProvider extends SignavioContentRepresentationProvider } // and create resulting HTML - String script1 = new SignavioSvgApiBuilder(connector, artifact).highlightNodes(missingSourceElements, INFO_COLOR).buildScript(75); - String script2 = new SignavioSvgApiBuilder(connector, diffTarget).highlightNodes(missingTargetElements, INFO_COLOR).buildScript(75); + String script1 = new SignavioSvgApiBuilder(connector, artifact).highlightNodes(missingSourceElements).buildScript(75); + String script2 = new SignavioSvgApiBuilder(connector, diffTarget).highlightNodes(missingTargetElements).buildScript(75); Integer height = 200; String htmlContent = "

Expertimental feature to play around with Signavio diffing.
Currently, showing diff against artifact " + diffTarget.getGlobalUniqueId() + ".
Use the Actions menu to select another diff target.

"; - + String additionalContent = "

Changes from " + diffTarget.getMetadata().getName() + " in " + artifact.getMetadata().getName(); additionalContent += "

" + script1 + "
"; additionalContent += "Changes from " + artifact.getMetadata().getName() + " in " + diffTarget.getMetadata().getName(); additionalContent += "
" + script2 + "
"; - String html = SignavioSvgApiBuilder.buildHtml(htmlContent, additionalContent); + String html = new SignavioSvgApiBuilder(connector, artifact).buildHtml(htmlContent, additionalContent); content.setValue(html); - + } } diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioModelHighlighter.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioModelHighlighter.java new file mode 100644 index 0000000000000000000000000000000000000000..2b1d697faee5ca1976cd8707f691ab2855e32e39 --- /dev/null +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioModelHighlighter.java @@ -0,0 +1,196 @@ +package org.activiti.cycle.impl.connector.signavio.util; + +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; +import java.util.Map.Entry; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +/** + * Performs highlighting of nodes depending on {@link SignavioSvgHighlightType} + * and {@link SignavioSvgNodeType}. Configure the highlighter using + * {@link #setHighlightColor(SignavioSvgHighlightType, String)}. + * + * @author daniel.meyer@camunda.com + */ +public class SignavioModelHighlighter { + + Logger log = Logger.getLogger(SignavioModelHighlighter.class.getName()); + + public SortedMap> highlights = new TreeMap>( + new SignavioSvgHighlightTypeComparator()); + + public Map highlightColorMap = new HashMap(); + + public void setHighlightColor(SignavioSvgHighlightType type, String color) { + highlightColorMap.put(type, color); + } + + public String getHighlightColor(SignavioSvgHighlightType type) { + return highlightColorMap.get(type); + } + + public SignavioModelHighlighter() { + init(); + } + + private void init() { + // set default colors: + highlightColorMap.put(SignavioSvgHighlightType.ERROR, "red"); + highlightColorMap.put(SignavioSvgHighlightType.INFO, "grey"); + highlightColorMap.put(SignavioSvgHighlightType.WARNING, "#FFE736"); + } + + public void addHighlight(SignavioSvgHighlight highlight) { + Set highlightset = highlights.get(highlight.getHighlightType()); + if (highlightset == null) { + highlightset = new HashSet(); + highlights.put(highlight.getHighlightType(), highlightset); + } + highlightset.add(highlight); + } + + public void participateInBuilder(StringWriter writer) { + if (highlights.size() == 0) { + writer.write(""); + } + JSONArray focusArr = new JSONArray(); + for (Entry> highlightset : highlights.entrySet()) { + for (Object obj : doHighlighting(highlightset.getValue(), highlightset.getKey())) { + focusArr.put(obj); + } + } + if (focusArr.length() > 0) { + String clickFunction = createClickFunction(); + if (clickFunction != null) { + writer.write(" click: " + clickFunction + ","); + } + writer.write(" focus: " + focusArr.toString()); + } + } + + private Object[] doHighlighting(Set highlightset, SignavioSvgHighlightType highlightType) { + Set containers = new HashSet(); + Set nodes = new HashSet(); + Set connectors = new HashSet(); + + for (SignavioSvgHighlight signavioSvgHighlight : highlightset) { + if (SignavioSvgNodeType.CONTAINER.equals(signavioSvgHighlight.getNodeType())) { + containers.add(signavioSvgHighlight.getNodeId()); + continue; + } + if (SignavioSvgNodeType.CONNECTOR.equals(signavioSvgHighlight.getNodeType())) { + connectors.add(signavioSvgHighlight.getNodeId()); + continue; + } + if (SignavioSvgNodeType.NODE.equals(signavioSvgHighlight.getNodeType())) { + nodes.add(signavioSvgHighlight.getNodeId()); + continue; + } + } + + List result = new ArrayList(); + + if (containers.size() > 0) { + for (String containerId : containers) { + result.add(containerId); + } + } + + try { + if (nodes.size() > 0) { + JSONObject obj = new JSONObject(); + obj.put("nodes", nodes); + JSONObject attributes = new JSONObject(); + attributes.put("fill", highlightColorMap.get(highlightType)); + obj.put("attributes", attributes); + result.add(obj); + } + } catch (JSONException e) { + log.log(Level.WARNING, e.getMessage(), e); + } + try { + if (connectors.size() > 0) { + JSONObject obj = new JSONObject(); + obj.put("nodes", connectors); + JSONObject attributes = new JSONObject(); + attributes.put("stroke", highlightColorMap.get(highlightType)); + obj.put("attributes", attributes); + result.add(obj); + } + } catch (JSONException e) { + log.log(Level.WARNING, e.getMessage(), e); + } + return result.toArray(new Object[0]); + } + + private String createClickFunction() { + try { + StringBuilder clickFunc = new StringBuilder(); + clickFunc.append("function(node, editor) {"); + + // create default click function + clickFunc.append("var errorMessages = " + createJsonMessagesObject() + ";"); + clickFunc.append("var myNodeMessages = errorMessages[node.resourceId];"); + clickFunc.append("if (myNodeMessages != '' && myNodeMessages != 'undefined' && myNodeMessages != undefined) {"); + clickFunc.append("var myNodeMessagesStr = \"\";"); + clickFunc.append("for (msg in myNodeMessages) {"); + clickFunc.append("myNodeMessagesStr += myNodeMessages[msg] + \"\\n\";"); + clickFunc.append("}"); + clickFunc.append("alert(\"Sid: \" + node.resourceId + \"\\nErrorMessages: \" + myNodeMessagesStr);"); + clickFunc.append("}"); + + // clickFunc.append("var errorMessages = " + createJsonMessagesObject() + + // ";"); + // clickFunc.append("if(node.properties[\"oryx-name\"] || node.properties[\"oryx-title\"] || node.resourceId) {"); + // clickFunc.append("alert(\"Name: \" + node.properties[\"oryx-name\"] + \" (Sid: \" + node.resourceId + \")\");"); + // clickFunc.append("}"); + + clickFunc.append("}"); + + return clickFunc.toString(); + } catch (JSONException e) { + log.log(Level.WARNING, e.getMessage(), e); + return null; + } + } + + private String createJsonMessagesObject() throws JSONException { + if (highlights.isEmpty()) { + return "\"\""; + } + + Map> messageMap = new HashMap>(); + JSONObject jsonMessageObj = new JSONObject(); + // collect all messages per node. + for (Entry> entry : highlights.entrySet()) { + for (SignavioSvgHighlight highlight : entry.getValue()) { + List messagesForThisNode = messageMap.get(highlight.getNodeId()); + if (messagesForThisNode == null) { + messagesForThisNode = new ArrayList(); + messageMap.put(highlight.getNodeId(), messagesForThisNode); + } + messagesForThisNode.add(highlight.getMessage()); + } + } + + // build message element + for (Entry> messageEnty : messageMap.entrySet()) { + jsonMessageObj.put(messageEnty.getKey(), messageEnty.getValue()); + } + + return jsonMessageObj.toString(); + } + +} diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiBuilder.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiBuilder.java index 9a7efa7fbad057dc8dd8510204df7b97f9b34a51..9576cab9df9e94f1412161f54fadd4740f1c5842 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiBuilder.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiBuilder.java @@ -1,193 +1,111 @@ package org.activiti.cycle.impl.connector.signavio.util; -import java.util.ArrayList; -import java.util.Comparator; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.TreeMap; - import org.activiti.cycle.RepositoryArtifact; -import org.activiti.cycle.RepositoryException; import org.activiti.cycle.impl.connector.signavio.SignavioConnector; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; public class SignavioSvgApiBuilder { - public static final String HEADER = ""; - public static final String FOOTER = ""; - // public static final String SVGAPI_URL_REMOTE = - // "http://signavio-core-components.googlecode.com/svn/trunk/api/api/signavio-svg.js"; - // TODO: Should that be configurable and point to a SaaS Signavio if that is - // used? Or is the local URL the best? + public static String SIGNAVIO_SVG_API_SCRIPT_TEMPLATE = "SignavioSvgApiScriptTemplate.xml"; + public static String SIGNAVIO_SVG_API_HTML_TEMPLATE = "SignavioSvgApiHtmlTemplate.xml"; + // TODO: fix absolute paths public static final String SVGAPI_URL_LOCAL = "http://localhost:8080/activiti-modeler/api/signavio-svg.js"; - // maybe make this changable? + // TODO: fix absolute paths public static final String SERVER_SCRIPT_URL = "http://localhost:8080/activiti-modeler"; private SignavioConnector connector; + private RepositoryArtifact artifact; - private String authToken; - private String clickFunction; + private SignavioModelHighlighter modelHighlighter = new SignavioModelHighlighter(); - // TODO: Remove the hard coded urls anyway! - private boolean useLocalScripts = true; - private static String svgApiScript = ""; + private String htmlContent = ""; - /** - * Map mapping a color for highlighting with a {@link Map} of node (ids) with - * messages to show - */ - private Map>> nodesToHighlight = new TreeMap>>(new Comparator() { + private String zoomLevel = "100"; - public int compare(String o1, String o2) { - if (!o1.equals("red")) - return -1; - if (o1.equals(o2)) - return 0; - return 1; - } - }); + private String script; - /** - * Constructor to create a SignavioSvgApiBuilder object. - * - * @param connector - * required for constructing correct model url - * @param artifact - * required for constructing correct model url - */ public SignavioSvgApiBuilder(SignavioConnector connector, RepositoryArtifact artifact) { this.connector = connector; this.artifact = artifact; } - /** - * Submit a map containing the nodes to be highlighted and in which color. - * Key: Signavio ID, Value: Message to show - */ - public SignavioSvgApiBuilder highlightNodes(Map> nodes, String color) { - nodesToHighlight.put(color, nodes); - return this; + public String buildHtml(String script, String htmlContent) { + this.script = script; + this.htmlContent = htmlContent; + return buildHtml(); } - /** - * Maybe required to get access to models in saas/enterprise signavio. - * - * @param authToken - * authtoken for saas / enterprise signavio - */ - public SignavioSvgApiBuilder authToken(String authToken) { - this.authToken = authToken; - return this; - } + public String buildHtml() { + // load template + String template = loadTemplate(SIGNAVIO_SVG_API_HTML_TEMPLATE); + if (template == null) + return ""; - /** - * A javascript function submitted as string. You have the javascript - * variables 'node' and 'editor' to your disposal. - * - * @param clickFunction - * a string representation of a javascript function, e.g. - * 'if(node.properties["oryx-name"]||node.properties["oryx-title"]) { - * alert("Name: " + node.properties["oryx-name"] + "\n(Sid: " + - * node.resourceId + ")"); };' - * @return - */ - public SignavioSvgApiBuilder clickFunction(String clickFunction) { - this.clickFunction = clickFunction; - return this; - } + // add script + template = template.replace("SCRIPT", buildScript()); - public SignavioSvgApiBuilder useLocalScripts(boolean useLocalScripts) { - this.useLocalScripts = useLocalScripts; - return this; - } + // add additional HTML content: + template = template.replaceAll("HTML_CONTENT", htmlContent); - /** - * use buildHtml instead - * - * @throws JSONException - */ - @Deprecated - public String build() { - return buildHtml(); + return template; } - public String buildHtml() { - return buildHtml(buildScript(), null); + public String buildScript(int zoomLevel) { + this.zoomLevel = String.valueOf(zoomLevel); + return buildScript(); } - public static String buildHtml(String content) { - return buildHtml(content, null); - } + public String buildScript() { + if (script != null) + return script; - public static String buildHtml(String content, String additionalContent) { - if (additionalContent == null) { - additionalContent = ""; - } - return HEADER + "
" + content + "
" + additionalContent + svgApiScript + FOOTER; - } + String template = loadTemplate(SIGNAVIO_SVG_API_SCRIPT_TEMPLATE); + if (template == null) + return ""; + // set properties + template = template.replaceAll("SIGNAVIO_EDITOR_SRC", SVGAPI_URL_LOCAL); + template = template.replaceAll("SIGNAVIO_MODEL_URL", connector.getConfiguration().getModelUrl(artifact.getNodeId())); + template = template.replaceAll("SIGNAVIO_SERVER_URL", connector.getConfiguration().getSignavioUrl()); + template = template.replaceAll("SIGNAVIO_ZOOM", zoomLevel); - public static String buildHtml(String content, String additionalContent, int height) { - if (additionalContent == null) { - additionalContent = ""; - } - return HEADER + "
" + content + "
" + additionalContent + svgApiScript + FOOTER; - } + // build highlights: + StringWriter extensionsWriter = new StringWriter(); + modelHighlighter.participateInBuilder(extensionsWriter); + template = template.replaceAll("HIGHLIGHTS", extensionsWriter.toString()); - public String buildScript() { - return buildScript(100); + return template; } - public String buildScript(Integer zoom) { + private String loadTemplate(String template) { + BufferedReader reader = null; try { - StringBuilder svgApiScriptBuilder = new StringBuilder(); - svgApiScriptBuilder.append(""); - svgApiScript = svgApiScriptBuilder.toString(); - - StringBuilder svgApiCall = new StringBuilder(); - svgApiCall.append(""); - - return svgApiCall.toString(); - } catch (JSONException ex) { - throw new RepositoryException("Unexpected exception with JSON handling for " + artifact, ex); + return null; } } @@ -218,119 +136,21 @@ public class SignavioSvgApiBuilder { return html.toString(); } - private String registerMouseOverEvent() throws JSONException { - if (nodesToHighlight == null || nodesToHighlight.isEmpty()) { - return "function(editor) {}"; - } - - StringBuilder callbackFunc = new StringBuilder(); - callbackFunc.append("function(editor) {"); - callbackFunc.append("editor.registerOnEvent(\"mouseover\", function(evt, node) {"); - callbackFunc.append("var errorMessages = " + createJsonMessagesObject() + ";"); - callbackFunc.append("var myNodeMessages = errorMessages[node.resourceId];"); - callbackFunc.append("if (myNodeMessages != '' && myNodeMessages != 'undefined' && myNodeMessages != undefined) {"); - callbackFunc.append("var myNodeMessagesStr = \"\";"); - callbackFunc.append("for (msg in myNodeMessages) {"); - callbackFunc.append("myNodeMessagesStr += myNodeMessages[msg] + \"\\n\";"); - callbackFunc.append("}"); - callbackFunc.append("alert(\"Sid: \" + node.resourceId + \"\\nMessages: \" + myNodeMessagesStr);"); - callbackFunc.append("}"); - // @TODO: doesn't work atm, unable to get variable 'me' - // callbackFunc.append("if (node instanceof me.ORYX.Core.Shape) {"); - // callbackFunc.append("}"); - callbackFunc.append("});"); - - callbackFunc.append("}"); - return callbackFunc.toString(); - } - - private String createClickFunction() throws JSONException { - StringBuilder clickFunc = new StringBuilder(); - clickFunc.append("function(node, editor) {"); - if (clickFunction != null && clickFunction.length() > 0) { - clickFunc.append(clickFunction); - } else { - // create default click function - clickFunc.append("var errorMessages = " + createJsonMessagesObject() + ";"); - clickFunc.append("var myNodeMessages = errorMessages[node.resourceId];"); - clickFunc.append("if (myNodeMessages != '' && myNodeMessages != 'undefined' && myNodeMessages != undefined) {"); - clickFunc.append("var myNodeMessagesStr = \"\";"); - clickFunc.append("for (msg in myNodeMessages) {"); - clickFunc.append("myNodeMessagesStr += myNodeMessages[msg] + \"\\n\";"); - clickFunc.append("}"); - clickFunc.append("alert(\"Sid: \" + node.resourceId + \"\\nErrorMessages: \" + myNodeMessagesStr);"); - clickFunc.append("}"); - - // clickFunc.append("var errorMessages = " + createJsonMessagesObject() + - // ";"); - // clickFunc.append("if(node.properties[\"oryx-name\"] || node.properties[\"oryx-title\"] || node.resourceId) {"); - // clickFunc.append("alert(\"Name: \" + node.properties[\"oryx-name\"] + \" (Sid: \" + node.resourceId + \")\");"); - // clickFunc.append("}"); - } - clickFunc.append("}"); - - return clickFunc.toString(); - } - - private JSONObject highlightNodesMap(String color, Map> map) throws JSONException { - if (map == null || map.isEmpty()) { - return null; - } - // set default color if not provided - if (color == null || color.length() == 0) { - color = "red"; - } - - // hack for making sure that lanes do not 'overlap' everything else - JSONObject highlightNodesObj = new JSONObject(); - List lanes = new ArrayList(); - for (Entry> entry : map.entrySet()) { - for (String name : entry.getValue()) { - if (name.toLowerCase().contains("lane")) - lanes.add(entry.getKey()); - } - } - for (String string : lanes) { - map.remove(string); - } - - highlightNodesObj.put("nodes", map.keySet()); - JSONObject attributes = new JSONObject(); - attributes.put("fill", color); - highlightNodesObj.put("attributes", attributes); - - return highlightNodesObj; + public SignavioSvgApiBuilder addHighlight(SignavioSvgHighlight highlight) { + modelHighlighter.addHighlight(highlight); + return this; } - private String buildHighlightning() throws JSONException { - if (nodesToHighlight == null || nodesToHighlight.isEmpty()) { - return "[]"; - } - - JSONArray focusArr = new JSONArray(); - for (Entry>> entry : nodesToHighlight.entrySet()) { - Map> value = (Map>) entry.getValue(); - if (!value.isEmpty()) { - focusArr.put(highlightNodesMap((String) entry.getKey(), value)); - } - } - - return focusArr.toString(); + public SignavioSvgApiBuilder addHtmlContent(String additionalContent) { + htmlContent = additionalContent; + return this; } - private String createJsonMessagesObject() throws JSONException { - if (nodesToHighlight == null || nodesToHighlight.isEmpty()) { - return "\"\""; + public SignavioSvgApiBuilder highlightNodes(List nodes) { + for (SignavioSvgHighlight signavioSvgHighlight : nodes) { + addHighlight(signavioSvgHighlight); } - - JSONObject jsonMessageObj = new JSONObject(); - for (Entry>> entry : nodesToHighlight.entrySet()) { - for (Entry> mapEntry : entry.getValue().entrySet()) { - jsonMessageObj.put(mapEntry.getKey(), mapEntry.getValue()); - } - } - - return jsonMessageObj.toString(); + return this; } } \ No newline at end of file diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlight.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlight.java new file mode 100644 index 0000000000000000000000000000000000000000..35b4824a73f06dd9e1327fea726cbeab55273094 --- /dev/null +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlight.java @@ -0,0 +1,36 @@ +package org.activiti.cycle.impl.connector.signavio.util; + +public class SignavioSvgHighlight { + + private final SignavioSvgNodeType nodeType; + + private final SignavioSvgHighlightType highlightType; + + private final String nodeId; + + private final String message; + + public SignavioSvgHighlight(SignavioSvgNodeType nodeType, SignavioSvgHighlightType highlightType, String nodeId, String message) { + this.nodeType = nodeType; + this.highlightType = highlightType; + this.nodeId = nodeId; + this.message = message; + } + + public SignavioSvgNodeType getNodeType() { + return nodeType; + } + + public SignavioSvgHighlightType getHighlightType() { + return highlightType; + } + + public String getNodeId() { + return nodeId; + } + + public String getMessage() { + return message; + } + +} diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlightType.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlightType.java new file mode 100644 index 0000000000000000000000000000000000000000..80b84d074a258106dafd0f15da44e59ec61ba1b8 --- /dev/null +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlightType.java @@ -0,0 +1,8 @@ +package org.activiti.cycle.impl.connector.signavio.util; + + +public enum SignavioSvgHighlightType { + + INFO, WARNING, ERROR + +} diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlightTypeComparator.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlightTypeComparator.java new file mode 100644 index 0000000000000000000000000000000000000000..445eadd8a97c88c1a701f3d90dbd8f24399f1f50 --- /dev/null +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgHighlightTypeComparator.java @@ -0,0 +1,23 @@ +package org.activiti.cycle.impl.connector.signavio.util; + +import java.util.Comparator; + +public class SignavioSvgHighlightTypeComparator implements Comparator { + + public int compare(SignavioSvgHighlightType o1, SignavioSvgHighlightType o2) { + if (o1.equals(o2)) + return 0; + switch (o1) { + case INFO: + return -1; + case WARNING: + return 0; + case ERROR: + return 1; + default: + return 0; + } + + } + +} \ No newline at end of file diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgNodeType.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgNodeType.java new file mode 100644 index 0000000000000000000000000000000000000000..6210508f34609545094bcbcf9672a22dafa5f977 --- /dev/null +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgNodeType.java @@ -0,0 +1,12 @@ +package org.activiti.cycle.impl.connector.signavio.util; + +/** + * NodeTypes used for Node-highlighting in Svg. + * + * @author daniel.meyer@camunda.com + */ +public enum SignavioSvgNodeType { + + CONTAINER, CONNECTOR, NODE; + +} diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleConfigurationService.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleConfigurationService.java index c4dc74060e67f1a517a80c0c3a5b6d1ffb54176b..5e7b688200a1f2f12df196e466998ab3e9214f03 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleConfigurationService.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleConfigurationService.java @@ -24,7 +24,7 @@ import org.activiti.cycle.impl.conf.RepositoryConnectorConfiguration; * String-based interface. *

* Retreive an instance of this Service by - * {@link CycleService#getConfigurationService()} + * {@link CycleServiceFactory#getConfigurationService()} * * @see CycleService * @author daniel.meyer@camunda.com diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleRepositoryService.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleRepositoryService.java index f4a1330938ac0817ef4d56a6d1d20d2ebd31fd4f..ab2d0bd4ee6060b78f7bf3c86131cceea79d358b 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleRepositoryService.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleRepositoryService.java @@ -30,12 +30,11 @@ import org.activiti.cycle.RepositoryNodeNotFoundException; * Cycle service used for accessing repositories. *

* Get an instance of this service by - * {@link CycleService#getRepositoryService()} + * {@link CycleServiceFactory#getRepositoryService()} * - * @see CycleService */ public interface CycleRepositoryService { - + public static class RuntimeConnectorList implements Serializable { private static final long serialVersionUID = 1L; diff --git a/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleTagService.java b/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleTagService.java index 1c7e6832c7b2ee27fb91c1c56237ae4cfbc09843..0d418f92f54c9b7616e3452fbe67e084c33e6720 100644 --- a/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleTagService.java +++ b/modules/activiti-cycle/src/main/java/org/activiti/cycle/service/CycleTagService.java @@ -20,7 +20,7 @@ import org.activiti.cycle.RepositoryNodeTag; /** * Cycle service used for managing tags. *

- * Get an instance of this service by {@link CycleService#getCycleTagService()} + * Get an instance of this service by {@link CycleServiceFactory#getCycleTagService()} * * @see CycleService */ diff --git a/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiHtmlTemplate.xml b/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiHtmlTemplate.xml new file mode 100644 index 0000000000000000000000000000000000000000..81c1aae8e8b1bb5eab11aa8083e77bc57fdd4aa8 --- /dev/null +++ b/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiHtmlTemplate.xml @@ -0,0 +1,11 @@ + + +

+ +SCRIPT + +
+ +HTML_CONTENT + + \ No newline at end of file diff --git a/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiScriptTemplate.xml b/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiScriptTemplate.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec60fbddfc8b268089dff937d8760b15e32576e8 --- /dev/null +++ b/modules/activiti-cycle/src/main/resources/org/activiti/cycle/impl/connector/signavio/util/SignavioSvgApiScriptTemplate.xml @@ -0,0 +1,11 @@ + + + \ No newline at end of file