Issue #15 Re-wrote SimDate integration for menus, alert observers after

merge headache.

Former-commit-id: 5b7ecea866 [formerly 42a12fa7a5 [formerly 1b7473572f] [formerly 5b7ecea866 [formerly 647b7ac154dbdaf945231b231f491bbca86d2a24]]]
Former-commit-id: 42a12fa7a5 [formerly 1b7473572f]
Former-commit-id: 42a12fa7a5
Former-commit-id: 37da8763eb
This commit is contained in:
Dave Hladky 2012-04-30 13:43:34 -05:00
parent 90b18cc985
commit c65a513956
19 changed files with 462 additions and 346 deletions

View file

@ -42,6 +42,7 @@ import com.raytheon.uf.common.pointdata.PointDataDescription.Type;
import com.raytheon.uf.common.pointdata.PointDataView; import com.raytheon.uf.common.pointdata.PointDataView;
import com.raytheon.uf.common.time.BinOffset; import com.raytheon.uf.common.time.BinOffset;
import com.raytheon.uf.common.time.DataTime; 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.DirectDbQuery;
import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.catalog.LayerProperty;
import com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter; import com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter;
@ -127,6 +128,7 @@ public class CoopPrecipDataCubeAdapter implements IDataCubeAdapter {
List<List<DataTime>> results = new ArrayList<List<DataTime>>( List<List<DataTime>> results = new ArrayList<List<DataTime>>(
requests.size()); requests.size());
for (TimeQueryRequest request : requests) { for (TimeQueryRequest request : requests) {
request.setSimDate(SimulatedTime.getSystemTime().getTime());
DataTime[] result = timeQuery(request.getQueryTerms(), DataTime[] result = timeQuery(request.getQueryTerms(),
request.isMaxQuery(), request.getBinOffset()); request.isMaxQuery(), request.getBinOffset());
if (result != null) { if (result != null) {

View file

@ -31,6 +31,7 @@ import com.raytheon.uf.common.datastorage.Request;
import com.raytheon.uf.common.datastorage.records.IDataRecord; import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.pointdata.PointDataContainer; import com.raytheon.uf.common.pointdata.PointDataContainer;
import com.raytheon.uf.common.time.DataTime; 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.LayerProperty;
import com.raytheon.uf.viz.core.catalog.ScriptCreator; import com.raytheon.uf.viz.core.catalog.ScriptCreator;
import com.raytheon.uf.viz.core.comm.Loader; import com.raytheon.uf.viz.core.comm.Loader;
@ -87,6 +88,11 @@ public class DefaultDataCubeAdapter implements IDataCubeAdapter {
throws VizException { throws VizException {
TimeQueryRequestSet set = new TimeQueryRequestSet(); TimeQueryRequestSet set = new TimeQueryRequestSet();
set.setRequests(requests.toArray(new TimeQueryRequest[0])); set.setRequests(requests.toArray(new TimeQueryRequest[0]));
// boundary for time queries
for (TimeQueryRequest req: set.getRequests()) {
req.setSimDate(SimulatedTime.getSystemTime().getTime());
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<List<DataTime>> result = (List<List<DataTime>>) ThriftClient List<List<DataTime>> result = (List<List<DataTime>>) ThriftClient
.sendRequest(set); .sendRequest(set);

View file

@ -43,6 +43,7 @@ import com.raytheon.uf.common.datastorage.Request;
import com.raytheon.uf.common.datastorage.records.IDataRecord; import com.raytheon.uf.common.datastorage.records.IDataRecord;
import com.raytheon.uf.common.pointdata.PointDataContainer; import com.raytheon.uf.common.pointdata.PointDataContainer;
import com.raytheon.uf.common.time.DataTime; 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.LayerProperty;
import com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter; import com.raytheon.uf.viz.core.datastructure.IDataCubeAdapter;
import com.raytheon.uf.viz.core.datastructure.VizDataCubeException; import com.raytheon.uf.viz.core.datastructure.VizDataCubeException;
@ -108,6 +109,7 @@ public abstract class AbstractDataCubeAdapter implements IDataCubeAdapter {
for (TimeQueryRequest request : requests) { for (TimeQueryRequest request : requests) {
List<AbstractRequestableLevelNode> requestNodes = evaluateRequestConstraints(request List<AbstractRequestableLevelNode> requestNodes = evaluateRequestConstraints(request
.getQueryTerms()); .getQueryTerms());
request.setSimDate(SimulatedTime.getSystemTime().getTime());
// pull out time queries and bulk submit // pull out time queries and bulk submit
for (AbstractRequestableLevelNode requestNode : requestNodes) { for (AbstractRequestableLevelNode requestNode : requestNodes) {
getTimeQuery(request, requestNode, false, queries, cache, null); getTimeQuery(request, requestNode, false, queries, cache, null);

View file

@ -24,6 +24,8 @@ import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; 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.VizApp;
import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.core.alerts.AlertMessage;
import com.raytheon.uf.viz.core.catalog.DirectDbQuery; import com.raytheon.uf.viz.core.catalog.DirectDbQuery;
@ -67,14 +69,18 @@ public abstract class Monitor implements IMonitor, IMonitorThresholdListener,
private ArrayList<IMonitorListener> monitorListeners = new ArrayList<IMonitorListener>(); private ArrayList<IMonitorListener> monitorListeners = new ArrayList<IMonitorListener>();
@Override @Override
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
// knock down messages we don't want // knock down messages we don't want
for (AlertMessage msg : alertMessages) { for (AlertMessage msg : alertMessages) {
if (filterProductMessage(msg)) { DataTime dataTime = (DataTime) msg.decodedAlert.get("dataTime");
processProductMessage(msg); if (dataTime.getRefTime().before(
} SimulatedTime.getSystemTime().getTime())) {
} if (filterProductMessage(msg)) {
} processProductMessage(msg);
}
}
}
}
@Override @Override
public void notificationArrived(NotificationMessage[] notifyMessages) { public void notificationArrived(NotificationMessage[] notifyMessages) {

View file

@ -33,6 +33,8 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority; 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.IDisplayPane;
import com.raytheon.uf.viz.core.IDisplayPaneContainer; import com.raytheon.uf.viz.core.IDisplayPaneContainer;
import com.raytheon.uf.viz.core.RecordFactory; import com.raytheon.uf.viz.core.RecordFactory;
@ -105,100 +107,106 @@ public class AutoUpdater implements IAlertObserver {
public AutoUpdater() { public AutoUpdater() {
} }
@Override @Override
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
Set<IDescriptor> displayList = new HashSet<IDescriptor>(); Set<IDescriptor> displayList = new HashSet<IDescriptor>();
Map<AbstractRequestableResourceData, List<Object>> pdoSendMap = new IdentityHashMap<AbstractRequestableResourceData, List<Object>>(); Map<AbstractRequestableResourceData, List<Object>> pdoSendMap = new IdentityHashMap<AbstractRequestableResourceData, List<Object>>();
int errors = 0; int errors = 0;
for (AlertMessage message : alertMessages) { for (AlertMessage message : alertMessages) {
Map<String, Object> attribs = message.decodedAlert; Map<String, Object> attribs = message.decodedAlert;
try { DataTime dataTime = (DataTime) attribs.get("dataTime");
// System.out.println("extract took: " + (tZ1 - tZ0)); if (dataTime.getRefTime().before(
java.util.List<AbstractVizResource<?, ?>> rscList = DataUpdateTree SimulatedTime.getSystemTime().getTime())) {
.getInstance().searchTree(attribs); try {
// System.out.println("AutoUpdater found: " + rscList); // System.out.println("extract took: " + (tZ1 - tZ0));
java.util.List<AbstractVizResource<?, ?>> 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) { for (AbstractVizResource<?, ?> r1 : rscList) {
IDescriptor md = r1.getDescriptor(); IDescriptor md = r1.getDescriptor();
AbstractResourceData resourceData = r1 AbstractResourceData resourceData = r1
.getResourceData(); .getResourceData();
if (!(resourceData instanceof AbstractRequestableResourceData) if (!(resourceData instanceof AbstractRequestableResourceData)
|| resourceData.isFrozen()) || resourceData.isFrozen())
continue; continue;
AbstractRequestableResourceData reqResourceData = (AbstractRequestableResourceData) resourceData; AbstractRequestableResourceData reqResourceData = (AbstractRequestableResourceData) resourceData;
AbstractAlertMessageParser parserToUse = null; AbstractAlertMessageParser parserToUse = null;
if ((parserToUse = reqResourceData.getAlertParser()) == null) { if ((parserToUse = reqResourceData.getAlertParser()) == null) {
parserToUse = defaultParser; parserToUse = defaultParser;
} }
Object objectToSend = parserToUse.parseAlertMessage( Object objectToSend = parserToUse
message, reqResourceData); .parseAlertMessage(message, reqResourceData);
if (objectToSend != null) { if (objectToSend != null) {
if (md.getTimeMatcher() != null) { if (md.getTimeMatcher() != null) {
md.getTimeMatcher().redoTimeMatching(r1); md.getTimeMatcher().redoTimeMatching(r1);
} }
displayList.add(md); displayList.add(md);
List<Object> list = pdoSendMap.get(reqResourceData); List<Object> list = pdoSendMap
if (list == null) { .get(reqResourceData);
list = new ArrayList<Object>(); if (list == null) {
pdoSendMap.put(reqResourceData, list); list = new ArrayList<Object>();
} pdoSendMap.put(reqResourceData, list);
list.add(objectToSend); }
list.add(objectToSend);
if (list.size() > 100) { if (list.size() > 100) {
// update with objects // update with objects
Class<?> componentType = list.get(0).getClass(); Class<?> componentType = list.get(0)
reqResourceData.update(list .getClass();
.toArray((Object[]) Array.newInstance( reqResourceData.update(list
componentType, list.size()))); .toArray((Object[]) Array
list.clear(); .newInstance(componentType,
} list.size())));
} list.clear();
}
}
} }
} }
} catch (final Throwable e) { } catch (final Throwable e) {
if (errors < MAX_ERRORS) { if (errors < MAX_ERRORS) {
statusHandler.handle(Priority.PROBLEM, statusHandler.handle(Priority.PROBLEM,
"Error performing autoupdate", e); "Error performing autoupdate", e);
} }
errors++; errors++;
} }
}
} for (AbstractRequestableResourceData arrd : pdoSendMap.keySet()) {
List<Object> 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<IDescriptor> refreshedDescriptors = new ArrayList<IDescriptor>();
List<Object> pdos = pdoSendMap.get(arrd); // Now do redo time matching, and refresh displays
if (pdos == null || pdos.size() < 1) { for (IDescriptor disp : displayList) {
continue; if (disp != null && disp.getRenderableDisplay() != null) {
} IDisplayPaneContainer container = disp
Class<?> componentType = pdos.get(0).getClass(); .getRenderableDisplay().getContainer();
arrd.update(pdos.toArray((Object[]) Array.newInstance( for (IDisplayPane pane : container.getDisplayPanes()) {
componentType, pdos.size()))); IDescriptor desc = pane.getDescriptor();
}
List<IDescriptor> refreshedDescriptors = new ArrayList<IDescriptor>(); if (refreshedDescriptors.contains(desc)) {
// Now do redo time matching, and refresh displays continue;
for (IDescriptor disp : displayList) { }
if (disp != null && disp.getRenderableDisplay() != null) { TimeMatchingJob.scheduleTimeMatch(desc);
IDisplayPaneContainer container = disp.getRenderableDisplay() }
.getContainer(); }
for (IDisplayPane pane : container.getDisplayPanes()) { }
IDescriptor desc = pane.getDescriptor(); }
}
if (refreshedDescriptors.contains(desc)) {
continue;
}
TimeMatchingJob.scheduleTimeMatch(desc);
}
}
}
}
} }

View file

@ -26,6 +26,7 @@ import java.util.Map;
import com.raytheon.edex.util.Util; import com.raytheon.edex.util.Util;
import com.raytheon.uf.common.time.DataTime; 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.alerts.AlertMessage;
import com.raytheon.uf.viz.core.rsc.URICatalog; import com.raytheon.uf.viz.core.rsc.URICatalog;
import com.raytheon.uf.viz.core.rsc.URICatalog.IURIRefreshCallback; import com.raytheon.uf.viz.core.rsc.URICatalog.IURIRefreshCallback;
@ -65,25 +66,29 @@ public class MenuUpdater implements IAlertObserver {
Map<String, Object> attribs = new HashMap<String, Object>( Map<String, Object> attribs = new HashMap<String, Object>(
message.decodedAlert); message.decodedAlert);
DataTime dataTimeStr = (DataTime) attribs.get("dataTime"); DataTime dataTimeStr = (DataTime) attribs.get("dataTime");
if (dataTimeStr.getRefTime().before(
SimulatedTime.getSystemTime().getTime())) {
if (dataTimeStr != null) { if (dataTimeStr != null) {
// Update the date catalog // Update the date catalog
List<List<IURIRefreshCallback>> dataTimeList = URICatalog List<List<IURIRefreshCallback>> dataTimeList = URICatalog
.getInstance().searchTree(attribs); .getInstance().searchTree(attribs);
// If we found listeners, update them // If we found listeners, update them
if (dataTimeList != null) { if (dataTimeList != null) {
DataTime dataTime = dataTimeStr.clone(); DataTime dataTime = dataTimeStr.clone();
for (List<IURIRefreshCallback> refreshList : dataTimeList) { for (List<IURIRefreshCallback> refreshList : dataTimeList) {
for (IURIRefreshCallback callback : refreshList) { for (IURIRefreshCallback callback : refreshList) {
if (callback != null) { if (callback != null) {
callback.updateTime(dataTime); callback.updateTime(dataTime);
} }
} }
} }
} }
} }
}
} }
} }

View file

@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; 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.uf.viz.core.alerts.AlertMessage;
import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.IAlertObserver;
import com.raytheon.viz.aviation.guidance.EtaViewer; import com.raytheon.viz.aviation.guidance.EtaViewer;
@ -64,18 +66,23 @@ public class EtaBufMonitorObserver extends MonitorObserver implements
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
ArrayList<String> siteIDs = new ArrayList<String>(); ArrayList<String> siteIDs = new ArrayList<String>();
for (AlertMessage alert : alertMessages) { for (AlertMessage alert : alertMessages) {
String siteID = (String) alert.decodedAlert DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime");
.get("location.stationId"); if (dataTime.getRefTime().before(
if (!siteIDs.contains(siteID)) { SimulatedTime.getSystemTime().getTime())) {
for (TafSiteComp tsc : dialog.getTafSiteComps()) {
if (tsc.getStationName().equals(siteID)) { String siteID = (String) alert.decodedAlert
siteIDs.add(siteID); .get("location.stationId");
break; if (!siteIDs.contains(siteID)) {
} for (TafSiteComp tsc : dialog.getTafSiteComps()) {
} if (tsc.getStationName().equals(siteID)) {
} siteIDs.add(siteID);
} break;
}
}
}
}
}
if (siteIDs.size() > 0) { if (siteIDs.size() > 0) {
for (ViewerTab tab : dialog.getViewerTabList()) { for (ViewerTab tab : dialog.getViewerTabList()) {

View file

@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; 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.uf.viz.core.alerts.AlertMessage;
import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.IAlertObserver;
import com.raytheon.viz.aviation.guidance.MosViewer; import com.raytheon.viz.aviation.guidance.MosViewer;
@ -64,18 +66,22 @@ public class EtaMonitorObserver extends MonitorObserver implements
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
ArrayList<String> siteIDs = new ArrayList<String>(); ArrayList<String> siteIDs = new ArrayList<String>();
for (AlertMessage alert : alertMessages) { for (AlertMessage alert : alertMessages) {
String siteID = (String) alert.decodedAlert DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime");
.get("location.stationId"); if (dataTime.getRefTime().before(
if (!siteIDs.contains(siteID)) { SimulatedTime.getSystemTime().getTime())) {
for (TafSiteComp tsc : dialog.getTafSiteComps()) { String siteID = (String) alert.decodedAlert
if (tsc.getStationName().equals(siteID)) { .get("location.stationId");
siteIDs.add(siteID); if (!siteIDs.contains(siteID)) {
break; for (TafSiteComp tsc : dialog.getTafSiteComps()) {
} if (tsc.getStationName().equals(siteID)) {
} siteIDs.add(siteID);
} break;
} }
}
}
}
}
if (siteIDs.size() > 0) { if (siteIDs.size() > 0) {
for (ViewerTab tab : dialog.getViewerTabList()) { for (ViewerTab tab : dialog.getViewerTabList()) {

View file

@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; 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.uf.viz.core.alerts.AlertMessage;
import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.IAlertObserver;
import com.raytheon.viz.aviation.guidance.MosViewer; import com.raytheon.viz.aviation.guidance.MosViewer;
@ -65,18 +67,22 @@ public class GfsLampMonitorObserver extends MonitorObserver implements
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
ArrayList<String> siteIDs = new ArrayList<String>(); ArrayList<String> siteIDs = new ArrayList<String>();
for (AlertMessage alert : alertMessages) { for (AlertMessage alert : alertMessages) {
String siteID = (String) alert.decodedAlert DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime");
.get("location.stationId"); if (dataTime.getRefTime().before(
if (!siteIDs.contains(siteID)) { SimulatedTime.getSystemTime().getTime())) {
for (TafSiteComp tsc : dialog.getTafSiteComps()) { String siteID = (String) alert.decodedAlert
if (tsc.getStationName().equals(siteID)) { .get("location.stationId");
siteIDs.add(siteID); if (!siteIDs.contains(siteID)) {
break; for (TafSiteComp tsc : dialog.getTafSiteComps()) {
} if (tsc.getStationName().equals(siteID)) {
} siteIDs.add(siteID);
} break;
} }
}
}
}
}
if (siteIDs.size() > 0) { if (siteIDs.size() > 0) {
for (ViewerTab tab : dialog.getViewerTabList()) { for (ViewerTab tab : dialog.getViewerTabList()) {

View file

@ -22,6 +22,8 @@ package com.raytheon.viz.aviation.monitor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; 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.uf.viz.core.alerts.AlertMessage;
import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.IAlertObserver;
import com.raytheon.viz.aviation.guidance.MosViewer; import com.raytheon.viz.aviation.guidance.MosViewer;
@ -64,18 +66,22 @@ public class GfsMonitorObserver extends MonitorObserver implements
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
ArrayList<String> siteIDs = new ArrayList<String>(); ArrayList<String> siteIDs = new ArrayList<String>();
for (AlertMessage alert : alertMessages) { for (AlertMessage alert : alertMessages) {
String siteID = (String) alert.decodedAlert DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime");
.get("location.stationId"); if (dataTime.getRefTime().before(
if (!siteIDs.contains(siteID)) { SimulatedTime.getSystemTime().getTime())) {
for (TafSiteComp tsc : dialog.getTafSiteComps()) { String siteID = (String) alert.decodedAlert
if (tsc.getStationName().equals(siteID)) { .get("location.stationId");
siteIDs.add(siteID); if (!siteIDs.contains(siteID)) {
break; for (TafSiteComp tsc : dialog.getTafSiteComps()) {
} if (tsc.getStationName().equals(siteID)) {
} siteIDs.add(siteID);
} break;
} }
}
}
}
}
if (siteIDs.size() > 0) { if (siteIDs.size() > 0) {
for (ViewerTab tab : dialog.getViewerTabList()) { for (ViewerTab tab : dialog.getViewerTabList()) {

View file

@ -24,6 +24,8 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import com.raytheon.uf.common.dataplugin.grib.GribRecord; 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.uf.viz.core.alerts.AlertMessage;
import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.IAlertObserver;
import com.raytheon.viz.alerts.observers.ProductAlertObserver; import com.raytheon.viz.alerts.observers.ProductAlertObserver;
@ -85,7 +87,11 @@ public class GribRequestableDataFactory implements IAlertObserver {
@Override @Override
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
for (AlertMessage mess : 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);
}
}
}
} }

View file

@ -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;
import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.DataTime; 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.alerts.AlertMessage;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.derivparam.library.DerivParamMethod; import com.raytheon.uf.viz.derivparam.library.DerivParamMethod;
@ -206,98 +207,107 @@ public class GridUpdater implements IAlertObserver {
* .core.alerts.AlertMessage[]) * .core.alerts.AlertMessage[])
*/ */
@Override @Override
public synchronized void alertArrived(Collection<AlertMessage> alertMessages) { public synchronized void alertArrived(Collection<AlertMessage> alertMessages) {
Set<String> datauris = new HashSet<String>(); Set<String> datauris = new HashSet<String>();
for (AlertMessage alert : alertMessages) { for (AlertMessage alert : alertMessages) {
if (myUpdates.remove(alert.dataURI)) { DataTime dataTime = (DataTime) alert.decodedAlert.get("dataTime");
// This updater triggered this alert, if it processes it now we if (dataTime.getRefTime().before(
// could do this forever SimulatedTime.getSystemTime().getTime())) {
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);
}
if (lNode == null) { if (myUpdates.remove(alert.dataURI)) {
inventory.reinitTree(); // This updater triggered this alert, if it processes it now
// System.out.println(alert.dataURI); // we
// System.out.println("LevelId=" + level.getId()); // could do this forever
} else if (!(lNode instanceof GribRequestableLevelNode)) { continue;
if (lNode instanceof OrLevelNode) { }
DerivParamMethod method = ((OrLevelNode) lNode).getMethod(); GribMapKey updateKey = new GribMapKey(alert.decodedAlert);
// Null means it is an alias model and supplement means GribTimeCache.getInstance().clearTimes(updateKey);
// there exists a true GribNode buried under the or LevelNode lNode = null;
// node try {
if (method == null Level level = LevelFactory.getInstance().getLevel(
|| !method.getName().equals("Supplement")) { updateKey.masterLevel, updateKey.levelone,
inventory.reinitTree(); updateKey.leveltwo);
// System.out.println(((AbstractDerivedLevelNode) lNode) lNode = inventory.getNode(updateKey.modelName,
// .getModelName()); updateKey.parameter, level);
} } catch (CommunicationException e) {
} else { statusHandler.handle(Priority.PROBLEM,
inventory.reinitTree(); e.getLocalizedMessage(), e);
// System.out.println(alert.dataURI); }
// System.out.println(lNode.getClass());
}
}
Set<UpdateValue> 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 (lNode == null) {
} inventory.reinitTree();
myUpdates.addAll(datauris); // System.out.println(alert.dataURI);
ProductAlertObserver.processDerivedAlerts(datauris); // 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<UpdateValue> 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);
}
/** /**
* *

View file

@ -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;
import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.DataTime; 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.alerts.AlertMessage;
import com.raytheon.viz.alerts.IAlertObserver; import com.raytheon.viz.alerts.IAlertObserver;
import com.raytheon.viz.alerts.observers.ProductAlertObserver; import com.raytheon.viz.alerts.observers.ProductAlertObserver;
@ -128,60 +129,68 @@ public class RadarUpdater implements IAlertObserver {
return; return;
} }
Set<String> datauris = new HashSet<String>(); Set<String> datauris = new HashSet<String>();
for (AlertMessage alertMessage : alertMessages) { for (AlertMessage alertMessage : alertMessages) {
String icao = alertMessage.decodedAlert DataTime dataTime = (DataTime) alertMessage.decodedAlert
.get(RadarAdapter.ICAO_QUERY).toString(); .get("dataTime");
if (icao == null if (dataTime.getRefTime().before(
|| !icao.equalsIgnoreCase(configuredRadar.getRdaId())) { SimulatedTime.getSystemTime().getTime())) {
continue; String icao = alertMessage.decodedAlert.get(
} RadarAdapter.ICAO_QUERY).toString();
globalTimes = null; if (icao == null
Object obj = alertMessage.decodedAlert || !icao.equalsIgnoreCase(configuredRadar.getRdaId())) {
.get(RadarAdapter.PRODUCT_CODE_QUERY); continue;
if (obj == null || !(obj instanceof Integer)) { }
continue; globalTimes = null;
} Object obj = alertMessage.decodedAlert
Integer productCode = (Integer) obj; .get(RadarAdapter.PRODUCT_CODE_QUERY);
String paramAbbrev = RadarProductCodeMapping.getInstance() if (obj == null || !(obj instanceof Integer)) {
.getParameterAbbrev(productCode); continue;
if (paramAbbrev == null) { }
continue; Integer productCode = (Integer) obj;
} String paramAbbrev = RadarProductCodeMapping.getInstance()
obj = alertMessage.decodedAlert.get("dataTime"); .getParameterAbbrev(productCode);
if (obj == null || !(obj instanceof DataTime)) { if (paramAbbrev == null) {
continue; continue;
} }
DataTime time = (DataTime) obj; obj = alertMessage.decodedAlert.get("dataTime");
obj = alertMessage.decodedAlert.get(RadarAdapter.TILT_QUERY); if (obj == null || !(obj instanceof DataTime)) {
if (obj == null || !(obj instanceof Double)) { continue;
continue; }
} DataTime time = (DataTime) obj;
Double elevationAngle = (Double) obj; obj = alertMessage.decodedAlert.get(RadarAdapter.TILT_QUERY);
cache.remove(new CacheKey(productCode, elevationAngle)); if (obj == null || !(obj instanceof Double)) {
Level level = null; continue;
try { }
level = LevelFactory.getInstance().getLevel( Double elevationAngle = (Double) obj;
RadarAdapter.CUBE_MASTER_LEVEL_NAME, elevationAngle); cache.remove(new CacheKey(productCode, elevationAngle));
} catch (CommunicationException e1) { Level level = null;
statusHandler.handle(Priority.PROBLEM, try {
e1.getLocalizedMessage(), e1); level = LevelFactory.getInstance()
} .getLevel(RadarAdapter.CUBE_MASTER_LEVEL_NAME,
GribRecord fakeRec = new GribRecord(); elevationAngle);
fakeRec.setPluginName("grib"); } catch (CommunicationException e1) {
fakeRec.setDataTime(time); statusHandler.handle(Priority.PROBLEM,
GribModel modelInfo = new GribModel(); e1.getLocalizedMessage(), e1);
modelInfo.setModelName(RadarAdapter.RADAR_SOURCE); }
modelInfo.setParameterAbbreviation(paramAbbrev); GribRecord fakeRec = new GribRecord();
modelInfo.setLevel(level); fakeRec.setPluginName("grib");
modelInfo.setTypeEnsemble(null); fakeRec.setDataTime(time);
fakeRec.setModelInfo(modelInfo); GribModel modelInfo = new GribModel();
try { modelInfo.setModelName(RadarAdapter.RADAR_SOURCE);
fakeRec.constructDataURI(); modelInfo.setParameterAbbreviation(paramAbbrev);
datauris.add(fakeRec.getDataURI()); modelInfo.setLevel(level);
} catch (PluginException e) { modelInfo.setTypeEnsemble(null);
statusHandler.handle(Priority.PROBLEM, fakeRec.setModelInfo(modelInfo);
"Unable to generate updates for derived product", e); 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); ProductAlertObserver.processDerivedAlerts(datauris);
} }

View file

@ -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;
import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.DataTime; 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.RecordFactory;
import com.raytheon.uf.viz.core.catalog.LayerProperty; import com.raytheon.uf.viz.core.catalog.LayerProperty;
import com.raytheon.uf.viz.core.catalog.ScriptCreator; import com.raytheon.uf.viz.core.catalog.ScriptCreator;
@ -369,6 +370,10 @@ public class PointDataCubeAdapter implements IDataCubeAdapter {
throws VizException { throws VizException {
TimeQueryRequestSet set = new TimeQueryRequestSet(); TimeQueryRequestSet set = new TimeQueryRequestSet();
set.setRequests(requests.toArray(new TimeQueryRequest[0])); set.setRequests(requests.toArray(new TimeQueryRequest[0]));
// boundary for time queries
for (TimeQueryRequest req: set.getRequests()) {
req.setSimDate(SimulatedTime.getSystemTime().getTime());
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<List<DataTime>> result = (List<List<DataTime>>) ThriftClient List<List<DataTime>> result = (List<List<DataTime>>) ThriftClient
.sendRequest(set); .sendRequest(set);

View file

@ -31,6 +31,8 @@ import com.raytheon.uf.common.pointdata.GetPointDataTreeRequest;
import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority; 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.alerts.AlertMessage;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.core.requests.ThriftClient;
@ -101,25 +103,30 @@ public class PointDataInventory extends AbstractPointDataInventory implements
} }
@Override @Override
public void alertArrived(Collection<AlertMessage> alertMessages) { public void alertArrived(Collection<AlertMessage> alertMessages) {
for (AlertMessage message : alertMessages) { for (AlertMessage message : alertMessages) {
String pluginName = message.decodedAlert.get(PLUGIN_NAME) DataTime dataTime = (DataTime) message.decodedAlert.get("dataTime");
.toString(); if (dataTime.getRefTime().before(
String source = pluginName; SimulatedTime.getSystemTime().getTime())) {
String typeKey = getTypeKey(pluginName); String pluginName = message.decodedAlert.get(PLUGIN_NAME)
if (!PLUGIN_NAME.equals(typeKey)) { .toString();
source += message.decodedAlert.get(typeKey).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)) { if (getAllSources() != null
try { && !getAllSources().contains(source)) {
initTree(derParLibrary); try {
} catch (VizException e) { initTree(derParLibrary);
statusHandler.handle(Priority.PROBLEM, } catch (VizException e) {
e.getLocalizedMessage(), e); statusHandler.handle(Priority.PROBLEM,
} e.getLocalizedMessage(), e);
} }
} }
} }
}
}
} }

View file

@ -40,6 +40,7 @@ import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.BinOffset; import com.raytheon.uf.common.time.BinOffset;
import com.raytheon.uf.common.time.DataTime; 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.exception.VizException;
import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.core.requests.ThriftClient;
import com.raytheon.uf.viz.derivparam.library.DerivedParameterGenerator; import com.raytheon.uf.viz.derivparam.library.DerivedParameterGenerator;
@ -120,22 +121,24 @@ public class RadarDataCubeAdapter extends PointDataCubeAdapter {
DbQueryResponse response, boolean latestOnly, BinOffset binOffset) { DbQueryResponse response, boolean latestOnly, BinOffset binOffset) {
String dataTimefield = DATA_TIME_FIELD; String dataTimefield = DATA_TIME_FIELD;
if (latestOnly) { if (latestOnly) {
dataTimefield = LATEST_DATA_TIME_FIELD; dataTimefield = LATEST_DATA_TIME_FIELD;
} }
Collection<DataTime> results = new HashSet<DataTime>(); Collection<DataTime> results = new HashSet<DataTime>();
int i = 0; int i = 0;
for (Map<String, Object> map : response.getResults()) { for (Map<String, Object> map : response.getResults()) {
DataTime time = null; DataTime time = null;
if (latestOnly) { if (latestOnly) {
time = new DataTime((Date) map.get(dataTimefield), 0); time = new DataTime((Date) map.get(dataTimefield), 0);
} else { } else {
time = (DataTime) map.get(dataTimefield); time = (DataTime) map.get(dataTimefield);
time.setLevelValue((Double) map.get(LEVEL_FIELD)); time.setLevelValue((Double) map.get(LEVEL_FIELD));
} }
// Best res requests need this because they span a time period
results.add(time); if (time.getRefTime().before(SimulatedTime.getSystemTime().getTime())) {
++i; results.add(time);
} ++i;
}
}
if (binOffset != null) { if (binOffset != null) {
Set<DataTime> scaledDates = new TreeSet<DataTime>(); Set<DataTime> scaledDates = new TreeSet<DataTime>();
@ -170,6 +173,7 @@ public class RadarDataCubeAdapter extends PointDataCubeAdapter {
List<DbQueryRequest> dbRequests = new ArrayList<DbQueryRequest>( List<DbQueryRequest> dbRequests = new ArrayList<DbQueryRequest>(
requests.size()); requests.size());
for (TimeQueryRequest request : requests) { for (TimeQueryRequest request : requests) {
request.setSimDate(SimulatedTime.getSystemTime().getTime());
dbRequests.add(getTimeQueryRequest(request.getQueryTerms(), dbRequests.add(getTimeQueryRequest(request.getQueryTerms(),
request.isMaxQuery())); request.isMaxQuery()));
} }
@ -184,6 +188,9 @@ public class RadarDataCubeAdapter extends PointDataCubeAdapter {
TimeQueryRequest request = requests.get(i); TimeQueryRequest request = requests.get(i);
Collection<DataTime> times = processTimeQueryResponse(response, Collection<DataTime> times = processTimeQueryResponse(response,
request.isMaxQuery(), request.getBinOffset()); request.isMaxQuery(), request.getBinOffset());
result.add(new ArrayList<DataTime>(times)); result.add(new ArrayList<DataTime>(times));
} }
return result; return result;

View file

@ -465,6 +465,7 @@ public class SatelliteDataCubeAdapter implements IDataCubeAdapter {
List<TimeQueryRequest> baseRequests = new ArrayList<TimeQueryRequest>( List<TimeQueryRequest> baseRequests = new ArrayList<TimeQueryRequest>(
requests.size()); requests.size());
for (TimeQueryRequest request : requests) { for (TimeQueryRequest request : requests) {
request.setSimDate(SimulatedTime.getSystemTime().getTime());
if (!request.getQueryTerms().containsKey("DERIVED")) { if (!request.getQueryTerms().containsKey("DERIVED")) {
baseRequests.add(request); baseRequests.add(request);
} else { } else {

View file

@ -112,6 +112,17 @@ public class TimeQueryHandler implements IRequestHandler<TimeQueryRequest> {
request.isMaxQuery()); request.isMaxQuery());
times = runQuery(dao, query); times = runQuery(dao, query);
} }
// second check for some complex plugin requests that get by the simDate check in the query
ArrayList<DataTime> removes = new ArrayList<DataTime>();
for (DataTime time: times) {
if (time.getRefTime().after(request.getSimDate())) {
removes.add(time);
}
}
if (removes.size() > 0) {
times.removeAll(removes);
}
return times; return times;
} }

View file

@ -31,6 +31,8 @@ import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority; 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.RecordFactory;
import com.raytheon.uf.viz.core.alerts.AbstractAlertMessageParser; import com.raytheon.uf.viz.core.alerts.AbstractAlertMessageParser;
import com.raytheon.uf.viz.core.alerts.AlertMessage; import com.raytheon.uf.viz.core.alerts.AlertMessage;
@ -79,16 +81,20 @@ public class NcAutoUpdater implements IAlertObserver {
Object objectToSend = null; Object objectToSend = null;
Map<String, Object> attribs = new HashMap<String, Object>( Map<String, Object> attribs = new HashMap<String, Object>(
message.decodedAlert); message.decodedAlert);
String dataURI = message.dataURI; DataTime dataTime = (DataTime) attribs.get("dataTime");
if (reqResourceData.isUpdatingOnMetadataOnly()) { if (dataTime.getRefTime().before(
PluginDataObject record = RecordFactory.getInstance() SimulatedTime.getSystemTime().getTime())) {
.loadRecordFromUri(dataURI); String dataURI = message.dataURI;
objectToSend = record; if (reqResourceData.isUpdatingOnMetadataOnly()) {
PluginDataObject record = RecordFactory.getInstance()
.loadRecordFromUri(dataURI);
objectToSend = record;
} else { } else {
attribs.put("dataURI", message.dataURI); attribs.put("dataURI", message.dataURI);
objectToSend = Loader.loadData(attribs); objectToSend = Loader.loadData(attribs);
} }
}
return objectToSend; return objectToSend;
} }
}; };