From bd7b3fc3dee8048699fcec38ea2ab78f14e3c25b Mon Sep 17 00:00:00 2001 From: Dave Hladky Date: Mon, 13 Jan 2014 17:15:52 -0600 Subject: [PATCH] Issue #2679 Multiple regions for a single collector mapped to single WFS source Change-Id: I1e4b1eefe5f507742805886292ba67b24f40f34c Former-commit-id: 0888c8f80aa9484dbee4ad0f1c448a4199ad60bb [formerly bdaf00a48ade2fd08212696c09b7e8dc540aaaad] [formerly eddceed7568786258b798002e69febc69f980c0d] [formerly eddceed7568786258b798002e69febc69f980c0d [formerly 08625addbaa52edb6ff6d80a9ed1ddaf87540c9d]] [formerly 0888c8f80aa9484dbee4ad0f1c448a4199ad60bb [formerly bdaf00a48ade2fd08212696c09b7e8dc540aaaad] [formerly eddceed7568786258b798002e69febc69f980c0d] [formerly eddceed7568786258b798002e69febc69f980c0d [formerly 08625addbaa52edb6ff6d80a9ed1ddaf87540c9d]] [formerly c57c27c84342d7c214e6ae1bc8f38219b0b8fed2 [formerly eddceed7568786258b798002e69febc69f980c0d [formerly 08625addbaa52edb6ff6d80a9ed1ddaf87540c9d] [formerly c57c27c84342d7c214e6ae1bc8f38219b0b8fed2 [formerly b888d311923ba0628fa015018ef2f62fce47fb43]]]]] Former-commit-id: c57c27c84342d7c214e6ae1bc8f38219b0b8fed2 Former-commit-id: dba509a597ea3756c6efebe45ebcbdbc02772b88 [formerly 5cc337003aadfaf2b7402aeec5175e6ccd512349] [formerly 9d136bb7d8e1389a72a4b27803bbae5cb0e651b4] [formerly 36866c3c09689e50307a71b9d58a0fcf2fa95fa5 [formerly edd648771874f35130649ae7bc594cfa8f6feda0] [formerly 9d136bb7d8e1389a72a4b27803bbae5cb0e651b4 [formerly 6069bb90c70c7958e03a3a95a4583d36462776ca]]] Former-commit-id: 9ba25e26b673fc10e492d20987693910ab5bab1f [formerly 5b10a19969ade1327d8d6bec3588ab1fed144fda] [formerly 097c4379f054072ec334b80c8eea838f282c80ed [formerly abd51271605015d728f2c318e4e82a6f8b2a8a73]] Former-commit-id: 097c4379f054072ec334b80c8eea838f282c80ed Former-commit-id: 216d1afd3bf8f55e2e70c8175584b479a55fef90 --- .../harvester/MADIS-harvester.xml | 817 +++++++++++++++++- .../bandwidth/EdexBandwidthManager.java | 6 +- .../retrieval/util/WfsConnectionUtil.java | 15 +- .../edex/ogc/common/db/ICollectorAddon.java | 3 +- .../ogc/registry/RegistryCollectorAddon.java | 27 +- .../registry/RegistryFeatureTypeModifier.java | 17 +- .../registry/WcsRegistryCollectorAddon.java | 57 +- .../registry/WfsRegistryCollectorAddon.java | 341 ++++++-- .../res/spring/madis-ogc-registry.xml | 16 +- .../registry/MadisRegistryCollectorAddon.java | 78 +- .../res/spring/obs-ogc-registry.xml | 1 - .../registry/ObsRegistryCollectorAddon.java | 73 +- 12 files changed, 1208 insertions(+), 243 deletions(-) diff --git a/edexOsgi/com.raytheon.uf.common.datadelivery.harvester/utility/common_static/base/datadelivery/harvester/MADIS-harvester.xml b/edexOsgi/com.raytheon.uf.common.datadelivery.harvester/utility/common_static/base/datadelivery/harvester/MADIS-harvester.xml index 34e548d512..06fc387809 100644 --- a/edexOsgi/com.raytheon.uf.common.datadelivery.harvester/utility/common_static/base/datadelivery/harvester/MADIS-harvester.xml +++ b/edexOsgi/com.raytheon.uf.common.datadelivery.harvester/utility/common_static/base/datadelivery/harvester/MADIS-harvester.xml @@ -21,14 +21,827 @@ HHddMMMyyyy - + -120.0 -70.0 20.0 50.0 crs:84 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -180.0 + -114.0 + 55.0 + 85.0 + crs:84 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -162.0 + -152.0 + 16.0 + 24.0 + crs:84 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -63.8 + -68.5 + 16.5 + 19.8 + crs:84 + diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/EdexBandwidthManager.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/EdexBandwidthManager.java index 6542b1c51c..3d28404308 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/EdexBandwidthManager.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/EdexBandwidthManager.java @@ -111,7 +111,8 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.util.BandwidthUtil; * Nov 15, 2013 2545 bgonzale Added check for subscription events before sending * notifications. Republish dataset metadata registry * insert and update events as dataset metadata events. - * Jan 14, 2014 2692 dhladky AdhocSubscription handler + * Jan 13, 2014 2679 dhladky Small Point data updates. + * Jan 14, 2014 2692 dhladky AdhocSubscription handler * * * @@ -437,8 +438,9 @@ public abstract class EdexBandwidthManager } private void publishDataSetMetaDataEvent(RegistryEvent re) { + final String id = re.getId(); - DataSetMetaData dsmd = getDataSetMetaData(id); + DataSetMetaData dsmd = getDataSetMetaData(id); if (dsmd != null) { // Repost the Object to the BandwidthEventBus to free diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/util/WfsConnectionUtil.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/util/WfsConnectionUtil.java index 0fc5e88bd2..c3c6878915 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/util/WfsConnectionUtil.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/util/WfsConnectionUtil.java @@ -2,6 +2,7 @@ package com.raytheon.uf.edex.datadelivery.retrieval.util; import java.net.URI; import java.net.URISyntaxException; +import java.util.regex.Pattern; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; @@ -34,6 +35,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority; * Aug 23, 2013 2180 mpduff Implement changes to ProviderCredentialsUtil * Aug 06, 2013 2097 dhladky WFS 2.0 compliance upgrade and switched to POST * Nov 20, 2013 2554 dhladky Added GZIP capability to WFS requests. + * Jan 13, 2014 2697 dhladky Added util to strip unique Id field from URL. * * * @@ -45,6 +47,8 @@ public class WfsConnectionUtil { private static final IUFStatusHandler statusHandler = UFStatus .getHandler(WfsConnectionUtil.class); + + private static final Pattern COMMA_PATTERN = Pattern.compile(","); /** * Connect to the provided URL and return the xml response. @@ -66,7 +70,7 @@ public class WfsConnectionUtil { try { - rootUrl = providerConn.getUrl(); + rootUrl = getCleanUrl(providerConn.getUrl()); http = HttpClient.getInstance(); // accept gzipped data for WFS http.setGzipResponseHandling(true); @@ -192,4 +196,13 @@ public class WfsConnectionUtil { return httpPort; } } + + /** + * Removes un-needed unique Identifier from PointDataSetMetaData derived URL's + * @param rootUrl + * @return + */ + private static String getCleanUrl(String providerUrl) { + return COMMA_PATTERN.split(providerUrl)[0]; + } } diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/db/ICollectorAddon.java b/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/db/ICollectorAddon.java index c9eb501a84..f5b46ba3da 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/db/ICollectorAddon.java +++ b/edexOsgi/com.raytheon.uf.edex.ogc.common/src/com/raytheon/uf/edex/ogc/common/db/ICollectorAddon.java @@ -13,6 +13,7 @@ import java.util.Date; import java.util.Set; import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject; /** * Interface for extending layer collectors to perform additional tasks @@ -30,7 +31,7 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject; * @author bclement * @version 1.0 */ -public interface ICollectorAddon, R extends PluginDataObject> { +public interface ICollectorAddon, R extends PersistableDataObject> { /** * Called after record is added to layer. Both should be treated as diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/RegistryCollectorAddon.java b/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/RegistryCollectorAddon.java index ba9b554e36..94a5693956 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/RegistryCollectorAddon.java +++ b/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/RegistryCollectorAddon.java @@ -35,10 +35,12 @@ import com.raytheon.uf.common.datadelivery.registry.DataType; import com.raytheon.uf.common.datadelivery.registry.Levels; import com.raytheon.uf.common.datadelivery.registry.Parameter; import com.raytheon.uf.common.datadelivery.registry.Provider; +import com.raytheon.uf.common.datadelivery.registry.Time; import com.raytheon.uf.common.datadelivery.registry.handlers.DataDeliveryHandlers; import com.raytheon.uf.common.datadelivery.registry.handlers.IDataSetHandler; import com.raytheon.uf.common.datadelivery.registry.handlers.IDataSetMetaDataHandler; import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.geospatial.ISpatialObject; import com.raytheon.uf.common.registry.handler.RegistryHandlerException; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; @@ -48,7 +50,7 @@ import com.raytheon.uf.edex.ogc.common.db.SimpleDimension; import com.raytheon.uf.edex.ogc.common.db.SimpleLayer; /** - * TODO Add Description + * Collector Used to gather data with DPA, used for AWIPS registry data feeds from providers. * *
  * 
@@ -58,6 +60,7 @@ import com.raytheon.uf.edex.ogc.common.db.SimpleLayer;
  * ------------ ---------- ----------- --------------------------
  * Jul 23, 2013            bclement     Initial creation
  * Aug 08, 2013            dhladky      Made operational
+ * Jan 13, 2014  #2679     dhladky      multiple layers
  * 
  * 
* @@ -108,7 +111,7 @@ public abstract class RegistryCollectorAddon metaData) { IDataSetMetaDataHandler handler = DataDeliveryHandlers .getDataSetMetaDataHandler(); @@ -132,7 +135,7 @@ public abstract class RegistryCollectorAddon dataSetToStore) { DataSetName dsn = new DataSetName(); // Set the RegistryObject Id keys for this Object @@ -158,9 +161,9 @@ public abstract class RegistryCollectorAddon dataSet) { - DataSet dataSetToStore = getDataSetToStore(dataSet); + DataSet dataSetToStore = getDataSetToStore(dataSet); final String dataSetName = dataSetToStore.getDataSetName(); IDataSetHandler handler = DataDeliveryHandlers.getDataSetHandler(); @@ -200,9 +203,11 @@ public abstract class RegistryCollectorAddon result = DataDeliveryHandlers.getDataSetHandler() .getByNameAndProvider(dataSet.getDataSetName(), dataSet.getProviderName()); if (result != null) { @@ -244,7 +249,7 @@ public abstract class RegistryCollectorAddon getDataSet(String layerName); protected abstract void setDataSetMetaData(L layer); - protected abstract DataSetMetaData getDataSetMetaData(); + protected abstract DataSetMetaData getDataSetMetaData(String layerName); protected abstract DataType getDataType(); @@ -283,5 +288,9 @@ public abstract class RegistryCollectorAddon * @@ -115,13 +117,10 @@ public class RegistryFeatureTypeModifier implements IFeatureTypeModifier { OgcGeoBoundingBox bbox = null; try { - ConfigLayer layer = getConfigLayer(name); - double upperLeftLon = layer.getMinx(); - double lowerRightLon = layer.getMaxx(); - double upperLeftLat = layer.getMaxy(); - double lowerRightLat = layer.getMiny(); - bbox = new OgcGeoBoundingBox(lowerRightLon, upperLeftLon, - upperLeftLat, lowerRightLat); + // we default to whole earth now. + // We don't really care about the DataSet specific areas for the feature + // They are added together and treated as a whole for requests from the DPA + bbox = AbstractWfsSource.fullBbox; } catch (Exception e) { statusHandler.handle(Priority.ERROR, @@ -142,8 +141,8 @@ public class RegistryFeatureTypeModifier implements IFeatureTypeModifier { String crs = null; try { - ConfigLayer layer = getConfigLayer(name); - crs = layer.getCrs(); + // Default to WGS:84 + crs = AbstractWfsSource.defaultCRS; } catch (Exception e) { statusHandler.handle(Priority.ERROR, "Couldn't retrieve CRS for feature: " + name diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WcsRegistryCollectorAddon.java b/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WcsRegistryCollectorAddon.java index fe40bb57fb..a4e978197b 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WcsRegistryCollectorAddon.java +++ b/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WcsRegistryCollectorAddon.java @@ -28,6 +28,8 @@ import java.util.Set; import com.raytheon.uf.common.datadelivery.registry.Coverage; import com.raytheon.uf.common.datadelivery.registry.DataLevelType; import com.raytheon.uf.common.datadelivery.registry.DataLevelType.LevelType; +import com.raytheon.uf.common.datadelivery.registry.DataSet; +import com.raytheon.uf.common.datadelivery.registry.DataSetMetaData; import com.raytheon.uf.common.datadelivery.registry.DataType; import com.raytheon.uf.common.datadelivery.registry.GriddedDataSet; import com.raytheon.uf.common.datadelivery.registry.GriddedDataSetMetaData; @@ -35,6 +37,7 @@ import com.raytheon.uf.common.datadelivery.registry.Levels; import com.raytheon.uf.common.datadelivery.registry.Time; import com.raytheon.uf.common.datadelivery.retrieval.util.LookupManager; import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.geospatial.ISpatialObject; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.edex.ogc.common.db.SimpleDimension; @@ -52,6 +55,7 @@ import com.raytheon.uf.edex.ogc.common.interfaces.IWCSMetaData; * ------------ ---------- ----------- -------------------------- * Jul 25, 2013 bclement Initial creation * Aug 18, 2013 #2097 dhladky Adapted to AWIPS + * Jan 13, 2014 #2679 dhladky Multiple layers * * * @@ -69,18 +73,16 @@ public class WcsRegistryCollectorAddon getDataSet(String layerName) { + // TODO Auto-generated method stub + return null; + } + + @Override + protected DataSetMetaData getDataSetMetaData(String layerName) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String isWithinLayer(R record) { + // TODO Auto-generated method stub + return null; + } + + @Override + public ISpatialObject getSpatial(R record) { + // TODO Auto-generated method stub + return null; + } + } diff --git a/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WfsRegistryCollectorAddon.java b/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WfsRegistryCollectorAddon.java index da4d9f2702..d9d5146234 100644 --- a/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WfsRegistryCollectorAddon.java +++ b/edexOsgi/com.raytheon.uf.edex.ogc.registry/src/com/raytheon/uf/edex/ogc/registry/WfsRegistryCollectorAddon.java @@ -23,8 +23,12 @@ import java.lang.reflect.Constructor; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TimeZone; import java.util.TreeSet; @@ -42,6 +46,7 @@ import com.raytheon.uf.common.datadelivery.registry.PointDataSetMetaData; import com.raytheon.uf.common.datadelivery.registry.PointTime; import com.raytheon.uf.common.datadelivery.registry.WFSPointDataSet; import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.geospatial.ISpatialObject; import com.raytheon.uf.common.geospatial.MapUtil; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; @@ -70,39 +75,39 @@ import com.vividsolutions.jts.geom.Envelope; * Sept 30, 2013 1797 dhladky Generics * Oct 10, 2013 1797 bgonzale Refactored registry Time objects. * Nov 6, 2013 2525 dhladky Stop appending "/wfs" + * Jan 13, 2014 2679 dhladky Multiple ingest layer windows for a single request window. * * * * @author bclement * @version 1.0 */ -public class WfsRegistryCollectorAddon, R extends PluginDataObject> +public abstract class WfsRegistryCollectorAddon, R extends PluginDataObject> extends RegistryCollectorAddon implements IWFSMetaData { protected final IUFStatusHandler statusHandler = UFStatus.getHandler(this .getClass()); - protected WFSPointDataSet wpds = new WFSPointDataSet(); + protected final Map wpds = new HashMap(1); - protected PointDataSetMetaData pdsmd = new PointDataSetMetaData(); + protected final Map pdsmds = new HashMap(1); - protected PointTime time = new PointTime(); + protected final Map times = new HashMap(1); - protected Coverage coverage = new Coverage(); + protected final Map coverages = new HashMap(1); - protected volatile L _layer = null; - - protected int roundCutoff = 45; - - protected final String layerName; + protected final Map layers = new HashMap(1); + + protected final Map previousTimes = new HashMap(1); - protected Date previousTime = null; + protected int roundCutoff = 45; + + /** Used to identify breaking character for URL and unique naming key **/ + public static final String UNIQUE_ID_SEPARATOR = ","; - /** - * @param layerName - */ - public WfsRegistryCollectorAddon(String layerName) { - this.layerName = layerName; + public WfsRegistryCollectorAddon() { + + super(); } /* @@ -116,8 +121,12 @@ public class WfsRegistryCollectorAddon entry : layers.entrySet()) { + + L _layer = entry.getValue(); + + if (_layer == null) { + synchronized (_layer) { + initializeLayer(_layer); + layers.put(layer.getName(), _layer); + } } - L copy = copy(layer); - copy.getTimes().clear(); - initializeLayer(copy); - _layer = copy; - } - } else { - if (!layer.getName().equals(layerName)) { - statusHandler - .warn("WFS Registry collector used with multiple layers, unexpected behavior may occur"); } } } @@ -188,11 +200,10 @@ public class WfsRegistryCollectorAddon()); - // install main dataset name on registry - storeDataSet(getDataSet()); + // create the main point data set + setDataSet(layer); + // install main dataset name on registry + WFSPointDataSet pds = getDataSet(layer.getName()); + storeDataSet(pds); } } @@ -221,8 +235,16 @@ public class WfsRegistryCollectorAddon times = new ArrayList(); + List timeList = new ArrayList(); // for dataset we just create a place holder object // DataSetMetaData gets the actual times if (layer.getTimes() != null) { for (Date time : layer.getTimes()) { - times.add(time); + timeList.add(time); } - time.setTimes(times); - time.setNumTimes(times.size()); + PointTime time = getTime(layer.getName()); + time.setTimes(timeList); + time.setNumTimes(timeList.size()); // apply date format SimpleDateFormat dateFormat = new SimpleDateFormat( getConfiguration().getAgent().getDateFormat()); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); time.setFormat(dateFormat.toPattern()); - if (!times.isEmpty()) { + if (!timeList.isEmpty()) { + + Date previousTime = previousTimes.get(layer.getName()); + if (previousTime == null) { - time.setStart(times.get(0)); + time.setStart(timeList.get(0)); } else { try { time.setStartDate(dateFormat.format(previousTime)); @@ -259,20 +285,34 @@ public class WfsRegistryCollectorAddon withInGeoConstraint = new ArrayList(); + PluginDataObject[] pdor = null; + + for (PluginDataObject record : pdos) { + + if (record != null) { + + @SuppressWarnings("unchecked") + ISpatialObject spatial = getSpatial((R) record); + Coordinate c = spatial.getGeometry().getCoordinate(); + + // Have to loop over the layers in order to separate them. + for (String name : layers.keySet()) { + + Coverage coverage = getCoverage(name); + + if (coverage != null) { + + Envelope e = coverage.getEnvelope(); + + if (c != null) { + + if (e.contains(c)) { + withInGeoConstraint.add(record); + // once it is found to be within one, you are done. + break; + } else { + statusHandler.handle( + Priority.DEBUG, + "Record discarded: outside of range: " + + c.x + " " + + c.y); + } + } + } + } + } + } + + if (!withInGeoConstraint.isEmpty()) { + int size = withInGeoConstraint.size(); + pdor = withInGeoConstraint.toArray(new PluginDataObject[size]); + } + + return pdor; + } + + @Override + public String isWithinLayer(R record) { + + String layerName = null; + + if (record != null) { + + ISpatialObject spatial = getSpatial(record); + Coordinate c = spatial.getGeometry().getCoordinate(); + + // Figure out which layer to tally this record too. + for (String name : layers.keySet()) { + + Coverage coverage = getCoverage(name); + + if (coverage != null) { + + Envelope e = coverage.getEnvelope(); + + if (c != null) { + + if (e.contains(c)) { + layerName = name; + break; + } + } + } + } + } + + return layerName; } } diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml b/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml index 1811a66f72..4250cd20c2 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml @@ -49,16 +49,18 @@ - - - - + + + + + - - - + diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/src/com/raytheon/uf/edex/plugin/madis/registry/MadisRegistryCollectorAddon.java b/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/src/com/raytheon/uf/edex/plugin/madis/registry/MadisRegistryCollectorAddon.java index 5bfce9e07e..237523dc73 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/src/com/raytheon/uf/edex/plugin/madis/registry/MadisRegistryCollectorAddon.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/src/com/raytheon/uf/edex/plugin/madis/registry/MadisRegistryCollectorAddon.java @@ -19,19 +19,16 @@ **/ package com.raytheon.uf.edex.plugin.madis.registry; -import java.util.ArrayList; -import java.util.Collection; import java.util.Date; -import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.datadelivery.harvester.ConfigLayer; +import com.raytheon.uf.common.datadelivery.harvester.OGCAgent; import com.raytheon.uf.common.dataplugin.madis.MadisRecord; -import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation; import com.raytheon.uf.edex.ogc.common.util.PluginIngestFilter; import com.raytheon.uf.edex.ogc.registry.WfsRegistryCollectorAddon; import com.raytheon.uf.edex.plugin.madis.ogc.MadisDimension; import com.raytheon.uf.edex.plugin.madis.ogc.MadisLayer; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.Envelope; /** * @@ -46,6 +43,7 @@ import com.vividsolutions.jts.geom.Envelope; * Aug 30, 2013 #2098 dhladky Incorrect time returned * Sept 2, 2013 #2098 dhladky Improved time management. * Sept 9, 2013 #2351 dhladky Speed improvements + * Jan 13, 2014 #2679 dhladky multiple ingest layers for a single request window. * * * @@ -57,12 +55,19 @@ public class MadisRegistryCollectorAddon extends implements PluginIngestFilter { /** - * @param layerName + * @param layerNames */ - public MadisRegistryCollectorAddon(String layerName) { - super(layerName); - this._layer = new MadisLayer(); - initializeLayer(_layer); + public MadisRegistryCollectorAddon() { + + super(); + OGCAgent agent = getAgent(); + + for (ConfigLayer clayer: agent.getLayers()) { + MadisLayer layer = new MadisLayer(); + layer.setName(clayer.getName()); + layers.put(clayer.getName(), layer); + initializeLayer(layer); + } } /* @@ -90,50 +95,15 @@ public class MadisRegistryCollectorAddon extends return new MadisLayer(layer); } - /** - * Filter geographically - */ - public PluginDataObject[] filter(PluginDataObject[] pdos) { - - Collection withInGeoConstraint = new ArrayList(); - PluginDataObject[] pdor = null; - Envelope e = null; - - if (getCoverage() != null) { - - e = getCoverage().getEnvelope(); - - for (PluginDataObject record : pdos) { - - MadisRecord rec = (MadisRecord) record; - - if (rec != null && rec.getLocation() != null) { - - Coordinate c = rec.getLocation().getLocation() - .getCoordinate(); - - if (c != null) { - - if (e.contains(c)) { - withInGeoConstraint.add(rec); - } else { - statusHandler.handle( - Priority.DEBUG, - "Madis record discarded: outside of range: " - + rec.getLatitude() + " " - + rec.getLongitude()); - } - } - } - } + @Override + public SurfaceObsLocation getSpatial(MadisRecord record) { + + if (record.getLocation() != null) { + return record.getLocation(); } + return null; + } - if (!withInGeoConstraint.isEmpty()) { - int size = withInGeoConstraint.size(); - pdor = withInGeoConstraint.toArray(new PluginDataObject[size]); - } - - return pdor; - } + } diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/res/spring/obs-ogc-registry.xml b/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/res/spring/obs-ogc-registry.xml index 2f6d8d9a5f..9853a10fed 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/res/spring/obs-ogc-registry.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/res/spring/obs-ogc-registry.xml @@ -4,7 +4,6 @@ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/src/com/raytheon/uf/edex/plugin/obs/registry/ObsRegistryCollectorAddon.java b/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/src/com/raytheon/uf/edex/plugin/obs/registry/ObsRegistryCollectorAddon.java index a132741b5b..b37a36123c 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/src/com/raytheon/uf/edex/plugin/obs/registry/ObsRegistryCollectorAddon.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.obs.registry/src/com/raytheon/uf/edex/plugin/obs/registry/ObsRegistryCollectorAddon.java @@ -9,21 +9,18 @@ */ package com.raytheon.uf.edex.plugin.obs.registry; -import java.util.ArrayList; import java.util.Calendar; -import java.util.Collection; import java.util.Date; -import com.raytheon.uf.common.dataplugin.PluginDataObject; +import com.raytheon.uf.common.datadelivery.harvester.ConfigLayer; +import com.raytheon.uf.common.datadelivery.harvester.OGCAgent; import com.raytheon.uf.common.dataplugin.obs.metar.MetarRecord; -import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation; import com.raytheon.uf.edex.ogc.common.db.DefaultPointDataDimension; import com.raytheon.uf.edex.ogc.common.db.LayerCollector; import com.raytheon.uf.edex.ogc.common.util.PluginIngestFilter; import com.raytheon.uf.edex.ogc.registry.WfsRegistryCollectorAddon; import com.raytheon.uf.edex.plugin.obs.ogc.metar.MetarLayer; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.Envelope; /** * Registry Collector for Observations @@ -35,6 +32,7 @@ import com.vividsolutions.jts.geom.Envelope; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jul 26, 2013 bclement Initial creation + * Jan 13, 2014 #2679 dhladky multiple layers * * * @@ -46,11 +44,16 @@ public class ObsRegistryCollectorAddon WfsRegistryCollectorAddon implements PluginIngestFilter { - /** - * @param layerName - */ - public ObsRegistryCollectorAddon(String layerName) { - super(layerName); + public ObsRegistryCollectorAddon() { + + super(); + OGCAgent agent = getAgent(); + + for (ConfigLayer clayer: agent.getLayers()) { + MetarLayer layer = new MetarLayer(); + layers.put(clayer.getName(), layer); + initializeLayer(layer); + } } /* @@ -78,49 +81,13 @@ public class ObsRegistryCollectorAddon return new MetarLayer(layer); } - /** - * Filter geographically - */ - public PluginDataObject[] filter(PluginDataObject[] pdos) { - - Collection withInGeoConstraint = new ArrayList(); - PluginDataObject[] pdor = null; - - for (PluginDataObject record : pdos) { - - MetarRecord rec = (MetarRecord) record; - - if (rec != null) { - - Envelope e = getCoverage().getEnvelope(); - - if (rec.getLocation() != null) { - - Coordinate c = rec.getLocation().getLocation() - .getCoordinate(); - - if (c != null) { - - if (e.contains(c)) { - withInGeoConstraint.add(rec); - } else { - statusHandler.handle( - Priority.DEBUG, - "Obs record discarded: outside of range: " - + rec.getLatitude() + " " - + rec.getLongitude()); - } - } - } - } + @Override + public SurfaceObsLocation getSpatial(MetarRecord record) { + + if (record.getLocation() != null) { + return record.getLocation(); } - - if (!withInGeoConstraint.isEmpty()) { - int size = withInGeoConstraint.size(); - pdor = withInGeoConstraint.toArray(new PluginDataObject[size]); - } - - return pdor; + return null; } }