diff --git a/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java b/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java index 06e022dc1c..a4b2ef4359 100644 --- a/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java +++ b/cave/com.raytheon.uf.viz.coopprecip/src/com/raytheon/uf/viz/coopprecip/CoopPrecipDataCubeAdapter.java @@ -42,6 +42,7 @@ import com.raytheon.uf.common.pointdata.PointDataDescription.Type; import com.raytheon.uf.common.pointdata.PointDataView; import com.raytheon.uf.common.time.BinOffset; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.catalog.DirectDbQuery; import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter; @@ -127,6 +128,7 @@ public class CoopPrecipDataCubeAdapter implements IDataCubeAdapter { List> results = new ArrayList>( requests.size()); for (TimeQueryRequest request : requests) { + request.setSimDate(SimulatedTime.getSystemTime().getTime()); DataTime[] result = timeQuery(request.getQueryTerms(), request.isMaxQuery(), request.getBinOffset()); if (result != null) { diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java index c76bd0db1b..57097a15e3 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/datastructure/DefaultDataCubeAdapter.java @@ -31,6 +31,7 @@ import com.raytheon.uf.common.datastorage.Request; import com.raytheon.uf.common.datastorage.records.IDataRecord; import com.raytheon.uf.common.pointdata.PointDataContainer; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.catalog.ScriptCreator; import com.raytheon.uf.viz.core.comm.Loader; @@ -87,6 +88,11 @@ public class DefaultDataCubeAdapter implements IDataCubeAdapter { throws VizException { TimeQueryRequestSet set = new TimeQueryRequestSet(); set.setRequests(requests.toArray(new TimeQueryRequest[0])); + // boundary for time queries + for (TimeQueryRequest req: set.getRequests()) { + req.setSimDate(SimulatedTime.getSystemTime().getTime()); + } + @SuppressWarnings("unchecked") List> result = (List>) ThriftClient .sendRequest(set); diff --git a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java index 2d61a7c8aa..43012a61f9 100644 --- a/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java +++ b/cave/com.raytheon.uf.viz.derivparam/src/com/raytheon/uf/viz/derivparam/data/AbstractDataCubeAdapter.java @@ -43,6 +43,7 @@ import com.raytheon.uf.common.datastorage.Request; import com.raytheon.uf.common.datastorage.records.IDataRecord; import com.raytheon.uf.common.pointdata.PointDataContainer; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter; import com.raytheon.uf.viz.core.datastructure.VizDataCubeException; @@ -108,6 +109,7 @@ public abstract class AbstractDataCubeAdapter implements IDataCubeAdapter { for (TimeQueryRequest request : requests) { List requestNodes = evaluateRequestConstraints(request .getQueryTerms()); + request.setSimDate(SimulatedTime.getSystemTime().getTime()); // pull out time queries and bulk submit for (AbstractRequestableLevelNode requestNode : requestNodes) { getTimeQuery(request, requestNode, false, queries, cache, null); diff --git a/cave/com.raytheon.uf.viz.monitor/src/com/raytheon/uf/viz/monitor/Monitor.java b/cave/com.raytheon.uf.viz.monitor/src/com/raytheon/uf/viz/monitor/Monitor.java index 55a40fe607..4c25a669ec 100644 --- a/cave/com.raytheon.uf.viz.monitor/src/com/raytheon/uf/viz/monitor/Monitor.java +++ b/cave/com.raytheon.uf.viz.monitor/src/com/raytheon/uf/viz/monitor/Monitor.java @@ -24,6 +24,8 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.VizApp; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.core.catalog.DirectDbQuery; @@ -67,14 +69,18 @@ public abstract class Monitor implements IMonitor, IMonitorThresholdListener, private ArrayList monitorListeners = new ArrayList(); @Override - public void alertArrived(Collection alertMessages) { - // knock down messages we don't want - for (AlertMessage msg : alertMessages) { - if (filterProductMessage(msg)) { - processProductMessage(msg); - } - } - } + public void alertArrived(Collection alertMessages) { + // knock down messages we don't want + for (AlertMessage msg : alertMessages) { + DataTime dataTime = (DataTime) msg.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + if (filterProductMessage(msg)) { + processProductMessage(msg); + } + } + } + } @Override public void notificationArrived(NotificationMessage[] notifyMessages) { diff --git a/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/AutoUpdater.java b/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/AutoUpdater.java index 086068df24..65805a4e17 100644 --- a/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/AutoUpdater.java +++ b/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/AutoUpdater.java @@ -33,6 +33,8 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.IDisplayPane; import com.raytheon.uf.viz.core.IDisplayPaneContainer; import com.raytheon.uf.viz.core.RecordFactory; @@ -105,100 +107,106 @@ public class AutoUpdater implements IAlertObserver { public AutoUpdater() { } - @Override - public void alertArrived(Collection alertMessages) { - Set displayList = new HashSet(); - Map> pdoSendMap = new IdentityHashMap>(); - int errors = 0; + @Override + public void alertArrived(Collection alertMessages) { + Set displayList = new HashSet(); + Map> pdoSendMap = new IdentityHashMap>(); + int errors = 0; - for (AlertMessage message : alertMessages) { - Map attribs = message.decodedAlert; - try { - // System.out.println("extract took: " + (tZ1 - tZ0)); - java.util.List> rscList = DataUpdateTree - .getInstance().searchTree(attribs); - // System.out.println("AutoUpdater found: " + rscList); + for (AlertMessage message : alertMessages) { + Map attribs = message.decodedAlert; + DataTime dataTime = (DataTime) attribs.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + try { + // System.out.println("extract took: " + (tZ1 - tZ0)); + java.util.List> rscList = DataUpdateTree + .getInstance().searchTree(attribs); + // System.out.println("AutoUpdater found: " + rscList); - if (rscList != null && rscList.size() > 0) { + if (rscList != null && rscList.size() > 0) { - for (AbstractVizResource r1 : rscList) { - IDescriptor md = r1.getDescriptor(); - AbstractResourceData resourceData = r1 - .getResourceData(); - if (!(resourceData instanceof AbstractRequestableResourceData) - || resourceData.isFrozen()) - continue; + for (AbstractVizResource r1 : rscList) { + IDescriptor md = r1.getDescriptor(); + AbstractResourceData resourceData = r1 + .getResourceData(); + if (!(resourceData instanceof AbstractRequestableResourceData) + || resourceData.isFrozen()) + continue; - AbstractRequestableResourceData reqResourceData = (AbstractRequestableResourceData) resourceData; - AbstractAlertMessageParser parserToUse = null; - if ((parserToUse = reqResourceData.getAlertParser()) == null) { - parserToUse = defaultParser; - } - Object objectToSend = parserToUse.parseAlertMessage( - message, reqResourceData); + AbstractRequestableResourceData reqResourceData = (AbstractRequestableResourceData) resourceData; + AbstractAlertMessageParser parserToUse = null; + if ((parserToUse = reqResourceData.getAlertParser()) == null) { + parserToUse = defaultParser; + } + Object objectToSend = parserToUse + .parseAlertMessage(message, reqResourceData); - if (objectToSend != null) { - if (md.getTimeMatcher() != null) { - md.getTimeMatcher().redoTimeMatching(r1); - } - displayList.add(md); + if (objectToSend != null) { + if (md.getTimeMatcher() != null) { + md.getTimeMatcher().redoTimeMatching(r1); + } + displayList.add(md); - List list = pdoSendMap.get(reqResourceData); - if (list == null) { - list = new ArrayList(); - pdoSendMap.put(reqResourceData, list); - } - list.add(objectToSend); + List list = pdoSendMap + .get(reqResourceData); + if (list == null) { + list = new ArrayList(); + pdoSendMap.put(reqResourceData, list); + } + list.add(objectToSend); - if (list.size() > 100) { - // update with objects - Class componentType = list.get(0).getClass(); - reqResourceData.update(list - .toArray((Object[]) Array.newInstance( - componentType, list.size()))); - list.clear(); - } - } + if (list.size() > 100) { + // update with objects + Class componentType = list.get(0) + .getClass(); + reqResourceData.update(list + .toArray((Object[]) Array + .newInstance(componentType, + list.size()))); + list.clear(); + } + } - } + } - } + } - } catch (final Throwable e) { - if (errors < MAX_ERRORS) { - statusHandler.handle(Priority.PROBLEM, - "Error performing autoupdate", e); - } - errors++; - } + } catch (final Throwable e) { + if (errors < MAX_ERRORS) { + statusHandler.handle(Priority.PROBLEM, + "Error performing autoupdate", e); + } + errors++; + } + } - } + for (AbstractRequestableResourceData arrd : pdoSendMap.keySet()) { + List pdos = pdoSendMap.get(arrd); + if (pdos == null || pdos.size() < 1) { + continue; + } + Class componentType = pdos.get(0).getClass(); + arrd.update(pdos.toArray((Object[]) Array.newInstance( + componentType, pdos.size()))); + } - for (AbstractRequestableResourceData arrd : pdoSendMap.keySet()) { - List pdos = pdoSendMap.get(arrd); - if (pdos == null || pdos.size() < 1) { - continue; - } - Class componentType = pdos.get(0).getClass(); - arrd.update(pdos.toArray((Object[]) Array.newInstance( - componentType, pdos.size()))); - } + List refreshedDescriptors = new ArrayList(); + // Now do redo time matching, and refresh displays + for (IDescriptor disp : displayList) { + if (disp != null && disp.getRenderableDisplay() != null) { + IDisplayPaneContainer container = disp + .getRenderableDisplay().getContainer(); + for (IDisplayPane pane : container.getDisplayPanes()) { + IDescriptor desc = pane.getDescriptor(); - List refreshedDescriptors = new ArrayList(); - // Now do redo time matching, and refresh displays - for (IDescriptor disp : displayList) { - if (disp != null && disp.getRenderableDisplay() != null) { - IDisplayPaneContainer container = disp.getRenderableDisplay() - .getContainer(); - for (IDisplayPane pane : container.getDisplayPanes()) { - IDescriptor desc = pane.getDescriptor(); - - if (refreshedDescriptors.contains(desc)) { - continue; - } - TimeMatchingJob.scheduleTimeMatch(desc); - } - } - } - } + if (refreshedDescriptors.contains(desc)) { + continue; + } + TimeMatchingJob.scheduleTimeMatch(desc); + } + } + } + } + } } diff --git a/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/MenuUpdater.java b/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/MenuUpdater.java index ea7c8f1c22..72bf22be81 100644 --- a/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/MenuUpdater.java +++ b/cave/com.raytheon.viz.alerts/src/com/raytheon/viz/alerts/jobs/MenuUpdater.java @@ -26,6 +26,7 @@ import java.util.Map; import com.raytheon.edex.util.Util; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.core.rsc.URICatalog; import com.raytheon.uf.viz.core.rsc.URICatalog.IURIRefreshCallback; @@ -65,25 +66,29 @@ public class MenuUpdater implements IAlertObserver { Map attribs = new HashMap( message.decodedAlert); DataTime dataTimeStr = (DataTime) attribs.get("dataTime"); + + if (dataTimeStr.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { - if (dataTimeStr != null) { - // Update the date catalog - List> dataTimeList = URICatalog - .getInstance().searchTree(attribs); + if (dataTimeStr != null) { + // Update the date catalog + List> dataTimeList = URICatalog + .getInstance().searchTree(attribs); - // If we found listeners, update them - if (dataTimeList != null) { - DataTime dataTime = dataTimeStr.clone(); + // If we found listeners, update them + if (dataTimeList != null) { + DataTime dataTime = dataTimeStr.clone(); - for (List refreshList : dataTimeList) { - for (IURIRefreshCallback callback : refreshList) { - if (callback != null) { - callback.updateTime(dataTime); - } - } - } - } - } + for (List refreshList : dataTimeList) { + for (IURIRefreshCallback callback : refreshList) { + if (callback != null) { + callback.updateTime(dataTime); + } + } + } + } + } + } } } diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaBufMonitorObserver.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaBufMonitorObserver.java index afbeeb3ca0..c81df84ed2 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaBufMonitorObserver.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaBufMonitorObserver.java @@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor; import java.util.ArrayList; import java.util.Collection; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.aviation.guidance.EtaViewer; @@ -64,18 +66,23 @@ public class EtaBufMonitorObserver extends MonitorObserver implements public void alertArrived(Collection alertMessages) { ArrayList siteIDs = new ArrayList(); - for (AlertMessage alert : alertMessages) { - String siteID = (String) alert.decodedAlert - .get("location.stationId"); - if (!siteIDs.contains(siteID)) { - for (TafSiteComp tsc : dialog.getTafSiteComps()) { - if (tsc.getStationName().equals(siteID)) { - siteIDs.add(siteID); - break; - } - } - } - } + for (AlertMessage alert : alertMessages) { + DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + + String siteID = (String) alert.decodedAlert + .get("location.stationId"); + if (!siteIDs.contains(siteID)) { + for (TafSiteComp tsc : dialog.getTafSiteComps()) { + if (tsc.getStationName().equals(siteID)) { + siteIDs.add(siteID); + break; + } + } + } + } + } if (siteIDs.size() > 0) { for (ViewerTab tab : dialog.getViewerTabList()) { diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaMonitorObserver.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaMonitorObserver.java index 17d34bb216..52a5fa7c56 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaMonitorObserver.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/EtaMonitorObserver.java @@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor; import java.util.ArrayList; import java.util.Collection; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.aviation.guidance.MosViewer; @@ -64,18 +66,22 @@ public class EtaMonitorObserver extends MonitorObserver implements public void alertArrived(Collection alertMessages) { ArrayList siteIDs = new ArrayList(); - for (AlertMessage alert : alertMessages) { - String siteID = (String) alert.decodedAlert - .get("location.stationId"); - if (!siteIDs.contains(siteID)) { - for (TafSiteComp tsc : dialog.getTafSiteComps()) { - if (tsc.getStationName().equals(siteID)) { - siteIDs.add(siteID); - break; - } - } - } - } + for (AlertMessage alert : alertMessages) { + DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + String siteID = (String) alert.decodedAlert + .get("location.stationId"); + if (!siteIDs.contains(siteID)) { + for (TafSiteComp tsc : dialog.getTafSiteComps()) { + if (tsc.getStationName().equals(siteID)) { + siteIDs.add(siteID); + break; + } + } + } + } + } if (siteIDs.size() > 0) { for (ViewerTab tab : dialog.getViewerTabList()) { diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsLampMonitorObserver.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsLampMonitorObserver.java index e700106b58..ce052636fe 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsLampMonitorObserver.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsLampMonitorObserver.java @@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor; import java.util.ArrayList; import java.util.Collection; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.aviation.guidance.MosViewer; @@ -65,18 +67,22 @@ public class GfsLampMonitorObserver extends MonitorObserver implements public void alertArrived(Collection alertMessages) { ArrayList siteIDs = new ArrayList(); - for (AlertMessage alert : alertMessages) { - String siteID = (String) alert.decodedAlert - .get("location.stationId"); - if (!siteIDs.contains(siteID)) { - for (TafSiteComp tsc : dialog.getTafSiteComps()) { - if (tsc.getStationName().equals(siteID)) { - siteIDs.add(siteID); - break; - } - } - } - } + for (AlertMessage alert : alertMessages) { + DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + String siteID = (String) alert.decodedAlert + .get("location.stationId"); + if (!siteIDs.contains(siteID)) { + for (TafSiteComp tsc : dialog.getTafSiteComps()) { + if (tsc.getStationName().equals(siteID)) { + siteIDs.add(siteID); + break; + } + } + } + } + } if (siteIDs.size() > 0) { for (ViewerTab tab : dialog.getViewerTabList()) { diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsMonitorObserver.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsMonitorObserver.java index ae282d24b9..d3a610631a 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsMonitorObserver.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/GfsMonitorObserver.java @@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor; import java.util.ArrayList; import java.util.Collection; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.aviation.guidance.MosViewer; @@ -64,18 +66,22 @@ public class GfsMonitorObserver extends MonitorObserver implements public void alertArrived(Collection alertMessages) { ArrayList siteIDs = new ArrayList(); - for (AlertMessage alert : alertMessages) { - String siteID = (String) alert.decodedAlert - .get("location.stationId"); - if (!siteIDs.contains(siteID)) { - for (TafSiteComp tsc : dialog.getTafSiteComps()) { - if (tsc.getStationName().equals(siteID)) { - siteIDs.add(siteID); - break; - } - } - } - } + for (AlertMessage alert : alertMessages) { + DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + String siteID = (String) alert.decodedAlert + .get("location.stationId"); + if (!siteIDs.contains(siteID)) { + for (TafSiteComp tsc : dialog.getTafSiteComps()) { + if (tsc.getStationName().equals(siteID)) { + siteIDs.add(siteID); + break; + } + } + } + } + } if (siteIDs.size() > 0) { for (ViewerTab tab : dialog.getViewerTabList()) { diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/data/GribRequestableDataFactory.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/data/GribRequestableDataFactory.java index 23ad64a817..ad003770de 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/data/GribRequestableDataFactory.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/data/GribRequestableDataFactory.java @@ -24,6 +24,8 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.raytheon.uf.common.dataplugin.grib.GribRecord; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.observers.ProductAlertObserver; @@ -85,7 +87,11 @@ public class GribRequestableDataFactory implements IAlertObserver { @Override public void alertArrived(Collection alertMessages) { for (AlertMessage mess : alertMessages) { - requestableDataMap.remove(mess.dataURI); - } - } + DataTime dataTime = (DataTime) mess.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + requestableDataMap.remove(mess.dataURI); + } + } + } } diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java index a828ac2f1b..1540e5b14d 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java @@ -39,6 +39,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.derivparam.library.DerivParamMethod; @@ -206,98 +207,107 @@ public class GridUpdater implements IAlertObserver { * .core.alerts.AlertMessage[]) */ @Override - public synchronized void alertArrived(Collection alertMessages) { - Set datauris = new HashSet(); - for (AlertMessage alert : alertMessages) { - if (myUpdates.remove(alert.dataURI)) { - // This updater triggered this alert, if it processes it now we - // could do this forever - continue; - } - GribMapKey updateKey = new GribMapKey(alert.decodedAlert); - GribTimeCache.getInstance().clearTimes(updateKey); - LevelNode lNode = null; - try { - Level level = LevelFactory.getInstance().getLevel( - updateKey.masterLevel, updateKey.levelone, - updateKey.leveltwo); - lNode = inventory.getNode(updateKey.modelName, - updateKey.parameter, level); - } catch (CommunicationException e) { - statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), - e); - } + public synchronized void alertArrived(Collection alertMessages) { + Set datauris = new HashSet(); + for (AlertMessage alert : alertMessages) { + DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { - if (lNode == null) { - inventory.reinitTree(); - // System.out.println(alert.dataURI); - // System.out.println("LevelId=" + level.getId()); - } else if (!(lNode instanceof GribRequestableLevelNode)) { - if (lNode instanceof OrLevelNode) { - DerivParamMethod method = ((OrLevelNode) lNode).getMethod(); - // Null means it is an alias model and supplement means - // there exists a true GribNode buried under the or - // node - if (method == null - || !method.getName().equals("Supplement")) { - inventory.reinitTree(); - // System.out.println(((AbstractDerivedLevelNode) lNode) - // .getModelName()); - } - } else { - inventory.reinitTree(); - // System.out.println(alert.dataURI); - // System.out.println(lNode.getClass()); - } - } - Set set = updateMap.get(updateKey); - if (set == null) { - continue; - } - for (UpdateValue value : set) { - GribRecord fakeRec = new GribRecord(); - fakeRec.setPluginName("grib"); - Object obj = alert.decodedAlert.get("dataTime"); - if (!(obj instanceof DataTime)) { - throw new IllegalArgumentException( - "Error processing Alerts: " - + obj.toString() - + " cannot be cast to a DataTime because it is a " - + obj.getClass().getSimpleName()); - } - DataTime time = (DataTime) obj; - fakeRec.setDataTime(new DataTime(time.getRefTime(), time - .getFcstTime() - value.timeOffset)); - GribModel modelInfo = new GribModel(); - modelInfo.setModelName(value.node.getModelName()); - modelInfo.setParameterAbbreviation(value.node.getDesc() - .getAbbreviation()); - modelInfo.setLevel(value.node.getLevel()); - if (value.node instanceof GatherLevelNode) { - modelInfo.setPerturbationNumber(null); - } else { - modelInfo - .setPerturbationNumber((Integer) alert.decodedAlert - .get(GridInventory.PERT_QUERY)); - } - // do I need to set this? - modelInfo.setTypeEnsemble(null); - fakeRec.setModelInfo(modelInfo); - try { - fakeRec.constructDataURI(); - datauris.add(fakeRec.getDataURI()); - } catch (PluginException e) { - statusHandler - .handle(Priority.PROBLEM, - "Unable to generate updates for derived product", - e); - } + if (myUpdates.remove(alert.dataURI)) { + // This updater triggered this alert, if it processes it now + // we + // could do this forever + continue; + } + GribMapKey updateKey = new GribMapKey(alert.decodedAlert); + GribTimeCache.getInstance().clearTimes(updateKey); + LevelNode lNode = null; + try { + Level level = LevelFactory.getInstance().getLevel( + updateKey.masterLevel, updateKey.levelone, + updateKey.leveltwo); + lNode = inventory.getNode(updateKey.modelName, + updateKey.parameter, level); + } catch (CommunicationException e) { + statusHandler.handle(Priority.PROBLEM, + e.getLocalizedMessage(), e); + } - } - } - myUpdates.addAll(datauris); - ProductAlertObserver.processDerivedAlerts(datauris); - } + if (lNode == null) { + inventory.reinitTree(); + // System.out.println(alert.dataURI); + // System.out.println("LevelId=" + level.getId()); + } else if (!(lNode instanceof GribRequestableLevelNode)) { + if (lNode instanceof OrLevelNode) { + DerivParamMethod method = ((OrLevelNode) lNode) + .getMethod(); + // Null means it is an alias model and supplement means + // there exists a true GribNode buried under the or + // node + if (method == null + || !method.getName().equals("Supplement")) { + inventory.reinitTree(); + // System.out.println(((AbstractDerivedLevelNode) + // lNode) + // .getModelName()); + } + } else { + inventory.reinitTree(); + // System.out.println(alert.dataURI); + // System.out.println(lNode.getClass()); + } + } + Set set = updateMap.get(updateKey); + if (set == null) { + continue; + } + for (UpdateValue value : set) { + GribRecord fakeRec = new GribRecord(); + fakeRec.setPluginName("grib"); + Object obj = alert.decodedAlert.get("dataTime"); + if (!(obj instanceof DataTime)) { + throw new IllegalArgumentException( + "Error processing Alerts: " + + obj.toString() + + " cannot be cast to a DataTime because it is a " + + obj.getClass().getSimpleName()); + } + DataTime time = (DataTime) obj; + fakeRec.setDataTime(new DataTime(time.getRefTime(), time + .getFcstTime() - value.timeOffset)); + GribModel modelInfo = new GribModel(); + modelInfo.setModelName(value.node.getModelName()); + modelInfo.setParameterAbbreviation(value.node.getDesc() + .getAbbreviation()); + modelInfo.setLevel(value.node.getLevel()); + if (value.node instanceof GatherLevelNode) { + modelInfo.setPerturbationNumber(null); + } else { + modelInfo + .setPerturbationNumber((Integer) alert.decodedAlert + .get(GridInventory.PERT_QUERY)); + } + // do I need to set this? + modelInfo.setTypeEnsemble(null); + fakeRec.setModelInfo(modelInfo); + try { + fakeRec.constructDataURI(); + datauris.add(fakeRec.getDataURI()); + } catch (PluginException e) { + statusHandler + .handle(Priority.PROBLEM, + "Unable to generate updates for derived product", + e); + } + } + } else { + System.out.println("Grid after SIMULATED TIME: "+dataTime); + } + } + myUpdates.addAll(datauris); + ProductAlertObserver.processDerivedAlerts(datauris); + } /** * diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java index 2544f574d4..09ea6727df 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/RadarUpdater.java @@ -20,6 +20,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.observers.ProductAlertObserver; @@ -128,60 +129,68 @@ public class RadarUpdater implements IAlertObserver { return; } Set datauris = new HashSet(); - for (AlertMessage alertMessage : alertMessages) { - String icao = alertMessage.decodedAlert - .get(RadarAdapter.ICAO_QUERY).toString(); - if (icao == null - || !icao.equalsIgnoreCase(configuredRadar.getRdaId())) { - continue; - } - globalTimes = null; - Object obj = alertMessage.decodedAlert - .get(RadarAdapter.PRODUCT_CODE_QUERY); - if (obj == null || !(obj instanceof Integer)) { - continue; - } - Integer productCode = (Integer) obj; - String paramAbbrev = RadarProductCodeMapping.getInstance() - .getParameterAbbrev(productCode); - if (paramAbbrev == null) { - continue; - } - obj = alertMessage.decodedAlert.get("dataTime"); - if (obj == null || !(obj instanceof DataTime)) { - continue; - } - DataTime time = (DataTime) obj; - obj = alertMessage.decodedAlert.get(RadarAdapter.TILT_QUERY); - if (obj == null || !(obj instanceof Double)) { - continue; - } - Double elevationAngle = (Double) obj; - cache.remove(new CacheKey(productCode, elevationAngle)); - Level level = null; - try { - level = LevelFactory.getInstance().getLevel( - RadarAdapter.CUBE_MASTER_LEVEL_NAME, elevationAngle); - } catch (CommunicationException e1) { - statusHandler.handle(Priority.PROBLEM, - e1.getLocalizedMessage(), e1); - } - GribRecord fakeRec = new GribRecord(); - fakeRec.setPluginName("grib"); - fakeRec.setDataTime(time); - GribModel modelInfo = new GribModel(); - modelInfo.setModelName(RadarAdapter.RADAR_SOURCE); - modelInfo.setParameterAbbreviation(paramAbbrev); - modelInfo.setLevel(level); - modelInfo.setTypeEnsemble(null); - fakeRec.setModelInfo(modelInfo); - try { - fakeRec.constructDataURI(); - datauris.add(fakeRec.getDataURI()); - } catch (PluginException e) { - statusHandler.handle(Priority.PROBLEM, - "Unable to generate updates for derived product", e); - } + for (AlertMessage alertMessage : alertMessages) { + DataTime dataTime = (DataTime) alertMessage.decodedAlert + .get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + String icao = alertMessage.decodedAlert.get( + RadarAdapter.ICAO_QUERY).toString(); + if (icao == null + || !icao.equalsIgnoreCase(configuredRadar.getRdaId())) { + continue; + } + globalTimes = null; + Object obj = alertMessage.decodedAlert + .get(RadarAdapter.PRODUCT_CODE_QUERY); + if (obj == null || !(obj instanceof Integer)) { + continue; + } + Integer productCode = (Integer) obj; + String paramAbbrev = RadarProductCodeMapping.getInstance() + .getParameterAbbrev(productCode); + if (paramAbbrev == null) { + continue; + } + obj = alertMessage.decodedAlert.get("dataTime"); + if (obj == null || !(obj instanceof DataTime)) { + continue; + } + DataTime time = (DataTime) obj; + obj = alertMessage.decodedAlert.get(RadarAdapter.TILT_QUERY); + if (obj == null || !(obj instanceof Double)) { + continue; + } + Double elevationAngle = (Double) obj; + cache.remove(new CacheKey(productCode, elevationAngle)); + Level level = null; + try { + level = LevelFactory.getInstance() + .getLevel(RadarAdapter.CUBE_MASTER_LEVEL_NAME, + elevationAngle); + } catch (CommunicationException e1) { + statusHandler.handle(Priority.PROBLEM, + e1.getLocalizedMessage(), e1); + } + GribRecord fakeRec = new GribRecord(); + fakeRec.setPluginName("grib"); + fakeRec.setDataTime(time); + GribModel modelInfo = new GribModel(); + modelInfo.setModelName(RadarAdapter.RADAR_SOURCE); + modelInfo.setParameterAbbreviation(paramAbbrev); + modelInfo.setLevel(level); + modelInfo.setTypeEnsemble(null); + fakeRec.setModelInfo(modelInfo); + try { + fakeRec.constructDataURI(); + datauris.add(fakeRec.getDataURI()); + } catch (PluginException e) { + statusHandler + .handle(Priority.PROBLEM, + "Unable to generate updates for derived product", + e); + } + } } ProductAlertObserver.processDerivedAlerts(datauris); } diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java index 597365dc22..e1dfd8b3cf 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java @@ -41,6 +41,7 @@ import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.RecordFactory; import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.catalog.ScriptCreator; @@ -369,6 +370,10 @@ public class PointDataCubeAdapter implements IDataCubeAdapter { throws VizException { TimeQueryRequestSet set = new TimeQueryRequestSet(); set.setRequests(requests.toArray(new TimeQueryRequest[0])); + // boundary for time queries + for (TimeQueryRequest req: set.getRequests()) { + req.setSimDate(SimulatedTime.getSystemTime().getTime()); + } @SuppressWarnings("unchecked") List> result = (List>) ThriftClient .sendRequest(set); diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataInventory.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataInventory.java index 8b99479f3e..a9478fa6fa 100644 --- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataInventory.java +++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataInventory.java @@ -31,6 +31,8 @@ import com.raytheon.uf.common.pointdata.GetPointDataTreeRequest; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.requests.ThriftClient; @@ -101,25 +103,30 @@ public class PointDataInventory extends AbstractPointDataInventory implements } @Override - public void alertArrived(Collection alertMessages) { - for (AlertMessage message : alertMessages) { - String pluginName = message.decodedAlert.get(PLUGIN_NAME) - .toString(); - String source = pluginName; - String typeKey = getTypeKey(pluginName); - if (!PLUGIN_NAME.equals(typeKey)) { - source += message.decodedAlert.get(typeKey).toString(); - } + public void alertArrived(Collection alertMessages) { + for (AlertMessage message : alertMessages) { + DataTime dataTime = (DataTime) message.decodedAlert.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + String pluginName = message.decodedAlert.get(PLUGIN_NAME) + .toString(); + String source = pluginName; + String typeKey = getTypeKey(pluginName); + if (!PLUGIN_NAME.equals(typeKey)) { + source += message.decodedAlert.get(typeKey).toString(); + } - if (getAllSources() != null && !getAllSources().contains(source)) { - try { - initTree(derParLibrary); - } catch (VizException e) { - statusHandler.handle(Priority.PROBLEM, - e.getLocalizedMessage(), e); - } - } - } - } + if (getAllSources() != null + && !getAllSources().contains(source)) { + try { + initTree(derParLibrary); + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, + e.getLocalizedMessage(), e); + } + } + } + } + } } diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarDataCubeAdapter.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarDataCubeAdapter.java index 7bec38cf7c..56498ad09d 100644 --- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarDataCubeAdapter.java +++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/util/RadarDataCubeAdapter.java @@ -40,6 +40,7 @@ import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.time.BinOffset; import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.derivparam.library.DerivedParameterGenerator; @@ -120,22 +121,24 @@ public class RadarDataCubeAdapter extends PointDataCubeAdapter { DbQueryResponse response, boolean latestOnly, BinOffset binOffset) { String dataTimefield = DATA_TIME_FIELD; if (latestOnly) { - dataTimefield = LATEST_DATA_TIME_FIELD; - } - Collection results = new HashSet(); - int i = 0; - for (Map map : response.getResults()) { - DataTime time = null; - if (latestOnly) { - time = new DataTime((Date) map.get(dataTimefield), 0); - } else { - time = (DataTime) map.get(dataTimefield); - time.setLevelValue((Double) map.get(LEVEL_FIELD)); - } - - results.add(time); - ++i; - } + dataTimefield = LATEST_DATA_TIME_FIELD; + } + Collection results = new HashSet(); + int i = 0; + for (Map map : response.getResults()) { + DataTime time = null; + if (latestOnly) { + time = new DataTime((Date) map.get(dataTimefield), 0); + } else { + time = (DataTime) map.get(dataTimefield); + time.setLevelValue((Double) map.get(LEVEL_FIELD)); + } + // Best res requests need this because they span a time period + if (time.getRefTime().before(SimulatedTime.getSystemTime().getTime())) { + results.add(time); + ++i; + } + } if (binOffset != null) { Set scaledDates = new TreeSet(); @@ -170,6 +173,7 @@ public class RadarDataCubeAdapter extends PointDataCubeAdapter { List dbRequests = new ArrayList( requests.size()); for (TimeQueryRequest request : requests) { + request.setSimDate(SimulatedTime.getSystemTime().getTime()); dbRequests.add(getTimeQueryRequest(request.getQueryTerms(), request.isMaxQuery())); } @@ -184,6 +188,9 @@ public class RadarDataCubeAdapter extends PointDataCubeAdapter { TimeQueryRequest request = requests.get(i); Collection times = processTimeQueryResponse(response, request.isMaxQuery(), request.getBinOffset()); + + + result.add(new ArrayList(times)); } return result; diff --git a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/SatelliteDataCubeAdapter.java b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/SatelliteDataCubeAdapter.java index f7bb8f0325..914da912a7 100644 --- a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/SatelliteDataCubeAdapter.java +++ b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/SatelliteDataCubeAdapter.java @@ -465,6 +465,7 @@ public class SatelliteDataCubeAdapter implements IDataCubeAdapter { List baseRequests = new ArrayList( requests.size()); for (TimeQueryRequest request : requests) { + request.setSimDate(SimulatedTime.getSystemTime().getTime()); if (!request.getQueryTerms().containsKey("DERIVED")) { baseRequests.add(request); } else { diff --git a/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/handlers/TimeQueryHandler.java b/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/handlers/TimeQueryHandler.java index ab0b0335d3..f04fd745a4 100644 --- a/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/handlers/TimeQueryHandler.java +++ b/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/handlers/TimeQueryHandler.java @@ -112,6 +112,17 @@ public class TimeQueryHandler implements IRequestHandler { request.isMaxQuery()); times = runQuery(dao, query); } + + // second check for some complex plugin requests that get by the simDate check in the query + ArrayList removes = new ArrayList(); + for (DataTime time: times) { + if (time.getRefTime().after(request.getSimDate())) { + removes.add(time); + } + } + if (removes.size() > 0) { + times.removeAll(removes); + } return times; } diff --git a/ncep/gov.noaa.nws.ncep.viz.ui.perspectives/src/gov/noaa/nws/ncep/viz/ui/perspectives/NcAutoUpdater.java b/ncep/gov.noaa.nws.ncep.viz.ui.perspectives/src/gov/noaa/nws/ncep/viz/ui/perspectives/NcAutoUpdater.java index f4050354c9..4661dc6a82 100644 --- a/ncep/gov.noaa.nws.ncep.viz.ui.perspectives/src/gov/noaa/nws/ncep/viz/ui/perspectives/NcAutoUpdater.java +++ b/ncep/gov.noaa.nws.ncep.viz.ui.perspectives/src/gov/noaa/nws/ncep/viz/ui/perspectives/NcAutoUpdater.java @@ -31,6 +31,8 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.time.DataTime; +import com.raytheon.uf.common.time.SimulatedTime; import com.raytheon.uf.viz.core.RecordFactory; import com.raytheon.uf.viz.core.alerts.AbstractAlertMessageParser; import com.raytheon.uf.viz.core.alerts.AlertMessage; @@ -79,16 +81,20 @@ public class NcAutoUpdater implements IAlertObserver { Object objectToSend = null; Map attribs = new HashMap( message.decodedAlert); - String dataURI = message.dataURI; - if (reqResourceData.isUpdatingOnMetadataOnly()) { - PluginDataObject record = RecordFactory.getInstance() - .loadRecordFromUri(dataURI); - objectToSend = record; + DataTime dataTime = (DataTime) attribs.get("dataTime"); + if (dataTime.getRefTime().before( + SimulatedTime.getSystemTime().getTime())) { + String dataURI = message.dataURI; + if (reqResourceData.isUpdatingOnMetadataOnly()) { + PluginDataObject record = RecordFactory.getInstance() + .loadRecordFromUri(dataURI); + objectToSend = record; - } else { - attribs.put("dataURI", message.dataURI); - objectToSend = Loader.loadData(attribs); - } + } else { + attribs.put("dataURI", message.dataURI); + objectToSend = Loader.loadData(attribs); + } + } return objectToSend; } };