Files
luos/workflow/engine/templates/bpmn/MyWorkflow.js

2163 lines
78 KiB
JavaScript
Raw Normal View History

MyWorkflow=function(id){
Workflow.call(this,id);
this.html.style.backgroundImage="url(/skins/ext/images/gray/shapes/grid_10.png)";
};
MyWorkflow.prototype=new Workflow;
MyWorkflow.prototype.type="MyWorkflow";
commandListener=function(){
CommandStackEventListener.call(this);
};
commandListener.prototype=new CommandStackEventListener;
commandListener.prototype.type="commandListener";
MyWorkflow.prototype.subProcess= function(_6767)
{
_6767.subProcessName = 'Sub Process' ;
var subProcess = eval("new bpmnSubProcess(_6767) ");
var xPos = this.workflow.contextX;
var yPos = this.workflow.contextY;
_6767.scope.workflow.addFigure(subProcess, xPos, yPos);
subProcess.actiontype = 'addSubProcess';
this.workflow.saveShape(subProcess);
//this.currentSelection.actiontype = 'deletetask';
//this.workflow.deleteShape(this.currentSelection);
//Ext.MessageBox.alert('Status','Add Subprocess');
}
MyWorkflow.prototype.setBoundary = function (oShape) {
//Left Border
if (oShape.x < 75) {
oShape.x = 85;
}
//Right Border
if (oShape.x > 1300 - oShape.width) {
workflow.main.setWidth(oShape.x+150);
}
//Top Border
if (oShape.y < 55) {
oShape.y = 71;
}
//Bottom Border
if (oShape.y > 1000 - oShape.height) {
workflow.main.setHeight(oShape.y+75);
}
}
MyWorkflow.prototype.AddTaskContextMenu= function(_4092)
{
//var pmosExtObj = new pmosExt();
var taskExtObj = new TaskContext();
if (_4092.id != null) {
this.canvasTask = Ext.get(_4092.id);
this.contextTaskmenu = new Ext.menu.Menu({
items: [{
text: 'Steps',
handler: taskExtObj.editTaskSteps,
scope: _4092
},
{
text: 'Users & Users Group',
handler: taskExtObj.editUsers,
scope: _4092
},
{
text: 'Users & Users Groups (ad-hoc)',
scope: _4092
2010-12-14 07:28:38 +00:00
}/*,
{
text: 'Routing Rule',
handler: taskExtObj.editRoutingRule,
scope: _4092
},
{
text: 'Deleting Routing Rule',
scope: _4092
},
{
text: 'Delete Task',
scope: _4092
2010-12-14 07:28:38 +00:00
}*/,
{
text: 'Transform To',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
{
text: 'Sub Process',
type:'bpmnSubProcess',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}
]
},
scope: this
},
{
text: 'Attach Event',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
{
text: 'Timer Boundary Event',
type:'bpmnEventBoundaryTimerInter',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}
]
},
scope: this
},
{
text: 'Properties',
handler: taskExtObj.editTaskProperties,
scope: _4092
}]
});
}
this.canvasTask.on('contextmenu', function (e) {
e.stopEvent();
this.contextTaskmenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.treeGrid = function(){
var tree = new Ext.ux.tree.TreeGrid({
title: 'Core Team Projects',
width: 500,
height: 300,
renderTo: Ext.getBody(),
enableDD: true,
columns:[{
header: 'Task',
dataIndex: 'task',
width: 230
},{
header: 'Duration',
width: 100,
dataIndex: 'duration',
align: 'center',
sortType: 'asFloat',
tpl: new Ext.XTemplate('{duration:this.formatHours}', {
formatHours: function(v) {
if(v < 1) {
return Math.round(v * 60) + ' mins';
} else if (Math.floor(v) !== v) {
var min = v - Math.floor(v);
return Math.floor(v) + 'h ' + Math.round(min * 60) + 'm';
} else {
return v + ' hour' + (v === 1 ? '' : 's');
}
}
})
},{
header: 'Assigned To',
width: 150,
dataIndex: 'user'
}],
dataUrl: 'treegrid-data.json'
});
var window = new Ext.Window({
title: 'Task Properties',
collapsible: false,
maximizable: false,
width: 650,
height: 400,
minWidth: 300,
minHeight: 200,
layout: 'fit',
plain: true,
bodyStyle: 'padding:5px;',
buttonAlign: 'center',
items: tree,
buttons: [{
text: 'Save'
},{
text: 'Cancel'
}]
});
window.show();
}
MyWorkflow.prototype.connectionContextMenu=function(_4092)
{
this.canvasEvent = Ext.get(_4092.id);
this.contextEventmenu = new Ext.menu.Menu({
items: [{
text: 'NULL Router',
scope: this,
handler: MyWorkflow.prototype.toggleConnection
}, {
text: 'Manhatten Router',
scope: this,
handler: MyWorkflow.prototype.toggleConnection
}, {
text: 'Bezier Router',
scope: this,
handler: MyWorkflow.prototype.toggleConnection
}, {
text: 'Fan Router',
scope: this,
handler: MyWorkflow.prototype.toggleConnection
}, {
text: 'Delete Router',
scope: this,
handler:function()
{
MyWorkflow.prototype.deleteRoute(_4092.workflow.currentSelection,0)
}
}]
});
this.canvasEvent.on('contextmenu', function(e) {
e.stopEvent();
this.contextEventmenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.toggleConnection=function(_4092)
{
this.currentSelection.workflow.contextClicked = false;
switch (_4092.text) {
case 'NULL Router':
this.currentSelection.setRouter(null);
break;
case 'Manhatten Router':
this.currentSelection.setRouter(new ManhattanConnectionRouter());
break;
case 'Bezier Router':
this.currentSelection.setRouter(new BezierConnectionRouter());
break;
case 'Fan Router':
this.currentSelection.setRouter(new FanConnectionRouter());
break;
case 'Delete Router':
this.currentSelection.workflow.getCommandStack().execute(new CommandDelete(this.currentSelection.workflow.getCurrentSelection()));
ToolGeneric.prototype.execute.call(this);
break;
}
}
MyWorkflow.prototype.AddGatewayPorts = function(_40c5)
{
var TaskPortName = ['inputPort1','inputPort2','outputPort1','outputPort2'];
var TaskPortType = ['InputPort','InputPort','OutputPort','OutputPort'];
var TaskPositionX= [0,_40c5.width/2,_40c5.width,_40c5.width/2];
var TaskPositionY= [_40c5.height/2,0,_40c5.height/2,_40c5.height];
for(var i=0; i< TaskPortName.length ; i++){
eval('_40c5.'+TaskPortName[i]+' = new '+TaskPortType[i]+'()'); //Create New Port
eval('_40c5.'+TaskPortName[i]+'.setWorkflow(_40c5)'); //Add port to the workflow
eval('_40c5.'+TaskPortName[i]+'.setName("'+TaskPortName[i]+'")'); //Set PortName
eval('_40c5.'+TaskPortName[i]+'.setZOrder(-1)'); //Set Z-Order of the port to -1. It will be below all the figure
eval('_40c5.'+TaskPortName[i]+'.setBackgroundColor(new Color(255, 255, 255))'); //Setting Background of the port to white
eval('_40c5.'+TaskPortName[i]+'.setColor(new Color(255, 255, 255))'); //Setting Border of the port to white
this.workflow = _40c5.workflow;
this.workflow.currentSelection =_40c5;
eval('_40c5.addPort(_40c5.'+TaskPortName[i]+','+TaskPositionX[i]+', '+TaskPositionY[i]+')'); //Setting Position of the port
}
}
MyWorkflow.prototype.AddGatewayContextMenu=function(_4092)
{
this.canvasGateway = Ext.get(_4092.id);
this.contextGatewaymenu = new Ext.menu.Menu({
items: [{
text: 'Gateway Type',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
{
text: 'Exclusive Gateway',
type:'bpmnGatewayExclusiveData',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Inclusive Gateway',
type:'bpmnGatewayInclusive',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Parallel Gateway',
type:'bpmnGatewayParallel',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Complex Gateway',
type:'bpmnGatewayComplex',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Event Based Gateway',
type:'bpmnGatewayExclusiveEvent',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}
]
},
scope: this
},{
text: 'Properties',
handler: this.editGatewayProperties,
scope: this
}]
});
this.canvasGateway.on('contextmenu', function(e) {
e.stopEvent();
this.contextGatewaymenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.AddSubProcessContextMenu=function(_4092)
{
this.canvasSubProcess = Ext.get(_4092.id);
// var currentSelection = _4092.scope.currentSelection;
//var pmosExtObj = new pmosExt();
this.contextSubProcessmenu = new Ext.menu.Menu({
items: [
{
text: 'Transform To',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
{
text: 'Task',
type:'bpmnTask',
scope:_4092,
handler: MyWorkflow.prototype.toggleShapes
}
]
},
scope: this
},
{
text: 'Properties',
handler: this.editSubProcessProperties,
scope: this
}]
});
this.canvasSubProcess.on('contextmenu', function(e) {
e.stopEvent();
this.contextSubProcessmenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.editSubProcessProperties= function(_3525)
{
var pro_uid = workflow.getUrlVars();
var taskId = workflow.currentSelection.id;
//Variables Out Grid
var subProcessFields = Ext.data.Record.create([
{name: 'SP_UID',type: 'string'},
{name: 'TAS_UID',type: 'string'},
{name: 'PRO_PARENT',type: 'string'},
{name: 'TAS_PARENT',type: 'string'},
{name: 'SP_SYNCHRONOUS',type: 'string'},
{name: 'SPROCESS_NAME',type: 'string'},
{name: 'TASKS',type: 'string'},
{name: 'TAS_TITLE',type: 'string'},
{name: 'CON_VALUE',type: 'string'},
{name: 'VAR_OUT1',type: 'string'},
{name: 'VAR_OUT2',type: 'string'},
{name: 'VAR_IN1',type: 'string'},
{name: 'VAR_IN2',type: 'string'}
]);
var editorOut = new Ext.ux.grid.RowEditor({
saveText: 'Update'
});
var editorIn = new Ext.ux.grid.RowEditor({
saveText: 'Update'
});
//Variable out grid configuration starts here
var btnAddOut = new Ext.Button({
id: 'btnAddOut',
text: 'Assign Variables Out',
iconCls: 'application_add',
handler: function(){
//var User = grid.getStore();
var e = new subProcessFields({
//STEP_TITLE: User.data.items[0].data.STEP_TITLE,
SP_UID : '',
PRO_PARENT : '',
SP_SYNCHRONOUS : '',
TAS_PARENT : '',
VAR_OUT1 : '',
VAR_OUT2 : ''
});
editorOut.stopEditing();
variablesOutStore.insert(0, e);
variableOutGrid.getView().refresh();
//grid.getSelectionModel().selectRow(0);
editorOut.startEditing(0, 0);
}
});
var btnRemoveOut = new Ext.Button({
id: 'btnRemoveOut',
text: 'Remove Variables Out',
iconCls: 'application_delete',
handler: function (s) {
editorOut.stopEditing();
var s = variableOutGrid.getSelectionModel().getSelections();
for(var i = 0, r; r = s[i]; i++){
//First Deleting step from Database using Ajax
/*var stepUID = r.data.STEP_UID;
var stepPosition = r.data.STEP_POSITION;
//if STEP_UID is properly defined (i.e. set to valid value) then only delete the row
//else its a BLANK ROW for which Ajax should not be called.
if(r.data.STEP_UID != "")
{
Ext.Ajax.request({
url : '../steps/steps_Delete.php',
method: 'POST',
params: {
TASK : taskId,
STEP_UID : stepUID,
STEP_POSITION : stepPosition
},
success: function(response) {
Ext.MessageBox.alert ('Status','Step has been removed successfully.');
}
});
}*/
//Secondly deleting from Grid
variablesOutStore.remove(r);
}
}
});
var tbOut = new Ext.Toolbar({
items: [btnAddOut, btnRemoveOut]
});
//Variable out grid configuration starts here
var btnAddIn = new Ext.Button({
id: 'btnAddIn',
text: 'Assign Variables In',
iconCls: 'application_add',
handler: function(){
//var User = grid.getStore();
var e = new subProcessFields({
//STEP_TITLE: User.data.items[0].data.STEP_TITLE,
SP_UID : '',
PRO_PARENT : '',
SP_SYNCHRONOUS : '',
TAS_PARENT : '',
VAR_IN1 : '',
VAR_IN2 : ''
});
editorIn.stopEditing();
variablesInStore.insert(0, e);
variableInGrid.getView().refresh();
//grid.getSelectionModel().selectRow(0);
editorIn.startEditing(0, 0);
}
});
var btnRemoveIn = new Ext.Button({
id: 'btnRemoveIn',
text: 'Remove Variables In',
iconCls: 'application_delete',
handler: function (s) {
editorIn.stopEditing();
var s = variableInGrid.getSelectionModel().getSelections();
for(var i = 0, r; r = s[i]; i++){
//Secondly deleting from Grid
variablesInStore.remove(r);
}
}
});
var tbIn = new Ext.Toolbar({
items: [btnAddIn, btnRemoveIn]
});
// create the Data Store of all Variables Out
var variablesOutStore = new Ext.data.JsonStore({
root : 'data',
totalProperty: 'totalCount',
idProperty : 'gridIndex',
remoteSort : true,
fields : subProcessFields,
proxy : new Ext.data.HttpProxy({
url : 'proxySubProcessProperties?pid='+pro_uid+'&tid='+taskId+'&type=0' //type=0 specifies Variables Out (Asynchronous)
})
});
//taskUsers.setDefaultSort('LABEL', 'asc');
variablesOutStore.load();
// create the Data Store of all Variables In
var variablesInStore = new Ext.data.JsonStore({
root : 'data',
totalProperty: 'totalCount',
idProperty : 'gridIndex',
remoteSort : true,
fields : subProcessFields,
proxy : new Ext.data.HttpProxy({
url : 'proxySubProcessProperties?pid='+pro_uid+'&tid='+taskId+'&type=1' //type=1 specifies Variables In (Synchronous)
})
});
//taskUsers.setDefaultSort('LABEL', 'asc');
variablesInStore.load();
var variableOutGrid = new Ext.grid.GridPanel({
store : variablesOutStore,
id : 'mygrid',
loadMask : true,
loadingText : 'Loading...',
renderTo : 'cases-grid',
frame : true,
autoHeight : true,
autoScroll : true,
clicksToEdit: 1,
layout : 'form',
plugins : [editorOut],
columns : [{
id : 'VAR_OUT1',
header : 'Origin',
dataIndex: 'VAR_OUT1',
width : 200,
sortable : true,
editor : new Ext.form.TextField({
allowBlank: true
})
},
{
sortable: false,
renderer: function()
{
return '<input type="button" value="@@" />';
}
},
{
id : 'VAR_OUT2',
header : 'Target',
dataIndex : 'VAR_OUT2',
width : 200,
sortable : true,
editor : new Ext.form.TextField({
allowBlank: true
})
},
{
sortable: false,
renderer: function()
{
return '<input type="button" value="@@" />';
}
}
],
viewConfig: {forceFit: true},
stripeRows: true,
tbar: tbOut
});
var variableInGrid = new Ext.grid.GridPanel({
store : variablesInStore,
id : 'mygrid1',
loadMask : true,
loadingText : 'Loading...',
renderTo : 'cases-grid',
frame : true,
autoHeight : true,
autoScroll : true,
//enableDragDrop : true,
//ddGroup : 'firstGridDDGroup',
clicksToEdit: 1,
layout : 'form',
plugins : [editorIn],
columns : [{
id : 'VAR_IN1',
header : 'Origin',
dataIndex: 'VAR_IN1',
width : 200,
sortable : true,
editor : new Ext.form.TextField({
allowBlank: true
})
},
{
sortable: false,
renderer: function()
{
return '<input type="button" value="@@" />';
}
},
{
id : 'VAR_IN2',
header : 'Target',
dataIndex : 'VAR_IN2',
width : 200,
sortable : true,
editor : new Ext.form.TextField({
allowBlank: true
})
},
{
sortable: false,
renderer: function()
{
return '<input type="button" value="@@" />';
}
}
],
viewConfig: {forceFit: true},
stripeRows: true,
tbar: tbIn
});
editorOut.on({
scope: this,
afteredit: function(roweditor, changes, record, rowIndex) {
var sTasks = record.data.TASKS;
var sSync = record.data.SP_SYNCHRONOUS;
var sSP_UID = record.data.SP_UID;
var sProcess_Parent = record.data.PRO_PARENT;
var sTask_Parent = record.data.TAS_PARENT;
var sVar_Out1 = record.data.VAR_OUT1;
var sVar_Out2 = record.data.VAR_OUT2;
Ext.Ajax.request({
url : 'processes_Ajax.php',
method: 'POST',
params: {
action : 'saveSubProcessDetails',
TASKS : sTasks,
SP_SYNCHRONOUS : sSync,
SP_UID : sSP_UID,
PRO_PARENT : sProcess_Parent,
TAS_PARENT : sTask_Parent,
VAR_OUT1 : sVar_Out1,
VAR_OUT2 : sVar_Out2
},
success: function(response) {
Ext.MessageBox.alert ('Status','Variable Out has been saved successfully.');
}
});
}
});
editorIn.on({
scope: this,
afteredit: function(roweditor, changes, record, rowIndex) {
var sTasks = record.data.TASKS;
var sSync = record.data.SP_SYNCHRONOUS;
var sSP_UID = record.data.SP_UID;
var sProcess_Parent = record.data.PRO_PARENT;
var sTask_Parent = record.data.TAS_PARENT;
var sVar_In1 = record.data.VAR_IN1;
var sVar_In2 = record.data.VAR_IN2;
Ext.Ajax.request({
url : 'processes_Ajax.php',
method: 'POST',
params: {
action : 'saveSubProcessDetails',
TASKS : sTasks,
SP_SYNCHRONOUS : sSync,
SP_UID : sSP_UID,
PRO_PARENT : sProcess_Parent,
TAS_PARENT : sTask_Parent,
VAR_IN1 : sVar_In1,
VAR_IN2 : sVar_In2
},
success: function(response) {
Ext.MessageBox.alert ('Status','Variable In has been saved successfully.');
}
});
}
});
var subProcessProperties = new Ext.FormPanel({
labelWidth : 110, // label settings here cascade unless overridden
//frame:true,
bodyStyle:'padding:5px 5px 0',
scope: _3525,
items: [
{
xtype:'fieldset',
title: 'Sub-Process',
collapsible: false,
autoHeight:true,
//width: 600,
defaultType: 'textfield',
items:[
{
id: 'subProcessName',
xtype: 'textfield',
width: 350,
fieldLabel: 'SubProcess name',
name : 'SPROCESS_NAME',
allowBlank: false
},
{
width: 300,
xtype: 'combo',
mode: 'local',
triggerAction: 'all',
forceSelection: true,
editable: false,
fieldLabel: 'Process',
name: 'process',
emptyText : 'Select Process',
//hiddenName: 'SPROCESS_NAME',
displayField: 'PROCESSES',
valueField: 'PROCESSES',
//value: 'Select a process',
store: variablesOutStore
},
{
width: 150,
id : 'spType',
xtype: 'combo',
mode: 'local',
triggerAction: 'all',
forceSelection: true,
editable: false,
fieldLabel: 'Type',
name: 'SP_SYNCHRONOUS',
hiddenName: 'SP_SYNCHRONOUS',
displayField: 'name',
valueField: 'value',
emptyText : 'Select Type',
//value: 'Asynchronous',
store: new Ext.data.JsonStore({
fields : ['name', 'value'],
data : [
{name : 'Asynchronous', value: 'Asynchronous'},
{name : 'Synchronous', value: 'Synchronous'},
]
}),
onSelect: function(record, index){
if(record.data.name == 'Synchronous')
Ext.getCmp("variablein").show();
else
Ext.getCmp("variablein").hide();
this.setValue(record.data[this.valueField || this.displayField]);
this.collapse();
}
}]
},
{
id :'variableout',
xtype:'fieldset',
title: 'Variables Out',
collapsible: false,
labelAlign: 'top',
//autoHeight:true,
//width: 600,
//defaultType: 'textfield',
items:[variableOutGrid]
},
{
id :'variablein',
xtype:'fieldset',
title: 'Variables In',
//hidden: true,
collapsible: false,
labelAlign: 'top',
items:[variableInGrid]
}]
});
//Loading Task Details into the form
subProcessProperties.form.load({
url:'proxySubProcessProperties?pid='+pro_uid+'&tid='+taskId+'&type=2',
method:'GET',
//waitMsg:'Loading',
success:function(form, action) {
Ext.getCmp("subProcessName").setValue(action.result.data[0].TAS_TITLE);
if(action.result.data[0].SP_SYNCHRONOUS == 0)
{
Ext.getCmp("variablein").hide();
Ext.getCmp("spType").setValue("Asynchronous");
}
else
{
Ext.getCmp("variablein").show();
Ext.getCmp("spType").setValue("Synchronous");
}
workflow.subProcessProperties = action.result.data[0];
//Ext.MessageBox.alert('Message', 'Loaded OK');
// setTaskAssignType(form);
},
failure:function(form, action) {
Ext.MessageBox.alert('Message', 'Load failed');
}
});
subProcessProperties.render(document.body);
// workflow.subProcessProperties = subProcessProperties;
var window = new Ext.Window({
title: 'Task: ',
collapsible: false,
maximizable: false,
width: 800,
height: 500,
minWidth: 300,
minHeight: 150,
layout: 'fit',
plain: true,
bodyStyle: 'padding:5px;',
buttonAlign: 'center',
items: subProcessProperties,
buttons: [{
text: 'Save',
handler: function(){
var getForm = subProcessProperties.getForm().getValues();
var sTask_Parent = workflow.subProcessProperties.TAS_PARENT;
var sSPNAME = getForm.SPROCESS_NAME;
Ext.Ajax.request({
url : 'processes_Ajax.php',
method: 'POST',
params: {
action : 'subprocessProperties',
TAS_PARENT : sTask_Parent,
SPROCESS_NAME : sSPNAME
},
success: function(response) {
Ext.MessageBox.alert ('Status','Sub Process Properties has been saved successfully.');
}
});
workflow.currentSelection.bpmnNewText.clear();
workflow.currentSelection.bpmnNewText.drawStringRect(sSPNAME,20,20,100,'left');
workflow.currentSelection.bpmnNewText.paint();
workflow.currentSelection.subProcessName = sSPNAME;
//var getstore = taskPropertiesTabs.getStore();
//var getData = getstore.data.items;
//taskExtObj.saveTaskProperties(_5625);
}
},{
text: 'Cancel',
handler: function(){
// when this button clicked,
window.close();
}
}]
});
window.show();
}
//Window pop up function when user clicks on Gateways properties
MyWorkflow.prototype.editGatewayProperties= function()
{
2010-12-14 07:28:38 +00:00
}
MyWorkflow.prototype.toggleShapes=function(item)
{
//Set the context Clicked Flag to false because context click action is performed
if(item.scope.workflow != null){
item.scope.workflow.contextClicked = false;
if(item.scope.workflow.currentSelection != null){
//Get all the ports of the shapes
var ports = item.scope.workflow.currentSelection.getPorts();
var len =ports.data.length;
//Get all the connection of the shape
var conn = new Array();
for(var i=0; i<=len; i++){
if(typeof ports.data[i] === 'object')
conn[i] = ports.data[i].getConnections();
}
//Initializing Arrays and variables
var connLength = conn.length;
var sourceNode = new Array();
var targetNode= new Array();
var countConn = 0;
var sourcePortName= new Array();
var targetPortName= new Array();
var sourcePortId= new Array();
var targetPortId= new Array();
//Get the pre-selected id into new variable to compare in future code
var shapeId = this.workflow.currentSelection.id;
//Get the current pre-selected figure object in the new object, because not accessible after adding new shapes
var oldWorkflow = this.workflow.currentSelection;
//Get the source and Target object of all the connections in an array
for(i = 0; i< connLength ; i++)
{
for(var j = 0; j < conn[i].data.length ; j++)
{
if(typeof conn[i].data[j] != 'undefined')
{
sourceNode[countConn] = conn[i].data[j].sourcePort.parentNode;
targetNode[countConn] = conn[i].data[j].targetPort.parentNode;
sourcePortName[countConn] = conn[i].data[j].sourcePort.properties.name;
targetPortName[countConn] = conn[i].data[j].targetPort.properties.name;
sourcePortId[countConn] = conn[i].data[j].sourcePort.parentNode.id;
targetPortId[countConn] = conn[i].data[j].targetPort.parentNode.id;
countConn++;
}
}
}
//Add new selected Figure
var x =item.scope.workflow.currentSelection.getX(); //Get x co-ordinate from figure
var y =item.scope.workflow.currentSelection.getY(); //Get y co-ordinate from figure
if(item.type == 'bpmnEventBoundaryTimerInter')
{
workflow.boundaryEvent = true;
workflow.taskName = oldWorkflow.taskName;
var newShape = eval("new bpmnTask(workflow)");
//workflow.boundaryEvent = false;
}
else if(item.type == 'bpmnSubProcess')
{
workflow.subProcessName = 'Sub Process';
newShape = eval("new "+item.type+"(this.workflow)");
}
else
newShape = eval("new "+item.type+"(this.workflow)");
this.workflow.addFigure(newShape,x,y); //Add New Selected Gateway First
//Delete Old Shape
item.scope.workflow.getCommandStack().execute(new CommandDelete(oldWorkflow));
ToolGeneric.prototype.execute.call(item.scope);
//to create all the new connections again
var connObj;
for(i=0 ; i < countConn ; i++)
{
if(sourcePortId[i] == shapeId) //If shapeId is equal to sourceId the , replace the oldShape object by new shape Object
sourceNode[i] = newShape;
else
targetNode[i] = newShape;
connObj = new DecoratedConnection();
connObj.setTarget(eval('targetNode[i].getPort(targetPortName[i])'));
connObj.setSource(eval('sourceNode[i].getPort(sourcePortName[i])'));
newShape.workflow.addFigure(connObj);
}
//Saving Asynchronously deleted shape and new created shape into DB
if(item.type.match(/Boundary/))
{
newShape.id = oldWorkflow.id;
newShape.html.id = oldWorkflow.id;
newShape.actiontype = 'updateTask';
workflow.saveShape(newShape);
}
if(newShape.type.match(/Event/) && newShape.type.match(/Inter/) && !item.type.match(/Boundary/))
{
newShape.actiontype = 'updateEvent';
//Set the Old Id to the Newly created Event
newShape.html.id = oldWorkflow.id;
newShape.id = oldWorkflow.id;
newShape.workflow.saveShape(newShape);
}
if(newShape.type == 'bpmnEventMessageStart' || newShape.type == 'bpmnEventTimerStart')
{
newShape.workflow.currentSelection = newShape;
var task_details = workflow.getStartEventConn(newShape,'targetPort','OutputPort');
if(task_details.length > 0 )
{
var task_uid = task_details[0].value;
newShape.task_uid = task_uid;
newShape.actiontype = 'addEvent';
newShape.workflow.saveShape(newShape);
}
}
else if(newShape.type == 'bpmnEventEmptyStart')
{
workflow.deleteEvent(oldWorkflow);
newShape.workflow.currentSelection = newShape;
var task_details = workflow.getStartEventConn(newShape,'targetPort','OutputPort');
if(task_details.length > 0 )
{
var task_uid = task_details[0].value;
newShape.task_uid = task_uid;
newShape.actiontype = 'saveStartEvent';
newShape.workflow.saveShape(newShape);
}
}
else if(newShape.type.match(/Gateway/))
{
var shape = new Array();
shape.type = '';
newShape.workflow.saveRoute(newShape,shape);
}
//Swapping from Task to subprocess and vice -versa
if((newShape.type == 'bpmnSubProcess' || newShape.type == 'bpmnTask') && !item.type.match(/Boundary/))
{
newShape.actiontype = 'addSubProcess';
if(newShape.type == 'bpmnTask')
newShape.actiontype = 'addTask';
newShape.workflow.saveShape(newShape);
}
if((this.type == 'bpmnTask' || this.type == 'bpmnSubProcess') && !item.type.match(/Boundary/) )
{
this.actiontype = 'deleteTask';
this.noAlert = true;
if(this.type == 'bpmnSubProcess')
this.actiontype = 'deleteSubProcess';
newShape.workflow.deleteSilently(this);
}
}
}
}
MyWorkflow.prototype.swapTaskSubprocess=function(itemObj)
{
if(itemObj.type == 'bpmnSubProcess')
{
workflow.subProcessName = 'Sub Process';
var newShape = eval("new "+itemObj.type+"(this.workflow)");
}
else
newShape = eval("new "+itemObj.type+"(this.workflow)");
//Swapping from Task to subprocess and vice -versa
if((newShape.type == 'bpmnSubProcess' || newShape.type == 'bpmnTask') && !itemObj.type.match(/Boundary/))
{
newShape.actiontype = 'addSubProcess';
if(newShape.type == 'bpmnTask')
newShape.actiontype = 'addTask';
newShape.workflow.saveShape(newShape);
}
if((this.type == 'bpmnTask' || this.type == 'bpmnSubProcess') && !itemObj.type.match(/Boundary/) )
{
this.actiontype = 'deleteTask';
this.noAlert = true;
if(this.type == 'bpmnSubProcess')
this.actiontype = 'deleteSubProcess';
newShape.workflow.deleteShape(this);
}
}
MyWorkflow.prototype.checkConnectionsExist=function(port,portType,portTypeName)
{
//Get all the ports of the shapes
var ports = port.workflow.currentSelection.getPorts();
var len =ports.data.length;
//Get all the connection of the shape
var conn = new Array();
for(var i=0; i<=len; i++){
if(typeof ports.data[i] === 'object')
if(ports.data[i].type == portTypeName)
conn[i] = ports.data[i].getConnections();
}
//Initializing Arrays and variables
var countConn = 0;
var portParentId= new Array();
var portName = new Array();
//Get ALL the connections for the specified PORT
for(i = 0; i< conn.length ; i++)
{
if(typeof conn[i] != 'undefined')
for(var j = 0; j < conn[i].data.length ; j++)
{
if(typeof conn[i].data[j] != 'undefined')
{
portParentId[countConn] = eval('conn[i].data[j].'+portType+'.parentNode.id');
portName[countConn] = eval('conn[i].data[j].'+portType+'.properties.name');
countConn++;
}
}
}
var conx = 0;
var parentid;
for(i=0 ; i < countConn ; i++)
{
if(portParentId[i] == port.parentNode.id)
conx++;
}
return conx;
}
MyWorkflow.prototype.AddEventStartContextMenu=function(_4093)
{
this.canvasEvent = Ext.get(_4093.id);
this.contextEventmenu = new Ext.menu.Menu({
items: [{
text: 'Event Type',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
{
text: 'Empty',
type:'bpmnEventEmptyStart',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
},
{
text: 'Message',
type:'bpmnEventMessageStart',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Timer',
type:'bpmnEventTimerStart',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}/*, {
text: 'Conditional',
type:'bpmnEventRuleStart',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Signal',
type:'bpmnEventSignalStart',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Multiple',
type:'bpmnEventMulStart',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}*/
]
},
scope: this
},{
text: 'Properties',
scope: this,
handler: MyWorkflow.prototype.editEventProperties
}]
});
this.canvasEvent.on('contextmenu', function(e) {
e.stopEvent();
this.contextEventmenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.AddEventInterContextMenu=function(_4093)
{
this.canvasEvent = Ext.get(_4093.id);
this.contextEventmenu = new Ext.menu.Menu({
items: [{
text: 'Event Type',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
/*{
text: 'Empty',
type:'bpmnEventEmptyInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
},*/
{
text: 'Message : Send',
type:'bpmnEventMessageSendInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
},
{
text: 'Message : Receive',
type:'bpmnEventMessageRecInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
},
{
text: 'Timer',
type:'bpmnEventTimerInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
},
{
text: 'Intermediate Boundary Timer',
type:'bpmnEventBoundaryTimerInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}
/*, {
text: 'Compensate',
type:'bpmnEventCompInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Conditional',
type:'bpmnEventRuleInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Link',
type:'bpmnEventLinkInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Signal',
type:'bpmnEventInterSignal',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Multiple',
type:'bpmnEventMultipleInter',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}*/
]
},
scope: this
},{
text: 'Properties',
handler: MyWorkflow.prototype.editEventProperties,
scope: this
}]
});
this.canvasEvent.on('contextmenu', function(e) {
e.stopEvent();
this.contextEventmenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.AddEventEndContextMenu=function(_4093)
{
this.canvasEvent = Ext.get(_4093.id);
this.contextEventmenu = new Ext.menu.Menu({
items: [{
text: 'Event Type',
menu: { // <-- submenu by nested config object
items: [
// stick any markup in a menu
{
text: 'Empty',
type:'bpmnEventEmptyEnd',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
},
{
text: 'Message',
type:'bpmnEventMessageEnd',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}/*,
{
text: 'Error',
type:'bpmnEventErrorEnd',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Cancel',
type:'bpmnEventCancelEnd',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Compensate',
type:'bpmnEventCompEnd',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Signal',
type:'bpmnEventEndSignal',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Multiple',
type:'bpmnEventMultipleEnd',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}, {
text: 'Terminate',
type:'bpmnEventTerminate',
scope:_4093,
handler: MyWorkflow.prototype.toggleShapes
}*/
]
},
scope: this
},{
text: 'Properties',
handler: MyWorkflow.prototype.editEventProperties,
scope: this
}]
});
this.canvasEvent.on('contextmenu', function(e) {
e.stopEvent();
this.contextEventmenu.showAt(e.getXY());
}, this);
}
MyWorkflow.prototype.disablePorts=function(_4985)
{
if(_4985.type != ''){
var ports ='';
if(_4985.type.match(/Task/) || _4985.type.match(/Gateway/) || _4985.type.match(/Inter/) || _4985.type.match(/SubProcess/)){
ports = ['output1','input1','output2','input2'];
}
else if(_4985.type.match(/End/)){
ports = ['input1','input2'];
}
else if(_4985.type.match(/Start/)){
ports = ['output1','output2'];
}
else if(_4985.type.match(/Annotation/)){
ports = ['input1'];
}
for(var i=0; i< ports.length ; i++){
eval('_4985.'+ports[i]+'.setZOrder(-1)');
eval('_4985.'+ports[i]+'.setBackgroundColor(new Color(255, 255, 255))');
eval('_4985.'+ports[i]+'.setColor(new Color(255, 255, 255))');
}
}
}
MyWorkflow.prototype.enablePorts=function(_39fd,port)
{
/*Setting Background ,border and Z-order of the flow menu back to original when clicked
*on the shape
**/
for(var i=0; i< port.length ; i++){
if(port[i].match(/input/))
eval('_39fd.workflow.currentSelection.'+port[i]+'.setBackgroundColor(new Color(245, 115, 115))');
else
eval('_39fd.workflow.currentSelection.'+port[i]+'.setBackgroundColor(new Color(115, 115, 245))');
eval('_39fd.workflow.currentSelection.'+port[i]+'.setColor(new Color(90, 150, 90))');
eval('_39fd.workflow.currentSelection.'+port[i]+'.setZOrder(50000)');
}
}
MyWorkflow.prototype.disableFlowMenu =function(_39fd,port)
{
/*Setting Background ,border and Z-order of the flow menu back to original when clicked
*on the shape
**/
for(var i=0; i< port.length ; i++){
if(port[i].match(/input/))
eval('_39fd.workflow.currentSelection.'+port[i]+'.setBackgroundColor(new Color(245, 115, 115))');
else
eval('_39fd.workflow.currentSelection.'+port[i]+'.setBackgroundColor(new Color(115, 115, 245))');
eval('_39fd.workflow.currentSelection.'+port[i]+'.setColor(new Color(90, 150, 90))');
eval('_39fd.workflow.currentSelection.'+port[i]+'.setZOrder(50000)');
}
}
MyWorkflow.prototype.handleContextMenu=function(_39fd)
{
workflow.hideResizeHandles();
//Enable the contextClicked Flag
workflow.contextClicked = true;
//Set the current Selection to the selected Figure
workflow.setCurrentSelection(_39fd);
//Disable Resize of all the figures
//_39fd.workflow.hideResizeHandles();
// _39fd.setSelectable(false);
// _39fd.setResizeable(false);
//Handle the Right click menu
var pmosExtObj = new pmosExt();
//Load all the process Data
pmosExtObj.loadProcess(_39fd);
//Load Dynaform List
// pmosExtObj.loadDynaforms(_39fd);
if(_39fd.type != ''){
if(_39fd.type.match(/Task/)){
_39fd.workflow.taskid = new Array();
_39fd.workflow.taskid.value = _39fd.id;
pmosExtObj.loadTask(_39fd);
_39fd.workflow.AddTaskContextMenu(_39fd);
}
else if(_39fd.type.match(/Start/)){
_39fd.workflow.taskUid = _39fd.workflow.getStartEventConn(_39fd,'targetPort','OutputPort');
pmosExtObj.loadDynaforms(_39fd);
if(_39fd.type.match(/Message/))
pmosExtObj.loadWebEntry(_39fd);
_39fd.workflow.AddEventStartContextMenu(_39fd);
}
else if(_39fd.type.match(/Inter/)){
_39fd.workflow.taskUidFrom = _39fd.workflow.getStartEventConn(_39fd,'sourcePort','InputPort');
//_39fd.workflow.taskid = _39fd.workflow.taskUid[0];
_39fd.workflow.taskUidTo = _39fd.workflow.getStartEventConn(_39fd,'targetPort','OutputPort');
_39fd.workflow.taskid = _39fd.workflow.taskUidFrom[0];
pmosExtObj.loadTask(_39fd);
pmosExtObj.getTriggerList(_39fd);
_39fd.workflow.AddEventInterContextMenu(_39fd);
}
else if(_39fd.type.match(/End/)){
_39fd.workflow.taskUid = _39fd.workflow.getStartEventConn(_39fd,'sourcePort','InputPort');
_39fd.workflow.AddEventEndContextMenu(_39fd);
}
else if(_39fd.type.match(/Gateway/)){
_39fd.workflow.AddGatewayContextMenu(_39fd);
}
else if(_39fd.type.match(/SubProcess/)){
_39fd.workflow.AddSubProcessContextMenu(_39fd);
}
}
//this.workflow.AddEventStartContextMenu(_39fd);
}
MyWorkflow.prototype.getCommonConnections = function(_4356)
{
var routes = new Array();
var counter = 0
for(var p=0; p < _4356.workflow.commonPorts.data.length; p++)
{
if(typeof _4356.workflow.commonPorts.data[p] === "object" && _4356.workflow.commonPorts.data[p] != null)
{
counter++;
}
}
for(var j=0; j< counter; j++)
{
//var temp1 = eval("this.workflow.commonPorts.data["+i+"].parentNode.output"+count+".getConnections()");
var tester = _4356.workflow.commonPorts.data;
var temp1 = eval("_4356.workflow.commonPorts.data["+j+"].getConnections()");
if(temp1.data[0]){
if(routes[j])
{
if(routes[j][1] != temp1.data[0].sourcePort.parentNode.id)
{
routes[j] = new Array(3);
routes[j][0] = temp1.data[0].id;
routes[j][1] = temp1.data[0].sourcePort.parentNode.id;
routes[j][2] = temp1.data[0].targetPort.parentNode.id;
routes[j][3] = temp1.data[0].targetPort.properties.name;
routes[j][4] = temp1.data[0].sourcePort.properties.name;
}
}
else
{
routes[j] = new Array(3);
routes[j][0] = temp1.data[0].id;
routes[j][1] = temp1.data[0].sourcePort.parentNode.id;
routes[j][2] = temp1.data[0].targetPort.parentNode.id;
routes[j][3] = temp1.data[0].targetPort.properties.name;
routes[j][4] = temp1.data[0].sourcePort.properties.name;
}
}
//j++;
// while(routes[j])
// {
// j++
// };
// j--;
}
var j = 0;
var serial = new Array();
for(key in routes)
{
if(typeof routes[key] === 'object'){
serial[j] = routes[key];
j++;
}
}
var routes = serial.getUniqueValues();
for(var i=0;i< routes.length ; i++)
{
routes[i] = routes[i].split(',');
}
return routes;
}
Array.prototype.getUniqueValues = function () {
var hash = new Object();
for (j = 0; j < this.length; j++) {hash[this[j]] = true}
var array = new Array();
for (value in hash) {array.push(value)};
return array;
}
MyWorkflow.prototype.getUrlVars = function()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
var pro_uid = vars["PRO_UID"];
return pro_uid;
}
MyWorkflow.prototype.saveShape= function(newShapeObj)
{
//Initializing variables
var pro_uid = this.getUrlVars();
var shapeId = newShapeObj.id;
var actiontype = newShapeObj.actiontype;
var xpos = newShapeObj.x;
var ypos = newShapeObj.y;
var pos = '{"x":'+xpos+',"y":'+ypos+'}';
var width = newShapeObj.width;
var height = newShapeObj.height;
var cordinates = '{"x":'+width+',"y":'+height+'}';
if(newShapeObj.type == 'bpmnTask'){
var newlabel = newShapeObj.taskName;
}
if(newShapeObj.type == 'bpmnAnnotation'){
newlabel = newShapeObj.annotationName;
}
//var urlparams = "action=addTask&data={"uid":"4708462724ca1d281210739068208635","position":{"x":707,"y":247}}";
var urlparams;
switch(actiontype)
{
case 'addTask':
urlparams = '?action='+actiontype+'&data={"uid":"'+ pro_uid +'","position":'+pos+'}';
break;
case 'updateTask':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","boundary":"TIMER"}';
break;
case 'saveTaskPosition':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","position":'+pos+'}';
break;
case 'saveTaskCordinates':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","position":'+cordinates+'}';
break;
case 'saveAnnotationCordinates':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","position":'+cordinates+'}';
break;
case 'updateTaskName':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","label":"'+newlabel+'"}';
break;
case 'addSubProcess':
urlparams = '?action='+actiontype+'&data={"uid":"'+ pro_uid +'","position":'+pos+'}';
break;
case 'addText':
urlparams = '?action='+actiontype+'&data={"uid":"'+ pro_uid +'","label":"'+newlabel+'","position":'+pos+'}';
break;
case 'updateText':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","label":"'+newlabel+'"}';
break;
case 'saveTextPosition':
urlparams = '?action='+actiontype+'&data={"uid":"'+ shapeId +'","position":'+pos+'}';
break;
case 'saveStartEvent':
//If we change Event to start from Message/Timer then Delete the record from Events Table
this.deleteEvent(newShapeObj);
var tas_start = 'TRUE';
var tas_uid = newShapeObj.task_uid;
urlparams = '?action='+actiontype+'&data={"tas_uid":"'+tas_uid+'","tas_start":"'+tas_start+'"}';
break;
case 'addEvent':
var tas_uid = newShapeObj.workflow.taskUid[0].value;
var tas_type = newShapeObj.type;
urlparams = '?action='+actiontype+'&data={"uid":"'+ pro_uid +'","tas_uid":"'+tas_uid+'","tas_type":"'+tas_type+'"}';
break;
case 'updateEvent':
var evn_uid = newShapeObj.id
var evn_type = newShapeObj.type;
urlparams = '?action='+actiontype+'&data={"evn_uid":"'+evn_uid +'","evn_type":"'+evn_type+'"}';
break;
}
//var urlparams = '?action='+actiontype+'&data={"uid":"'+ pro_uid +'","position":'+pos+'}';
Ext.Ajax.request({
url: "processes_Ajax.php"+ urlparams,
success: function(response) {
//Ext.Msg.alert (response.responseText);
if(response.responseText != 1 && response.responseText != "")
{
this.workflow.newTaskInfo = Ext.util.JSON.decode(response.responseText);
newShapeObj.html.id = this.workflow.newTaskInfo.uid;
newShapeObj.id = this.workflow.newTaskInfo.uid;
if(newShapeObj.type == 'bpmnTask'){
newShapeObj.taskName = this.workflow.newTaskInfo.label;
//After Figure is added, Update Start Event connected to Task
if(typeof this.workflow.preSelectedObj != 'undefined' )
{
var preSelectedFigure = this.workflow.preSelectedObj;
if(preSelectedFigure.type.match(/Start/) && preSelectedFigure.type.match(/Event/))
this.workflow.saveEvents(preSelectedFigure,newShapeObj);
if(preSelectedFigure.type.match(/Task/))
this.workflow.saveRoute(preSelectedFigure,newShapeObj);
if (preSelectedFigure.type.match(/Gateway/)) {
//preSelectedFigure.rou_type = 'SEQUENTIAL';
this.workflow.saveRoute(preSelectedFigure,newShapeObj);
}
}
else if(newShapeObj.type == 'bpmnSubProcess'){
newShapeObj.subProcessName = this.workflow.newTaskInfo.label;
}
}
}
},
failure: function(){
//Ext.Msg.alert ('Failure');
}
});
}
//Deleting shapes silently on swapping task to sub process and vice-versa
MyWorkflow.prototype.deleteSilently= function(shapeObj)
{
//Initializing variables
var pro_uid = this.getUrlVars();
var shapeId = shapeObj.id;
var actiontype = shapeObj.actiontype;
//var shapeName = '';
switch(actiontype)
{
case 'deleteTask':
var urlparams = '?action='+actiontype+'&data={"pro_uid":"'+ pro_uid +'","tas_uid":"'+shapeId+'"}';
this.urlparameter = urlparams;
//shapeName = 'Task :'+ shapeObj.taskName;
break;
case 'deleteSubProcess':
urlparams = '?action='+actiontype+'&data={"pro_uid":"'+ pro_uid +'","tas_uid":"'+shapeId+'"}';
this.urlparameter = urlparams;
//shapeName = shapeObj.subProcessName;
break;
}
Ext.Ajax.request({
url: "processes_Ajax.php"+ urlparams,
success: function(response) {
//Ext.Msg.alert (response.responseText);
},
failure: function(){
Ext.Msg.alert ('Failure');
}
});
//workflow.getCommandStack().execute(new CommandDelete(workflow.getCurrentSelection()));
}
MyWorkflow.prototype.deleteShape= function(shapeObj)
{
//Initializing variables
var pro_uid = this.getUrlVars();
var shapeId = shapeObj.id;
var actiontype = shapeObj.actiontype;
var shapeName = '';
switch(actiontype)
{
case 'deleteTask':
var urlparams = '?action='+actiontype+'&data={"pro_uid":"'+ pro_uid +'","tas_uid":"'+shapeId+'"}';
this.urlparameter = urlparams;
shapeName = 'Task :'+ shapeObj.taskName;
break;
case 'deleteSubProcess':
urlparams = '?action='+actiontype+'&data={"pro_uid":"'+ pro_uid +'","tas_uid":"'+shapeId+'"}';
this.urlparameter = urlparams;
shapeName = shapeObj.subProcessName;
break;
case 'deleteText':
urlparams = '?action='+actiontype+'&data={"uid":"'+shapeId+'"}';
this.urlparameter = urlparams;
shapeName = 'Annotation';
break;
case 'saveStartEvent':
var task_detail = this.getStartEventConn(this.currentSelection,'targetPort','OutputPort');
if(task_detail.length > 0){
var tas_uid = task_detail[0].value;
var tas_start = 'FALSE';
urlparams = '?action=saveStartEvent&data={"tas_uid":"'+tas_uid+'","tas_start":"'+tas_start+'"}';
this.urlparameter = urlparams;
shapeName = 'Start Event';
}
break;
case 'deleteEndEvent':
shapeName = 'End Event';
shapeObj.workflow.getCommandStack().execute(new CommandDelete(shapeObj.workflow.getCurrentSelection()));
break;
}
//Ext.MessageBox.confirm('Confirm', 'Are you sure you want to delete the '+ shapeName,this.showResult);
if(shapeObj.noAlert == null)
Ext.MessageBox.confirm('Confirm', 'Are you sure you want to delete the '+ shapeName,this.showResult);
else
workflow.showResult('yes');
}
MyWorkflow.prototype.showResult = function(btn){
//this.workflow.confirm = btn;
if(typeof workflow.urlparameter != 'undefined')
{
var url = workflow.urlparameter;
if(btn == 'yes')
{
Ext.Ajax.request({
url: "processes_Ajax.php"+ url,
success: function(response) {
//Ext.Msg.alert (response.responseText);
},
failure: function(){
Ext.Msg.alert ('Failure');
}
});
workflow.getCommandStack().execute(new CommandDelete(workflow.getCurrentSelection()));
}
}
//Ext.example.msg('Button Click', 'You clicked the {0} button', btn);
};
MyWorkflow.prototype.editEventProperties = function(_6752)
{
var currentSelection = _6752.scope.currentSelection;
var pmosExtObj = new pmosExt();
switch (currentSelection.type){
case 'bpmnEventMessageStart':
pmosExtObj.popWebEntry(currentSelection);
break;
case 'bpmnEventTimerStart':
pmosExtObj.popCaseSchedular(currentSelection);
break;
case 'bpmnEventMessageSendInter':
pmosExtObj.popTaskNotification(currentSelection);
break;
case 'bpmnEventTimerInter':
pmosExtObj.popMultipleEvent(currentSelection);
break;
case 'bpmnEventMessageEnd':
pmosExtObj.popMessageEvent(currentSelection);
break;
}
}
/*
* Get the Source /Target shape
* param object _9854
* param string port
* return array
*/
MyWorkflow.prototype.getStartEventConn = function(_9854,port,portType)
{
//Get all the ports of the shapes
var ports = _9854.workflow.currentSelection.getPorts();
var len =ports.data.length;
//Get all the connection of the shape
var conn = new Array();
for(var i=0; i<=len; i++){
if(typeof ports.data[i] === 'object')
if(ports.data[i].type == portType)
conn[i] = ports.data[i].getConnections();
}
//Initializing Arrays and variables
var countConn = 0;
var startTask= new Array();
var type;
//Get ALL the connections for the specified PORT
for(i = 0; i< conn.length ; i++)
{
if(typeof conn[i] != 'undefined')
for(var j = 0; j < conn[i].data.length ; j++)
{
if(typeof conn[i].data[j] != 'undefined')
{
type = eval('conn[i].data[j].'+port+'.parentNode.type')
if(type == 'bpmnTask')
{
startTask[countConn] = new Array();
startTask[countConn].value = eval('conn[i].data[j].'+port+'.parentNode.id');
startTask[countConn].name = eval('conn[i].data[j].'+port+'.parentNode.taskName');
countConn++;
}
}
}
}
return startTask;
}
MyWorkflow.prototype.saveEvents = function(event,tas_uid)
{
var pro_uid = this.getUrlVars();
if(event.type.match(/Start/) && event.type.match(/Empty/))
{
var tas_start = 'TRUE';
var urlparams = '?action=saveStartEvent&data={"tas_uid":"'+tas_uid+'","tas_start":"'+tas_start+'"}';
}
else if(event.type.match(/Start/) && (event.type.match(/Message/) || event.type.match(/Timer/)) )
{
urlparams = '?action=addEvent&data={"uid":"'+ pro_uid +'","tas_uid":"'+tas_uid+'","tas_type":"'+event.type+'"}';
}
else if(event.type.match(/Inter/))
{
urlparams = '?action=addEvent&data={"uid":"'+ pro_uid +'","tas_from":"'+tas_uid.taskFrom+'","tas_to":"'+tas_uid.taskTo+'","tas_type":"'+event.type+'"}';
}
if(urlparams != ''){
Ext.Ajax.request({
url: "processes_Ajax.php"+ urlparams,
success: function(response) {
if(response.responseText != '')
{
//Save Route
if(workflow.currentSelection.type == 'bpmnEventTimerInter'){
workflow.currentSelection.id = response.responseText;
var newObj = workflow.currentSelection;
var preObj = new Array();
preObj.type = 'bpmnTask';
preObj.id = tas_uid.taskFrom;
newObj.evn_uid = workflow.currentSelection.id;
newObj.task_to = tas_uid.taskTo;
this.workflow.saveRoute(preObj,newObj);
}
}
},
failure: function(){
Ext.Msg.alert ('Failure');
}
});
}
}
MyWorkflow.prototype.saveRoute = function(preObj,newObj)
{
var pro_uid = this.getUrlVars();
var task_uid = new Array();
var next_task_uid = new Array();
var rou_type ='';
var rou_evn_uid = '';
var port_numberIP = '';
var port_numberOP = '';
if(typeof newObj.sPortType != 'undefined')
{
sPortTypeIP = newObj.sPortType;
sPortTypeOP = preObj.sPortType;
var sPortType_lenIP = sPortTypeIP.length;
var sPortType_lenOP = sPortTypeOP.length;
var port_numberIP = sPortTypeIP.charAt(sPortType_lenIP-1);
var port_numberOP = sPortTypeOP.charAt(sPortType_lenOP-1);
}
if(preObj.type.match(/Task/) && newObj.type.match(/Event/) && newObj.type.match(/Inter/))
{
task_uid[0] = preObj.id;
next_task_uid[0] = newObj.task_to;
rou_type = 'SEQUENTIAL';
rou_evn_uid = newObj.evn_uid;
}
//If both the Object are Task
else if(preObj.type.match(/Task/) && newObj.type.match(/Task/))
{
task_uid[0] = preObj.id;
next_task_uid[0] = newObj.id;
rou_type = 'SEQUENTIAL';
}
else if(preObj.type.match(/Task/) && newObj.type.match(/End/) && newObj.type.match(/Event/))
{
this.deleteRoute(newObj.conn,1);
task_uid[0] = preObj.id;
next_task_uid[0] = '-1';
rou_type = 'SEQUENTIAL';
}
else if(preObj.type.match(/Gateway/))
{
// var task_uid = new Array();
// var next_task_uid = new Array();
switch(preObj.type){
case 'bpmnGatewayParallel':
rou_type ='PARALLEL';
break;
case 'bpmnGatewayExclusiveData':
rou_type = 'EVALUATE';
break;
case 'bpmnGatewayInclusive':
rou_type = 'PARALLEL-BY-EVALUATION';
break;
case 'bpmnGatewayComplex':
rou_type = 'DISCRIMINATOR';
break;
}
var ports = preObj.getPorts();
var len =ports.data.length;
//Get all the connection of the shape
var conn = new Array();
var count1 = 0;
var count2 = 0;
for(var i=0; i<=len; i++){
if(typeof ports.data[i] === 'object')
conn[i] = ports.data[i].getConnections();
}
//Get ALL the connections for the specified PORT
for(i = 0; i< conn.length ; i++)
{
if(typeof conn[i] != 'undefined')
for(var j = 0; j < conn[i].data.length ; j++)
{
if(typeof conn[i].data[j] != 'undefined')
{
if(conn[i].data[j].sourcePort.parentNode.type != preObj.type){
// task_uid[count1] = new Array();
task_uid[count1] = conn[i].data[j].sourcePort.parentNode.id;
count1++;
}
if(conn[i].data[j].targetPort.parentNode.type != preObj.type){
// task_uid[count2] = new Array();
next_task_uid[count2] = conn[i].data[j].targetPort.parentNode.id;
count2++;
}
}
}
}
}
var staskUid = Ext.util.JSON.encode(task_uid);
var sNextTaskUid = Ext.util.JSON.encode(next_task_uid);
if(staskUid != '')
{
Ext.Ajax.request({
url: "patterns_Ajax.php",
success: function(response) {
if(response.responseText != 0){
if(typeof newObj.conn != 'undefined'){
newObj.conn.html.id = response.responseText;
newObj.conn.id = response.responseText;
}
}
},
failure: function(){
Ext.Msg.alert ('Failure');
},
params: {
action:'savePattern',
PROCESS: pro_uid,
TASK:staskUid,
ROU_NEXT_TASK:sNextTaskUid,
ROU_TYPE:rou_type,
ROU_EVN_UID:rou_evn_uid,
PORT_NUMBER_IP:port_numberIP,
PORT_NUMBER_OP:port_numberOP,
mode:'Ext'
}
});
}
}
MyWorkflow.prototype.deleteRoute = function(conn,val){
//var confirm = confirm('Are you sure you want to delete the route');
//if(confirm){
var rou_uid = conn.id;
if(rou_uid != '')
{
var urlparams = '?action=deleteRoute&data={"uid":"'+ rou_uid +'"}';
Ext.Ajax.request({
url: "processes_Ajax.php"+ urlparams,
success: function(response) {
if(val == 0)
conn.workflow.getCommandStack().execute(new CommandDelete(conn));
},
failure: function(){
Ext.Msg.alert ('Failure');
}
});
}
// }
}
MyWorkflow.prototype.deleteEvent = function(eventObj){
var event_uid = eventObj.id;
if(event_uid != '')
{
var urlparams = '?action=deleteEvent&data={"uid":"'+ event_uid +'"}';
Ext.Ajax.request({
url: "processes_Ajax.php"+ urlparams,
success: function(response) {
},
failure: function(){
Ext.Msg.alert ('Failure');
}
});
}
}
MyWorkflow.prototype.getDeleteCriteria = function()
{
var shape = workflow.currentSelection.type;
switch (shape) {
case 'bpmnTask':
workflow.currentSelection.actiontype = 'deleteTask';
workflow.taskNo--;
break;
case 'bpmnSubProcess':
workflow.currentSelection.actiontype = 'deleteSubProcess';
break;
case 'bpmnAnnotation':
workflow.currentSelection.actiontype = 'deleteText';
break;
case 'bpmnEventEmptyStart':
workflow.currentSelection.actiontype = 'saveStartEvent';
break;
case 'bpmnEventEmptyEnd':
workflow.currentSelection.actiontype = 'deleteEndEvent';
var currentObj = workflow.currentSelection;
var ports = currentObj.getPorts();
var len =ports.data.length;
//Get all the connection of the shape
var conn = new Array();
for(var i=0; i<=len; i++){
if(typeof ports.data[i] === 'object')
conn[i] = ports.data[i].getConnections();
}
//Get ALL the connections for the specified PORT
for(i = 0; i< conn.length ; i++)
{
if(typeof conn[i] != 'undefined')
for(var j = 0; j < conn[i].data.length ; j++)
{
if(typeof conn[i].data[j] != 'undefined')
{
if(conn[i].data[j].targetPort.parentNode.id == currentObj.id){
route = conn[i].data[j];
break;
}
}
}
}
workflow.deleteRoute(route,1);
break;
}
workflow.deleteShape(workflow.currentSelection);
}
2010-12-10 11:47:43 +00:00
MyWorkflow.prototype.zoom = function(sType)
{
var figures = workflow.getDocument().getFigures();
for(f = 0;f<figures.getSize();f++){
var fig = figures.get(f);
var width = fig.getWidth();
var height = fig.getHeight();
if(sType == 'in')
{
width += 20;
height += 20
}
else
{
width -= 20;
height -= 20
}
fig.setDimension(width,height);
if(fig.type == 'bpmnTask')
{
fig.bpmnText.clear();
//len = Math.ceil(this.input.value.length/16);
var len = fig.width / 18;
if (len >= 6) {
// len = 1.5;
var padleft = 0.12 * fig.width;
var padtop = 0.32 * fig.height - 3;
fig.rectWidth = fig.width - 2 * padleft;
}
else {
padleft = 0.1 * fig.width;
padtop = 0.09 * fig.height - 3;
fig.rectWidth = fig.width - 2 * padleft;
}
var rectheight = fig.height - 2*padtop;
if(typeof fig.size == 'undefined')
fig.size = fig.bpmnText.ftSz.substr(0,fig.bpmnText.ftSz.length-2);
else
fig.size = fig.size;
if(sType == 'in')
fig.size = parseInt(fig.size) + 4;
else
fig.size = parseInt(fig.size) - 4;
eval("fig.bpmnText.setFont('verdana','"+fig.size+"px', Font.PLAIN)");
fig.bpmnText.drawStringRect(fig.taskName, padleft, padtop, fig.rectWidth, rectheight, 'center');
fig.bpmnText.paint();
}
else if(fig.type == 'bpmnAnnotation')
{
fig.bpmnText.clear();
var text = fig.annotationName;
len = Math.ceil(text.length/16);
if(text.length < 19)
{
len = 1.5;
if(text.length > 9)
fig.rectWidth = text.length*8;
else
fig.rectWidth = 48;
}
else
fig.rectWidth = 150;
if(typeof fig.size == 'undefined')
fig.size = fig.bpmnText.ftSz.substr(0,fig.bpmnText.ftSz.length-2);
else
fig.size = fig.size;
if(sType == 'in')
fig.size = parseInt(fig.size) + 4;
else
fig.size = parseInt(fig.size) - 4;
eval("fig.bpmnText.setFont('verdana','"+fig.size+"px', Font.PLAIN)");
fig.bpmnText.drawStringRect(text,20,20,fig.rectWidth,'left');
fig.bpmnText.paint();
}
}
}