diff --git a/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java b/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java index 8e6dbc6..d700ba9 100644 --- a/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java +++ b/src/org/gcube/vremanagement/vremodeler/db/IStoDBUtil.java @@ -78,7 +78,7 @@ public class IStoDBUtil { logger.debug("initialization: metadata"); insertCS(scope); logger.debug("initialization: CS"); - insertServices(scope); + //insertServices(scope); insertGHN(scope); logger.debug("initialization: GHN"); logger.info("Database Initialized!!"); diff --git a/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java b/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java index 1c1670a..1d1ec3e 100644 --- a/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java +++ b/src/org/gcube/vremanagement/vremodeler/impl/ModelerService.java @@ -17,6 +17,7 @@ import org.gcube.vremanagement.vremodeler.db.DBInterface; import org.gcube.vremanagement.vremodeler.impl.thread.DeployVRE; import org.gcube.vremanagement.vremodeler.impl.util.GCUBECollection; import org.gcube.vremanagement.vremodeler.impl.util.MetadataFormat; +import org.gcube.vremanagement.vremodeler.impl.util.ModelerCollection; import org.gcube.vremanagement.vremodeler.impl.util.XMLUtil; import org.gcube.vremanagement.vremodeler.stubs.CheckStatusResponse; import org.gcube.vremanagement.vremodeler.stubs.CollectionArray; @@ -255,21 +256,21 @@ public class ModelerService { */ public String getMetadataRelatedToCollection(VOID var) throws GCUBEFault { - Hashtable> nativeMetadataFormat; - Hashtable> selectedMetadataFormat; + Hashtable> nativeMetadataFormat; + Hashtable> selectedMetadataFormat; try{ DBInterface.connect(); //retrieve all possible metadataformat for the selected collection - nativeMetadataFormat= new Hashtable>(); - ResultSet allPossibleMDF= DBInterface.queryDB("select rel.collid, mdf.id, mdf.name, mdf.schemauri, mf.language, coll.name, coll.description from COLLECTION as coll, VRERELATEDCOLLECTION as rel, MDCOLLECTION as mcoll, METADATAFORMAT as mdf where VRERELATEDCOLLECTION.vreid='"+getResource().getId()+"' and mcoll.relatedcollectionid=rel.collid and mdf.id=native.mdfid and native.mdcollid=mcoll.id and coll.id=rel.collid;"); + nativeMetadataFormat= new Hashtable>(); + ResultSet allPossibleMDF= DBInterface.queryDB("select rel.collid, mdf.id, mdf.name, mdf.schemauri, mdf.language, coll.name, coll.description from COLLECTION as coll, VRERELATEDCOLLECTION as rel, MDCOLLECTION as mcoll, MDFORMAT as mdf, NATIVEMDF as native where rel.vreid='"+getResource().getId()+"' and mcoll.relatedcollectionid=rel.collid and mdf.id=native.mdfid and native.mdcollid=mcoll.id and coll.id=rel.collid;"); while (allPossibleMDF.next()){ - GCUBECollection collection= new GCUBECollection(allPossibleMDF.getString(1), allPossibleMDF.getString(7), allPossibleMDF.getString(6) ); + ModelerCollection collection= new ModelerCollection(allPossibleMDF.getString(1), allPossibleMDF.getString(7), allPossibleMDF.getString(6) ); MetadataFormat mf= new MetadataFormat(allPossibleMDF.getString(2), allPossibleMDF.getString(3), new URI(allPossibleMDF.getString(4)), allPossibleMDF.getString(5)); - if (nativeMetadataFormat.containsKey(collection)) + if (nativeMetadataFormat.containsKey(collection)){ nativeMetadataFormat.get(collection).add(mf); - else { + }else { ArrayList keyList=new ArrayList(); keyList.add(mf); nativeMetadataFormat.put(collection, keyList); @@ -278,10 +279,10 @@ public class ModelerService { //retrieving selected metadaformat //hashtable - selectedMetadataFormat= new Hashtable>(); - ResultSet selectedFormat= DBInterface.queryDB("select rel.collid, mf.id, mf.name, mf.schemauri, mf.language , coll.name, coll.description from COLLECTION as coll, VRERELATEDMETADATAFORMAT as rel, METADATAFORMAT as mf where mf.id=rel.mfid and vreid='"+getResource().getId()+"' and coll.id=rel.collid;"); + selectedMetadataFormat= new Hashtable>(); + ResultSet selectedFormat= DBInterface.queryDB("select rel.collid, mf.id, mf.name, mf.schemauri, mf.language , coll.name, coll.description from COLLECTION as coll, VRERELATEDMETADATAFORMAT as rel, MDFORMAT as mf where mf.id=rel.mfid and rel.vreid='"+getResource().getId()+"' and coll.id=rel.collid;"); while (selectedFormat.next()){ - GCUBECollection collection= new GCUBECollection(selectedFormat.getString(1), selectedFormat.getString(7), selectedFormat.getString(6)); + ModelerCollection collection= new ModelerCollection(selectedFormat.getString(1), selectedFormat.getString(7), selectedFormat.getString(6)); MetadataFormat mf= new MetadataFormat(selectedFormat.getString(2), selectedFormat.getString(3), new URI(selectedFormat.getString(4)), selectedFormat.getString(5)); if (selectedMetadataFormat.containsKey(collection)) selectedMetadataFormat.get(collection).add(mf); diff --git a/src/org/gcube/vremanagement/vremodeler/impl/ServiceContext.java b/src/org/gcube/vremanagement/vremodeler/impl/ServiceContext.java index ec9d985..f9406b3 100644 --- a/src/org/gcube/vremanagement/vremodeler/impl/ServiceContext.java +++ b/src/org/gcube/vremanagement/vremodeler/impl/ServiceContext.java @@ -22,7 +22,8 @@ public class ServiceContext extends GCUBEServiceContext{ protected void onReady() throws Exception{ try{ logger.info("ready event invoked on " + this.getName()); - IStoDBUtil.initDB(ServiceContext.getContext().getStartScopes()[0].isInfrastructure()? ServiceContext.getContext().getStartScopes()[1]: ServiceContext.getContext().getStartScopes()[0]); + ServiceContext.getContext().setScope(ServiceContext.getContext().getStartScopes()[0].isInfrastructure()? ServiceContext.getContext().getStartScopes()[1]: ServiceContext.getContext().getStartScopes()[0]); + IStoDBUtil.initDB(ServiceContext.getContext().getStartScopes()[0].isInfrastructure()? ServiceContext.getContext().getStartScopes()[1]: ServiceContext.getContext().getStartScopes()[0]); ModelerContext.getPortTypeContext().getWSHome().checkResourceScope(); }catch (Exception e){ this.setStatus(Status.FAILED, true); diff --git a/src/org/gcube/vremanagement/vremodeler/impl/util/ModelerCollection.java b/src/org/gcube/vremanagement/vremodeler/impl/util/ModelerCollection.java new file mode 100644 index 0000000..facda33 --- /dev/null +++ b/src/org/gcube/vremanagement/vremodeler/impl/util/ModelerCollection.java @@ -0,0 +1,53 @@ +package org.gcube.vremanagement.vremodeler.impl.util; + +public class ModelerCollection { + + private String id; + private String name; + private String description; + + + public ModelerCollection(String id, String description, String name){ + this.id= id; + this.description= description; + this.name= name; + } + + public String getId(){ + return this.id; + } + + public String getName(){ + return this.name; + } + + public String getDescription(){ + return this.description; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ModelerCollection other = (ModelerCollection) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + +} diff --git a/src/org/gcube/vremanagement/vremodeler/impl/util/XMLUtil.java b/src/org/gcube/vremanagement/vremodeler/impl/util/XMLUtil.java index d1b0a1c..d3b14e1 100644 --- a/src/org/gcube/vremanagement/vremodeler/impl/util/XMLUtil.java +++ b/src/org/gcube/vremanagement/vremodeler/impl/util/XMLUtil.java @@ -4,6 +4,7 @@ import java.io.StringWriter; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.Enumeration; import java.util.Hashtable; @@ -134,12 +135,19 @@ public class XMLUtil { return docToString(doc); } + private static List getDistinctObjects(Collection list){ + List tmpList= new ArrayList(); + for (T el: list) + if (!tmpList.contains(el)) tmpList.add(el); + return tmpList; + } + /** * * @param res * @return */ - public static String PrepareMCFormatXML(Hashtable> nativeMetadataFormat, Hashtable> selectedMetadataFormat){ + public static String PrepareMCFormatXML(Hashtable> nativeMetadataFormat, Hashtable> selectedMetadataFormat){ Document doc= null; try { @@ -148,59 +156,63 @@ public class XMLUtil { logger.error("Error creating XML Message"); e1.printStackTrace(); } - Hashtable>> MDFHash= new Hashtable>>(); - + //Hashtable>> MDFHash= new Hashtable>>(); + List mdflistMultiple= new ArrayList(); + for (List mftmpList: nativeMetadataFormat.values()) + mdflistMultiple.addAll(mftmpList); + List totalMDF= getDistinctObjects(mdflistMultiple); + + + Element collectionListEl= doc.createElement("CollectionList"); Element mflEl= doc.createElement("MFL"); - ArrayList tempArray; + try{ - while (allMF.next()) + for (MetadataFormat mf: totalMDF) { Element elementEl=addElements(doc, "Element", new Element[]{ - createTextElement(doc, "MFID", allMF.getString(1)), - createTextElement(doc, "MFName", allMF.getString(2)), - createTextElement(doc, "URI", allMF.getString(3)), - createTextElement(doc, "Language", allMF.getString(4)) + createTextElement(doc, "MFID", mf.getId()), + createTextElement(doc, "MFName", mf.getName()), + createTextElement(doc, "URI", mf.getSchemaURI().toString()), + createTextElement(doc, "Language", mf.getLanguage()) }); mflEl.appendChild(elementEl); } //setting the native MDF - while(resNative.next()){ - Element tmpKeyEl= addElements(doc, "Collection", new Element[]{ - createTextElement(doc,"CollectionID" , resNative.getString(1)), - createTextElement(doc,"Name" , resNative.getString(2)), - createTextElement(doc,"Description" , resNative.getString(3)) + for(ModelerCollection key: nativeMetadataFormat.keySet()){ + System.out.println(key.getId()); + Element collectionEl= addElements(doc, "Collection", new Element[]{ + createTextElement(doc,"CollectionID" , key.getId()), + createTextElement(doc,"Name" , key.getName()), + createTextElement(doc,"Description" , key.getDescription()) }); - Element tmpEl; - if(selectedMetadata.isEmpty() || (selectedMetadata.containsKey(resNative.getString(1))) && (selectedMetadata.get(resNative.getString(1)).contains(resNative.getString(4))) ) - tmpEl= addElements(doc, "MetadataFormat", new Element[]{ - createTextElement(doc, "Id", resNative.getString(4)), + for(MetadataFormat mf: nativeMetadataFormat.get(key)){ + Element tmpEl; + if(selectedMetadataFormat.isEmpty() || ((selectedMetadataFormat.get(key)!=null) && selectedMetadataFormat.get(key).contains(mf))){ + tmpEl= addElements(doc, "MetadataFormat", new Element[]{ + createTextElement(doc, "Id", mf.getId()), createTextElement(doc, "Selectable", "True"), createTextElement(doc, "Selected", "True"), }); - else{ - tmpEl= addElements(doc, "MetadataFormat", new Element[]{ - createTextElement(doc, "Id", resNative.getString(4)), - createTextElement(doc, "Selectable", "True"), - createTextElement(doc, "Selected", "False"), - }); + }else { + tmpEl= addElements(doc, "MetadataFormat", new Element[]{ + createTextElement(doc, "Id", mf.getId()), + createTextElement(doc, "Selectable", "True"), + createTextElement(doc, "Selected", "False"), + }); + } + collectionEl.appendChild(tmpEl); } - //logger.debug("MDFProva: "+keyTemp+" "+temp); - if(MDFHash.contains(resNative.getString(1))) MDFHash.get(resNative.getString(1)).second.add(tmpEl); - else{ - tempArray=new ArrayList(); - tempArray.add(tmpEl); - MDFHash.put(resNative.getString(1), new Couple>(tmpKeyEl, tempArray) ); - } - //logger.debug("MDFProva: Native "+MDFHash.get(keyTemp).size()); + collectionListEl.appendChild(collectionEl); } + //setting the derivable MDF - /* TODO: when metadataBroker will be ready for transformation + /* TODO: when metadataBroker will be ready for transformations * while(resDerivable.next()){ Element tmpKeyEl= addElements(doc, "Collection", new Element[]{ createTextElement(doc,"CollectionID" , resDerivable.getString(1)), @@ -231,24 +243,11 @@ public class XMLUtil { } } */ - }catch(SQLException e){logger.error("hsqldb error"); - e.printStackTrace(); + }catch(Exception e){ e.printStackTrace(); } - - Element collectionListEl= doc.createElement("CollectionList"); - String key; - Enumeration k=MDFHash.keys(); - while (k.hasMoreElements()){ - key= k.nextElement(); - Couple> tempMD=MDFHash.get(key); - //logger.debug("ArrayProva"+tempMD.size()); - - tempMD.first.appendChild(addElements(doc, "MetadataFormatList", tempMD.second.toArray(new Element[0]))); - collectionListEl.appendChild(tempMD.first); - } - + doc.appendChild(addElements(doc, "ResultSet", new Element[]{mflEl, collectionListEl})); //logger.debug("VDLMODEL: request MCFormat XML "+resultString); return docToString(doc);