From d7cf619df76ef52addcfe258340e25eb9f52711f Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Tue, 21 Oct 2008 09:13:46 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/vre-management/VREModeler@5148 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../vremodeler/db/IStoDBUtil.java | 685 ++++++++++++++++++ 1 file changed, 685 insertions(+) create mode 100644 src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java diff --git a/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java b/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java new file mode 100644 index 0000000..cdc9c9d --- /dev/null +++ b/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java @@ -0,0 +1,685 @@ +package org.gcube.vremanagement.vremodeler.db; + +import java.io.StringReader; +import java.rmi.RemoteException; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.apache.axis.components.uuid.UUIDGen; +import org.apache.axis.components.uuid.UUIDGenFactory; +import org.apache.axis.message.addressing.AttributedURI; +import org.apache.axis.message.addressing.EndpointReferenceType; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.gcube.common.core.contexts.GHNContext; +import org.gcube.common.core.faults.GCUBEFault; +import org.gcube.common.core.informationsystem.client.ISClient; +import org.gcube.common.core.informationsystem.client.ISQuery; +import org.gcube.common.core.informationsystem.client.queries.GCUBECollectionQuery; +import org.gcube.common.core.resources.GCUBECollection; +import org.gcube.common.core.resources.GCUBEResource; +import org.gcube.common.core.scope.GCUBEScope; +import org.gcube.common.core.utils.logging.GCUBELog; +import org.gcube.vremanagement.vremodeler.impl.ModelFactoryService; +import org.globus.axis.gsi.GSIConstants; +import org.gridforum.jgss.ExtendedGSSCredential; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +public class IStoDBUtil { + + private static UUIDGen uuidMFGEN=UUIDGenFactory.getUUIDGen(); + + private static GCUBELog logger = new GCUBELog(IStoDBUtil.class.getName()); + + private static ISClient queryClient; + /** + * Itialize all database tables + * + * @param epr + */ + public static void initDB(EndpointReferenceType epr, ExtendedGSSCredential cred) throws RemoteException{ + + cleanDB(); + insertCollection(epr, cred); + //logger.debug("initialization: collection"); + insertMetadataCollection(epr, cred); + //logger.debug("initialization: metadata"); + insertCS(epr, cred); + //logger.debug("initialization: cs"); + insertServices(epr, cred); + insertDHN(epr, cred); + //logger.debug("initialization: DHN"); + } + + private static void cleanDB() throws RemoteException + { + try{ + DBInterface.connect(); + DBInterface.deleteAll("DLRELATEDCOLLECTION"); + DBInterface.deleteAll("DLRELATEDCS"); + DBInterface.deleteAll("DLRELATEDMETADATAFORMAT"); + DBInterface.deleteAll("DLRELATEDFUNCT"); + DBInterface.deleteAll("DLRELATEDDHN"); + DBInterface.deleteAll("DL"); + DBInterface.deleteAll("nativemdf"); + DBInterface.deleteAll("derivablemdf"); + DBInterface.deleteAll("mdformat"); + DBInterface.deleteAll("mdcollection"); + DBInterface.deleteAll("collection"); + DBInterface.deleteAll("relatedserviceid"); + DBInterface.deleteAll("dhn"); + DBInterface.deleteAll("runninginstance"); + DBInterface.deleteAll("dhnrelatedri"); + DBInterface.deleteAll("cs"); + }catch (SQLException e){//logger.error("error cleaning DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + + } + + + + /** + * + * @param results + */ + /* + private static String[][] parseResults(String results, String tag) throws RemoteException{ + + ArrayList returnedValues= new ArrayList(); + ArrayList tempArray; + + + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + + DocumentBuilder builder; + try { + builder = factory.newDocumentBuilder(); + + + StringReader reader = new StringReader(results); + InputSource source = new InputSource(reader); + Document domDoc; + domDoc = builder.parse(source); + Element child, subChild; + Element root= domDoc.getDocumentElement(); + NodeList childRoot= root.getElementsByTagName(tag); + if (childRoot.getLength()==0) return null; + for (int i=0; i(); + for (int k=0; k makeQueryDIS(GCUBEScope scope, ISQuery query) throws GCUBEFault{ + + try{ + if (queryClient==null) queryClient= GHNContext.getImplementation(ISClient.class); + GCUBEResource + + + }catch (Exception e ) {logger.error("error querying IS"); throw new GCUBEFault(e);} + //GeneralQueryManager q; + + + String results= null; + /* + try { + DISHLSClient.init(); + q= DISHLSClient.getGeneralQueryManager(cred, epr); + results= q.queryDISIC(query, cred, epr); + } catch (Exception e1) { + //logger.error("VDL Model Service: error initializing database"); + throw new RemoteException(e1.getMessage(), e1); + } + + return results; + } + */ + + /** + * + * @param epr + * @throws RemoteException + */ + private static void insertCollection(GCUBEScope scope) throws GCUBEFault { + + List collectionList= null; + try{ + if (queryClient==null) queryClient= GHNContext.getImplementation(ISClient.class); + GCUBECollectionQuery query= queryClient.getQuery(GCUBECollectionQuery.class); + collectionList= queryClient.execute(query, scope); + }catch(Exception e ){logger.error("Error queryng IS"); throw new GCUBEFault(e); } + + try{ + if (collectionList.size()!=0){ + DBInterface.connect(); + DBInterface.InsertInto("collection", collectionList, false); + } + }catch (SQLException e){//logger.error("VDLModel: DB error "+e.getMessage()); + throw new GCUBEFault(e); } + } + + + private static String[] ParseTP(String[] tp){ + //logger.debug("ParseTP start"); + + String[] schemaNameURI=tp[1].split("="); + String lng="anylanguage"; + //logger.debug("MetadataFormatParsed: "+schemaNameURI[0]+ ", "+schemaNameURI[1]+", "+lng); + return new String[]{tp[0],schemaNameURI[0],schemaNameURI[1],lng}; + } + + /** + * + * @param item + * @param container + * @return + */ + private static String ContainsControl(String[] item, ArrayList container){ + for(String[] cont: container){ + //logger.debug("MDFormat: "+cont[1]+" "+cont[2]); + //logger.debug("MDFormat: confr "+cont[1]+" "+cont[2]); + if((cont[1].compareTo(item[1])==0) && (cont[2].compareTo(item[2])==0)) //&& ((cont[3].compareTo("anylanguage")==0) || cont[3].compareTo(item[3])==0) + return cont[0]; + + } + //logger.debug("MDFormat: not yet present"); + return null; + } + + /** + * + * @param epr + * @throws RemoteException + */ + private static void insertMetadataCollection(EndpointReferenceType epr, ExtendedGSSCredential cred) throws RemoteException { + ResultSet res=null; + String tempQuery=""; + try { + DBInterface.connect(); + res = DBInterface.queryDB("select id from collection"); + while(res.next()) + tempQuery+=" $CollectionProfile/Profile/RelatedCollection/CollectionID/string() eq '"+res.getString(1)+"' or "; + tempQuery=tempQuery.substring(0, tempQuery.length()-4); + } catch (SQLException e1) { + //logger.error("VDLModel: initialization error on inserMetadataCollection"); + throw new RemoteException("VDLModel: initialization error on inserMetadataCollection",e1); + } + + + String MDcollectionQuery= "for $CollectionProfile in collection(\"/db/Profiles/MetadataCollection\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where "+tempQuery+" return {$CollectionProfile/UniqueID/string()}{$CollectionProfile/Profile/Name/string()}{$CollectionProfile/Profile/Description/string()}{$CollectionProfile/Profile/RelatedCollection/CollectionID/string()}"; + String results=makeQueryDIS(epr, cred, MDcollectionQuery); + ArrayList MDFormatArray=new ArrayList(); + ArrayList MDNativeArray=new ArrayList(); + ArrayList MDDerivableArray=new ArrayList(); + String[][] resultsParsed= parseResults(results, "r"); + String uuid; + String metadataFormatQuery; + String[] singleNativeMDF; + String[] singleDerivableMDF; + /* + MetadataBrokerPortType metadataBroker=null; + MetadataBrokerServiceAddressingLocator mbLoc; + boolean brokerConnected=true; + + //connecting to metadata broker service + try{ + RunningInstanceManager ri=DISHLSClient.getRunningInstanceManager(cred, epr); + + String[] eprs= ri.getEPRsRIFromClassAndName("MetadataManagement", "MetadataBrokerService", "diligentproject/metadatamanagement/metadatabrokerservice", cred, epr); + + + + EndpointReferenceType eprTemp= new EndpointReferenceType(); + eprTemp.setAddress(new AttributedURI(eprs[0])); + + //metadata Broker Service connection + mbLoc = new MetadataBrokerServiceAddressingLocator() ; + + metadataBroker=mbLoc.getMetadataBrokerPortTypePort(eprTemp); + + if (ModelFactoryService.isSecurityEnabled){ + ConfigureSecurity.setSecurity(((javax.xml.rpc.Stub) metadataBroker), true, cred, GSIConstants.GSI_MODE_FULL_DELEG ); + } + + + + }catch(Exception e){ + logger.error("error contacting metadata broker Service "+e.getMessage()); + //e.printStackTrace(); + brokerConnected=false; + } + */ + for(String[] singleColl: resultsParsed) + { + //generate the uid for MetadataFormat + uuid=uuidMFGEN.nextUUID(); + String existID; + //retriving the metadataFormat for the current MDCollection + metadataFormatQuery="for $MetadataFormat in collection(\"/db/Profiles/MetadataCollection\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $MetadataFormat/UniqueID/string() eq '"+singleColl[0]+"' return "+uuid+"{$MetadataFormat/Profile/MetadataFormat/Name/string()}{$MetadataFormat/Profile/MetadataFormat/SchemaURI/string()}{$MetadataFormat/Profile/MetadataFormat/Language/string()}"; + results=makeQueryDIS(epr, cred, metadataFormatQuery); + String[][] resultsMDFParsed= parseResults(results, "r"); + if((existID=ContainsControl(resultsMDFParsed[0], MDFormatArray))==null) + { + MDFormatArray.add(resultsMDFParsed[0]); + existID=uuid; + } + //keep the CollectionID and the MDFID to insert into NAtiveMDF + singleNativeMDF=new String[3]; + singleNativeMDF[0]=singleColl[0]; + singleNativeMDF[1]=existID; + singleNativeMDF[2]=singleColl[3]; //i need it to evaluate doble results + MDNativeArray.add(singleNativeMDF); + + /* + //Retrive Derivable MDF + if (brokerConnected){ + try{ + FindPossibleTransformationPrograms request= new FindPossibleTransformationPrograms(); + TPIOType tpin= TPIOType.fromParams("collection", resultsMDFParsed[0][3],resultsMDFParsed[0][1]+"="+resultsMDFParsed[0][2] , ""); + request.setInputFormat(tpin.toXMLString()); + request.setOutputFormat(null); + FindPossibleTransformationProgramsResponse response=metadataBroker.findPossibleTransformationPrograms(request); + String[] tp=response.getTransformationProgram(); + String[] parsedTP; + logger.debug("VDLModel Derivable : "+tp.length); + for(String singleTP: tp){ + try{ + logger.debug("MDF Derivable : Single tp is parsing "); + parsedTP=ParseTP(singleTP); + if (parsedTP!=null){ + String temp; + //temp will contains the MDF id if it exists + if((temp=ContainsControl(parsedTP, MDFormatArray))==null){ + logger.debug("MDF Derivable : not exist "); + // if it doesn't exists, insert it into database else + //add it only on DerivableMDF with MDFuid + uuid=uuidMFGEN.nextUUID(); + parsedTP[0]=uuid; + MDFormatArray.add(parsedTP); + MDDerivableArray.add(new String[]{singleColl[0], uuid, "nothing"}); + }else{ + MDDerivableArray.add(new String[]{singleColl[0], temp , "nothing"}); + logger.debug("MDF Derivable : exist "); + } + + } + + + }catch(Exception e) {logger.error("error in Derivable MDF parsing "+e.getMessage()); e.printStackTrace();} + } + }catch (Exception e1){logger.error("error retreiving metadataBroker "+e1.getMessage()); + e1.printStackTrace(); + } + } + */ + + //trying to parse TransformationProgram from DIS-IC + existID=null; + String queryDerivableMDF=""; + try{ + queryDerivableMDF="for $tp in collection(\"/db/Profiles/TransformationProgram\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $tp/Profile/TransformationProgram/Input/Type/string() eq 'collection' and $tp/Profile/TransformationProgram/Input/Schema/string() eq '"+resultsMDFParsed[0][1]+"="+resultsMDFParsed[0][2]+"' and $tp/Profile/TransformationProgram/Output/Type/string() eq 'collection' return " + + "{$tp/UniqueID/string()}{$tp/Profile/TransformationProgram/Output/Schema/string()}anylanguage"; + results=makeQueryDIS(epr, cred, queryDerivableMDF); + String[][] resultsDerivableMDFParsed= parseResults(results, "r"); + for (String[] singleMDFDerived: resultsDerivableMDFParsed){ + try{ + String tpID=singleMDFDerived[0]; + uuid=uuidMFGEN.nextUUID(); + singleMDFDerived[0]=uuid; + String[] parsedTP=ParseTP(singleMDFDerived); + if((existID=ContainsControl(parsedTP, MDFormatArray))==null) + { + MDFormatArray.add(parsedTP); + existID=uuid; + } + + singleDerivableMDF=new String[4]; + singleDerivableMDF[0]=singleColl[0]; + singleDerivableMDF[1]=existID; + singleDerivableMDF[2]=tpID; + singleDerivableMDF[3]=singleColl[3]; + MDDerivableArray.add(singleDerivableMDF); + }catch(Exception e1){//logger.error("VDLModel: error parsing derivable"); + e1.printStackTrace();} + + } + }catch(Exception e){//logger.error("VDLModel: error retriving Derivable MDF for collection "+singleColl[0]); + e.printStackTrace();} + + } + + //da cambiare (scandaloso) + ArrayList tempRemove= new ArrayList(); + for(String[] tempDeriv:MDDerivableArray ){ + for (String[] tempNative: MDNativeArray){ + if (tempDeriv[3].compareTo(tempNative[2])==0 && (tempDeriv[1].compareTo(tempNative[1])==0)){ + tempRemove.add(tempDeriv); + //logger.debug("removed Doubled value"); + } + } + } + for (String[] toRemove:tempRemove ) MDDerivableArray.remove(toRemove); + + try{ + DBInterface.connect(); + DBInterface.InsertInto("mdcollection", resultsParsed, false); + DBInterface.InsertInto("mdformat", MDFormatArray.toArray(new String[0][0]), false); + DBInterface.InsertInto("nativemdf", MDNativeArray.toArray(new String[0][0]), true); + DBInterface.InsertInto("derivablemdf",MDDerivableArray.toArray(new String[0][0]), true); + }catch (SQLException e){//logger.error("error DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + + } + + /** + * + * @param epr + * @throws RemoteException + */ + private static void insertCS(EndpointReferenceType epr, ExtendedGSSCredential cred) throws RemoteException { + String csQuery= "for $CS in collection(\"/db/Profiles/CS\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource return {$CS/UniqueID/string()}{$CS/Profile/ProcessName/string()}{$CS/Profile/Description/string()}"; + String results=makeQueryDIS(epr, cred, csQuery); + + String[][] resultsParsed= parseResults(results, "r"); + try{ + DBInterface.connect(); + DBInterface.InsertInto("cs", resultsParsed, false); + }catch (SQLException e){//logger.error("error DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + } + + + private static void insertQuality(EndpointReferenceType epr) throws RemoteException { + + } + + + + private static void insertDHN(EndpointReferenceType epr, ExtendedGSSCredential cred) throws RemoteException { + String dhnQuery="for $DHN in collection(\"/db/Profiles/DHN\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $DHN/Profile/DHNDescription/Type/string() eq 'Dynamic' or $DHN/Profile/DHNDescription/Type/string() eq 'SelfCleaning' return {$DHN/UniqueID/string()}{$DHN/Profile/DHNDescription/Name/string()}" + + "{$DHN/Profile/DHNDescription/SecurityEnabled/string(@value)}{$DHN/Profile/DHNDescription/Uptime/string()}{$DHN/Profile/DHNDescription/MainMemory/string(@VirtualAvailable)}{string($DHN/Profile/DHNDescription/MainMemory/string(@VirtualSize))}" + + "{$DHN/Profile/DHNDescription/LocalAvailableSpace/string()}{$DHN/Profile/Site/Location/string()}{$DHN/Profile/Site/Country/string()}{$DHN/Profile/Site/Domain/string()}"; + + String results=makeQueryDIS(epr, cred, dhnQuery); + String[][] resultsDHNParsed= parseResults(results, "r"); + String RIQuery="for $RI in collection(\"/db/Profiles/RunningInstance\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource return {$RI/UniqueID/string()}{$RI/Profile/ServiceName/string()}"; + results=makeQueryDIS(epr, cred, RIQuery); + + String[][] resultsRIParsed= parseResults(results, "r"); + + + ArrayList DNHRelatedRIArray= new ArrayList(); + for (String[] singleDHN:resultsDHNParsed) + { + String[] riID; + + /* + try { + riID=DISHLSClient.getRunningInstanceManager(cred,epr).getAllRunningInstancesOnDHN(singleDHN[0], cred, epr); + } catch (DISHLSClientException e) { + //logger.error("VDLModel: Error initializing DB with DHN and RI (DISHLSClient error)"); + throw new RemoteException("Error querying DIS-IP (DISHLSClient error)", e); + } catch (DISHLSCredentialException e) { + //logger.error("VDLModel: Error initializing DB with DHN and RI (Credential error)"); + throw new RemoteException("Error querying DIS-IP (Credential error)", e); + } + */ + + //retreiving related RIID with DHNID + /* + String[] temp; + for (String id: riID){ + temp=new String[2]; + temp[0]=singleDHN[0]; + temp[1]=id; + DNHRelatedRIArray.add(temp); + } + */ + } + + /* + ArrayList RIRelatedPKGArray= new ArrayList(); + for (String[] singleRI: resultsRIParsed){ + + } + */ + + try{ + DBInterface.connect(); + DBInterface.InsertInto("dhn", resultsDHNParsed, false); + DBInterface.InsertInto("runninginstance", resultsRIParsed, false); + DBInterface.InsertInto("dhnrelatedri", DNHRelatedRIArray.toArray(new String[0][0]), false); + }catch (SQLException e){//logger.error("error DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + + } + + + private static void insertServices(EndpointReferenceType epr, ExtendedGSSCredential cred) throws RemoteException { + + String csQuery= "for $SERVICE in collection(\"/db/Profiles/Service\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource return {$SERVICE/UniqueID/string()}{$SERVICE/Profile/Name/string()}{$SERVICE/Profile/Class/string()}"; + String results=makeQueryDIS(epr, cred, csQuery); + + String[][] resultsParsed= parseResults(results, "r"); + try{ + DBInterface.connect(); + DBInterface.InsertInto("relatedserviceid", resultsParsed, false); + }catch (SQLException e){//logger.error("error DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + } + + public static void updateServices(EndpointReferenceType epr, ExtendedGSSCredential cred, String resourceID, int op) throws RemoteException { + switch (op){ + case 0: + { + String serviceUpdateQuery="for $SERVICE in collection(\"/db/Profiles/Service\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $SERVICE/UniqueID/string() eq '"+op+"' return {$SERVICE/UniqueID/string()}{$SERVICE/Profile/Name/string()}{$SERVICE/Profile/Class/string()}"; + String results=makeQueryDIS(epr, cred, serviceUpdateQuery); + String[][] resultsParsed= parseResults(results, "r"); + try{ + DBInterface.connect(); + DBInterface.InsertInto("relatedserviceid", resultsParsed, false); + }catch (SQLException e){//logger.error("error DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + case 1: + { + try{ + DBInterface.connect(); + DBInterface.ExecuteUpdate("Delete from relatedserviceid where id='"+resourceID+"'"); + }catch (SQLException e){//logger.error("error DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + } + } + + public static void updateCollection(EndpointReferenceType epr, ExtendedGSSCredential cred, String resourceID, int op) throws RemoteException { + switch (op){ + case 0: + { + String collectionQuery= "for $CollectionProfile in collection(\"/db/Profiles/Collection\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $CollectionProfile/Profile/IsUserCollection[string(@value) eq \"true\"] and $CollectionProfile/UniqueID/string() eq '"+resourceID+"' return {$CollectionProfile/UniqueID/string()}{$CollectionProfile/Profile/Name/string()}{$CollectionProfile/Profile/Description/string()}{$CollectionProfile/Profile/NumberOfMembers/string()}{$CollectionProfile/Profile/CreationTime/string()}{$CollectionProfile/Profile/LastUpdateTime/string()}"; + String results=makeQueryDIS(epr, cred, collectionQuery); + String[][] resultsParsed= parseResults(results, "r"); + + try{ + DBInterface.connect(); + DBInterface.InsertInto("collection", resultsParsed, false); + }catch (SQLException e){//logger.error("error updating collection on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + case 1: + { + try{ + DBInterface.connect(); + DBInterface.ExecuteUpdate("Delete from collection where id='"+resourceID+"'"); + }catch (SQLException e){//logger.error("error updating collection on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + } + } + + public static void updateDHN(EndpointReferenceType epr, ExtendedGSSCredential cred, String resourceID, int op) throws RemoteException { + switch (op){ + case 0: + { + String dhnQuery="for $DHN in collection(\"/db/Profiles/DHN\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where ($DHN/Profile/DHNDescription/Type/string() eq 'Dynamic' or $DHN/Profile/DHNDescription/Type/string() eq 'SelfCleaning') and $DHN/UniqueID/string() eq '"+resourceID+"' return {$DHN/UniqueID/string()}{$DHN/Profile/DHNDescription/Name/string()}" + + "{$DHN/Profile/DHNDescription/SecurityEnabled/string(@value)}{$DHN/Profile/DHNDescription/Uptime/string()}{$DHN/Profile/DHNDescription/MainMemory/string(@VirtualAvailable)}{string($DHN/Profile/DHNDescription/MainMemory/string(@VirtualSize))}" + + "{$DHN/Profile/DHNDescription/LocalAvailableSpace/string()}{$DHN/Profile/Site/Location/string()}{$DHN/Profile/Site/Country/string()}{$DHN/Profile/Site/Domain/string()}"; + + String results=makeQueryDIS(epr, cred, dhnQuery); + String[][] resultsDHNParsed= parseResults(results, "r"); + ArrayList DNHRelatedRIArray= new ArrayList(); + + String RIQuery="for $RI in collection(\"/db/Profiles/RunningInstance\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource return {$RI/UniqueID/string()}{$RI/Profile/ServiceName/string()}"; + results=makeQueryDIS(epr, cred, RIQuery); + + String[][] resultsRIParsed= parseResults(results, "r"); + + String[] riID; + /* + try { + riID=DISHLSClient.getRunningInstanceManager(cred,epr).getAllRunningInstancesOnDHN(resourceID, cred, epr); + } catch (DISHLSClientException e) { + //logger.error("VDLModel: Error initializing DB with DHN and RI (DISHLSClient error)"); + throw new RemoteException("Error querying DIS-IP (DISHLSClient error)", e); + } catch (DISHLSCredentialException e) { + //logger.error("VDLModel: Error initializing DB with DHN and RI (Credential error)"); + throw new RemoteException("Error querying DIS-IP (Credential error)", e); + } + */ + + //retreiving related RIID with DHNID + String[] temp; + /* + for (String id: riID){ + temp=new String[2]; + temp[0]=resourceID; + temp[1]=id; + DNHRelatedRIArray.add(temp); + } + */ + try{ + DBInterface.connect(); + DBInterface.InsertInto("dhn", resultsDHNParsed, false); + DBInterface.InsertInto("runninginstance", resultsRIParsed, false); + DBInterface.InsertInto("dhnrelatedri", DNHRelatedRIArray.toArray(new String[0][0]), false); + }catch (SQLException e){//logger.error("error updating DHN on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + case 1: + { + try{ + DBInterface.connect(); + DBInterface.ExecuteUpdate("Delete from dhn where id='"+resourceID+"'"); + DBInterface.ExecuteUpdate("Delete from dhnrelatedri where DHNID='"+resourceID+"'"); + }catch (SQLException e){//logger.error("error updating DHN on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + } + } + + public static void updateCS(EndpointReferenceType epr, ExtendedGSSCredential cred, String resourceID, int op) throws RemoteException { + switch (op){ + case 0: + { + String csQuery= "for $CS in collection(\"/db/Profiles/CS\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $CS/UniqueID/string() eq '"+resourceID+"' return {$CS/UniqueID/string()}{$CS/Profile/ProcessName/string()}{$CS/Profile/Description/string()}"; + String results=makeQueryDIS(epr, cred, csQuery); + + String[][] resultsParsed= parseResults(results, "r"); + try{ + DBInterface.connect(); + DBInterface.InsertInto("cs", resultsParsed, false); + }catch (SQLException e){//logger.error("error updating CS on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + case 1: + { + try{ + DBInterface.connect(); + DBInterface.ExecuteUpdate("Delete from cs where id='"+resourceID+"'"); + }catch (SQLException e){//logger.error("error updating CS on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + } + } + + public static void updateRI(EndpointReferenceType epr, ExtendedGSSCredential cred, String resourceID, int op) throws RemoteException { + switch (op){ + case 0: + { + String RIQuery="for $RI in collection(\"/db/Profiles/RunningInstance\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $RI/UniqueID/string() eq '"+resourceID+"' return {$RI/UniqueID/string()}{$RI/Profile/ServiceName/string()}"; + String relatedDHNQuery="for $RI in collection(\"/db/Profiles/RunningInstance\")//Document/Data/child::*[local-name()='Profile']/DILIGENTResource where $RI/UniqueID/string() eq '"+resourceID+"' return {$RI/Profile/DHN/string(@UniqueID)}{$RI/UniqueID/string()}"; + String results=makeQueryDIS(epr, cred, RIQuery); + String resultsRelatedDhn=makeQueryDIS(epr, cred, relatedDHNQuery); + String[][] resultsRIParsed= parseResults(results, "r"); + String[][] resultRelatedDhn= parseResults(resultsRelatedDhn, "r"); + try{ + DBInterface.connect(); + DBInterface.InsertInto("runninginstance", resultsRIParsed, false); + DBInterface.InsertInto("dhnrelatedri", resultRelatedDhn, false); + }catch (SQLException e){//logger.error("error updating RI on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + case 1: + { + try{ + DBInterface.connect(); + DBInterface.ExecuteUpdate("Delete from runninginstance where id='"+resourceID+"'"); + DBInterface.ExecuteUpdate("Delete from dhnrelatedri where RIID='"+resourceID+"'"); + }catch (SQLException e){//logger.error("error updating RI on DB"); + e.printStackTrace(); throw new RemoteException(e.getMessage(),e); } + break; + } + } + } + + + +}