From 7da88c776a719650b7a21ba8475b9e2d56174395 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Thu, 4 Dec 2008 01:21:17 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/vre-management/VREModeler@7461 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 3 +- .../vremodeler/db/DBInterface.java | 47 ++++- .../vremodeler/db/IStoDBUtil.java | 166 ++++-------------- .../vremodeler/impl/ModelerService.java | 2 +- 4 files changed, 81 insertions(+), 137 deletions(-) diff --git a/.classpath b/.classpath index c5a19a7..1e94510 100644 --- a/.classpath +++ b/.classpath @@ -2,7 +2,6 @@ - - + diff --git a/src/org/gcube/vremanagement/vremodeler/db/DBInterface.java b/src/org/gcube/vremanagement/vremodeler/db/DBInterface.java index fe6253d..786fecf 100644 --- a/src/org/gcube/vremanagement/vremodeler/db/DBInterface.java +++ b/src/org/gcube/vremanagement/vremodeler/db/DBInterface.java @@ -11,6 +11,7 @@ import java.sql.Statement; import java.util.List; import org.gcube.common.core.faults.GCUBEFault; import org.gcube.common.core.utils.logging.GCUBELog; +import org.gcube.vremanagement.vremodeler.impl.util.Listable; /** * @@ -72,8 +73,52 @@ public class DBInterface { } + public static synchronized void insertIntoListable(String table, List values) throws GCUBEFault { + + if (values==null) throw new GCUBEFault(); + Statement st = null; + + try{ + st = conn.createStatement(); // statement objects can be reused with + }catch(SQLException e){//logger.error("error creating SQL statement"); + throw new GCUBEFault(e);} + + StringBuffer insertQuery; + + + for (Listable row: values) + { + + insertQuery=new StringBuffer(); + insertQuery.append("INSERT INTO ").append(table.toUpperCase()).append(" VALUES("); + try{ + + + for(String value: row.getAsStringList()){ + insertQuery.append("'").append(value.replaceAll("'", " ")).append("',"); + } + + insertQuery.deleteCharAt(insertQuery.length()-1).append(");"); + logger.trace("Query for inserting in hsqldb "+insertQuery); + + st.executeUpdate(insertQuery.toString()); // run the query + }catch(SQLException e){logger.error("HSQLDB ERROR: Problem inserting data "+e.getMessage()+" -- "+ insertQuery); + e.printStackTrace(); + } + + catch(Exception e){ + logger.error("VDLModelService error: Problem inserting data "+e.getMessage()); + e.printStackTrace(); + } + } + + try{ + st.close(); + }catch(SQLException e){logger.error("error closing SQL statement"); + throw new GCUBEFault(e);} + } - + /** * * @param table diff --git a/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java b/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java index d84c04c..a55a611 100644 --- a/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java +++ b/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java @@ -3,9 +3,13 @@ package org.gcube.vremanagement.vremodeler.db; import java.rmi.RemoteException; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Hashtable; import java.util.List; /*import org.apache.axis.components.uuid.UUIDGen; import org.apache.axis.components.uuid.UUIDGenFactory;*/ +import org.apache.axis.components.uuid.UUIDGen; +import org.apache.axis.components.uuid.UUIDGenFactory; import org.apache.axis.message.addressing.EndpointReferenceType; import org.gcube.common.core.contexts.GHNContext; import org.gcube.common.core.faults.GCUBEFault; @@ -24,6 +28,8 @@ import org.gcube.common.core.resources.GCUBERunningInstance; import org.gcube.common.core.resources.GCUBEService; import org.gcube.common.core.scope.GCUBEScope; import org.gcube.common.core.utils.logging.GCUBELog; +import org.gcube.vremanagement.vremodeler.impl.util.MFRelationNative; +import org.gcube.vremanagement.vremodeler.impl.util.MetadataFormat; /** * @@ -36,6 +42,8 @@ public class IStoDBUtil { private static GCUBELog logger = new GCUBELog(IStoDBUtil.class.getName()); + private static UUIDGen uuidMFGEN= UUIDGenFactory.getUUIDGen(); + private static ISClient queryClient; /** * Initialize all database tables @@ -217,157 +225,49 @@ public class IStoDBUtil { //preparing collectionList to insert //table declaration: //MDCOLLECTION(ID VARCHAR NOT NULL PRIMARY KEY,NAME VARCHAR,DESCRIPTION VARCHAR,RELATEDCOLLECTIONID VARCHAR NOT NULL) + String uuid; + MetadataFormat mf; List> values = new ArrayList>(collectionList.size()); List row; + List metadataFormatList= new ArrayList(); + List nativeMetadataFormatList= new ArrayList(); + for (GCUBEMCollection col: collectionList ){ row= new ArrayList(4); + row.add(col.getID()); row.add(col.getName()); row.add(col.getDescription()); row.add(col.getRelCollection().getCollectionID()); values.add(row); + + //adding the native metadataformat + uuid=uuidMFGEN.nextUUID(); + mf= new MetadataFormat(uuid, col.getMetaFormat().getName(), col.getMetaFormat().getSchemaURI(), col.getMetaFormat().getLanguage()); + if (!metadataFormatList.contains(mf)){ + metadataFormatList.add(mf); + nativeMetadataFormatList.add(new MFRelationNative(col.getID(), mf.getId() )); + }else nativeMetadataFormatList.add(new MFRelationNative(col.getID(), metadataFormatList.get(metadataFormatList.indexOf(mf)).getId())); + + } + + + //insert the values in the database DBInterface.connect(); DBInterface.InsertInto("mdcollection", values); + DBInterface.insertIntoListable("mdformat", metadataFormatList ); + DBInterface.insertIntoListable("nativemdf", nativeMetadataFormatList); + + } }catch (SQLException e){logger.error("VDLModel: DB error "+e.getMessage()); throw new GCUBEFault(e); } - - - 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; - - - 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); } - */ } + + /** * diff --git a/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java b/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java index 98dc190..e4b6572 100644 --- a/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java +++ b/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java @@ -303,7 +303,7 @@ public class ModelerService { } - return XMLUtil.PrepareMCFormatXML(null, null, null, selectedMetadataStructure); + return XMLUtil.PrepareMCFormatXML(totalMF, resNative, resDerivable, selectedMetadataStructure); }