diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 21a9ec6..bd7a6cd 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,15 @@ -#Wed Aug 12 09:49:59 EDT 2009 +#Wed Dec 22 09:55:30 EST 2010 eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 diff --git a/src/org/gcube/informationsystem/collector/impl/porttypes/wsdaix/XMLCollectionAccess.java b/src/org/gcube/informationsystem/collector/impl/porttypes/wsdaix/XMLCollectionAccess.java index ee701f9..2b9db5c 100644 --- a/src/org/gcube/informationsystem/collector/impl/porttypes/wsdaix/XMLCollectionAccess.java +++ b/src/org/gcube/informationsystem/collector/impl/porttypes/wsdaix/XMLCollectionAccess.java @@ -159,10 +159,9 @@ public class XMLCollectionAccess extends GCUBEPortType { responseWrappers[i].setDocumentName(resourceName); logger.info("Storing resource " + resourceName); //String output = "AddDocument-" + UniqueName.getInstance().getName(); - MessageElement elem = docs[i].getData().get_any()[0]; - MessageElement elem2 = docs[i].getData().get_any()[1]; + MessageElement elem = docs[i].getData().get_any()[0]; Document doc = null; - MetadataReader metadataReader = null; + BaseDAIXResource resource; try { Object o = elem.getAsDocument(); if (! (o instanceof Document)) @@ -173,26 +172,24 @@ public class XMLCollectionAccess extends GCUBEPortType { responseWrappers[i].setResponse(AddDocumentResponseWrapperResponse.value2); continue; } - try { - Object o = elem2.getAsDocument(); - if (! (o instanceof Document)) - throw new Exception("Unable to add resource " + resourceName + " because of a problem deserializing the metadata"); - metadataReader = new MetadataReader((Document) o); - } catch ( Exception e ) { - logger.error("Unable to read resource's metadata", e); - responseWrappers[i].setResponse(AddDocumentResponseWrapperResponse.value2); - continue; - } - - BaseDAIXResource resource; - if (metadataReader.getType().compareToIgnoreCase(GCUBEProfileResource.TYPE) == 0) { - resource = new GCUBEProfileResource(); - } else if (metadataReader.getType().compareToIgnoreCase(GCUBEInstanceStateResource.TYPE) == 0) { - resource = new GCUBEInstanceStateResource(); - } else { - resource = new BaseDAIXResource(); + MetadataReader metadataReader = null; + try { + //check if there exists a metadata record for this resource + metadataReader = this.getMetadata(docs[i].getData().get_any(), resourceName); + if (metadataReader.getType().compareToIgnoreCase(GCUBEProfileResource.TYPE) == 0) { + resource = new GCUBEProfileResource(); + } else if (metadataReader.getType().compareToIgnoreCase(GCUBEInstanceStateResource.TYPE) == 0) { + resource = new GCUBEInstanceStateResource(); + } else { + resource = new BaseDAIXResource(); + resource.setCollectionName(targetCollection); + } + } catch (Exception e2) { + resource = new BaseDAIXResource(); resource.setCollectionName(targetCollection); - } + metadataReader = null; + } + try { resource.setResourceName(resourceName); resource.setContent(doc); @@ -201,14 +198,9 @@ public class XMLCollectionAccess extends GCUBEPortType { responseWrappers[i].setResponse(AddDocumentResponseWrapperResponse.value2); continue; } - GCUBEXMLResource xmlResource; + try { - xmlResource = new GCUBEXMLResource(resource); - xmlResource.setSource(metadataReader.getSource()); - xmlResource.setTerminationTime(metadataReader.getTerminationTime()); - xmlResource.setGroupKey(metadataReader.getGroupKey()); - xmlResource.setEntryKey(metadataReader.getEntryKey()); - xmlResource.setSourceKey(metadataReader.getKey()); + GCUBEXMLResource xmlResource = wrap(resource, metadataReader); boolean exist = false; if ( State.getDataManager().resourceExists(xmlResource) ) { exist = true; @@ -237,6 +229,47 @@ public class XMLCollectionAccess extends GCUBEPortType { return r; } + /** + * Reads the metadata reader from the given soap elements, if any + * @param elements the elements received as part of the SOAP message + * @param resourceName the related resource name + * @return the metadata reader + * @throws Exception if the reader does not exist or is invalid + */ + private MetadataReader getMetadata(MessageElement[] elements, String resourceName) throws Exception { + if (elements.length > 1){ + MessageElement elem2 = elements[1]; + try { + Object o = elem2.getAsDocument(); + if (! (o instanceof Document)) + throw new Exception("Unable to add resource " + resourceName + " because of a problem deserializing the metadata"); + return new MetadataReader((Document) o); + } catch ( Exception e ) { + logger.error("Unable to read resource's metadata", e); + throw new Exception("Unable to read resource "+ resourceName + " metadata", e); + } + } else + throw new Exception("Unable to find any resource's metadata record for " + resourceName); + } + + /** + * Wraps a {@link BaseDAIXResource} into a {@link GCUBEXMLResource} + * @param resource the resource to wrap + * @param metadataReader the related reader, if any + * @return the wrapped resource + * @throws MalformedXMLResourceException + */ + private GCUBEXMLResource wrap(BaseDAIXResource resource, MetadataReader metadataReader) throws MalformedXMLResourceException { + GCUBEXMLResource xmlResource = new GCUBEXMLResource(resource); + if (metadataReader != null) { + xmlResource.setSource(metadataReader.getSource()); + xmlResource.setTerminationTime(metadataReader.getTerminationTime()); + xmlResource.setGroupKey(metadataReader.getGroupKey()); + xmlResource.setEntryKey(metadataReader.getEntryKey()); + xmlResource.setSourceKey(metadataReader.getKey()); + } + return xmlResource; + } /** * Implementation of CollectionAccess::RemoveDocuments diff --git a/src/org/gcube/informationsystem/collector/stubs/metadata/MetadataRecord.java b/src/org/gcube/informationsystem/collector/stubs/metadata/MetadataRecord.java index 8f96cc9..36a8651 100644 --- a/src/org/gcube/informationsystem/collector/stubs/metadata/MetadataRecord.java +++ b/src/org/gcube/informationsystem/collector/stubs/metadata/MetadataRecord.java @@ -1,5 +1,6 @@ package org.gcube.informationsystem.collector.stubs.metadata; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Calendar; import java.util.GregorianCalendar; @@ -11,8 +12,6 @@ import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.xml.sax.SAXException; -import com.sun.xml.bind.StringInputStream; - /** * * Metadata Record for gCube Profiles and Instance States @@ -150,7 +149,7 @@ public class MetadataRecord { return DocumentBuilderFactory .newInstance() .newDocumentBuilder() - .parse(new StringInputStream(getAsBuilder().toString())); + .parse(new ByteArrayInputStream(getAsBuilder().toString().getBytes("UTF-8"))); } diff --git a/test/org/gcube/informationsystem/collector/MetadataReaderTest.java b/test/org/gcube/informationsystem/collector/MetadataReaderTest.java index 532ac9a..e30c5a1 100644 --- a/test/org/gcube/informationsystem/collector/MetadataReaderTest.java +++ b/test/org/gcube/informationsystem/collector/MetadataReaderTest.java @@ -1,5 +1,6 @@ package org.gcube.informationsystem.collector; +import java.io.ByteArrayInputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilderFactory; @@ -9,7 +10,6 @@ import org.gcube.informationsystem.collector.impl.utils.MetadataReader; import org.w3c.dom.Document; import org.xml.sax.SAXException; -import com.sun.xml.bind.StringInputStream; import junit.framework.TestCase; @@ -69,7 +69,7 @@ public class MetadataReaderTest extends TestCase { return DocumentBuilderFactory .newInstance() .newDocumentBuilder() - .parse(new StringInputStream(builder.toString())); + .parse(new ByteArrayInputStream(builder.toString().getBytes("UTF-8"))); }