提交 26b815cd 编写于 作者: H hawky4s

HEMERA-258 First throw of SVG-API implementation

上级 5cb599ae
......@@ -12,6 +12,7 @@ import org.activiti.cycle.impl.connector.demo.action.CopyArtifactAction;
import org.activiti.cycle.impl.connector.demo.action.OpenActivitiAction;
import org.activiti.cycle.impl.connector.demo.provider.DemoProvider;
import org.activiti.cycle.impl.connector.demo.provider.ExceptionProvider;
import org.activiti.cycle.impl.connector.demo.provider.TransformationExceptionProvider;
import org.activiti.cycle.impl.plugin.ActivitiCyclePlugin;
import org.activiti.cycle.impl.plugin.ActivitiCyclePluginDefinition;
......@@ -24,6 +25,7 @@ public class DemoConnectorPluginDefinition implements ActivitiCyclePluginDefinit
public static final String CONTENT_REPRESENTATION_ID_TEXT = "TEXT";
public static final String CONTENT_REPRESENTATION_ID_EXCEPTION = "EXCEPTION";
public static final String CONTENT_REPRESENTATION_ID_TRAFOEXCEPTION = "TRAFO-EXCEPTION";
public static final String CONTENT_REPRESENTATION_ID_PNG = "PNG";
public static final String CONTENT_REPRESENTATION_ID_XML = "XML";
......@@ -32,6 +34,7 @@ public class DemoConnectorPluginDefinition implements ActivitiCyclePluginDefinit
artifactType1.addDefaultContentRepresentation(new ContentRepresentationImpl(CONTENT_REPRESENTATION_ID_TEXT, CycleDefaultMimeType.TEXT, RenderInfo.TEXT_PLAIN), new DemoProvider(
CONTENT_REPRESENTATION_ID_TEXT));
artifactType1.addContentRepresentation(new ContentRepresentationImpl(CONTENT_REPRESENTATION_ID_EXCEPTION, CycleDefaultMimeType.TEXT, RenderInfo.TEXT_PLAIN), new ExceptionProvider());
artifactType1.addContentRepresentation(new ContentRepresentationImpl(CONTENT_REPRESENTATION_ID_TRAFOEXCEPTION, CycleDefaultMimeType.XML, RenderInfo.CODE), new TransformationExceptionProvider());
artifactType1.addParameterizedAction(new CopyArtifactAction());
artifactType1.addOpenUrlAction(new OpenActivitiAction());
artifactType1.addDownloadContentAction(CONTENT_REPRESENTATION_ID_TEXT);
......
package org.activiti.cycle.impl.connector.demo.provider;
import org.activiti.cycle.Content;
import org.activiti.cycle.RepositoryArtifact;
import org.activiti.cycle.RepositoryConnector;
import org.activiti.cycle.impl.ContentProviderImpl;
import org.activiti.cycle.impl.connector.signavio.util.SignavioSvgApiBuilder;
import org.activiti.cycle.impl.transform.TransformationException;
public class TransformationExceptionProvider extends ContentProviderImpl {
@Override
public void addValueToContent(Content content, RepositoryConnector connector, RepositoryArtifact artifact) {
String renderContent = "";
renderContent += "<html><head></head><body>"
+ "<script type=\"text/javascript\" src=\"http://signavio-core-components.googlecode.com/svn/trunk/api/src/signavio-svg.js\"></script>"
+ "<script type=\"text/plain\">" + "{"
+ "url: \"http://localhost:8080/activiti-modeler/p/model/root-directory;examples;VacationRequest;VacationRequest.signavio.xml\","
+ "click: function(node, editor){" + "if(node.properties[\"oryx-name\"]||node.properties[\"oryx-title\"]) {"
+ "alert(\"Name: \" + node.properties[\"oryx-name\"] + \" (SID: \" + node.resourceId + \")\");" + "}" + "}" + "}" + "</script>"
+ "</body></html>";
throw new TransformationException("You wanted an exception, you get an exception :-)", renderContent);
}
}
......@@ -15,6 +15,7 @@ import org.activiti.cycle.impl.connector.signavio.provider.ActivitiCompliantBpmn
import org.activiti.cycle.impl.connector.signavio.provider.Bpmn20Provider;
import org.activiti.cycle.impl.connector.signavio.provider.Jpdl4Provider;
import org.activiti.cycle.impl.connector.signavio.provider.JsonProvider;
import org.activiti.cycle.impl.connector.signavio.provider.SvgApiProvider;
import org.activiti.cycle.impl.connector.signavio.provider.PngProvider;
import org.activiti.cycle.impl.plugin.ActivitiCyclePlugin;
import org.activiti.cycle.impl.plugin.ActivitiCyclePluginDefinition;
......@@ -46,6 +47,7 @@ public class SignavioPluginDefinition implements ActivitiCyclePluginDefinition {
public static final String CONTENT_REPRESENTATION_ID_BPMN_20_DEVELOPER = "Developer Friendly BPMN 2.0";
public static final String CONTENT_REPRESENTATION_ID_BPMN_20_RAW = "Raw BPMN 2.0";
public static final String CONTENT_REPRESENTATION_ID_JPDL4 = "jPDL 4";
public static final String CONTENT_REPRESENTATION_ID_SVGAPI = "SVG API";
......@@ -66,6 +68,7 @@ public class SignavioPluginDefinition implements ActivitiCyclePluginDefinition {
new ActivitiCompliantBpmn20Provider());
artifactType1.addContentRepresentation(new ContentRepresentationImpl(CONTENT_REPRESENTATION_ID_BPMN_20_RAW, CycleDefaultMimeType.XML, RenderInfo.CODE), new Bpmn20Provider());
artifactType1.addContentRepresentation(new ContentRepresentationImpl(CONTENT_REPRESENTATION_ID_JSON, CycleDefaultMimeType.XML, RenderInfo.CODE), new JsonProvider());
artifactType1.addContentRepresentation(new ContentRepresentationImpl(CONTENT_REPRESENTATION_ID_SVGAPI, CycleDefaultMimeType.HTML, RenderInfo.HTML), new SvgApiProvider());
artifactType1.addParameterizedAction(new CreateTechnicalBpmnXmlAction());
artifactType1.addParameterizedAction(new ValidateActivitiDeployment());
......
package org.activiti.cycle.impl.connector.signavio.provider;
import org.activiti.cycle.Content;
import org.activiti.cycle.RepositoryArtifact;
import org.activiti.cycle.impl.connector.signavio.SignavioConnector;
import org.activiti.cycle.impl.connector.signavio.util.SignavioSvgApiBuilder;
public class SvgApiProvider extends SignavioContentRepresentationProvider {
@Override
public void addValueToContent(Content content, SignavioConnector connector, RepositoryArtifact artifact) {
String text = new SignavioSvgApiBuilder(connector, artifact).build();
content.setValue(text);
}
}
package org.activiti.cycle.impl.connector.signavio.util;
import java.util.Map;
import java.util.Map.Entry;
import org.activiti.cycle.RepositoryArtifact;
import org.activiti.cycle.impl.connector.signavio.SignavioConnector;
public class SignavioSvgApiBuilder {
private static final String HEADER = "<html><head></head><body>";
private static final String FOOTER = "</body></html>";
private static final String SVGAPI_URL = "http://signavio-core-components.googlecode.com/svn/trunk/api/src/signavio-svg.js";
private SignavioConnector connector;
private RepositoryArtifact artifact;
private String authToken;
private String clickFunction;
private Map nodes;
private String color;
public SignavioSvgApiBuilder(SignavioConnector connector, RepositoryArtifact artifact) {
this.connector = connector;
this.artifact = artifact;
}
// public void test() {
// String text = "";
// text += "<html><head></head><body>"
// // + "<div id=\"model\" style=\"height: 600px; width: 600px;\">"
// + "<script type=\"text/javascript\" src=\"http://signavio-core-components.googlecode.com/svn/trunk/api/src/signavio-svg.js\"></script>"
// + "<script type=\"text/plain\">" + "{"
// + "url: \""
// + connector.getConfiguration().getModelUrl(artifact.getOriginalNodeId())
// + "\","
// // + "overflowX: \"fit\","
// // + "overflowY: \"fit\","
// + "click: function(node, editor){" + "if(node.properties[\"oryx-name\"]||node.properties[\"oryx-title\"]) {"
// + "alert(\"Name: \" + node.properties[\"oryx-name\"] + \" (SID: \" + node.resourceId + \")\");" + "}" + "}" + "}" + "</script>"
// // + "</div>"
// + "</body></html>";
// focus:[ "sid-60AB9173-E9AA-4E2E-A7AE-1E270EF4E900",
// {
// properties: ["oryx-name", "oryx-title"],
// position: "NW",
// templateFn: function(values, node){
// var name = values[0] || values[1];
// name = name.slice(0, 5) + (name.length > 5?"...":"");
// return "<t"+"ext stroke='none' y='-5'>"+(name)+"</text>";
// }
// },{
// nodes:["sid-06EEE957-812F-4AB9-8C91-F64D052F6AB7"],
// attributes:{ fill:"red" }
// }
// ]
// }
public SignavioSvgApiBuilder highlightNodes(Map nodes, String color) {
this.nodes = nodes;
this.color = color;
return this;
}
// public SignavioSvgApiBuilder highlightNode(String nodeId, String message, String color) {
//
// return this;
// }
public SignavioSvgApiBuilder authToken(String authToken) {
this.authToken = authToken;
return this;
}
public SignavioSvgApiBuilder clickFunction(String clickFunction) {
this.clickFunction = clickFunction;
return this;
}
public String build() {
String svgApiCall = "";
svgApiCall += HEADER;
svgApiCall += "<script type=\"text/javascript\" src=\"" + SVGAPI_URL + "\"></script>";
svgApiCall += "<script type=\"text/plain\">";
svgApiCall += "{";
// url to svgapi script
svgApiCall += createUrl();
// if authToken is available
if (authToken != null && authToken.length() > 0) {
svgApiCall += ", authToken: \"" + authToken + "\",";
}
// executed when click on a shape
svgApiCall += createClickFunction();
// highlight nodes
svgApiCall += buildHighlightning();
svgApiCall += "}";
svgApiCall += "</script>";
svgApiCall += FOOTER;
return svgApiCall;
}
private String createUrl() {
return "url: \"" + connector.getConfiguration().getModelUrl(artifact.getNodeId()) + "\"";
}
private String createClickFunction() {
if (clickFunction != null && clickFunction.length() > 0) {
return ", " + clickFunction;
} else {
// create default click function
String function = ", click: function(node, editor) {";
function += "if(node.properties[\"oryx-name\"]||node.properties[\"oryx-title\"]) {";
function += "alert(\"Name: \" + node.properties[\"oryx-name\"] + \" (Sid: \" + node.resourceId + \")\");";
function += "} }";
return function;
}
}
private String highlightNode(String nodeId, String message, String color) {
return "\"" + nodeId + "\", ";
}
private String buildHighlightning() {
if (nodes == null || nodes.isEmpty()) {
return "";
}
String highlightning = ",focus: [{";
highlightning += "nodes:[";
for (Object node : nodes.entrySet()) {
Entry nodeEntry = (Entry) node;
highlightning += highlightNode((String) nodeEntry.getKey(), (String) nodeEntry.getValue(), color);
}
// empty node for comma issues
highlightning += "\"\"";
highlightning += "],";
if (color != null && color.length() > 0) {
highlightning += "attributes:{ fill:\"" + color + "\" }";
} else {
highlightning += "attributes:{ fill:\"red\" }";
}
highlightning += "}]";
return highlightning;
}
}
package org.activiti.cycle.impl.transform;
/**
* @author christian.lipphardt@camunda.com
*/
public class TransformationException extends RuntimeException {
private static final long serialVersionUID = 1L;
private static final String DEFAULT_RENDER_MSG = "An error occured during the transformation";
private String renderMessage;
private String renderContent;
public TransformationException(String renderMessage, String renderContent, String message, Throwable t) {
super(message, t);
this.renderMessage = renderMessage;
}
public TransformationException(String renderMessage, String renderContent, Throwable t) {
super(t);
this.renderMessage = renderMessage;
}
public TransformationException(String renderMessage, String renderContent, String message) {
super(message);
this.renderMessage = renderMessage;
this.renderContent = renderContent;
}
public TransformationException(String renderMessage, String renderContent) {
super();
this.renderMessage = renderMessage;
this.renderContent = renderContent;
}
public void setRenderMessage(String renderMessage) {
this.renderMessage = renderMessage;
}
public String getRenderMessage() {
if (renderMessage == null) {
renderMessage = DEFAULT_RENDER_MSG;
}
return renderMessage;
}
public String getRenderContent() {
return renderContent;
}
public void setRenderContent(String renderContent) {
this.renderContent = renderContent;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册