All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jbpm.designer.public.js.Plugins.simulation.js Maven / Gradle / Ivy

if (!ORYX.Plugins) 
    ORYX.Plugins = {};

if (!ORYX.Config)
	ORYX.Config = {};

ORYX.Plugins.Simulation = Clazz.extend({
	construct: function(facade){
		this.facade = facade;

        if(!(ORYX.READONLY == true || ORYX.VIEWLOCKED == true)) {
            this.facade.offer({
                'name': ORYX.I18N.View.sim.processPathsTitle,
                'functionality': this.findPaths.bind(this),
                'group': "validationandsimulation",
                'icon': ORYX.BASE_FILE_PATH + "images/path.png",
                dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/simulation.png",
                'description': ORYX.I18N.View.sim.processPaths,
                'index': 1,
                'minShape': 0,
                'maxShape': 0,
                'isEnabled': function(){
                    return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
    //				profileParamName = "profile";
    //				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    //				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
    //		        regexa = new RegExp( regexSa );
    //		        profileParams = regexa.exec( window.location.href );
    //		        profileParamValue = profileParams[1];
    //				return profileParamValue == "jbpm";
                }.bind(this)
            });

            this.facade.offer({
                'name': ORYX.I18N.View.sim.runSim,
                'functionality': this.runSimulation.bind(this),
                'group': "validationandsimulation",
                'icon': ORYX.BASE_FILE_PATH + "images/control_play.png",
                dropDownGroupIcon : ORYX.BASE_FILE_PATH + "images/simulation.png",
                'description': ORYX.I18N.View.sim.runSim,
                'index': 2,
                'minShape': 0,
                'maxShape': 0,
                'isEnabled': function(){
                    return !(ORYX.READONLY == true || ORYX.VIEWLOCKED == true);
    //				profileParamName = "profile";
    //				profileParamName = profileParamName.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    //				regexSa = "[\\?&]"+profileParamName+"=([^&#]*)";
    //		        regexa = new RegExp( regexSa );
    //		        profileParams = regexa.exec( window.location.href );
    //		        profileParamValue = profileParams[1];
    //				return profileParamValue == "jbpm";
                }.bind(this)
            });
        }
		this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SIMULATION_BUILD_PATH_SVG, this.autoDisplayPath.bind(this));
		this.facade.registerOnEvent(ORYX.CONFIG.EVENT_SIMULATION_CLEAR_PATH_SVG, this.resetNodeColors.bind(this));
	},
	autoDisplayPath : function(options) {
		if(options && options.pid) {
			var pathid = options.pid;

            this.facade.raiseEvent({
                type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                ntype		: 'info',
                msg         : ORYX.I18N.View.sim.creatingPathImage,
                title       : ''

            });

			Ext.Ajax.request({
	            url: ORYX.PATH + 'simulation',
	            method: 'POST',
	            success: function(response) {
	    	   		try {
	    	   			if(response.responseText && response.responseText.length > 0) {
	    	   				var pathjson = response.responseText.evalJSON();
	    	   				var pathobj = pathjson["paths"];
	    	   				for(var key in pathobj) {
	    	   					if(key == pathid) {
	    	   						var color = this.getDisplayColor(0);
	    	   						var val = pathobj[key];
		    	   		    		this.setNodeColors(key, color, val);
	    	   					}
	    	   				}
	    	   				this.facade.raiseEvent({
	    	   		            type: ORYX.CONFIG.EVENT_SIMULATION_PATH_SVG_GENERATED
	    	   				});
	    	   			} else {
                               this.facade.raiseEvent({
                                   type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                                   ntype		: 'error',
                                   msg         : ORYX.I18N.View.sim.errorInvalidData,
                                   title       : ''

                               });
	    	   			}
	    	   		} catch(e) {
                           this.facade.raiseEvent({
                               type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                               ntype		: 'error',
                               msg         : ORYX.I18N.View.sim.errorFindingPath+':\n' + e,
                               title       : ''

                           });
	    	   		}
	            }.bind(this),
	            failure: function(){
                    this.facade.raiseEvent({
                        type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                        ntype		: 'error',
                        msg         : ORYX.I18N.View.sim.errorFindingPath + '.',
                        title       : ''

                    });
	            },
	            params: {
	            	action: 'getpathinfo',
	            	profile: ORYX.PROFILE,
	            	json: ORYX.EDITOR.getSerializedJSON(),
	            	ppdata: ORYX.PREPROCESSING,
	            	sel: ""
	            }
	        });
		} else {
            this.facade.raiseEvent({
                type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
                ntype		: 'error',
                msg         : ORYX.I18N.View.sim.errorUnknownPathId,
                title       : ''

            });
		}
	},
	findPaths: function() {
        this.facade.raiseEvent({
            type 		: ORYX.CONFIG.EVENT_NOTIFICATION_SHOW,
            ntype		: 'info',
            msg         : ORYX.I18N.View.sim.calculatingPaths,
            title       : ''

        });

		var selection = this.facade.getSelection();
		var selectedId = "";
		var wintitle = ORYX.I18N.View.sim.processPathsTitle;
		if(selection.length == 1) {
			selection.each(function(shape) {
				if(shape.getStencil().title() == "Embedded" || shape.getStencil().title() == "Event") {
					selectedId = shape.resourceId;
					wintitle = ORYX.I18N.View.sim.subProcessPathsTitle;
				}
			});
		} 
		
		Ext.Ajax.request({
            url: ORYX.PATH + 'simulation',
            method: 'POST',
            success: function(response) {
    	   		try {
    	   			if(response.responseText && response.responseText.length > 0) {
    	   				var pathjson = response.responseText.evalJSON();
    	   				var pathobj = pathjson["paths"];
    	   				var ProcessPathsDef = Ext.data.Record.create([{
    	   		            name: 'display'
    	   		        }, {
    	   		        	name: 'numele'
    	   		        }, {
    	   		            name: 'pid'
    	   		        }]);
    	   		    	
    	   		    	var processpathsProxy = new Ext.data.MemoryProxy({
    	   		            root: []
    	   		        });
    	   		    	
    	   		    	var processpathsStore = new Ext.data.Store({
    	   		    		autoDestroy: true,
    	   		            reader: new Ext.data.JsonReader({
    	   		                root: "root"
    	   		            }, ProcessPathsDef),
    	   		            proxy: processpathsProxy,
    	   		            sorters: [{
    	   		                property: 'display',
    	   		                direction:'ASC'
    	   		            }]
    	   		        });
    	   		    	processpathsStore.load();
    	   		    	
    	   		    	var cindex = 0;
    	   		    	for(var key in pathobj) {
    	   		    		var val = pathobj[key];
    	   		    		var valParts = val.split("|");
    	   		    		processpathsStore.add(new ProcessPathsDef({
    	   		    			display: this.getDisplayColor(cindex),
    	   		    			numele: valParts.length,
                                pid: key
                            }));
    	   		    		cindex++;
    	   		    	}
    	   		    	processpathsStore.commitChanges();

						var dialogSize = ORYX.Utils.getDialogSize(200, 330);
						var smallColWidth = (dialogSize.width - 80) / 5;
    		            var gridId = Ext.id();
    		        	var grid = new Ext.grid.EditorGridPanel({
    		                store: processpathsStore,
    		                id: gridId,
    		                stripeRows: true,
    		                cm: new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), {
    		                	id: 'display',
    		                    header: ORYX.I18N.View.sim.dispColor,
    		                    width: smallColWidth * 2,
    		                    dataIndex: 'display',
    		                    renderer: function(val) {
		                    	  if(val) { 
		                    		return '
'; } else { return "
None
"; } } }, { id: 'numele', header: ORYX.I18N.View.sim.numElements, width: smallColWidth * 3, dataIndex: 'numele', renderer: function(val) { if(val) { return '
' + val + '
'; } else { return "
0
"; } } }]), autoHeight: true }); var processPathsPanel = new Ext.Panel({ id: 'processPathsPanel', title: '
' + ORYX.I18N.View.sim.select + wintitle + ' ' + ORYX.I18N.View.sim.display + '
', layout:'column', items:[ grid ], layoutConfig: { columns: 1 }, defaults: { columnWidth: 1.0 } }); var dialog = new Ext.Window({ layout : 'anchor', autoCreate : true, title : wintitle, height : dialogSize.height, width : dialogSize.width, modal : true, collapsible : false, fixedcenter : true, shadow : true, resizable : true, proxyDrag : true, autoScroll : true, keys:[{ key : 27, fn : function(){ dialog.hide(); }.bind(this) }], items :[processPathsPanel], listeners :{ hide: function(){ this.resetNodeColors(); dialog.destroy(); }.bind(this) }, buttons : [{ text: ORYX.I18N.View.sim.showPath, handler: function(){ if(grid.getSelectionModel().getSelectedCell() != null) { var selectedIndex = grid.getSelectionModel().getSelectedCell()[0]; var outValue = processpathsStore.getAt(selectedIndex).data['pid']; this.setNodeColors(outValue, this.getDisplayColor(selectedIndex), pathobj[outValue]); } else { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.View.sim.selectPath, title : '' }); } }.bind(this) }, { text: ORYX.I18N.Save.close, handler: function(){ this.resetNodeColors(); dialog.hide(); }.bind(this) }] }); dialog.show(); } else { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.View.sim.errorInvalidData, title : '' }); } } catch(e) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.View.sim.errorFindingPath+':\n' + e, title : '' }); } }.bind(this), failure: function(){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.View.sim.errorFindingPath+'.', title : '' }); }, params: { action: 'getpathinfo', profile: ORYX.PROFILE, json: ORYX.EDITOR.getSerializedJSON(), ppdata: ORYX.PREPROCESSING, sel: selectedId } }); }, getDisplayColor : function(cindex) { var colors = ["#3399FF", "#FFCC33", "#FF99FF", "#6666CC", "#CCCCCC", "#66FF00", "#FFCCFF", "#0099CC", "#CC66FF", "#FFFF00", "#993300", "#0000CC", "#3300FF","#990000","#33CC00"]; return colors[cindex]; }, setDefaultColors : function() { ORYX.EDITOR._canvas.getChildren().each((function(child) { this.setDefaultValues(child); }).bind(this)); }, setDefaultValues : function(shape) { if(shape instanceof ORYX.Core.Node || shape instanceof ORYX.Core.Edge) { shape.setProperty("oryx-bordercolor", shape.properties["oryx-origbordercolor"]); shape.setProperty("oryx-bgcolor", shape.properties["oryx-origbgcolor"]); } shape.refresh(); if(shape.getChildren().size() > 0) { for (var i = 0; i < shape.getChildren().size(); i++) { if(shape.getChildren()[i] instanceof ORYX.Core.Node || shape.getChildren()[i] instanceof ORYX.Core.Edge) { this.setDefaultValues(shape.getChildren()[i]); } } } }, resetNodeColors : function() { ORYX.EDITOR._canvas.getChildren().each((function(child) { this.setOriginalValues(child); }).bind(this)); }, setOriginalValues : function(shape) { if(shape instanceof ORYX.Core.Node || shape instanceof ORYX.Core.Edge) { if (shape.savedbordercolor !== undefined) { shape.setProperty("oryx-bordercolor", shape.savedbordercolor); delete shape.savedbordercolor; } if (shape.savedbgcolor !== undefined) { shape.setProperty("oryx-bgcolor", shape.savedbgcolor); delete shape.savedbgcolor; } } shape.refresh(); if(shape.getChildren().size() > 0) { for (var i = 0; i < shape.getChildren().size(); i++) { if(shape.getChildren()[i] instanceof ORYX.Core.Node || shape.getChildren()[i] instanceof ORYX.Core.Edge) { this.setOriginalValues(shape.getChildren()[i]); } } } }, saveNodeColors : function() { ORYX.EDITOR._canvas.getChildren().each((function(child) { this.saveOriginalValues(child); }).bind(this)); }, saveOriginalValues : function(shape) { if(shape instanceof ORYX.Core.Node || shape instanceof ORYX.Core.Edge) { if (shape.savedbordercolor === undefined) { shape.savedbordercolor = shape.properties["oryx-bordercolor"]; } if (shape.savedbgcolor === undefined) { shape.savedbgcolor = shape.properties["oryx-bgcolor"]; } } if(shape.getChildren().size() > 0) { for (var i = 0; i < shape.getChildren().size(); i++) { if(shape.getChildren()[i] instanceof ORYX.Core.Node || shape.getChildren()[i] instanceof ORYX.Core.Edge) { this.saveOriginalValues(shape.getChildren()[i]); } } } }, setNodeColors : function(pathid, pathcolor, pathelements) { this.saveNodeColors(); this.setDefaultColors(); ORYX.EDITOR._canvas.getChildren().each((function(child) { this.applyPathColors(child, pathcolor, pathelements); }).bind(this)); }, applyPathColors : function(shape, color, elements) { var elementsParts = elements.split("|"); if(shape instanceof ORYX.Core.Node || shape instanceof ORYX.Core.Edge) { for(var i=0; i < elementsParts.length; i++) { var nextPart = elementsParts[i]; if(shape.resourceId == nextPart) { shape.setProperty("oryx-bordercolor", color); shape.setProperty("oryx-bgcolor", color); } } } shape.refresh(); if(shape.getChildren().size() > 0) { for (var i = 0; i < shape.getChildren().size(); i++) { if(shape.getChildren()[i] instanceof ORYX.Core.Node || shape.getChildren()[i] instanceof ORYX.Core.Edge) { this.applyPathColors(shape.getChildren()[i], color, elements); } } } }, runSimulation : function() { var dialogSize = ORYX.Utils.getDialogSize(300, 350); var labelWidth = dialogSize.width / 2; var fieldWidth = dialogSize.width / 3; var simform = new Ext.form.FormPanel({ baseCls: 'x-plain', labelWidth: labelWidth, defaultType: 'numberfield', items: [{ fieldLabel: ORYX.I18N.View.sim.numInstances, name: 'instances', allowBlank:false, allowDecimals:false, minValue:1, width: fieldWidth }, { fieldLabel: ORYX.I18N.View.sim.interval, name: 'interval', allowBlank:false, allowDecimals:false, minValue:1, width: fieldWidth }, { xtype: 'combo', name: 'intervalunits', store: new Ext.data.SimpleStore({ fields: ['units','value'], data: [['millisecond',ORYX.I18N.LocalHistory.unitsMillisecond], ['seconds',ORYX.I18N.LocalHistory.unitsSeconds], ['minutes',ORYX.I18N.LocalHistory.unitsMinutes], ['hours',ORYX.I18N.LocalHistory.unitsHours], ['days',ORYX.I18N.LocalHistory.unitsDays]] }), allowBlank: false, displayField: 'value', valueField: 'units', mode: 'local', typeAhead: true, value: "minutes", triggerAction: 'all', fieldLabel: ORYX.I18N.View.sim.intervalUnits, width: fieldWidth } ] }); var dialog = new Ext.Window({ autoCreate: true, layout: 'fit', plain: true, bodyStyle: 'padding:5px;', title: ORYX.I18N.View.sim.runSim, height: dialogSize.height, width: dialogSize.width, modal: true, fixedcenter:true, shadow: true, proxyDrag: true, resizable: true, items: [simform], buttons:[ { text: ORYX.I18N.View.sim.runSim, handler:function(){ dialog.hide(); this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'info', msg : ORYX.I18N.View.sim.runningSim, title : '' }); var instancesInput = simform.items.items[0].getValue(); var intervalInput = simform.items.items[1].getValue(); var intervalUnit = simform.items.items[2].getValue(); Ext.Ajax.request({ url: ORYX.PATH + 'simulation', method: 'POST', success: function(response) { try { if(response.responseText && response.responseText.length > 0 && response.status == 200) { this.facade.raiseEvent({ type: ORYX.CONFIG.EVENT_SIMULATION_SHOW_RESULTS, results: response.responseText }); } else { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.View.sim.simNoResults + response.statusText, title : '' }); } } catch(e) { this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.View.sim.unableToPerform + e, title : '' }); } }.bind(this), failure: function(response){ this.facade.raiseEvent({ type : ORYX.CONFIG.EVENT_NOTIFICATION_SHOW, ntype : 'error', msg : ORYX.I18N.View.sim.unableToPerform + response.responseText, title : '' }); }.bind(this), params: { action: 'runsimulation', profile: ORYX.PROFILE, json: ORYX.EDITOR.getSerializedJSON(), ppdata: ORYX.PREPROCESSING, numinstances: instancesInput, interval: intervalInput, intervalunit: intervalUnit } }); }.bind(this) },{ text: ORYX.I18N.Save.close, handler:function(){ dialog.hide(); }.bind(this) } ] }); // Destroy the panel when hiding dialog.on('hide', function(){ dialog.destroy(true); delete dialog; }); // Show the panel dialog.show(); } });




© 2015 - 2025 Weber Informatics LLC | Privacy Policy