diff --git a/cave/build/static/common/cave/etc/aviation/python/GridData.py b/cave/build/static/common/cave/etc/aviation/python/GridData.py index 1bf5ae29c8..7b8c538680 100644 --- a/cave/build/static/common/cave/etc/aviation/python/GridData.py +++ b/cave/build/static/common/cave/etc/aviation/python/GridData.py @@ -1,19 +1,19 @@ ## # This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA +# pursuant to Contract DG133W-05-CQ-1067 with the US Government. +# +# U.S. EXPORT CONTROLLED TECHNICAL DATA # This software product contains export-restricted data whose # export/transfer/disclosure is restricted by U.S. law. Dissemination # to non-U.S. persons whether in the United States or abroad requires # an export license or other authorization. # -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# +# Contractor Name: Raytheon Company +# Contractor Address: 6825 Pine Street, Suite 340 +# Mail Stop B8 +# Omaha, NE 68106 +# 402.291.0100 +# # See the AWIPS II Master Rights File ("Master Rights File.pdf") for # further licensing information. ## @@ -140,10 +140,20 @@ # Relationship Type: In Response to # Status: TEST # Title: AvnFPS: Lack of customization in QC check -# +# +#** +#* +#* +#*
+#* SOFTWARE HISTORY +#* Date Ticket# Engineer Description +#* ------------ ---------- ----------- -------------------------- +#* Initial creation. +#* Mar 07, 2013 1735 rferrel Changes to obtain grid data for a list of sites. +## # -import logging, os, time, ConfigParser, sys -import Avn, AvnLib, AvnParser +import logging, os, time, ConfigParser +import Avn, AvnLib, AvnParser, JUtil, cPickle import PointDataView, GfeValues _Missing = '' @@ -443,8 +453,11 @@ def _readPrbConf(): prb_conf['after9hr'][wx] = conf.getint('after9hr',wx) return prb_conf -def makeData(siteID, timeSeconds): +def makeData(siteID, timeSeconds): data = retrieveData(siteID, timeSeconds) + return formatData(siteID, timeSeconds, data) + +def formatData(siteID, timeSeconds, data): if data is None or data['issuetime'] < time.time() - 86400: msg = 'Grid data is not available' _Logger.info(msg) @@ -491,42 +504,51 @@ def makeTable(siteID, timeSeconds): msg = 'Grid data for %s is not available', siteID raise Avn.AvnError(msg) +def retrieveData(siteID, timeSeconds, parameters=Parameters): + results = _retrieveMapData([siteID], timeSeconds, parameters) + return results[siteID] -def retrieveData(siteID, timeSeconds): +def retrieveMapData(siteIDs, timeSeconds, parameters=Parameters): + r = _retrieveMapData(siteIDs, timeSeconds, parameters=Parameters) + results = {} + for siteID in siteIDs: + results[siteID] = cPickle.dumps(r[siteID]) + + return JUtil.pyDictToJavaMap(results) + +def _retrieveMapData(siteIDs, timeSeconds, parameters=Parameters): + import JUtil from com.raytheon.uf.common.dataplugin.gfe.request import GetPointDataRequest from com.vividsolutions.jts.geom import Coordinate from com.raytheon.viz.aviation.guidance import GuidanceUtil from com.raytheon.uf.viz.core.localization import LocalizationManager - - #timerStart = time.clock() - #print 'GridData retrieveData, siteID %s, timeSeconds %d' % (siteID, timeSeconds) - config = AvnParser.getTafSiteCfg(siteID) - lat = config['geography']['lat'] - lon = config['geography']['lon'] gfeSiteId = LocalizationManager.getInstance().getCurrentSite() - #print '\tgfeSiteId: %s, lat %s, lon %s' % (gfeSiteId, lat, lon) - task = GetPointDataRequest() task.setSiteID(gfeSiteId); - c = Coordinate(float(lon), float(lat)) - task.setCoordinate(c) - task.setNumberHours(_NumHours) - task.setStartTime(long(timeSeconds * 1000)) - for p in Parameters: - task.addParameter(p) db = gfeSiteId + '_GRID__Official_00000000_0000' task.setDatabaseID(db) - pdc = GuidanceUtil.getGFEPointData(task) - data = _getData(pdc, timeSeconds * 1000) - #print '\tdata: ', data - #timerEnd = time.clock() - #print '\ttime: ', timerEnd - timerStart - - if data is None : - _Logger.info('Data not available for %s', siteID) - #sys.stdout.flush() - return data - + for siteID in siteIDs: + config = AvnParser.getTafSiteCfg(siteID) + lat = config['geography']['lat'] + lon = config['geography']['lon'] + c = Coordinate(float(lon), float(lat)) + task.addCoordinate(c) + task.setNumberHours(_NumHours) + task.setStartTime(long(timeSeconds * 1000)) + for p in parameters: + task.addParameter(p) + pdcs = GuidanceUtil.getGFEPointsData(task) + i = 0 + results = {} + for siteID in siteIDs: + pdc = pdcs.getContainer(i) + if i < pdcs.getSize() : + ++i + data = _getData(pdc, timeSeconds * 1000) + if data is None: + _Logger.info('Data not available for %s', siteID) + results[siteID] = data + return results ############################################################################### if __name__ == '__main__': diff --git a/cave/build/static/common/cave/etc/aviation/python/GridMonitor.py b/cave/build/static/common/cave/etc/aviation/python/GridMonitor.py index b8f9d2c5b5..a8249b1a68 100644 --- a/cave/build/static/common/cave/etc/aviation/python/GridMonitor.py +++ b/cave/build/static/common/cave/etc/aviation/python/GridMonitor.py @@ -1,19 +1,19 @@ ## # This software was developed and / or modified by Raytheon Company, -# pursuant to Contract DG133W-05-CQ-1067 with the US Government. -# -# U.S. EXPORT CONTROLLED TECHNICAL DATA +# pursuant to Contract DG133W-05-CQ-1067 with the US Government. +# +# U.S. EXPORT CONTROLLED TECHNICAL DATA # This software product contains export-restricted data whose # export/transfer/disclosure is restricted by U.S. law. Dissemination # to non-U.S. persons whether in the United States or abroad requires # an export license or other authorization. # -# Contractor Name: Raytheon Company -# Contractor Address: 6825 Pine Street, Suite 340 -# Mail Stop B8 -# Omaha, NE 68106 -# 402.291.0100 -# +# Contractor Name: Raytheon Company +# Contractor Address: 6825 Pine Street, Suite 340 +# Mail Stop B8 +# Omaha, NE 68106 +# 402.291.0100 +# # See the AWIPS II Master Rights File ("Master Rights File.pdf") for # further licensing information. ## @@ -125,10 +125,20 @@ # IFPS grids monitoring module # Author: George Trojan, SAIC/MDL, August 2003 # last update: 04/20/06 +#** +#* +#* +#** * @author lvenable @@ -99,6 +100,10 @@ import com.raytheon.viz.avnconfig.IStatusSettable; * */ public class TafSiteComp { + /** + * + */ + public static final String GRID_MONITOR_CLASS = "GridMonitor"; /** * Number of seconds to blink the button. @@ -113,26 +118,28 @@ public class TafSiteComp { * DR14717: changed grace period from 10 minutes to 5 minutes. */ private final static long METAR_TIMEOUT = (1L * 60L + 5L) * 60L * 1000L; - + /** - * DR14717: When Metar is 2 hours old, the persistence indicators turn gray. + * DR14717: When Metar is 2 hours old, the persistence indicators turn gray. * This is the timeout in milliseconds for 2 hours. */ public final static long METAR_TIMEOUT_2HR = 2L * 60L * 60L * 1000L; - + /** - * DR14717: When Metar is 4 hours plus 10 minutes old, Metar Time Label is replaced by "None", - * and the current observation and persistence indicators turn gray. - * This is the timeout in milliseconds for 4 hours plus 10 minutes. + * DR14717: When Metar is 4 hours plus 10 minutes old, Metar Time Label is + * replaced by "None", and the current observation and persistence + * indicators turn gray. This is the timeout in milliseconds for 4 hours + * plus 10 minutes. */ public final static long METAR_TIMEOUT_4HR10MIN = (4L * 60L + 10L) * 60L * 1000L; - + /** * DR14717: */ private long latestMtrTime = -1; + private boolean persistMonitorProcessedFirst = false; - + /** * A TAF is good for up to 6 hours and can be issued up to 40 minutes before * they take affect. This time out is in milliseconds for 6 hours with a 40 @@ -230,6 +237,8 @@ public class TafSiteComp { return alertMap; } + private boolean haveGridMontior = false; + private TafRecord lastTaf; private boolean updatable; @@ -300,7 +309,7 @@ public class TafSiteComp { ResourceConfigMgr configMgr = ResourceConfigMgr.getInstance(); GridData gd = new GridData(); -// gd.widthHint = 70; // DR 15606 + // gd.widthHint = 70; // DR 15606 gd.minimumWidth = 70; siteIdBtn = new Button(parent, SWT.PUSH); configMgr.setDefaultFontAndColors(siteIdBtn, "WWWW", gd); @@ -384,15 +393,22 @@ public class TafSiteComp { monitorArray = new ArrayList+#* SOFTWARE HISTORY +#* Date Ticket# Engineer Description +#* ------------ ---------- ----------- -------------------------- +#* Initial creation. +#* Mar 07, 2013 1735 rferrel Use SiteGridManger to limit calls to server. +## -import logging, time -import Avn, AvnLib, Globals, GridData, MonitorP, TafDecoder, TafGen - +import logging, time, cPickle +import Avn, AvnLib, Globals, GridData, MonitorP, TafDecoder, TafGen, JUtil +from com.raytheon.viz.aviation.monitor import SiteGridManager _Logger = logging.getLogger(Avn.CATEGORY) ############################################################################## @@ -142,7 +152,21 @@ class Monitor(MonitorP.Monitor): def __makeData(self, t): try: - data = GridData.makeData(self.info['ident'], t) + siteID = self.info['ident'] + timeSeconds = long(t) + if SiteGridManager.needData(timeSeconds) : + siteIDs = JUtil.javaStringListToPylist(SiteGridManager.getSiteIDs()) + containersMap = GridData.retrieveMapData(siteIDs, timeSeconds) + SiteGridManager.setContainersMap(containersMap) + return None + + o = SiteGridManager.getData(siteID, timeSeconds) + if o is None : + return None + + ndata = cPickle.loads(o) + data = GridData.formatData(siteID, timeSeconds, ndata) + bbb = 'RRA' tc=TafGen.TafGen('grid',data,bbb) taf=tc.createTaf(False) diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceUtil.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceUtil.java index 6cc5b6ec3c..584c314f4e 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceUtil.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/GuidanceUtil.java @@ -23,7 +23,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.raytheon.uf.common.dataplugin.gfe.point.GFEPointDataContainer; +import com.raytheon.uf.common.dataplugin.gfe.point.GFEPointDataContainers; import com.raytheon.uf.common.dataplugin.gfe.request.GetPointDataRequest; import com.raytheon.uf.common.dataplugin.gfe.server.message.ServerResponse; import com.raytheon.uf.common.dataplugin.obs.metar.MetarRecord; @@ -36,7 +36,7 @@ import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.requests.ThriftClient; /** - * TODO Add Description + * Static utility methods for use with python code. * ** @@ -91,7 +91,7 @@ public class PythonMonitorJob extends AbstractQueueJob* @@ -44,6 +44,7 @@ import com.raytheon.uf.viz.core.requests.ThriftClient; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Jul 29, 2009 njensen Initial creation + * Mar 11, 2013 1735 rferrel Get a list of GFE Point Data Containers * ** @@ -85,17 +86,17 @@ public class GuidanceUtil { } /** - * Get the GFE Point Data information for the task request. + * Get a list of GFE Point Data information for the task request. * * @param task - * @return gfePointDataContainer + * @return gfePointDataContainers * @throws VizException */ @SuppressWarnings("unchecked") - public static GFEPointDataContainer getGFEPointData(GetPointDataRequest task) - throws VizException { + public static GFEPointDataContainers getGFEPointsData( + GetPointDataRequest task) throws VizException { task.setWorkstationID(VizApp.getWsId()); - ServerResponsesr = (ServerResponse ) ThriftClient + ServerResponse sr = (ServerResponse ) ThriftClient .sendRequest(task); return sr.getPayload(); } diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/PythonGuidanceJob.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/PythonGuidanceJob.java index 276ee01a2c..2de8bbe005 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/PythonGuidanceJob.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/guidance/PythonGuidanceJob.java @@ -59,7 +59,7 @@ import com.raytheon.viz.aviation.monitor.AvnPyUtil; * Apr 14, 2011 8065 rferrel Implemented enqueue to place * Alerts at the front of the queue * and work with data caching. - * Nov 28, 2012 1363 rferrel No longer add a dispose listner so the + * Nov 28, 2012 1363 rferrel No longer add a dispose listener so the * creation of instance can be done on * any thread. * diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/IGridDataRetrieveListener.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/IGridDataRetrieveListener.java new file mode 100644 index 0000000000..8554af6002 --- /dev/null +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/IGridDataRetrieveListener.java @@ -0,0 +1,44 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.viz.aviation.monitor; + +/** + * A listener interface for notifying clients when grid data retrieved. + * + * + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * Mar 6, 2013 1735 rferrel Initial creation + * + *+ * + * @author rferrel + * @version 1.0 + */ + +public interface IGridDataRetrieveListener { + /** + * Use by SiteGridManger to notify when grid data is available. + */ + public void gridDataRetrieved(); +} diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/PythonMonitorJob.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/PythonMonitorJob.java index a0dd5bc927..a91116c3ff 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/PythonMonitorJob.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/PythonMonitorJob.java @@ -41,7 +41,6 @@ import com.raytheon.uf.viz.core.VizApp; import com.raytheon.uf.viz.core.jobs.AbstractQueueJob; import com.raytheon.uf.viz.core.jobs.IRequestCompleteListener; import com.raytheon.viz.aviation.activator.Activator; -import com.raytheon.viz.aviation.guidance.PythonGuidanceJob; /** * A job that performs the monitoring/rules compare within python. A FIFO queue @@ -57,7 +56,8 @@ import com.raytheon.viz.aviation.guidance.PythonGuidanceJob; * ------------ ---------- ----------- -------------------------- * Sep 3, 2009 njensen Initial creation * Sep 27,2010 6185 rferrel Allow multiple jobs off a static queue. - * May 13,2011 8611 rferrel Adde request's type to the results + * May 13,2011 8611 rferrel Added request's type to the results + * Mar 06, 2013 1735 rferrel Have python reference proper class. * *{ .getPath(), AvnPyUtil.getLoggingHandlerDir(), AvnPyUtil .getPointDataDir(), AvnPyUtil.getCommonPythonDir()); python = new PythonScript(filePath, includePath, - PythonGuidanceJob.class.getClassLoader()); + PythonMonitorJob.class.getClassLoader()); } /** diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/SiteGridManager.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/SiteGridManager.java new file mode 100644 index 0000000000..15a798cc12 --- /dev/null +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/SiteGridManager.java @@ -0,0 +1,230 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.viz.aviation.monitor; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; + +import com.raytheon.uf.common.time.util.TimeUtil; + +/** + * This class coordinates getting the Grid data for the sites being monitored by + * AvnFPS. + * + * + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * Mar 6, 2013 1735 rferrel Initial creation + * + *+ * + * @author rferrel + * @version 1.0 + */ + +public class SiteGridManager { + + /** Singleton instance of class used for synchronization. */ + private static final SiteGridManager instance = new SiteGridManager(); + + /** Time out for performing a reset in milliseconds */ + private static final long RESET_TIME = 5L * TimeUtil.MILLIS_PER_MINUTE; + + /** The list of sites that need grid information. */ + private final ListsiteIDs = new ArrayList (); + + /** Python pickle of the grid information for sites */ + private final Map dataMap = new HashMap (); + + /** The time value for values in dataMap. */ + private long timeSeconds = 0L; + + /** When true grid maps are being retrieved. */ + private boolean gettingData = false; + + /** Listeners to notified when the grid data has arrived. */ + private final List listeners = new ArrayList (); + + /** + * Timer to force retrieval of grid data. Currently no way to notify if the + * grid data for a given time has been updated. + */ + private Job resetJob; + + /** + * Add sites to list of sites needing grid data. + * + * @param siteIDs + */ + public static void addSiteIDs(List siteIDs) { + synchronized (instance) { + instance.siteIDs.addAll(siteIDs); + } + } + + /** + * The list of sites needing grid information. + * + * @return siteIDs + */ + public static List getSiteIDs() { + synchronized (instance) { + return new ArrayList (instance.siteIDs); + } + } + + /** + * Clear data Maps sites and time. + */ + public static void clear() { + synchronized (instance) { + instance.siteIDs.clear(); + instance.dataMap.clear(); + instance.timeSeconds = 0L; + instance.gettingData = false; + instance.resetJob.cancel(); + } + } + + /** + * Used by python to set all grid data for siteIDs and notify listeners that + * grid data has arrived. + * + * @param dataMap + */ + public static void setContainersMap(Map dataMap) { + synchronized (instance) { + instance.dataMap.clear(); + instance.dataMap.putAll(dataMap); + instance.gettingData = false; + } + instance.resetJob.cancel(); + instance.resetJob.schedule(RESET_TIME); + notifyListeners(); + } + + /** + * Used by python to determine if grid data must be retrieved. This allows + * only one Job to retrieve the data. + * + * @param timeSeconds + * - The time for the grid data. + * @return true retrieve grid data otherwise false + */ + public static boolean needData(long timeSeconds) { + boolean state = false; + synchronized (instance) { + if (!instance.gettingData && instance.timeSeconds != timeSeconds) { + state = true; + instance.timeSeconds = timeSeconds; + instance.dataMap.clear(); + instance.gettingData = true; + } + } + return state; + } + + /** + * Add listener to be notified when grid data is retrieved. + * + * @param listener + */ + public static void addRetrieveDataListener( + IGridDataRetrieveListener listener) { + synchronized (instance) { + instance.listeners.add(listener); + } + } + + /** + * Remove the listener. + * + * @param listener + */ + public static void removeRetrieveDataListener( + IGridDataRetrieveListener listener) { + synchronized (instance) { + instance.listeners.remove(listener); + } + } + + /** + * Inform listeners that grid data has arrived. + */ + private static void notifyListeners() { + List listeners = null; + synchronized (instance) { + listeners = new ArrayList ( + instance.listeners); + } + + for (IGridDataRetrieveListener listener : listeners) { + listener.gridDataRetrieved(); + } + } + + /** + * Get the python data for the desired site and time. If data not yet + * retrieved null is returned. + * + * @param siteID + * @param timeSeconds + * @return data + */ + public static String getData(String siteID, long timeSeconds) { + synchronized (instance) { + return instance.dataMap.get(siteID); + } + } + + /** + * Private constructor to allow only the one instance. + */ + private SiteGridManager() { + resetJob = new Job("SiteGridManger reset") { + + @Override + protected IStatus run(IProgressMonitor monitor) { + SiteGridManager.this.reset(); + return Status.OK_STATUS; + } + }; + resetJob.setSystem(true); + } + + /** + * Perform reset so the next data request will query for the grid data. + */ + private synchronized void reset() { + dataMap.clear(); + timeSeconds = 0L; + gettingData = false; + } +} diff --git a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/TafSiteComp.java b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/TafSiteComp.java index 96d9f1aba9..58504dbd38 100644 --- a/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/TafSiteComp.java +++ b/cave/com.raytheon.viz.aviation/src/com/raytheon/viz/aviation/monitor/TafSiteComp.java @@ -92,6 +92,7 @@ import com.raytheon.viz.avnconfig.IStatusSettable; * 04/26/2012 14717 zhao Indicator labels turn gray when Metar is outdated * 20JUL2012 14570 gzhang/zhao Add data structure for highlighting correct time groups in TAF viewer * 01/02/2013 15606 gzhang Remove GridData widthHint so button/label size change with GUI + * 03/07/2013 1735 rferrel Flag to indicate grid data is needed. *
* @@ -63,6 +67,8 @@ import com.vividsolutions.jts.geom.Coordinate; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Aug 11, 2009 njensen Initial creation + * Mar 06, 2013 1735 rferrel Change to retrieve multiple points + * in a single grid request. * ** @@ -75,6 +81,14 @@ public class GetPointDataHandler implements protected final transient Log logger = LogFactory.getLog(getClass()); + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.common.serialization.comm.IRequestHandler#handleRequest + * (com.raytheon.uf.common.serialization.comm.IServerRequest) + */ + @SuppressWarnings("unchecked") @Override public ServerResponse> handleRequest(GetPointDataRequest request) throws Exception { @@ -82,18 +96,8 @@ public class GetPointDataHandler implements DatabaseID db = new DatabaseID(request.getDatabaseID()); List
+ * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * Mar 6, 2013 1735 rferrel Initial creation + * + *+ * + * @author rferrel + * @version 1.0 + */ +@DynamicSerialize +public class GFEPointDataContainers { + /** Results for a list of coordinates. */ + @DynamicSerializeElement + private List
* @@ -35,6 +35,7 @@ import com.vividsolutions.jts.geom.Coordinate; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Aug 4, 2009 njensen Initial creation + * Mar 6, 2013 1735 rferrel Now handles a list of coordinates. * ** @@ -45,61 +46,133 @@ import com.vividsolutions.jts.geom.Coordinate; @DynamicSerialize public class GetPointDataRequest extends AbstractGfeRequest { + /** Id of data base containing the grid. */ @DynamicSerializeElement private String databaseID; + /** List of coordinates requesting values. */ @DynamicSerializeElement - private Coordinate coordinate; + private List