You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
513 lines
14 KiB
513 lines
14 KiB
6 months ago
|
/* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
function _cmmnGetColor(element, defaultColor)
|
||
|
{
|
||
|
var strokeColor;
|
||
|
if(element.current) {
|
||
|
strokeColor = CURRENT_COLOR;
|
||
|
} else if(element.completed) {
|
||
|
strokeColor = COMPLETED_COLOR;
|
||
|
} else {
|
||
|
strokeColor = defaultColor;
|
||
|
}
|
||
|
return strokeColor;
|
||
|
}
|
||
|
|
||
|
function _drawPlanModel(planModel)
|
||
|
{
|
||
|
var rect = paper.rect(planModel.x, planModel.y, planModel.width, planModel.height);
|
||
|
|
||
|
rect.attr({"stroke-width": 1,
|
||
|
"stroke": "#000000",
|
||
|
"fill": "white"
|
||
|
});
|
||
|
|
||
|
if (planModel.name)
|
||
|
{
|
||
|
var planModelName = paper.text(planModel.x + 14, planModel.y + (planModel.height / 2), planModel.name).attr({
|
||
|
"text-anchor" : "middle",
|
||
|
"font-family" : "Arial",
|
||
|
"font-size" : "12",
|
||
|
"fill" : "#000000"
|
||
|
});
|
||
|
|
||
|
planModelName.transform("r270");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _drawSubProcess(element)
|
||
|
{
|
||
|
var rect = paper.rect(element.x, element.y, element.width, element.height, 4);
|
||
|
|
||
|
var strokeColor = _cmmnGetColor(element, MAIN_STROKE_COLOR);
|
||
|
|
||
|
rect.attr({"stroke-width": 1,
|
||
|
"stroke": strokeColor,
|
||
|
"fill": "white"
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function _drawServiceTaskTypeIcon(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
if (element.taskType === "mail")
|
||
|
{
|
||
|
_drawSendTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
}
|
||
|
else if (element.taskType === "camel")
|
||
|
{
|
||
|
_drawCamelTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
}
|
||
|
else if (element.taskType === "mule")
|
||
|
{
|
||
|
_drawMuleTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
}
|
||
|
else if (element.taskType === "http")
|
||
|
{
|
||
|
_drawHttpTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
}
|
||
|
else if (element.stencilIconId)
|
||
|
{
|
||
|
paper.image("../service/stencilitem/" + element.stencilIconId + "/icon", element.x + 4, element.y + 4, 16, 16);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_drawServiceTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
}
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawHttpServiceTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawHttpTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawHumanTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawHumanTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawCaseTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawCaseTaskIcon(paper, element.x + 1, element.y + 1);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawProcessTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawProcessTaskIcon(paper, element.x + 1, element.y + 1);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawScriptTaskIcon(paper, startX, startY)
|
||
|
{
|
||
|
var path1 = paper.path("m 5,2 0,0.094 c 0.23706,0.064 0.53189,0.1645 0.8125,0.375 0.5582,0.4186 1.05109,1.228 1.15625,2.5312 l 8.03125,0 1,0 1,0 c 0,-3 -2,-3 -2,-3 l -10,0 z M 4,3 4,13 2,13 c 0,3 2,3 2,3 l 9,0 c 0,0 2,0 2,-3 L 15,6 6,6 6,5.5 C 6,4.1111 5.5595,3.529 5.1875,3.25 4.8155,2.971 4.5,3 4.5,3 L 4,3 z");
|
||
|
path1.attr({
|
||
|
"opacity": 1,
|
||
|
"stroke": "none",
|
||
|
"fill": "#72a7d0"
|
||
|
});
|
||
|
|
||
|
var scriptTaskIcon = paper.set();
|
||
|
scriptTaskIcon.push(path1);
|
||
|
|
||
|
scriptTaskIcon.transform("T" + startX + "," + startY);
|
||
|
}
|
||
|
|
||
|
function _drawScriptServiceTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawScriptTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawSendEventServiceTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawSendTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawExternalWorkerServiceTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawServiceTaskIcon(paper, element.x + 4, element.y + 4);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawDecisionTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawDecisionTaskIcon(paper, element.x + 1, element.y + 1);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawServiceTask(element)
|
||
|
{
|
||
|
_drawTask(element);
|
||
|
_drawServiceTaskTypeIcon(element);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawTask(element)
|
||
|
{
|
||
|
var rectAttrs = {};
|
||
|
|
||
|
// Stroke
|
||
|
var strokeColor = _cmmnGetColor(element, ACTIVITY_STROKE_COLOR);
|
||
|
rectAttrs['stroke'] = strokeColor;
|
||
|
|
||
|
var strokeWidth;
|
||
|
if (strokeColor === ACTIVITY_STROKE_COLOR) {
|
||
|
strokeWidth = TASK_STROKE;
|
||
|
} else {
|
||
|
strokeWidth = TASK_HIGHLIGHT_STROKE;
|
||
|
}
|
||
|
|
||
|
var width = element.width - (strokeWidth / 2);
|
||
|
var height = element.height - (strokeWidth / 2);
|
||
|
|
||
|
var rect = paper.rect(element.x, element.y, width, height, 4);
|
||
|
rectAttrs['stroke-width'] = strokeWidth;
|
||
|
|
||
|
// Fill
|
||
|
rectAttrs['fill'] = ACTIVITY_FILL_COLOR;
|
||
|
|
||
|
rect.attr(rectAttrs);
|
||
|
rect.id = element.id;
|
||
|
|
||
|
if (element.name) {
|
||
|
this._drawMultilineText(element.name, element.x, element.y, element.width, element.height, "middle", "middle", 11);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _drawTimerEventListener(element)
|
||
|
{
|
||
|
_drawEventListener(element);
|
||
|
_drawTimerEventListenerIcon(paper, element);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawUserEventListener(element)
|
||
|
{
|
||
|
_drawEventListener(element);
|
||
|
_drawUserEventListenerIcon(paper, element);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawVariableEventListener(element)
|
||
|
{
|
||
|
_drawEventListener(element);
|
||
|
_drawVariableEventListenerIcon(paper, element);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawGenericEventListener(element)
|
||
|
{
|
||
|
_drawEventListener(element);
|
||
|
_addHoverLogic(element, "rect", ACTIVITY_STROKE_COLOR);
|
||
|
}
|
||
|
|
||
|
function _drawEventListener(element)
|
||
|
{
|
||
|
var x = element.x + (element.width / 2);
|
||
|
var y = element.y + (element.height / 2);
|
||
|
|
||
|
var circle = paper.circle(x, y, 15);
|
||
|
|
||
|
circle.attr({"stroke-width": 1,
|
||
|
"stroke": "black",
|
||
|
"fill": "white"
|
||
|
});
|
||
|
|
||
|
circle.id = element.id;
|
||
|
}
|
||
|
|
||
|
function _drawMilestone(element)
|
||
|
{
|
||
|
var rectAttrs = {};
|
||
|
|
||
|
// Stroke
|
||
|
var strokeColor = _cmmnGetColor(element, ACTIVITY_STROKE_COLOR);
|
||
|
rectAttrs['stroke'] = strokeColor;
|
||
|
|
||
|
var strokeWidth;
|
||
|
if (strokeColor === ACTIVITY_STROKE_COLOR) {
|
||
|
strokeWidth = TASK_STROKE;
|
||
|
} else {
|
||
|
strokeWidth = TASK_HIGHLIGHT_STROKE;
|
||
|
}
|
||
|
|
||
|
var width = element.width - (strokeWidth / 2);
|
||
|
var height = element.height - (strokeWidth / 2);
|
||
|
|
||
|
var rect = paper.rect(element.x, element.y, width, height, 24);
|
||
|
rectAttrs['stroke-width'] = strokeWidth;
|
||
|
|
||
|
// Fill
|
||
|
rectAttrs['fill'] = WHITE_FILL_COLOR;
|
||
|
|
||
|
rect.attr(rectAttrs);
|
||
|
rect.id = element.id;
|
||
|
|
||
|
if (element.name) {
|
||
|
this._drawMultilineText(element.name, element.x, element.y, element.width, element.height, "middle", "middle", 11);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _drawStage(element)
|
||
|
{
|
||
|
var rectAttrs = {};
|
||
|
|
||
|
// Stroke
|
||
|
var strokeColor = _cmmnGetColor(element, ACTIVITY_STROKE_COLOR);
|
||
|
rectAttrs['stroke'] = strokeColor;
|
||
|
|
||
|
var strokeWidth;
|
||
|
if (strokeColor === ACTIVITY_STROKE_COLOR) {
|
||
|
strokeWidth = TASK_STROKE;
|
||
|
} else {
|
||
|
strokeWidth = TASK_HIGHLIGHT_STROKE;
|
||
|
}
|
||
|
|
||
|
var width = element.width - (strokeWidth / 2);
|
||
|
var height = element.height - (strokeWidth / 2);
|
||
|
|
||
|
var rect = paper.rect(element.x, element.y, width, height, 16);
|
||
|
rectAttrs['stroke-width'] = strokeWidth;
|
||
|
|
||
|
// Fill
|
||
|
rectAttrs['fill'] = WHITE_FILL_COLOR;
|
||
|
|
||
|
rect.attr(rectAttrs);
|
||
|
rect.id = element.id;
|
||
|
|
||
|
if (element.name) {
|
||
|
this._drawMultilineText(element.name, element.x + 10, element.y + 5, element.width, element.height, "start", "top", 11);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _drawPlanModel(element)
|
||
|
{
|
||
|
var rectAttrs = {};
|
||
|
|
||
|
// Stroke
|
||
|
var strokeColor = _cmmnGetColor(element, ACTIVITY_STROKE_COLOR);
|
||
|
rectAttrs['stroke'] = strokeColor;
|
||
|
|
||
|
var strokeWidth;
|
||
|
if (strokeColor === ACTIVITY_STROKE_COLOR) {
|
||
|
strokeWidth = TASK_STROKE;
|
||
|
} else {
|
||
|
strokeWidth = TASK_HIGHLIGHT_STROKE;
|
||
|
}
|
||
|
|
||
|
var width = element.width - (strokeWidth / 2);
|
||
|
var height = element.height - (strokeWidth / 2);
|
||
|
|
||
|
var rect = paper.rect(element.x, element.y, width, height, 4);
|
||
|
rectAttrs['stroke-width'] = strokeWidth;
|
||
|
|
||
|
// Fill
|
||
|
rectAttrs['fill'] = WHITE_FILL_COLOR;
|
||
|
|
||
|
rect.attr(rectAttrs);
|
||
|
rect.id = element.id;
|
||
|
|
||
|
var path1 = paper.path("M20 55 L37 34 L275 34 L291 55");
|
||
|
path1.attr({
|
||
|
"opacity": 1,
|
||
|
"stroke": strokeColor,
|
||
|
"fill": "#ffffff"
|
||
|
});
|
||
|
|
||
|
var planModelHeader = paper.set();
|
||
|
planModelHeader.push(path1);
|
||
|
|
||
|
planModelHeader.translate(element.x, element.y - 55);
|
||
|
if (element.name) {
|
||
|
this._drawMultilineText(element.name, element.x + 10, element.y - 16, 275, element.height, "middle", "top", 11);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _drawEntryCriterion(element)
|
||
|
{
|
||
|
var strokeColor = _cmmnGetColor(element, MAIN_STROKE_COLOR);
|
||
|
|
||
|
var rhombus = paper.path("M" + element.x + " " + (element.y + (element.height / 2)) +
|
||
|
"L" + (element.x + (element.width / 2)) + " " + (element.y + element.height) +
|
||
|
"L" + (element.x + element.width) + " " + (element.y + (element.height / 2)) +
|
||
|
"L" + (element.x + (element.width / 2)) + " " + element.y + "z"
|
||
|
);
|
||
|
|
||
|
// Fill
|
||
|
var gatewayFillColor = WHITE_FILL_COLOR;
|
||
|
|
||
|
// Opacity
|
||
|
var gatewayOpacity = 1.0;
|
||
|
|
||
|
rhombus.attr("stroke-width", 1);
|
||
|
rhombus.attr("stroke", strokeColor);
|
||
|
rhombus.attr("fill", gatewayFillColor);
|
||
|
rhombus.attr("fill-opacity", gatewayOpacity);
|
||
|
|
||
|
rhombus.id = element.id;
|
||
|
}
|
||
|
|
||
|
function _drawExitCriterion(element)
|
||
|
{
|
||
|
var strokeColor = _cmmnGetColor(element, MAIN_STROKE_COLOR);
|
||
|
|
||
|
var rhombus = paper.path("M" + element.x + " " + (element.y + (element.height / 2)) +
|
||
|
"L" + (element.x + (element.width / 2)) + " " + (element.y + element.height) +
|
||
|
"L" + (element.x + element.width) + " " + (element.y + (element.height / 2)) +
|
||
|
"L" + (element.x + (element.width / 2)) + " " + element.y + "z"
|
||
|
);
|
||
|
|
||
|
// Fill
|
||
|
var gatewayFillColor = '#000000';
|
||
|
|
||
|
// Opacity
|
||
|
var gatewayOpacity = 1.0;
|
||
|
|
||
|
rhombus.attr("stroke-width", 1);
|
||
|
rhombus.attr("stroke", strokeColor);
|
||
|
rhombus.attr("fill", gatewayFillColor);
|
||
|
rhombus.attr("fill-opacity", gatewayOpacity);
|
||
|
|
||
|
rhombus.id = element.id;
|
||
|
}
|
||
|
|
||
|
function _drawMultilineText(text, x, y, boxWidth, boxHeight, horizontalAnchor, verticalAnchor, fontSize)
|
||
|
{
|
||
|
if (!text || text == "")
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var textBoxX, textBoxY;
|
||
|
var width = boxWidth - (2 * TEXT_PADDING);
|
||
|
|
||
|
if (horizontalAnchor === "middle")
|
||
|
{
|
||
|
textBoxX = x + (boxWidth / 2);
|
||
|
}
|
||
|
else if (horizontalAnchor === "start")
|
||
|
{
|
||
|
textBoxX = x;
|
||
|
}
|
||
|
|
||
|
textBoxY = y + (boxHeight / 2);
|
||
|
|
||
|
var t = paper.text(textBoxX + TEXT_PADDING, textBoxY + TEXT_PADDING).attr({
|
||
|
"text-anchor" : horizontalAnchor,
|
||
|
"font-family" : "Arial",
|
||
|
"font-size" : fontSize,
|
||
|
"fill" : "#373e48"
|
||
|
});
|
||
|
|
||
|
var abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||
|
t.attr({
|
||
|
"text" : abc
|
||
|
});
|
||
|
var letterWidth = t.getBBox().width / abc.length;
|
||
|
|
||
|
t.attr({
|
||
|
"text" : text
|
||
|
});
|
||
|
var removedLineBreaks = text.split("\n");
|
||
|
var x = 0, s = [];
|
||
|
for (var r = 0; r < removedLineBreaks.length; r++)
|
||
|
{
|
||
|
var words = removedLineBreaks[r].split(" ");
|
||
|
for ( var i = 0; i < words.length; i++) {
|
||
|
|
||
|
var l = words[i].length;
|
||
|
if (x + (l * letterWidth) > width) {
|
||
|
s.push("\n");
|
||
|
x = 0;
|
||
|
}
|
||
|
x += l * letterWidth;
|
||
|
s.push(words[i] + " ");
|
||
|
}
|
||
|
s.push("\n");
|
||
|
x = 0;
|
||
|
}
|
||
|
t.attr({
|
||
|
"text" : s.join("")
|
||
|
});
|
||
|
|
||
|
if (verticalAnchor && verticalAnchor === "top")
|
||
|
{
|
||
|
t.attr({"y": y + (t.getBBox().height / 2)});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _drawAssociation(flow){
|
||
|
|
||
|
var polyline = new Polyline(flow.id, flow.waypoints, ASSOCIATION_STROKE, paper);
|
||
|
polyline.element = paper.path(polyline.path);
|
||
|
polyline.element.attr({"stroke-width": ASSOCIATION_STROKE});
|
||
|
polyline.element.attr({"stroke-dasharray": ". "});
|
||
|
polyline.element.attr({"stroke":"#585858"});
|
||
|
|
||
|
polyline.element.id = flow.id;
|
||
|
|
||
|
var polylineInvisible = new Polyline(flow.id, flow.waypoints, ASSOCIATION_STROKE, paper);
|
||
|
|
||
|
polylineInvisible.element = paper.path(polyline.path);
|
||
|
polylineInvisible.element.attr({
|
||
|
"opacity": 0,
|
||
|
"stroke-width": 8,
|
||
|
"stroke" : "#000000"
|
||
|
});
|
||
|
|
||
|
_showTip(jQuery(polylineInvisible.element.node), flow);
|
||
|
|
||
|
polylineInvisible.element.mouseover(function() {
|
||
|
paper.getById(polyline.element.id).attr({"stroke":"blue"});
|
||
|
});
|
||
|
|
||
|
polylineInvisible.element.mouseout(function() {
|
||
|
paper.getById(polyline.element.id).attr({"stroke":"#585858"});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function _drawArrowHead(line, connectionType)
|
||
|
{
|
||
|
var doubleArrowWidth = 2 * ARROW_WIDTH;
|
||
|
|
||
|
var arrowHead = paper.path("M0 0L-" + (ARROW_WIDTH / 2 + .5) + " -" + doubleArrowWidth + "L" + (ARROW_WIDTH/2 + .5) + " -" + doubleArrowWidth + "z");
|
||
|
|
||
|
// anti smoothing
|
||
|
if (this.strokeWidth%2 == 1)
|
||
|
line.x2 += .5, line.y2 += .5;
|
||
|
|
||
|
arrowHead.transform("t" + line.x2 + "," + line.y2 + "");
|
||
|
arrowHead.transform("...r" + Raphael.deg(line.angle - Math.PI / 2) + " " + 0 + " " + 0);
|
||
|
|
||
|
arrowHead.attr("fill", "#585858");
|
||
|
|
||
|
arrowHead.attr("stroke-width", SEQUENCEFLOW_STROKE);
|
||
|
arrowHead.attr("stroke", "#585858");
|
||
|
|
||
|
return arrowHead;
|
||
|
}
|