org.jbpm.designer.public.js.Plugins.ibpmn2bpmn.js Maven / Gradle / Ivy
/**
* Copyright (c) 2008
* Willi Tscheschner
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
**/
if(!ORYX.Plugins)
ORYX.Plugins = new Object();
/**
* Supports EPCs by offering a syntax check and export and import ability..
*
*
*/
ORYX.Plugins.IBPMN2BPMN = Clazz.extend({
facade: undefined,
TransformServletURL: './ibpmn2bpmn',
/**
* Offers the plugin functionality:
*
*/
construct: function(facade) {
this.facade = facade;
this.facade.offer({
'name': "Transform from iBPMN to BPMN",
'functionality': this.transform.bind(this),
'group': "Transform",
'icon': ORYX.BASE_FILE_PATH + "images/erdf_export_icon.png",
'description': "Transformation from iBPMN to BPMN",
'index': 0,
'minShape': 0,
'maxShape': 0
});
},
/**
* Imports an AML description
*
*/
transform: function(){
this._showImportDialog();
},
/**
*
*
* @param {Object} url
* @param {Object} params
* @param {Object} successcallback
*/
sendRequest: function( url, params, successcallback, failedcallback ){
var suc = false;
new Ajax.Request(url, {
method : 'POST',
asynchronous : false,
parameters : params,
onSuccess : function(transport) {
suc = true;
if(successcallback){
successcallback( transport.responseText )
}
}.bind(this),
onFailure : function(transport) {
if(failedcallback){
failedcallback( );
} else {
Ext.Msg.alert(ORYX.I18N.Oryx.title, ORYX.I18N.ERDFSupport.impFailed);
ORYX.log.warn("Transform failed: " + transport.responseText);
}
}.bind(this)
});
return suc;
},
transformToBPMN: function( rdfString, success, failed ){
var s = rdfString;
s = s.startsWith(''+s+'';
var parser = new DOMParser();
var doc = parser.parseFromString( s ,"text/xml");
if( doc.firstChild.tagName == "parsererror" ){
Ext.MessageBox.show({
title: "Parse Error",
msg: "The given RDF is not xml valid.",
buttons: Ext.MessageBox.OK,
icon: Ext.MessageBox.ERROR
});
if(failed)
failed();
} else {
/**
* SUCCESSCALLBACK for positive return while transformation
*
*/
var transformSuccessCallback = function( e ){
e = ''+e+'';
var parser = new DOMParser();
var doc = parser.parseFromString( e ,"text/xml");
this.facade.importERDF( doc );
}.bind(this);
var xsl = "";
source=ORYX.PATH + "lib/extract-rdf.xsl";
new Ajax.Request(source, {
asynchronous: false,
method: 'get',
onSuccess: function(transport){
xsl = transport.responseText
}.bind(this),
onFailure: (function(transport){
ORYX.Log.error("XSL load failed" + transport);
}).bind(this)
});
var parser = new DOMParser();
var parsedDOM = parser.parseFromString(s, "text/xml");
var xslObject = domParser.parseFromString(xsl, "text/xml");
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xslObject);
try {
var rdf = xsltProcessor.transformToFragment(parsedDOM, document);
var serialized_rdf = (new XMLSerializer()).serializeToString(rdf);
if (!serialized_rdf.startsWith("" + serialized_rdf;
}
// Send request
this.sendRequest( this.TransformServletURL, {data:serialized_rdf}, transformSuccessCallback)
}catch(e){}
if(success)
success();
}
},
/**
* Opens a upload dialog.
*
*/
_showImportDialog: function( successCallback ){
var form = new Ext.form.FormPanel({
baseCls: 'x-plain',
labelWidth: 50,
defaultType: 'textfield',
items: [{
text : ORYX.I18N.ERDFSupport.selectFile,
style : 'font-size:12px;margin-bottom:10px;display:block;',
anchor: '100%',
xtype : 'label'
},{
fieldLabel: ORYX.I18N.ERDFSupport.file,
name: 'subject',
inputType : 'file',
style : 'margin-bottom:10px;display:block;',
itemCls : 'ext_specific_window_overflow'
}, {
xtype: 'textarea',
hideLabel: true,
name: 'msg',
anchor: '100% -63'
}]
});
// Create the panel
var dialog = new Ext.Window({
autoCreate: true,
layout: 'fit',
plain: true,
bodyStyle: 'padding:5px;',
title: ORYX.I18N.ERDFSupport.impERDF,
height: 350,
width: 500,
modal: true,
fixedcenter:true,
shadow: true,
proxyDrag: true,
resizable: true,
items: [form],
buttons:[
{
text:ORYX.I18N.ERDFSupport.impBtn,
handler:function(){
var loadMask = new Ext.LoadMask(Ext.getBody(), {msg:ORYX.I18N.ERDFSupport.impProgress});
loadMask.show();
window.setTimeout(function(){
var rdfString = form.items.items[2].getValue();
this.transformToBPMN(rdfString, function(){loadMask.hide();dialog.hide()}.bind(this), function(){loadMask.hide();}.bind(this))
}.bind(this), 100);
}.bind(this)
},{
text:ORYX.I18N.ERDFSupport.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();
// Adds the change event handler to
form.items.items[1].getEl().dom.addEventListener('change',function(evt){
var text = evt.target.files[0].getAsBinary();
form.items.items[2].setValue( text );
}, true)
}
});
© 2015 - 2025 Weber Informatics LLC | Privacy Policy