var pdbFile; var job; var SERVICEURI; function setIndex( id , val ) { document.getElementById( id ).selectedIndex = val ; } function init( ) { try{ if( selfInfo != null ) { var p = selfInfo.wsdl_uri; var k = p.lastIndexOf( "?" ); if( k > -1 ) { SERVICEURI = p.substring( 0, k ); } else SERVICEURI = p; document.getElementById( "pdb2pqr-desc" ).value = "PDB2PQR: " + SERVICEURI; } }catch( e ){ alert( e ); } } function shutdown() { } /***** Job Running/Creating *****/ function run( ) { try{ if( pdbFile == null ) { alert( "Error: select PDB file first" ); return; } updateStatusMessage( "" ); updateOutputDisplay( "reset" ); updateProgress( "reset" ); var env = createInput( ); if( jobManager != null ) { job = jobManager.createJob( ); } else job = new Job( ); job.open( SERVICEURI , true, "opal" , "Pdb2Pqr"); job.addListener( "onjoblaunched" , responseHandler) ; job.addListener( "onjobquery" , responseHandler) ; job.addListener( "onjobcompletion" , responseHandler) ; job.addListener( "onjoberror" , responseHandler) ; job.addListener( "onjobaborted" , responseHandler) ; job.addNamespace( "default" , "http://nbcr.sdsc.edu/opal/types" ); var rv; if( jobManager != null ) { rv = jobManager.addJob( job ); if( rv ) job.launch( env ); } else job.launch( env ); disableInput( ); }catch( e ){ trace( "runPdb2pqr: " + e ); alert( "runPdb2pqr: " + e ); } } function createInput( ) { var argList = ""; if( document.getElementById( "debump" ).checked ) argList += "--nodebump " if( document.getElementById( "hydrogens" ).checked ) argList += "--noopt " if( document.getElementById( "propka" ).checked ) { argList += "--with-ph=" + document.getElementById( "ph_val" ).value + " "; } argList += "--ff=" + document.getElementById( "forcefield" ).selectedItem.value + " "; argList += pdbFile.getLeaf( )+ " "; argList += pdbFile.getLeaf( ).substring( 0 , pdbFile.getLeaf( ).lastIndexOf( ".pdb" ) ) + ".pqr" + " "; pdbFile.open( "r" ); var content = pdbFile.readBase64( ); var msg = new Array( 14 ); msg[1] = '
' + '\n'; msg[2] = '
' ; msg[3] = argList; msg[4] = '
' + '\n'; msg[5] = '
' ; msg[6] = '
'; msg[7] = pdbFile.leaf; msg[8] = "
"; msg[9] = '
'; msg[10] = content; msg[11] = "
"; msg[12] = '
' ; msg[13] = '
'; return msg.join( "" ); } /***** Job Handling *****/ function responseHandler( type , responseState ) { try{ if( type == "onjobquery" ) { updateStatusMessage( job.getStatusMessage( ) ); } else if( type == "onjoblaunched" ) { updateProgress( "start" ); updateStatusMessage( job.getStatusMessage( ) ); } else if( type == "onjobcompletion" ) { enableInput(); updateStatusMessage( job.getStatusMessage( ) ); updateProgress( "finished" ); updateOutputDisplay( "set", responseState.responseText ); } else if( (type == "onjobaborted") || (type == "onjoberror") ) { enableInput(); updateProgress( "finished" ); updateStatusMessage( job.getStatusMessage( ) ); } }catch( e ){ trace( "PDB2PQR: " + e ); alert( "PDB2PQR: " + e ); } } function updateOutputDisplay( mode , txt ) { try{ if( mode == "reset" ) { var outRows = geid( "output-rows" ); while( outRows.hasChildNodes() == true ) { outRows.removeChild( outRows.firstChild ); } return; } else if( mode == "set" ) { var doc = new DOMParser().parseFromString(txt, 'text/xml'); var outRows = geid( "output-rows" ); var outVars = [ "stdOut" , "stdErr" , "outputFile" ]; for( var k = 0; k < outVars.length; k++ ) { var nodes = xPathSearch( doc, '//' + outVars[ k ] ); var name; var url; for( var i = 0; i < nodes.length; i++ ) { var row = document.createElement("row"); var lbl = document.createElement("label"); var btn = document.createElement("button"); var btn2 = document.createElement("button"); try{ if( nodes[ i ].nodeName == "outputFile" ) { name = nodes[ i ].firstChild.lastChild.nodeValue; url = nodes[ i ].lastChild.firstChild.nodeValue; } else { name = outVars[ k ]; url = nodes[ i ].firstChild.nodeValue; } }catch( e ){ } lbl.setAttribute( "value" , name ); var btn = document.createElement("button"); btn.setAttribute( "label" , "Open..." ); btn.setAttribute( "oncommand" , 'openExternalURI("' + url +'")' ); btn2.setAttribute( "v" , url ); btn2.setAttribute( "label" , "Save..." ); btn2.setAttribute( "oncommand" , 'saveOutputFile(event);'); btn2.setAttribute( "ondraggesture", "nsDragAndDrop.startDrag(event,outputFileObserver);" ); row.appendChild( lbl ); row.appendChild( btn ); row.appendChild( btn2 ); outRows.appendChild( row ); } setIndex("pdb2pqr-content-tabpanels" , 1 ); setIndex("pdb2pqr-content-tabs" , 1 ); } } }catch( e ){ trace( "updateOutputDisplay: " + e ); alert( "updateOutputDisplay: " + e ); } } function updateStatusMessage( msg ) { document.getElementById("status-message").value = msg; } function updateProgress( action ) { if( action == "reset" ) { document.getElementById("progress-meter").setAttribute( "mode" , "determined"); document.getElementById("progress-meter").value = 0; } else if( action == "start" ) { document.getElementById("progress-meter").setAttribute( "mode" , "undetermined"); } else if( action == "finished" ) { document.getElementById("progress-meter").setAttribute( "mode" , "determined"); document.getElementById("progress-meter").value = 100; } } function enableInput( ) { document.getElementById( "run-btn" ).removeAttribute( "disabled" ); } function disableInput( ) { document.getElementById( "run-btn" ).setAttribute( "disabled" , "true"); } /***** User Interaction *****/ function togglePropka( ) { if( document.getElementById( "propka" ).checked ) { document.getElementById( "ph" ).removeAttribute( "hidden" ); document.getElementById( "ph_val" ).removeAttribute( "hidden" ); } else { document.getElementById( "ph" ).setAttribute( "hidden" , "true" ); document.getElementById( "ph_val" ).setAttribute( "hidden" , "true" ); } } function selectPdb( mode, path ) { try{ var filepath; if( mode == "drag" ) { filepath = path; } else { var fp = showFilePicker( "modeOpen" , "Select PDB" ); if( fp == null ) return; else filepath = fp.filePath; } pdbFile = new File( filepath ); document.getElementById( "pdb-txt" ).value = pdbFile.getLeaf( ); }catch( e ){ trace( "PDB2PQR: " + e ); alert( "PDB2PQR: " + e ); } } function saveOutputFile( event ) { var url = event.explicitOriginalTarget.getAttribute( "v" ); var fileName = url.substring( url.lastIndexOf( "/" ) + 1 ); var rv = showFilePicker( "modeSave" , "Save Output File", null, fileName ); downloadWithManager( url, new File( rv.file) ); } /***** Drag & Drop *****/ var dropObserver = { getSupportedFlavours : function () { var flavours = new FlavourSet(); flavours.appendFlavour("text/unicode"); return flavours; }, onDragOver: function (evt,flavour,session) { if( evt.explicitOriginalTarget.tagName.indexOf( "textbox" ) != -1 ) session.canDrop = false; }, onDrop: function (evt,dropdata,session){ var dest = evt.currentTarget.tagName; if( dest == "textbox" ) return; if (dropdata.data!=""){ var data = getFilepathFromURL( dropdata.data ); selectPdb( "drag" , data ); } } }; var outputFileObserver = { onDragStart: function (evt,transferData,action){ var path = evt.target.getAttribute( 'v' ); transferData.data=new TransferData(); transferData.data.addDataForFlavour("text/unicode",path); } };