Issue #15 Re-wrote SimDate integration for menus, alert observers after
merge headache. Former-commit-id:5b7ecea866
[formerly42a12fa7a5
[formerly1b7473572f
] [formerly5b7ecea866
[formerly 647b7ac154dbdaf945231b231f491bbca86d2a24]]] Former-commit-id:42a12fa7a5
[formerly1b7473572f
] Former-commit-id:42a12fa7a5
Former-commit-id:37da8763eb
This commit is contained in:
parent
90b18cc985
commit
c65a513956
19 changed files with 462 additions and 346 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue