diff --git a/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/CoverageAdapter.java b/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/CoverageAdapter.java deleted file mode 100644 index ab27bcc882..0000000000 --- a/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/CoverageAdapter.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.raytheon.uf.common.datadelivery.registry; - -import javax.xml.bind.annotation.adapters.XmlAdapter; - -public class CoverageAdapter extends XmlAdapter { - - @Override - public Coverage unmarshal(GriddedCoverage v) throws Exception { - return v; - } - - @Override - public GriddedCoverage marshal(Coverage v) throws Exception { - return new GriddedCoverage(v); // you must provide such c-tor - } - -} diff --git a/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/GriddedCoverage.java b/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/GriddedCoverage.java index 06c16fa6e9..d9534e3002 100644 --- a/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/GriddedCoverage.java +++ b/edexOsgi/com.raytheon.uf.common.datadelivery.registry/src/com/raytheon/uf/common/datadelivery/registry/GriddedCoverage.java @@ -54,7 +54,8 @@ import com.vividsolutions.jts.geom.Coordinate; * Jan 31, 2011 191 dhladky Initial creation * Nov 19, 2012 1166 djohnson Clean up JAXB representation of registry objects. * Dec 10, 2012 1259 bsteffen Switch Data Delivery from LatLon to referenced envelopes. - * + * Feb 15, 2013 1543 djohnson Remove constructor accepting a Coverage. + * * * * @author dhladky @@ -74,10 +75,6 @@ public class GriddedCoverage extends Coverage implements Serializable { } - public GriddedCoverage(Coverage v) { - - } - @XmlElement @DynamicSerializeElement private GridCoverage gridCoverage; diff --git a/edexOsgi/com.raytheon.uf.common.datadelivery.retrieval/src/com/raytheon/uf/common/datadelivery/retrieval/xml/RetrievalAttribute.java b/edexOsgi/com.raytheon.uf.common.datadelivery.retrieval/src/com/raytheon/uf/common/datadelivery/retrieval/xml/RetrievalAttribute.java index 860d87acee..1b538f9e3f 100644 --- a/edexOsgi/com.raytheon.uf.common.datadelivery.retrieval/src/com/raytheon/uf/common/datadelivery/retrieval/xml/RetrievalAttribute.java +++ b/edexOsgi/com.raytheon.uf.common.datadelivery.retrieval/src/com/raytheon/uf/common/datadelivery/retrieval/xml/RetrievalAttribute.java @@ -24,11 +24,11 @@ import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import javax.xml.bind.annotation.XmlRootElement; import com.raytheon.uf.common.datadelivery.registry.Coverage; -import com.raytheon.uf.common.datadelivery.registry.CoverageAdapter; import com.raytheon.uf.common.datadelivery.registry.Ensemble; import com.raytheon.uf.common.datadelivery.registry.Parameter; import com.raytheon.uf.common.datadelivery.registry.Time; @@ -45,13 +45,14 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jan 17, 2011 191 dhladky Initial creation + * Feb 15, 2013 1543 djohnson Allow any type of Coverage instance without a JAXB adapter. * * * * @author dhladky * @version 1.0 */ - +@XmlRootElement @XmlAccessorType(XmlAccessType.NONE) @DynamicSerialize public class RetrievalAttribute implements ISerializableObject, Serializable { @@ -92,8 +93,7 @@ public class RetrievalAttribute implements ISerializableObject, Serializable { @DynamicSerializeElement private String plugin; - @XmlElement(name = "coverage") - @XmlJavaTypeAdapter(value = CoverageAdapter.class) + @XmlAnyElement(lax = true) @DynamicSerializeElement private Coverage coverage; diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml index b60a01f477..2424be6253 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml @@ -30,7 +30,7 @@ + class="com.raytheon.uf.edex.datadelivery.retrieval.handlers.PerformRetrievalsThenReturnFinder"> @@ -39,6 +39,7 @@ + @@ -48,6 +49,7 @@ + @@ -91,6 +94,7 @@ + @@ -100,6 +104,7 @@ + * @@ -50,6 +55,8 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; */ @Embeddable @DynamicSerialize +@XmlRootElement +@XmlAccessorType(XmlAccessType.NONE) public class RetrievalRequestRecordPK implements IPersistableDataObject, Serializable, ISerializableObject { @@ -58,10 +65,12 @@ public class RetrievalRequestRecordPK implements @Column @DynamicSerializeElement + @XmlAttribute private String subscriptionName; @Column @DynamicSerializeElement + @XmlAttribute private int index; // TODO: Subscription only unique per owner diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java index 452f2651be..6a117c15dd 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java @@ -22,9 +22,12 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; import java.io.File; import java.io.FileFilter; -import com.raytheon.uf.common.serialization.SerializationUtil; +import javax.xml.bind.JAXBException; + +import com.raytheon.uf.common.datadelivery.registry.Coverage; +import com.raytheon.uf.common.serialization.JAXBManager; import com.raytheon.uf.common.util.CollectionUtil; -import com.raytheon.uf.common.util.FileUtil; +import com.raytheon.uf.edex.datadelivery.retrieval.opendap.OpenDapRetrievalResponse; /** * Deserializes the retrieved data in a directory. @@ -43,7 +46,7 @@ import com.raytheon.uf.common.util.FileUtil; * @version 1.0 */ public class DeserializeRetrievedDataFromDirectory implements - IRetrievalPluginDataObjectsFinder { + IRetrievalsFinder { private static final FileFilter NO_DIRECTORIES = new FileFilter() { @Override @@ -54,18 +57,28 @@ public class DeserializeRetrievedDataFromDirectory implements private final File directory; + private final JAXBManager jaxbManager; + /** * @param directory */ public DeserializeRetrievedDataFromDirectory(File directory) { this.directory = directory; + try { + this.jaxbManager = new JAXBManager( + RetrievalResponseXml.class, + OpenDapRetrievalResponse.class, Coverage.class); + } catch (JAXBException e) { + throw new ExceptionInInitializerError(e); + } + } /** * {@inheritDoc} */ @Override - public RetrievalPluginDataObjects findRetrievalPluginDataObjects() + public RetrievalResponseXml findRetrievals() throws Exception { final File[] files = directory.listFiles(NO_DIRECTORIES); @@ -76,9 +89,8 @@ public class DeserializeRetrievedDataFromDirectory implements final File file = files[0]; try { - return SerializationUtil - .transformFromThrift(RetrievalPluginDataObjects.class, - FileUtil.file2bytes(file)); + return (RetrievalResponseXml) jaxbManager + .jaxbUnmarshalFromXmlFile(file); } finally { file.delete(); } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsProcessor.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsProcessor.java index be106daf47..22f5c01378 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsProcessor.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsProcessor.java @@ -22,7 +22,7 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; import com.raytheon.uf.common.serialization.SerializationException; /** - * Processes {@link RetrievalPluginDataObjects} that were generated from a + * Processes {@link RetrievalResponseXml} that were generated from a * retrieval. * *
@@ -51,6 +51,6 @@ public interface IRetrievalPluginDataObjectsProcessor {
      *             on error with serialization
      */
     void processRetrievedPluginDataObjects(
-            RetrievalPluginDataObjects retrievalPluginDataObjects)
+            RetrievalResponseXml retrievalPluginDataObjects)
             throws Exception;
 }
diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsFinder.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalsFinder.java
similarity index 78%
rename from edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsFinder.java
rename to edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalsFinder.java
index b8a7adabf3..6671e20c40 100644
--- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalPluginDataObjectsFinder.java
+++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IRetrievalsFinder.java
@@ -21,7 +21,7 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers;
 
 
 /**
- * Responsible for finding the {@link RetrievalPluginDataObjects} that should be
+ * Responsible for finding the {@link RetrievalResponseXml} that should be
  * processed.
  * 
  * 
@@ -37,13 +37,13 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers;
  * @author djohnson
  * @version 1.0
  */
-public interface IRetrievalPluginDataObjectsFinder {
+public interface IRetrievalsFinder {
     /**
-     * Finds the {@link RetrievalPluginDataObjects} that should be processed.
+     * Finds the {@link RetrievalResponseXml} that should be processed.
      * 
-     * @return the {@link RetrievalPluginDataObjects}
+     * @return the {@link RetrievalResponseXml}
      * @throws Exception
      */
-    RetrievalPluginDataObjects findRetrievalPluginDataObjects()
+    RetrievalResponseXml findRetrievals()
             throws Exception;
 }
diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinder.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalsThenReturnFinder.java
similarity index 86%
rename from edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinder.java
rename to edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalsThenReturnFinder.java
index ef60430fe8..2d303dec3a 100644
--- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinder.java
+++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalsThenReturnFinder.java
@@ -53,6 +53,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse
  * Feb 01, 2013 1543       djohnson     Initial creation
  * Feb 07, 2013 1543       djohnson     Expose process() for testing.
  * Feb 12, 2013 1543       djohnson     Retrieval responses are now passed further down the chain.
+ * Feb 15, 2013 1543       djohnson     Retrieval responses are now xml.
  * 
  * 
* @@ -60,11 +61,11 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse * @version 1.0 */ -public class PerformRetrievalPluginDataObjectsFinder implements - IRetrievalPluginDataObjectsFinder { +public class PerformRetrievalsThenReturnFinder implements + IRetrievalsFinder { private static final IUFStatusHandler statusHandler = UFStatus - .getHandler(PerformRetrievalPluginDataObjectsFinder.class); + .getHandler(PerformRetrievalsThenReturnFinder.class); private final Network network; @@ -75,7 +76,7 @@ public class PerformRetrievalPluginDataObjectsFinder implements * * @param network */ - public PerformRetrievalPluginDataObjectsFinder(Network network, + public PerformRetrievalsThenReturnFinder(Network network, IRetrievalDao retrievalDao) { this.network = network; this.retrievalDao = retrievalDao; @@ -85,9 +86,9 @@ public class PerformRetrievalPluginDataObjectsFinder implements * {@inheritDoc} */ @Override - public RetrievalPluginDataObjects findRetrievalPluginDataObjects() + public RetrievalResponseXml findRetrievals() throws Exception { - RetrievalPluginDataObjects retVal = null; + RetrievalResponseXml retVal = null; ITimer timer = TimeUtil.getTimer(); try { @@ -133,9 +134,9 @@ public class PerformRetrievalPluginDataObjectsFinder implements * The actual work gets done here. */ @VisibleForTesting - RetrievalPluginDataObjects process(RetrievalRequestRecord requestRecord) { + RetrievalResponseXml process(RetrievalRequestRecord requestRecord) { requestRecord.setState(State.FAILED); - List retrievalAttributePluginDataObjects = new ArrayList(); + List retrievalAttributePluginDataObjects = new ArrayList(); try { Retrieval retrieval = requestRecord.getRetrievalObj(); @@ -170,8 +171,8 @@ public class PerformRetrievalPluginDataObjectsFinder implements setCompletionStateFromResponse(requestRecord, response); retrievalAttributePluginDataObjects - .add(new RetrievalAttributePluginDataObjects( - attXML, response)); + .add(new RetrievalResponseWrapper( + response)); } else { throw new IllegalStateException("No PDO's to store: " + serviceType + " original: " @@ -188,8 +189,11 @@ public class PerformRetrievalPluginDataObjectsFinder implements } catch (Exception e) { statusHandler.handle(Priority.WARN, e.getLocalizedMessage(), e); } - RetrievalPluginDataObjects retrievalPluginDataObject = new RetrievalPluginDataObjects( - requestRecord, retrievalAttributePluginDataObjects); + RetrievalResponseXml retrievalPluginDataObject = new RetrievalResponseXml( + requestRecord.getId(), retrievalAttributePluginDataObjects); + retrievalPluginDataObject + .setSuccess(requestRecord.getState() == State.COMPLETED); + return retrievalPluginDataObject; } @@ -203,8 +207,8 @@ public class PerformRetrievalPluginDataObjectsFinder implements * the response */ @VisibleForTesting - static void setCompletionStateFromResponse(RetrievalRequestRecord requestRecord, - IRetrievalResponse response) { + static void setCompletionStateFromResponse( + RetrievalRequestRecord requestRecord, IRetrievalResponse response) { final State completionState = response.getPayLoad() == null ? State.FAILED : State.COMPLETED; requestRecord.setState(completionState); diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalAttributePluginDataObjects.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalResponseWrapper.java similarity index 74% rename from edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalAttributePluginDataObjects.java rename to edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalResponseWrapper.java index 876fae194f..db1a1990be 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalAttributePluginDataObjects.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalResponseWrapper.java @@ -19,7 +19,11 @@ **/ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; -import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAnyElement; +import javax.xml.bind.annotation.XmlRootElement; + import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse; @@ -41,19 +45,19 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse * @author djohnson * @version 1.0 */ +@XmlRootElement +@XmlAccessorType(XmlAccessType.NONE) @DynamicSerialize -public class RetrievalAttributePluginDataObjects { - - @DynamicSerializeElement - private RetrievalAttribute attributeXml; +public class RetrievalResponseWrapper { + @XmlAnyElement(lax = true) @DynamicSerializeElement private IRetrievalResponse retrievalResponse; /** * Constructor. */ - public RetrievalAttributePluginDataObjects() { + public RetrievalResponseWrapper() { } /** @@ -62,27 +66,10 @@ public class RetrievalAttributePluginDataObjects { * @param attributeXml * @param response */ - public RetrievalAttributePluginDataObjects(RetrievalAttribute attributeXml, - IRetrievalResponse response) { - this.attributeXml = attributeXml; + public RetrievalResponseWrapper(IRetrievalResponse response) { this.retrievalResponse = response; } - /** - * @return the attributeXml - */ - public RetrievalAttribute getAttributeXml() { - return attributeXml; - } - - /** - * @param attributeXml - * the attributeXml to set - */ - public void setAttributeXml(RetrievalAttribute attributeXml) { - this.attributeXml = attributeXml; - } - /** * @return the retrievalResponse */ diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjects.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalResponseXml.java similarity index 57% rename from edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjects.java rename to edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalResponseXml.java index 9f269e9195..937a9c4bf5 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjects.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalResponseXml.java @@ -21,9 +21,16 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; import java.util.List; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElements; +import javax.xml.bind.annotation.XmlRootElement; + import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; -import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; +import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecordPK; /** * Associates plugin data objects with a retrieval. @@ -41,19 +48,27 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; * @author djohnson * @version 1.0 */ +@XmlRootElement +@XmlAccessorType(XmlAccessType.NONE) @DynamicSerialize -public class RetrievalPluginDataObjects { +public class RetrievalResponseXml { + @XmlElement @DynamicSerializeElement - private RetrievalRequestRecord requestRecord; + private RetrievalRequestRecordPK requestRecord; + @XmlElements(@XmlElement(name = "retrievalResponseWrapper")) @DynamicSerializeElement - private List retrievalAttributePluginDataObjects; + private List retrievalAttributePluginDataObjects; + + @XmlAttribute + @DynamicSerializeElement + private boolean success; /** * Constructor. */ - public RetrievalPluginDataObjects() { + public RetrievalResponseXml() { } /** @@ -62,9 +77,8 @@ public class RetrievalPluginDataObjects { * @param requestRecord * @param retrievalAttributePluginDataObjects */ - public RetrievalPluginDataObjects( - RetrievalRequestRecord requestRecord, - List retrievalAttributePluginDataObjects) { + public RetrievalResponseXml(RetrievalRequestRecordPK requestRecord, + List retrievalAttributePluginDataObjects) { this.requestRecord = requestRecord; this.retrievalAttributePluginDataObjects = retrievalAttributePluginDataObjects; } @@ -72,7 +86,7 @@ public class RetrievalPluginDataObjects { /** * @return the requestRecord */ - public RetrievalRequestRecord getRequestRecord() { + public RetrievalRequestRecordPK getRequestRecord() { return requestRecord; } @@ -80,14 +94,14 @@ public class RetrievalPluginDataObjects { * @param requestRecord * the requestRecord to set */ - public void setRequestRecord(RetrievalRequestRecord requestRecord) { + public void setRequestRecord(RetrievalRequestRecordPK requestRecord) { this.requestRecord = requestRecord; } /** * @return the retrievalAttributePluginDataObjects */ - public List getRetrievalAttributePluginDataObjects() { + public List getRetrievalAttributePluginDataObjects() { return retrievalAttributePluginDataObjects; } @@ -96,7 +110,33 @@ public class RetrievalPluginDataObjects { * the retrievalAttributePluginDataObjects to set */ public void setRetrievalAttributePluginDataObjects( - List retrievalAttributePluginDataObjects) { + List retrievalAttributePluginDataObjects) { this.retrievalAttributePluginDataObjects = retrievalAttributePluginDataObjects; } + + /** + * @return + */ + public boolean isSuccess() { + return success; + } + + /** + * + * @param successful + */ + public void setSuccess(boolean successful) { + this.success = successful; + } + + /** + * Prepares the object for serialization. + */ + public void prepareForSerialization() { + for (RetrievalResponseWrapper attribute : getRetrievalAttributePluginDataObjects()) { + // Null out the attribute since we can retrieve it from the database + // on the receiving side + attribute.getRetrievalResponse().setAttribute(null); + } + } } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java index 099b31b2bb..bd68a6450c 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java @@ -22,8 +22,8 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; import com.raytheon.uf.common.datadelivery.registry.Network; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; -import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord.State; /** * Inner class to process individual retrievals. @@ -39,6 +39,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord.Sta * Aug 22, 2012 0743 djohnson Continue processing retrievals until there are no more. * Nov 19, 2012 1166 djohnson Clean up JAXB representation of registry objects. * Jan 30, 2013 1543 djohnson Constrain to the network retrievals are pulled for. + * Feb 15, 2013 1543 djohnson Using xml for retrievals now. * *
* @@ -56,16 +57,20 @@ public class RetrievalTask implements Runnable { private final IRetrievalResponseCompleter retrievalCompleter; - private final IRetrievalPluginDataObjectsFinder retrievalDataFinder; + private final IRetrievalsFinder retrievalDataFinder; + + private final IRetrievalDao retrievalDao; public RetrievalTask(Network network, - IRetrievalPluginDataObjectsFinder retrievalDataFinder, + IRetrievalsFinder retrievalDataFinder, IRetrievalPluginDataObjectsProcessor retrievedDataProcessor, - IRetrievalResponseCompleter retrievalCompleter) { + IRetrievalResponseCompleter retrievalCompleter, + IRetrievalDao retrievalDao) { this.network = network; this.retrievalDataFinder = retrievalDataFinder; this.retrievedDataProcessor = retrievedDataProcessor; this.retrievalCompleter = retrievalCompleter; + this.retrievalDao = retrievalDao; } @Override @@ -78,8 +83,8 @@ public class RetrievalTask implements Runnable { RetrievalRequestRecord request = null; try { - RetrievalPluginDataObjects retrievalPluginDataObject = retrievalDataFinder - .findRetrievalPluginDataObjects(); + RetrievalResponseXml retrievalPluginDataObject = retrievalDataFinder + .findRetrievals(); // This forces the return from the while loop once there are // no more retrievals to process if (retrievalPluginDataObject == null) { @@ -88,8 +93,9 @@ public class RetrievalTask implements Runnable { return; } - request = retrievalPluginDataObject.getRequestRecord(); - success = (request.getState() == State.COMPLETED); + request = retrievalDao.getById(retrievalPluginDataObject + .getRequestRecord()); + success = retrievalPluginDataObject.isSuccess(); retrievedDataProcessor .processRetrievedPluginDataObjects(retrievalPluginDataObject); } catch (Exception e) { diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java index 361218ce96..155ff08117 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java @@ -20,12 +20,15 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; import java.io.File; -import java.io.IOException; import java.util.UUID; +import javax.xml.bind.JAXBException; + +import com.raytheon.uf.common.datadelivery.registry.Coverage; +import com.raytheon.uf.common.serialization.JAXBManager; import com.raytheon.uf.common.serialization.SerializationException; -import com.raytheon.uf.common.serialization.SerializationUtil; import com.raytheon.uf.common.util.FileUtil; +import com.raytheon.uf.edex.datadelivery.retrieval.opendap.OpenDapRetrievalResponse; /** * Serializes the retrieved data to a directory. @@ -37,6 +40,7 @@ import com.raytheon.uf.common.util.FileUtil; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Feb 01, 2013 1543 djohnson Initial creation + * Feb 15, 2013 1543 djohnson Serialize data out as XML. * * * @@ -46,6 +50,8 @@ import com.raytheon.uf.common.util.FileUtil; public class SerializeRetrievedDataToDirectory implements IRetrievalPluginDataObjectsProcessor { + private final JAXBManager jaxbManager; + private final File targetDirectory; /** @@ -53,6 +59,12 @@ public class SerializeRetrievedDataToDirectory implements */ public SerializeRetrievedDataToDirectory(File directory) { this.targetDirectory = directory; + try { + this.jaxbManager = new JAXBManager(RetrievalResponseXml.class, + OpenDapRetrievalResponse.class, Coverage.class); + } catch (JAXBException e) { + throw new ExceptionInInitializerError(e); + } } /** @@ -60,13 +72,17 @@ public class SerializeRetrievedDataToDirectory implements */ @Override public void processRetrievedPluginDataObjects( - RetrievalPluginDataObjects retrievalPluginDataObjects) + RetrievalResponseXml retrievalPluginDataObjects) throws SerializationException { + retrievalPluginDataObjects.prepareForSerialization(); + try { - FileUtil.bytes2File(SerializationUtil - .transformToThrift(retrievalPluginDataObjects), new File( - targetDirectory, UUID.randomUUID().toString())); - } catch (IOException e) { + final File output = new File(targetDirectory, UUID.randomUUID() + .toString()); + final String xml = jaxbManager + .marshalToXml(retrievalPluginDataObjects); + FileUtil.bytes2File(xml.getBytes(), output); + } catch (Exception e) { throw new SerializationException(e); } } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/StoreRetrievedData.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/StoreRetrievedData.java index c9d8be1a11..e1af37e927 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/StoreRetrievedData.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/StoreRetrievedData.java @@ -19,6 +19,7 @@ **/ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -36,7 +37,9 @@ import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.util.CollectionUtil; import com.raytheon.uf.edex.datadelivery.retrieval.ServiceTypeFactory; import com.raytheon.uf.edex.datadelivery.retrieval.adapters.RetrievalAdapter; +import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; +import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse; import com.raytheon.uf.edex.datadelivery.retrieval.util.RetrievalPersistUtil; /** @@ -51,6 +54,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.util.RetrievalPersistUtil; * ------------ ---------- ----------- -------------------------- * Jan 31, 2013 1543 djohnson Initial creation * Feb 12, 2013 1543 djohnson Now handles the retrieval responses directly. + * Feb 15, 2013 1543 djohnson Retrieve the retrieval attributes from the database. * * * @@ -60,19 +64,23 @@ import com.raytheon.uf.edex.datadelivery.retrieval.util.RetrievalPersistUtil; public class StoreRetrievedData implements IRetrievalPluginDataObjectsProcessor { - private final String generalDestinationUri; - private static final IUFStatusHandler statusHandler = UFStatus .getHandler(StoreRetrievedData.class); + private final String generalDestinationUri; + + private final IRetrievalDao retrievalDao; + /** * Constructor. * * @param generalDestinationUri * the destination uri most plugin data will travel through */ - public StoreRetrievedData(String generalDestinationUri) { + public StoreRetrievedData(String generalDestinationUri, + IRetrievalDao retrievalDao) { this.generalDestinationUri = generalDestinationUri; + this.retrievalDao = retrievalDao; } /** @@ -80,22 +88,34 @@ public class StoreRetrievedData implements IRetrievalPluginDataObjectsProcessor */ @Override public void processRetrievedPluginDataObjects( - RetrievalPluginDataObjects retrievalPluginDataObjects) + RetrievalResponseXml retrievalPluginDataObjects) throws Exception { Map pluginDataObjects = Maps.newHashMap(); - final RetrievalRequestRecord requestRecord = retrievalPluginDataObjects - .getRequestRecord(); - final List retrievalAttributePluginDataObjects = retrievalPluginDataObjects + final RetrievalRequestRecord requestRecord = retrievalDao + .getById(retrievalPluginDataObjects.getRequestRecord()); + + final List retrievalAttributePluginDataObjects = retrievalPluginDataObjects .getRetrievalAttributePluginDataObjects(); final Retrieval retrieval = requestRecord.getRetrievalObj(); + final Iterator attributesIter = retrieval + .getAttributes().iterator(); final ServiceType serviceType = retrieval.getServiceType(); final RetrievalAdapter serviceRetrievalAdapter = ServiceTypeFactory .retrieveServiceRetrievalAdapter(serviceType); - for (RetrievalAttributePluginDataObjects pluginDataObjectEntry : retrievalAttributePluginDataObjects) { + for (RetrievalResponseWrapper pluginDataObjectEntry : retrievalAttributePluginDataObjects) { + if (!attributesIter.hasNext()) { + statusHandler + .warn("Did not find a RetrievalAttribute to match the retrieval response! Skipping response..."); + } + + // Restore the attribute xml prior to processing the response + final IRetrievalResponse retrievalResponse = pluginDataObjectEntry + .getRetrievalResponse(); + retrievalResponse.setAttribute(attributesIter.next()); + Map value = serviceRetrievalAdapter - .processResponse(pluginDataObjectEntry - .getRetrievalResponse()); + .processResponse(retrievalResponse); if (value == null || value.isEmpty()) { continue; @@ -114,8 +134,7 @@ public class StoreRetrievedData implements IRetrievalPluginDataObjectsProcessor pluginDataObjects.put(key, objectsForPlugin); } - final RetrievalAttribute attXML = pluginDataObjectEntry - .getAttributeXml(); + final RetrievalAttribute attXML = retrievalResponse.getAttribute(); for (Entry entry : pluginDataObjects .entrySet()) { final String pluginName = entry.getKey(); @@ -155,8 +174,8 @@ public class StoreRetrievedData implements IRetrievalPluginDataObjectsProcessor String pluginName = pdos[0].getPluginName(); if (pluginName != null) { - RetrievalPersistUtil.routePlugin(generalDestinationUri, - pluginName, pdos); + RetrievalPersistUtil.routePlugin(generalDestinationUri, pluginName, + pdos); } } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/interfaces/IRetrievalResponse.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/interfaces/IRetrievalResponse.java index a1b89da229..6893a31778 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/interfaces/IRetrievalResponse.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/interfaces/IRetrievalResponse.java @@ -32,6 +32,7 @@ import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; * ------------ ---------- ----------- -------------------------- * Jan 16, 2011 dhladky Initial creation * Feb 12, 2013 1543 djohnson The payload can just be an arbitrary object, implementations can define an array if required. + * Feb 15, 2013 1543 djohnson Expose the setAttributes method. * * * @@ -43,10 +44,12 @@ import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; public interface IRetrievalResponse { - public void setPayLoad(Object payLoad); + void setPayLoad(Object payLoad); - public Object getPayLoad(); + Object getPayLoad(); - public RetrievalAttribute getAttribute(); + RetrievalAttribute getAttribute(); + + void setAttribute(RetrievalAttribute object); } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponse.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponse.java index b22df175d0..2faaf56e1e 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponse.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponse.java @@ -19,10 +19,18 @@ **/ package com.raytheon.uf.edex.datadelivery.retrieval.opendap; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeTypeAdapter; import com.raytheon.uf.edex.datadelivery.retrieval.response.RetrievalResponse; +import dods.dap.DataDDS; + /** * {@link RetrievalResponse} for OpenDAP. * @@ -33,6 +41,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.response.RetrievalResponse; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Feb 12, 2013 1543 djohnson Initial creation + * Feb 15, 2013 1543 djohnson Only allow DataDDS payloads. * * * @@ -40,8 +49,14 @@ import com.raytheon.uf.edex.datadelivery.retrieval.response.RetrievalResponse; * @version 1.0 */ @DynamicSerializeTypeAdapter(factory = OpenDapRetrievalResponseSerializer.class) +@XmlRootElement +@XmlAccessorType(XmlAccessType.NONE) public class OpenDapRetrievalResponse extends RetrievalResponse { + @XmlElement + @XmlJavaTypeAdapter(value = OpenDapRetrievalResponseSerializer.class) + private DataDDS payload; + /** * Constructor. */ @@ -58,4 +73,24 @@ public class OpenDapRetrievalResponse extends RetrievalResponse { super(attribute); } + /** + * {@inheritDoc} + */ + @Override + public void setPayLoad(Object payload) { + if (payload != null && (!(payload instanceof DataDDS))) { + throw new IllegalArgumentException( + "Payload must be a DataDDS instance, not " + + payload.getClass().getName()); + } + this.payload = DataDDS.class.cast(payload); + } + + /** + * {@inheritDoc} + */ + @Override + public DataDDS getPayLoad() { + return payload; + } } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponseSerializer.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponseSerializer.java index 859a7e336e..48fbb5d490 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponseSerializer.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/opendap/OpenDapRetrievalResponseSerializer.java @@ -19,6 +19,8 @@ **/ package com.raytheon.uf.edex.datadelivery.retrieval.opendap; +import javax.xml.bind.annotation.adapters.XmlAdapter; + import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; import com.raytheon.uf.common.serialization.IDeserializationContext; import com.raytheon.uf.common.serialization.ISerializationContext; @@ -37,13 +39,15 @@ import dods.dap.DataDDS; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Feb 12, 2013 1543 djohnson Initial creation + * Feb 15, 2013 1543 djohnson Also can be used as JAXB adapter for DataDDS. * * * * @author djohnson * @version 1.0 */ -public class OpenDapRetrievalResponseSerializer implements +public class OpenDapRetrievalResponseSerializer extends + XmlAdapter implements ISerializationTypeAdapter { /** @@ -53,8 +57,11 @@ public class OpenDapRetrievalResponseSerializer implements public void serialize(ISerializationContext serializer, OpenDapRetrievalResponse object) throws SerializationException { serializer.writeObject(object.getAttribute()); - serializer.writeBinary(DodsUtils - .convertDataDdsToByteArray((DataDDS) object.getPayLoad())); + try { + serializer.writeBinary(marshal(object.getPayLoad())); + } catch (Exception e) { + throw new SerializationException(e); + } } /** @@ -65,8 +72,29 @@ public class OpenDapRetrievalResponseSerializer implements IDeserializationContext deserializer) throws SerializationException { OpenDapRetrievalResponse response = new OpenDapRetrievalResponse(); response.setAttribute((RetrievalAttribute) deserializer.readObject()); - response.setPayLoad(DodsUtils.restoreDataDdsFromByteArray(deserializer - .readBinary())); + try { + response.setPayLoad(unmarshal(deserializer.readBinary())); + } catch (Exception e) { + throw new SerializationException(e); + } return response; } + + /** + * {@inheritDoc} + */ + @Override + public DataDDS unmarshal(byte[] v) + throws Exception { + return DodsUtils.restoreDataDdsFromByteArray(v); + } + + /** + * {@inheritDoc} + */ + @Override + public byte[] marshal(DataDDS v) + throws Exception { + return DodsUtils.convertDataDdsToByteArray(v); + } } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/response/RetrievalResponse.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/response/RetrievalResponse.java index beff5b28d7..33bc6f58b5 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/response/RetrievalResponse.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/response/RetrievalResponse.java @@ -21,6 +21,10 @@ package com.raytheon.uf.edex.datadelivery.retrieval.response; **/ +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; + import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; @@ -36,6 +40,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse * ------------ ---------- ----------- -------------------------- * Jan 07, 2011 dhladky Initial creation * Feb 12, 2013 1543 djohnson Abstract class now. + * Feb 15, 2013 1543 djohnson Sub-classes must implement payload methods, make JAXBable. * * * @@ -44,15 +49,14 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse * @author dhladky * @version 1.0 */ +@XmlAccessorType(XmlAccessType.NONE) @DynamicSerialize public abstract class RetrievalResponse implements IRetrievalResponse { + @XmlElement @DynamicSerializeElement private RetrievalAttribute attribute; - @DynamicSerializeElement - private Object payLoad; - public RetrievalResponse() { } @@ -61,21 +65,12 @@ public abstract class RetrievalResponse implements IRetrievalResponse { this.attribute = attribute; } - @Override - public void setPayLoad(Object payLoad) { - this.payLoad = payLoad; - } - - @Override - public Object getPayLoad() { - return payLoad; - } - @Override public RetrievalAttribute getAttribute() { return attribute; } + @Override public void setAttribute(RetrievalAttribute attribute) { this.attribute = attribute; } diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java index 336ebf854b..3457e7ea82 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java @@ -42,6 +42,7 @@ import com.raytheon.uf.common.util.TestUtil; * ------------ ---------- ----------- -------------------------- * Feb 01, 2013 1543 djohnson Initial creation * Feb 12, 2013 1543 djohnson Can only test the retrieval response is now not null. + * Feb 15, 2013 1543 djohnson Some renames. * * * @@ -59,14 +60,14 @@ public class DeserializeRetrievedDataFromDirectoryTest { public void deserializesRetrievedDataFromAFileInTheTargetDirectory() throws Exception { - RetrievalPluginDataObjects retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE + RetrievalResponseXml retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE .get(); new SerializeRetrievedDataToDirectory(directory) .processRetrievedPluginDataObjects(retrievalPluginDataObjects); - final RetrievalPluginDataObjects restored = service - .findRetrievalPluginDataObjects(); + final RetrievalResponseXml restored = service + .findRetrievals(); // Just make sure the payload is present assertThat(restored.getRetrievalAttributePluginDataObjects().get(0) @@ -77,13 +78,13 @@ public class DeserializeRetrievedDataFromDirectoryTest { public void deletesFileAfterRetrievingFromTheTargetDirectory() throws Exception { - RetrievalPluginDataObjects retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE + RetrievalResponseXml retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE .get(); new SerializeRetrievedDataToDirectory(directory) .processRetrievedPluginDataObjects(retrievalPluginDataObjects); - service.findRetrievalPluginDataObjects(); + service.findRetrievals(); assertThat(directory, hasNoFiles()); } @@ -93,14 +94,14 @@ public class DeserializeRetrievedDataFromDirectoryTest { new File(directory, "subDir1").mkdirs(); - service.findRetrievalPluginDataObjects(); + service.findRetrievals(); } @Test public void returnsNullWhenNoFileInTheTargetDirectory() throws Exception { - final RetrievalPluginDataObjects restored = service - .findRetrievalPluginDataObjects(); + final RetrievalResponseXml restored = service + .findRetrievals(); assertNull(restored); } diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinderTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinderTest.java index 009d0451fe..a007e1a79c 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinderTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/PerformRetrievalPluginDataObjectsFinderTest.java @@ -42,7 +42,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord.Sta import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse; /** - * Test {@link PerformRetrievalPluginDataObjectsFinder}. + * Test {@link PerformRetrievalsThenReturnFinder}. * *
  * 
@@ -123,7 +123,7 @@ public class PerformRetrievalPluginDataObjectsFinderTest {
         IRetrievalResponse retrievalResponse = mock(IRetrievalResponse.class);
         when(retrievalResponse.getPayLoad()).thenReturn(null);
 
-        PerformRetrievalPluginDataObjectsFinder.setCompletionStateFromResponse(
+        PerformRetrievalsThenReturnFinder.setCompletionStateFromResponse(
                 retrievalThatDoesNotThrowException, retrievalResponse);
 
         assertThat(retrievalThatDoesNotThrowException.getState(),
@@ -131,7 +131,7 @@ public class PerformRetrievalPluginDataObjectsFinderTest {
     }
 
     private void processRetrieval(RetrievalRequestRecord retrieval) {
-        final PerformRetrievalPluginDataObjectsFinder pluginDataObjectsFinder = new PerformRetrievalPluginDataObjectsFinder(
+        final PerformRetrievalsThenReturnFinder pluginDataObjectsFinder = new PerformRetrievalsThenReturnFinder(
                 Network.OPSNET, MOCK_DAO);
         pluginDataObjectsFinder.process(retrieval);
     }
diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjectsFixture.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjectsFixture.java
index 8dee10f774..8248c6bea3 100644
--- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjectsFixture.java
+++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalPluginDataObjectsFixture.java
@@ -31,7 +31,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalRequestB
 import com.raytheon.uf.edex.datadelivery.retrieval.opendap.MockOpenDapRetrievalAdapter;
 
 /**
- * Fixture for {@link RetrievalPluginDataObjects} instances.
+ * Fixture for {@link RetrievalResponseXml} instances.
  * 
  * 
  * 
@@ -41,6 +41,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.opendap.MockOpenDapRetrievalA
  * ------------ ---------- ----------- --------------------------
  * Feb 01, 2013 1543       djohnson     Initial creation
  * Feb 12, 2013 1543       djohnson     No longer set plugin data objects themselves, just retrieval attributes.
+ * Feb 15, 2013 1543       djohnson     Class renames.
  * 
  * 
* @@ -49,7 +50,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.opendap.MockOpenDapRetrievalA */ public class RetrievalPluginDataObjectsFixture extends - AbstractFixture { + AbstractFixture { public static final RetrievalPluginDataObjectsFixture INSTANCE = new RetrievalPluginDataObjectsFixture(); @@ -64,16 +65,15 @@ public class RetrievalPluginDataObjectsFixture extends * {@inheritDoc} */ @Override - public RetrievalPluginDataObjects get(long seedValue) { + public RetrievalResponseXml get(long seedValue) { RetrievalRequestRecord requestRecord = RetrievalRequestRecordFixture.INSTANCE .get(seedValue); - List retrievalAttributePluginDataObjects = new ArrayList(); + List retrievalAttributePluginDataObjects = new ArrayList(); try { for (final RetrievalAttribute attribute : requestRecord .getRetrievalObj().getAttributes()) { retrievalAttributePluginDataObjects - .add(new RetrievalAttributePluginDataObjects( - attribute, + .add(new RetrievalResponseWrapper( new MockOpenDapRetrievalAdapter() .performRequest(new IRetrievalRequestBuilder() { @Override @@ -102,8 +102,8 @@ public class RetrievalPluginDataObjectsFixture extends throw new RuntimeException(e); } - final RetrievalPluginDataObjects retrievalPluginDataObjects = new RetrievalPluginDataObjects( - requestRecord, retrievalAttributePluginDataObjects); + final RetrievalResponseXml retrievalPluginDataObjects = new RetrievalResponseXml( + requestRecord.getId(), retrievalAttributePluginDataObjects); return retrievalPluginDataObjects; } } diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalRequestRecordFixture.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalRequestRecordFixture.java index dec0728cb6..8a27f93ea4 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalRequestRecordFixture.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalRequestRecordFixture.java @@ -19,12 +19,15 @@ **/ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; +import com.raytheon.uf.common.datadelivery.registry.GriddedCoverageFixture; import com.raytheon.uf.common.datadelivery.registry.Provider; import com.raytheon.uf.common.datadelivery.registry.ProviderFixture; import com.raytheon.uf.common.datadelivery.registry.Subscription; import com.raytheon.uf.common.datadelivery.registry.SubscriptionBundle; import com.raytheon.uf.common.datadelivery.registry.SubscriptionFixture; +import com.raytheon.uf.common.datadelivery.retrieval.xml.Retrieval; import com.raytheon.uf.common.datadelivery.retrieval.xml.Retrieval.SubscriptionType; +import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; import com.raytheon.uf.common.serialization.SerializationException; import com.raytheon.uf.common.serialization.SerializationUtil; import com.raytheon.uf.common.time.util.TimeUtil; @@ -43,6 +46,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.opendap.MockOpenDapServiceFac * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jan 30, 2013 1543 djohnson Initial creation + * Feb 15, 2013 1543 djohnson Set coverage on retrieval attributes. * *
* @@ -90,10 +94,16 @@ public class RetrievalRequestRecordFixture extends rec.setState(RetrievalRequestRecord.State.PENDING); try { - rec.setRetrieval(SerializationUtil - .transformToThrift(new MockOpenDapServiceFactory(provider) - .getRetrievalGenerator().buildRetrieval(bundle) - .iterator().next())); + final Retrieval retrieval = new MockOpenDapServiceFactory(provider) + .getRetrievalGenerator().buildRetrieval(bundle).iterator() + .next(); + + for (RetrievalAttribute attribute : retrieval.getAttributes()) { + attribute.setCoverage(GriddedCoverageFixture.INSTANCE + .get(seedValue)); + } + + rec.setRetrieval(SerializationUtil.transformToThrift(retrieval)); } catch (SerializationException e) { throw new RuntimeException(e); } diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java index 635ddf40d0..680fa9ae4d 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java @@ -24,11 +24,11 @@ import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import java.io.File; import java.util.ArrayList; import java.util.Arrays; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -47,6 +47,7 @@ import com.raytheon.uf.common.datadelivery.event.retrieval.DataRetrievalEvent; import com.raytheon.uf.common.datadelivery.registry.Network; import com.raytheon.uf.common.datadelivery.registry.Provider.ServiceType; import com.raytheon.uf.common.datadelivery.retrieval.xml.Retrieval; +import com.raytheon.uf.common.datadelivery.retrieval.xml.RetrievalAttribute; import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.event.EventBus; import com.raytheon.uf.common.localization.PathManagerFactoryTest; @@ -75,6 +76,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse * Jan 30, 2013 1543 djohnson Initial creation * Feb 07, 2013 1543 djohnson Add test to simulate SBN retrieval task behavior. * Feb 12, 2013 1543 djohnson Retrieval responses are now sent further down the chain. + * Feb 15, 2013 1543 djohnson Class renames. * * * @@ -84,12 +86,12 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { DatabaseUtil.UNIT_TEST_DB_BEANS_XML, SpringFiles.RETRIEVAL_DATADELIVERY_DAOS_XML }) - @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) +@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class RetrievalTaskTest { /** * Places the plugin data object into a collection for inspection. */ - public static class PlaceInCollectionProcessor implements + public class PlaceInCollectionProcessor implements IRetrievalPluginDataObjectsProcessor { public final List pluginDataObjects = new ArrayList(); @@ -98,22 +100,33 @@ public class RetrievalTaskTest { */ @Override public void processRetrievedPluginDataObjects( - RetrievalPluginDataObjects retrievalPluginDataObjects) + RetrievalResponseXml retrievalPluginDataObjects) throws Exception { - final List retrievalAttributePluginDataObjects = retrievalPluginDataObjects + final List retrievalAttributePluginDataObjects = retrievalPluginDataObjects .getRetrievalAttributePluginDataObjects(); - final RetrievalRequestRecord requestRecord = retrievalPluginDataObjects - .getRequestRecord(); + final RetrievalRequestRecord requestRecord = dao + .getById(retrievalPluginDataObjects.getRequestRecord()); final Retrieval retrieval = requestRecord.getRetrievalObj(); final ServiceType serviceType = retrieval.getServiceType(); final RetrievalAdapter serviceRetrievalAdapter = ServiceTypeFactory .retrieveServiceRetrievalAdapter(serviceType); + final Iterator attributesIter = retrieval + .getAttributes().iterator(); - for (RetrievalAttributePluginDataObjects pluginDataObjectEntry : retrievalAttributePluginDataObjects) { - IRetrievalResponse value = pluginDataObjectEntry + for (RetrievalResponseWrapper pluginDataObjectEntry : retrievalAttributePluginDataObjects) { + + if (!attributesIter.hasNext()) { + throw new RuntimeException( + "Did not find a RetrievalAttribute to match the retrieval response!"); + } + + // Restore the attribute xml prior to processing the response + final IRetrievalResponse response = pluginDataObjectEntry .getRetrievalResponse(); + response.setAttribute(attributesIter.next()); + final Map processed = serviceRetrievalAdapter - .processResponse(value); + .processResponse(response); for (PluginDataObject[] pdos : processed.values()) { pluginDataObjects.addAll(Arrays.asList(pdos)); } @@ -202,14 +215,10 @@ public class RetrievalTaskTest { @Test public void retrievalTaskCanStoreDataToDirectoryThatAnotherTaskProcesses() throws Exception { - RetrievalPluginDataObjects retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE - .get(); + dao.create(RetrievalRequestRecordFixture.INSTANCE.get()); - IRetrievalPluginDataObjectsFinder retrievalDataFinder = mock(IRetrievalPluginDataObjectsFinder.class); - when(retrievalDataFinder.findRetrievalPluginDataObjects()).thenReturn( - retrievalPluginDataObjects).thenReturn(null); - - IRetrievalResponseCompleter retrievalCompleter = mock(IRetrievalResponseCompleter.class); + IRetrievalsFinder retrievalDataFinder = new PerformRetrievalsThenReturnFinder( + Network.OPSNET, dao); final File testDirectory = TestUtil .setupTestClassDir(RetrievalTaskTest.class); @@ -217,15 +226,30 @@ public class RetrievalTaskTest { testDirectory); RetrievalTask downloadTask = new RetrievalTask(Network.OPSNET, - retrievalDataFinder, serializeToDirectory, retrievalCompleter); + retrievalDataFinder, serializeToDirectory, + mock(IRetrievalResponseCompleter.class), dao); RetrievalTask readDownloadsTask = new RetrievalTask(Network.OPSNET, new DeserializeRetrievedDataFromDirectory(testDirectory), - retrievedDataProcessor, retrievalCompleter); + retrievedDataProcessor, new RetrievalResponseCompleter( + mock(SubscriptionNotifyTask.class), dao), dao); downloadTask.run(); + + final List all = dao.getAll(); + for (RetrievalRequestRecord request : all) { + assertThat(request.getState(), is(State.RUNNING)); + } + readDownloadsTask.run(); + final List allRetrievals = dao.getAll(); + assertThat(allRetrievals, hasSize(1)); assertThat(retrievedDataProcessor.pluginDataObjects, hasSize(2)); + + for (RetrievalRequestRecord request : allRetrievals) { + assertThat(request.getState(), is(State.COMPLETED)); + } + } /** @@ -242,13 +266,13 @@ public class RetrievalTaskTest { private void runRetrievalTask() { // Create required strategies for finding, processing, and completing // retrievals - final IRetrievalPluginDataObjectsFinder retrievalDataFinder = new PerformRetrievalPluginDataObjectsFinder( + final IRetrievalsFinder retrievalDataFinder = new PerformRetrievalsThenReturnFinder( Network.OPSNET, dao); final IRetrievalResponseCompleter retrievalCompleter = new RetrievalResponseCompleter( mock(SubscriptionNotifyTask.class), dao); new RetrievalTask(Network.OPSNET, retrievalDataFinder, - retrievedDataProcessor, retrievalCompleter).run(); + retrievedDataProcessor, retrievalCompleter, dao).run(); } /** diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java index 96382440f7..2bab599815 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java @@ -39,6 +39,7 @@ import com.raytheon.uf.common.util.TestUtil; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Feb 01, 2013 1543 djohnson Initial creation + * Feb 15, 2013 1543 djohnson Class renames. * * * @@ -57,7 +58,7 @@ public class SerializeRetrievedDataToDirectoryTest { public void serializesRetrievedDataToAFileInTheTargetDirectory() throws SerializationException { - RetrievalPluginDataObjects retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE + RetrievalResponseXml retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE .get(); service.processRetrievedPluginDataObjects(retrievalPluginDataObjects);