Merge branch 'ss_builds' (12.12.1-3) into development

Former-commit-id: 8fc896f7d4 [formerly 448dd1c35f] [formerly 8fc896f7d4 [formerly 448dd1c35f] [formerly 00f3d51546 [formerly 7a44f29952ec89991e578c67357e1ef3f3c51d59]]]
Former-commit-id: 00f3d51546
Former-commit-id: 21ecd53719 [formerly c8cac52915]
Former-commit-id: 59efd9a217
This commit is contained in:
Steve Harris 2012-11-13 17:28:26 -06:00
commit ae9d9985cd
40 changed files with 946 additions and 422 deletions

View file

@ -1,19 +1,19 @@
## ##
# This software was developed and / or modified by Raytheon Company, # This software was developed and / or modified by Raytheon Company,
# pursuant to Contract DG133W-05-CQ-1067 with the US Government. # pursuant to Contract DG133W-05-CQ-1067 with the US Government.
# #
# U.S. EXPORT CONTROLLED TECHNICAL DATA # U.S. EXPORT CONTROLLED TECHNICAL DATA
# This software product contains export-restricted data whose # This software product contains export-restricted data whose
# export/transfer/disclosure is restricted by U.S. law. Dissemination # export/transfer/disclosure is restricted by U.S. law. Dissemination
# to non-U.S. persons whether in the United States or abroad requires # to non-U.S. persons whether in the United States or abroad requires
# an export license or other authorization. # an export license or other authorization.
# #
# Contractor Name: Raytheon Company # Contractor Name: Raytheon Company
# Contractor Address: 6825 Pine Street, Suite 340 # Contractor Address: 6825 Pine Street, Suite 340
# Mail Stop B8 # Mail Stop B8
# Omaha, NE 68106 # Omaha, NE 68106
# 402.291.0100 # 402.291.0100
# #
# See the AWIPS II Master Rights File ("Master Rights File.pdf") for # See the AWIPS II Master Rights File ("Master Rights File.pdf") for
# further licensing information. # further licensing information.
## ##
@ -38,25 +38,25 @@ from java.util import HashSet
# #
# GFE Painter for painting GFE data from scripts # GFE Painter for painting GFE data from scripts
# #
# #
# SOFTWARE HISTORY # SOFTWARE HISTORY
# #
# Date Ticket# Engineer Description # Date Ticket# Engineer Description
# ------------ ---------- ----------- -------------------------- # ------------ ---------- ----------- --------------------------
# 04/01/09 njensen Initial Creation. # 04/01/09 njensen Initial Creation.
# 08/20/2012 #1077 randerso Fixed backgroundColor setting # 08/20/2012 #1077 randerso Fixed backgroundColor setting
# 09/13/2012 #1147 dgilling Allow map labels to be disabled. # 09/13/2012 #1147 dgilling Allow map labels to be disabled.
# # 11/6/2012 15406 ryu Correction for computing domain from mask
# #
# #
import VizPainter import VizPainter
class GFEPainter(VizPainter.VizPainter): class GFEPainter(VizPainter.VizPainter):
def __init__(self, imageWidth=None, imageHeight=None, expandLeft=25.0, expandRight=25.0, expandTop=25.0, expandBottom=25.0, mask=None, wholeDomain=0, bgColor=None): def __init__(self, imageWidth=None, imageHeight=None, expandLeft=25.0, expandRight=25.0, expandTop=25.0, expandBottom=25.0, mask=None, wholeDomain=0, bgColor=None):
self.dataMgr = DataManager.getInstance(None) self.dataMgr = DataManager.getInstance(None)
self.refId = None self.refId = None
envelope = None envelope = None
gloc = self.dataMgr.getParmManager().compositeGridLocation() gloc = self.dataMgr.getParmManager().compositeGridLocation()
@ -64,7 +64,7 @@ class GFEPainter(VizPainter.VizPainter):
from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData_CoordinateType as CoordinateType from com.raytheon.uf.common.dataplugin.gfe.reference import ReferenceData_CoordinateType as CoordinateType
self.refId = ReferenceID(mask) self.refId = ReferenceID(mask)
if wholeDomain == 0: if wholeDomain == 0:
envelope = self.dataMgr.getRefManager().loadRefSet(self.refId).overallDomain(CoordinateType.LATLON) envelope = self.dataMgr.getRefManager().loadRefSet(self.refId).overallDomain(CoordinateType.GRID)
if imageWidth is not None: if imageWidth is not None:
imageWidth = Integer(int(imageWidth)) imageWidth = Integer(int(imageWidth))
if imageHeight is not None: if imageHeight is not None:
@ -75,16 +75,16 @@ class GFEPainter(VizPainter.VizPainter):
desc = display.getDescriptor() desc = display.getDescriptor()
self.dataMgr.getSpatialDisplayManager().setDescriptor(desc) self.dataMgr.getSpatialDisplayManager().setDescriptor(desc)
VizPainter.VizPainter.__init__(self, display, backgroundColor=bgColor) VizPainter.VizPainter.__init__(self, display, backgroundColor=bgColor)
gfeSystem = GFESystemResource(self.dataMgr) gfeSystem = GFESystemResource(self.dataMgr)
self.addVizResource(gfeSystem) self.addVizResource(gfeSystem)
desc.getResourceList().getProperties(gfeSystem).setSystemResource(True) desc.getResourceList().getProperties(gfeSystem).setSystemResource(True)
self.primaryRsc = None self.primaryRsc = None
def __del__(self): def __del__(self):
VizPainter.VizPainter.__del__(self) VizPainter.VizPainter.__del__(self)
def setupLegend(self, localTime=False, snapshotTime=False, snapshot='', descriptiveName='SHORT', duration='', start='', end='', override={}, lang=''): def setupLegend(self, localTime=False, snapshotTime=False, snapshot='', descriptiveName='SHORT', duration='', start='', end='', override={}, lang=''):
legend = ImageLegendResource(self.dataMgr) legend = ImageLegendResource(self.dataMgr)
legend.setLocalTime(localTime) legend.setLocalTime(localTime)
@ -100,22 +100,22 @@ class GFEPainter(VizPainter.VizPainter):
legend.setColorOverride(parm, override[parm]) legend.setColorOverride(parm, override[parm])
self.addVizResource(legend) self.addVizResource(legend)
self.getDescriptor().getResourceList().getProperties(legend).setSystemResource(True) self.getDescriptor().getResourceList().getProperties(legend).setSystemResource(True)
def enableColorbar(self): def enableColorbar(self):
from com.raytheon.viz.gfe.rsc.colorbar import GFEColorbarResource from com.raytheon.viz.gfe.rsc.colorbar import GFEColorbarResource
colorBar = GFEColorbarResource(self.dataMgr) colorBar = GFEColorbarResource(self.dataMgr)
self.addVizResource(colorBar) self.addVizResource(colorBar)
self.getDescriptor().getResourceList().getProperties(colorBar).setSystemResource(True) self.getDescriptor().getResourceList().getProperties(colorBar).setSystemResource(True)
def __makeGFEResource(self, parm): def __makeGFEResource(self, parm):
parm.getParmState().setPickUpValue(None) parm.getParmState().setPickUpValue(None)
gfeRsc = GFEResource(parm, self.dataMgr) gfeRsc = GFEResource(parm, self.dataMgr)
self.addVizResource(gfeRsc) self.addVizResource(gfeRsc)
if not parm.getDisplayAttributes().getBaseColor(): if not parm.getDisplayAttributes().getBaseColor():
from com.raytheon.viz.core import ColorUtil from com.raytheon.viz.core import ColorUtil
parm.getDisplayAttributes().setBaseColor(ColorUtil.getNewColor(self.getDescriptor())) parm.getDisplayAttributes().setBaseColor(ColorUtil.getNewColor(self.getDescriptor()))
return gfeRsc return gfeRsc
def addGfeResource(self, parm, colormap=None, colorMin=None, colorMax=None, smooth=False, color=None, lineWidth=None): def addGfeResource(self, parm, colormap=None, colorMin=None, colorMax=None, smooth=False, color=None, lineWidth=None):
gfeRsc = self.__makeGFEResource(parm) gfeRsc = self.__makeGFEResource(parm)
# jvisType = VisualizationType.valueOf('IMAGE') # jvisType = VisualizationType.valueOf('IMAGE')
@ -127,8 +127,8 @@ class GFEPainter(VizPainter.VizPainter):
parm.getDisplayAttributes().setDisplayMask(self.refId) parm.getDisplayAttributes().setDisplayMask(self.refId)
self.primaryRsc = gfeRsc self.primaryRsc = gfeRsc
params = gfeRsc.getCapability(ColorMapCapability).getColorMapParameters() params = gfeRsc.getCapability(ColorMapCapability).getColorMapParameters()
if colormap is not None: if colormap is not None:
from com.raytheon.uf.viz.core.drawables import ColorMapLoader from com.raytheon.uf.viz.core.drawables import ColorMapLoader
params.setColorMap(ColorMapLoader.loadColorMap(colormap)) params.setColorMap(ColorMapLoader.loadColorMap(colormap))
if colorMax is not None and colorMin is not None: if colorMax is not None and colorMin is not None:
params.setDataMin(colorMin) params.setDataMin(colorMin)
@ -145,9 +145,9 @@ class GFEPainter(VizPainter.VizPainter):
gfeRsc.getCapability(ColorableCapability).setColor(color) gfeRsc.getCapability(ColorableCapability).setColor(color)
if lineWidth is not None: if lineWidth is not None:
gfeRsc.getCapability(OutlineCapability).setOutlineWidth(lineWidth) gfeRsc.getCapability(OutlineCapability).setOutlineWidth(lineWidth)
def addMapBackground(self, mapName, color=None, lineWidth=None, def addMapBackground(self, mapName, color=None, lineWidth=None,
linePattern=None, xOffset=None, yOffset=None, linePattern=None, xOffset=None, yOffset=None,
labelAttribute=None, fontOffset=None): labelAttribute=None, fontOffset=None):
from com.raytheon.uf.viz.core.maps import MapManager from com.raytheon.uf.viz.core.maps import MapManager
rsc = MapManager.getInstance(self.getDescriptor()).loadMapByBundleName(mapName).getResource() rsc = MapManager.getInstance(self.getDescriptor()).loadMapByBundleName(mapName).getResource()
@ -165,10 +165,10 @@ class GFEPainter(VizPainter.VizPainter):
if fontOffset is not None: if fontOffset is not None:
mag = Double(1.26 ** fontOffset) mag = Double(1.26 ** fontOffset)
rsc.getCapability(MagnificationCapability).setMagnification(mag) rsc.getCapability(MagnificationCapability).setMagnification(mag)
def getDataManager(self): def getDataManager(self):
return self.dataMgr return self.dataMgr
def outputFiles(self, filename, attachLogo=False, logoText=None): def outputFiles(self, filename, attachLogo=False, logoText=None):
rendered = self.getTarget().screenshot() rendered = self.getTarget().screenshot()
if attachLogo: if attachLogo:
@ -176,7 +176,7 @@ class GFEPainter(VizPainter.VizPainter):
from com.raytheon.uf.common.localization import PathManagerFactory from com.raytheon.uf.common.localization import PathManagerFactory
noaa = 'pyViz/logos/noaalogo2.png' noaa = 'pyViz/logos/noaalogo2.png'
nws = 'pyViz/logos/nwslogo.png' nws = 'pyViz/logos/nwslogo.png'
pathMgr = PathManagerFactory.getPathManager() pathMgr = PathManagerFactory.getPathManager()
noaa = pathMgr.getStaticFile(noaa) noaa = pathMgr.getStaticFile(noaa)
nws = pathMgr.getStaticFile(nws) nws = pathMgr.getStaticFile(nws)
noaaImage = ImageIO.read(noaa) noaaImage = ImageIO.read(noaa)
@ -195,12 +195,12 @@ class GFEPainter(VizPainter.VizPainter):
fm = graphics.getFontMetrics() fm = graphics.getFontMetrics()
textBounds = fm.getStringBounds(logoText, graphics) textBounds = fm.getStringBounds(logoText, graphics)
graphics.drawString(logoText, int((rendered.getWidth() - textBounds.getWidth()) / 2), \ graphics.drawString(logoText, int((rendered.getWidth() - textBounds.getWidth()) / 2), \
int(rendered.getHeight() + (noaaImage.getHeight() / 2) + textBounds.getHeight() / 2)) int(rendered.getHeight() + (noaaImage.getHeight() / 2) + textBounds.getHeight() / 2))
graphics.drawImage(nwsImage, finalBuf.getWidth() - nwsImage.getWidth(), rendered.getHeight(), None) graphics.drawImage(nwsImage, finalBuf.getWidth() - nwsImage.getWidth(), rendered.getHeight(), None)
finalBuf.flush() finalBuf.flush()
self.outputImage(finalBuf, filename) self.outputImage(finalBuf, filename)
else: else:
self.outputImage(rendered, filename) self.outputImage(rendered, filename)
def _changeTime(self, time): def _changeTime(self, time):
pass pass

View file

@ -69,8 +69,8 @@ import com.vividsolutions.jts.geom.Coordinate;
* 04/08/2008 chammack Initial Port from AWIPS I (minus ISC support) * 04/08/2008 chammack Initial Port from AWIPS I (minus ISC support)
* 07/23/2012 #936 dgilling Reinstate config-handling code to * 07/23/2012 #936 dgilling Reinstate config-handling code to
* calcGridLabels(). * calcGridLabels().
* 11/05/2012 #14566 jzeng Reverse the order of grids * 11/05/2012 #14566 jzeng Paint the sample points with the order of grids
* in calcGridLabels () * in calcGridLabels ()
* </pre> * </pre>
* *
* @author chammack * @author chammack
@ -254,12 +254,16 @@ public class SamplePainter {
* @param colors * @param colors
* The color list * The color list
*/ */
private void calcGridLabels(Coordinate worldLoc, final List<GridID> grids, private void calcGridLabels(Coordinate worldLoc, final List<GridID> Grids,
final GridID imageGrid, List<String> sampleLabels, List<RGB> colors) { final GridID imageGrid, List<String> sampleLabels, List<RGB> colors) {
if (grids.isEmpty()) { if (Grids.isEmpty()) {
return; return;
} }
List<GridID> grids = Grids;
Collections.reverse(grids);
// if list is not defined, then all samples will be painted for // if list is not defined, then all samples will be painted for
// all parms // all parms
@ -284,8 +288,6 @@ public class SamplePainter {
inGrid = true; inGrid = true;
} }
Collections.reverse(grids);
// get the list of samples that should be painted and in the // get the list of samples that should be painted and in the
// order // order
for (GridID grid : grids) { for (GridID grid : grids) {
@ -340,6 +342,7 @@ public class SamplePainter {
sampleLabels.add(label); sampleLabels.add(label);
colors.add(labelColor); colors.add(labelColor);
} }
Collections.reverse(grids);
} }
/** /**

View file

@ -1,48 +1,48 @@
/** /**
* This software was developed and / or modified by Raytheon Company, * This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government. * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
* *
* U.S. EXPORT CONTROLLED TECHNICAL DATA * U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose * This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination * export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires * to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization. * an export license or other authorization.
* *
* Contractor Name: Raytheon Company * Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340 * Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8 * Mail Stop B8
* Omaha, NE 68106 * Omaha, NE 68106
* 402.291.0100 * 402.291.0100
* *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information. * further licensing information.
**/ **/
package com.raytheon.viz.gfe.ifpimage; package com.raytheon.viz.gfe.ifpimage;
import org.geotools.coverage.grid.GeneralGridEnvelope; import org.geotools.coverage.grid.GeneralGridEnvelope;
import org.geotools.coverage.grid.GridGeometry2D; import org.geotools.coverage.grid.GridGeometry2D;
import org.geotools.geometry.GeneralEnvelope; import org.geotools.geometry.GeneralEnvelope;
import org.opengis.geometry.Envelope; import org.opengis.geometry.Envelope;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.TransformException;
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation; import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
import com.raytheon.uf.common.geospatial.MapUtil; import com.raytheon.uf.common.geospatial.MapUtil;
import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Coordinate;
/** /**
* Static methods to support IFP Image or generating GFE images off screen. * Static methods to support IFP Image or generating GFE images off screen.
* *
* <pre> * <pre>
* *
* SOFTWARE HISTORY * SOFTWARE HISTORY
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 12, 2009 njensen Initial creation * Mar 12, 2009 njensen Initial creation
* 21May2009 6309 garmendariz Modified path for Geotools 2.6.4 * 21May2009 6309 garmendariz Modified path for Geotools 2.6.4
* * 11/6/2012 15406 ryu Modified computing domain from mask
*
* </pre> * </pre>
* *
* @author njensen * @author njensen
* @version 1.0 * @version 1.0
*/ */
@ -57,25 +57,15 @@ public class GfeImageUtil {
Envelope envelope = null; Envelope envelope = null;
GridGeometry2D newGridGeometry = null; GridGeometry2D newGridGeometry = null;
try { if (env != null) {
if (env != null) { Coordinate ll = new Coordinate(env.getMinX(), env.getMinY());
Point[] points = new Point[2]; Coordinate ur = new Coordinate(env.getMaxX(), env.getMaxY());
points[0] = MapUtil.getPoint(env.getMinY(), env.getMinX()); envelope = MapUtil.convertToNativeEnvelope(ll, ur, gloc);
points[1] = MapUtil.getPoint(env.getMaxY(), env.getMaxX()); }
envelope = MapUtil.extractProjectedEnvelope(gloc.getCrs(),
points, MapUtil.getTransformFromLatLon(gloc.getCrs())); if (envelope == null) {
} GridGeometry2D gridGeometry = MapUtil.getGridGeometry(gloc);
} catch (TransformException e) { envelope = gridGeometry.getEnvelope();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FactoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (envelope == null) {
GridGeometry2D gridGeometry = MapUtil.getGridGeometry(gloc);
envelope = gridGeometry.getEnvelope();
}
} }
double dLeft = envelope.getSpan(0) * percentLeft; double dLeft = envelope.getSpan(0) * percentLeft;

View file

@ -128,6 +128,9 @@ import com.raytheon.viz.hydrocommon.util.DbUtils;
* 06 Nov 2012 15399 wkwock Fix refine the plot algorithm and sampling algorithm * 06 Nov 2012 15399 wkwock Fix refine the plot algorithm and sampling algorithm
* 06 Nov 2012 15459 lbousaidi update data when page/up or page/down is pressed without having * 06 Nov 2012 15459 lbousaidi update data when page/up or page/down is pressed without having
* to click in graph button again. * to click in graph button again.
* 06 Nov 2012 15400 lbousaidi Changed logic in buildPointString routine, added discharge2stage
* to display stage value, also added checking for rating curve for both
* stage and discharge.
* @author lvenable * @author lvenable
* @version 1.0 * @version 1.0
* *
@ -1599,31 +1602,57 @@ public class TimeSeriesDisplayCanvas extends TimeSeriesGraphCanvas implements
double yValue = pixel2y(graphData, y); double yValue = pixel2y(graphData, y);
String units = FEET; String units = FEET;
boolean isRiverData = true; boolean isRiverData = true;
boolean isStage= true;
ArrayList<TraceData> traces = graphData.getTraces(); ArrayList<TraceData> traces = graphData.getTraces();
for (TraceData trace : traces) { for (TraceData trace : traces) {
if (!trace.getPe().toUpperCase().startsWith("H") if (!trace.getPe().toUpperCase().startsWith("H")
&& !trace.getPe().toUpperCase().startsWith("Q")) { && !trace.getPe().toUpperCase().startsWith("Q")) {
isRiverData = false; isRiverData = false;
} }
} if (trace.getPe().toUpperCase().startsWith("Q")) {
isStage=false;
if (isRiverData) {
sb.append(" value=" + twoDecimalFormat.format(yValue) + " "
+ units + " ");
double q = StageDischargeUtils.stage2discharge(lid, yValue);
if (q != HydroConstants.MISSING_VALUE) {
units = CFS;
if (q > 10000) {
units = KCFS;
q = q / 1000;
}
sb.append(String.format("%8.1f", q) + " " + units);
} }
} else { }
units = INCH;
sb.append(" value=" + twoDecimalFormat.format(yValue) + " " if (isRiverData) {
+ units + " ");
if (isStage) {
/**
* Convert the stage to discharge for the location and stage value passed in.
*/
double q = StageDischargeUtils.stage2discharge(lid, yValue);
//check for rating curve
if (q != HydroConstants.RATING_CONVERT_FAILED) {
if (q > 10000) {
units = KCFS;
q = q / 1000;
}else {
units = CFS;
}
sb.append(" value=" + twoDecimalFormat.format(yValue)
+ " " + FEET + " ");
sb.append(String.format("%8.1f", q) + " " + units);
}else {
sb.append(" value=" + twoDecimalFormat.format(yValue));
}
}else {
/**
* Convert the discharge to stage for the location and discharge value passed in.
*/
double q = StageDischargeUtils.discharge2stage(lid, yValue);
//check for rating curve
if (q != HydroConstants.RATING_CONVERT_FAILED) {
sb.append(" value=" + twoDecimalFormat.format(yValue)
+ " " + CFS + " ");
sb.append(String.format("%8.1f", q) + " " + FEET);
}else {
sb.append(" value=" + twoDecimalFormat.format(yValue));
}
}
}else {
sb.append(" value=" + twoDecimalFormat.format(yValue));
} }
return sb.toString(); return sb.toString();

View file

@ -63,7 +63,8 @@ import com.raytheon.viz.hydrocommon.HydroConstants;
* July 12 2011 9709 djingtao draw right Y axis for showPP is true. add new * July 12 2011 9709 djingtao draw right Y axis for showPP is true. add new
* function adjust_pcymax() * function adjust_pcymax()
* Aug. 10, 2011 10457 djingtao allow the red rubberband box to be drawn for setMissing in Edit * Aug. 10, 2011 10457 djingtao allow the red rubberband box to be drawn for setMissing in Edit
* Jul. 24, 2012 15195 mpduff Fix x axis scales. * Jul. 24, 2012 15195 mpduff Fix x axis scales.
* 06 Nov 2012 15399 wkwock Fix refine the plot algorithm and sampling algorithm
* *
* </pre> * </pre>
* *
@ -500,11 +501,11 @@ public class TimeSeriesGraphCanvas extends Canvas {
int x = -999; int x = -999;
int dy = 5; int dy = 5;
int dx = 4; int dx = 4;
long startMillis = gd.getXMin().getTime(); long startMillis = ((long)Math.ceil(gd.getXMin().getTime()/HydroConstants.MILLIS_PER_HOUR))*HydroConstants.MILLIS_PER_HOUR;
long endMillis = gd.getXMax().getTime(); long endMillis = gd.getXMax().getTime();
for (long i = startMillis; i <= endMillis; i += HydroConstants.MILLIS_PER_HOUR) { for (long i = startMillis; i <= endMillis; i += HydroConstants.MILLIS_PER_HOUR) {
x = x2pixel(gd, i); x = x2pixel(gd, i+59000); //59 seconds for better sampling
Date d = SimulatedTime.getSystemTime().getTime(); Date d = SimulatedTime.getSystemTime().getTime();
d.setTime(i); d.setTime(i);
dy = 5; dy = 5;
@ -667,8 +668,8 @@ public class TimeSeriesGraphCanvas extends Canvas {
long xMin = gd.getXMin().getTime(); long xMin = gd.getXMin().getTime();
long xMax = gd.getXMax().getTime(); long xMax = gd.getXMax().getTime();
long xDiff = xMax - xMin; long xDiff = xMax - xMin;
long millisPerPixel = xDiff / graphAreaWidth; double millisPerPixel = xDiff / graphAreaWidth;
long millisTime = (xpix - GRAPHBORDER_LEFT) * millisPerPixel + xMin; long millisTime = (long)(xpix * millisPerPixel) + xMin;
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.setTimeInMillis(millisTime); cal.setTimeInMillis(millisTime);

View file

@ -39,6 +39,7 @@ import com.raytheon.viz.hydrocommon.whfslib.GeoUtil;
* Sep 18, 2009 2260 mpduff Initial creation * Sep 18, 2009 2260 mpduff Initial creation
* Apr 25, 2012 14499 wkwock Refine format, query, etc * Apr 25, 2012 14499 wkwock Refine format, query, etc
* Sep 11, 2012 13781 wkwock add print menu * Sep 11, 2012 13781 wkwock add print menu
* Oct 19, 2012 15454 wkwock Fix missing River mile, Zero Datum, Check bar
* *
* </pre> * </pre>
* *
@ -141,14 +142,14 @@ public class E19AReport extends E19Report {
buffer.append(String.format("STATION NO: %-11s\n", locData.getLocation().getSn())); buffer.append(String.format("STATION NO: %-11s\n", locData.getLocation().getSn()));
String mile = null; String mile = null;
if (data.getRiverstat().getDa() != HydroConstants.MISSING_VALUE) { if (data.getRiverstat().getMile() != HydroConstants.MISSING_VALUE) {
mile = String.format("%8.2f", data.getRiverstat().getMile()); mile = String.format("%8.2f", data.getRiverstat().getMile());
} else { } else {
mile = " "; mile = " ";
} }
String wstg = null; String wstg = null;
if (data.getRiverstat().getFs() != HydroConstants.MISSING_VALUE) { if (data.getRiverstat().getWstg() != HydroConstants.MISSING_VALUE) {
wstg = String.format("%8.2f", data.getRiverstat().getWstg()); wstg = String.format("%8.2f", data.getRiverstat().getWstg());
} else { } else {
wstg = " "; wstg = " ";
@ -158,14 +159,14 @@ public class E19AReport extends E19Report {
buffer.append(String.format(" USGS NO: %-11s\n", data.getRiverstat().getGsno())); buffer.append(String.format(" USGS NO: %-11s\n", data.getRiverstat().getGsno()));
String zd = null; String zd = null;
if (data.getRiverstat().getDa() != HydroConstants.MISSING_VALUE) { if (data.getRiverstat().getZd() != HydroConstants.MISSING_VALUE) {
zd = String.format("%8.3f", data.getRiverstat().getZd()); zd = String.format("%8.3f", data.getRiverstat().getZd());
} else { } else {
zd = " "; zd = " ";
} }
String bf = null; String bf = null;
if (data.getRiverstat().getFs() != HydroConstants.MISSING_VALUE) { if (data.getRiverstat().getBf() != HydroConstants.MISSING_VALUE) {
bf = String.format("%8.2f", data.getRiverstat().getBf()); bf = String.format("%8.2f", data.getRiverstat().getBf());
} else { } else {
bf = " "; bf = " ";
@ -175,7 +176,7 @@ public class E19AReport extends E19Report {
buffer.append(String.format(" NESS ID: %-8s\n", dataDcpTelem.getDcp().getGoes())); buffer.append(String.format(" NESS ID: %-8s\n", dataDcpTelem.getDcp().getGoes()));
String cb = null; String cb = null;
if (data.getRiverstat().getDa() != HydroConstants.MISSING_VALUE) { if (data.getRiverstat().getCb() != HydroConstants.MISSING_VALUE) {
cb = String.format("%8.3f", data.getRiverstat().getCb()); cb = String.format("%8.3f", data.getRiverstat().getCb());
} else { } else {
cb = " "; cb = " ";
@ -277,7 +278,7 @@ public class E19AReport extends E19Report {
buffer.append(" LATEST GAGE TYPE START DATE OWNER OF GAGE\n"); buffer.append(" LATEST GAGE TYPE START DATE OWNER OF GAGE\n");
if (dataG.getGageList() != null && dataG.getGageList().size() > 0) { if (dataG.getGageList() != null && dataG.getGageList().size() > 0) {
Gage gage=dataG.getGageList().get(dataG.getGageList().size()-1); Gage gage=dataG.getGageList().get(0);
buffer.append(String.format(" %-11s %10s %-11s\n", gage.getType(), sdf.format(gage.getBegin()), gage.getOwner())); buffer.append(String.format(" %-11s %10s %-11s\n", gage.getType(), sdf.format(gage.getBegin()), gage.getOwner()));
} }

View file

@ -46,6 +46,7 @@ import com.raytheon.viz.hydrocommon.whfslib.GeoUtil;
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Sep 18, 2009 2260 mpduff Initial creation * Sep 18, 2009 2260 mpduff Initial creation
* Apr 25, 2012 14499 wkwock Refine format, query, etc * Apr 25, 2012 14499 wkwock Refine format, query, etc
* Oct 14, 2012 15454 wkwock Fix can not generate e19 if damage filed is empty
* *
* </pre> * </pre>
* *
@ -1392,9 +1393,13 @@ public class E19Report extends TextReport {
tmp1 = String.format("%7.2f", floodList.get(floodIndex).getStage()); tmp1 = String.format("%7.2f", floodList.get(floodIndex).getStage());
} }
thisLineStr=" " + tmp1 + " - " + lines[lineIndex]; if (lines==null || lines[lineIndex]==null) {
thisLineStr=" " + tmp1 + " -";
} else {
thisLineStr=" " + tmp1 + " - " + lines[lineIndex];
}
}else { }else {
thisLineStr=" " + lines[lineIndex]; thisLineStr=" ";
} }
int spaces = flood_filler - thisLineStr.length(); int spaces = flood_filler - thisLineStr.length();
@ -1410,7 +1415,7 @@ public class E19Report extends TextReport {
lineIndex++; lineIndex++;
if (lineIndex == lines.length - 1) { // No more lines in this record if (lines !=null && lineIndex == lines.length - 1) { // No more lines in this record
floodIndex++; // Get the next record floodIndex++; // Get the next record
if ((floodList.size() > floodIndex) && (floodList.get(floodIndex) != null)) { if ((floodList.size() > floodIndex) && (floodList.get(floodIndex) != null)) {

View file

@ -48,6 +48,7 @@ import com.raytheon.viz.hydrocommon.textreport.TextReportData.StaffGageData;
* Nov 09, 2010 5416 lbousaid changed gageQuery * Nov 09, 2010 5416 lbousaid changed gageQuery
* Dec 08, 2011 11728 lbousaidi changed the routines that retrieve data * Dec 08, 2011 11728 lbousaidi changed the routines that retrieve data
* Apr 25, 2012 14499 wkwock Refine format, query, etc * Apr 25, 2012 14499 wkwock Refine format, query, etc
* Nov 06, 2012 15454 wkwock Fix query for get data from gage table
* *
* </pre> * </pre>
* *
@ -356,7 +357,7 @@ public class TextReportDataManager extends HydroDataManager {
public TextReportData getGageQueryList(String lid) { public TextReportData getGageQueryList(String lid) {
TextReportData data = new TextReportData(); TextReportData data = new TextReportData();
String gageQuery = "select gbegin, type, owner, remark, maint, gend from gage where lid = '" String gageQuery = "select gbegin, type, owner, remark, maint, gend from gage where lid = '"
+ lid + "' order by gbegin,type"; + lid + "' and gend is null ORDER BY gbegin desc";
ArrayList<Object[]> rs = runQuery(gageQuery); ArrayList<Object[]> rs = runQuery(gageQuery);
ArrayList<Gage> gageList = new ArrayList<Gage>(); ArrayList<Gage> gageList = new ArrayList<Gage>();
int i = 0; int i = 0;

View file

@ -75,6 +75,7 @@ import com.raytheon.viz.mpe.util.WriteQPFGrids;
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 24, 2009 snaples Initial creation * Mar 24, 2009 snaples Initial creation
* Sep 19, 2011 10955 rferrel Use RunProcess * Sep 19, 2011 10955 rferrel Use RunProcess
* Nov 06, 2012 15481 wkwock Fix save 6 hours precipitation files
* *
* </pre> * </pre>
* *
@ -649,6 +650,81 @@ public class SaveLevel2Data {
} }
} }
//save for each 6 hour periods
for (l = 0; l < 5; l++) {
if (DailyQcUtils.pdata[j].used[l] == 0 || qctype_flag[0] == -1) {
continue;
}
/*
* this needs to be fixed to ensure that the gridded temperature
* files are named correctly.
*/
if (l < 2) {
old_time = DailyQcUtils.pdata[j].data_time;
Calendar od = Calendar.getInstance();
od.setTime(old_time);
od.add(Calendar.SECOND, -86400);
old_time = od.getTime();
} else {
old_time = DailyQcUtils.pdata[j].data_time;
}
gm.setTime(old_time);
if (l < 4) {
ll = 0;
} else {
ll = 1;
}
RenderPcp rcp = new RenderPcp();
rcp.render_pcp(j, l, ll, max_stations,
DailyQcUtils.precip_stations, hrap_grid,
DailyQcUtils.pdata, DailyQcUtils.pcp_in_use);
String dbuf = String.format("%s%s_%04d%02d%02d", grid_file,
timefile[2][l], gm.get(Calendar.YEAR),
gm.get(Calendar.MONTH) + 1,
gm.get(Calendar.DAY_OF_MONTH));
/* output grid to file in ascii xmrg format */
WriteQPFGrids wqg = new WriteQPFGrids();
wqg.write_qpf_grids(dbuf);
if (DailyQcUtils.mpe_dqc_save_grib == true) {
WriteDQCNetCDFGrids wng = new WriteDQCNetCDFGrids();
String ncfile = String.format("%s.nc", dbuf);
wng.write_dqc_netcdf_grids(ncfile, l, 1, 1,
ga.getCommonGridAttributes(), datavals);
WriteDQCGribGrids wgg = new WriteDQCGribGrids();
String fname_grib = String.format("%s.grb", dbuf);
int status = wgg
.write_dqc_grib_grids(ncfile, fname_grib, 1);
if (status != 0) {
statusHandler
.handle(Priority.WARN,
String.format(
"problem with writing GRIB file in write_dqc_grib_grids. status=%d\n",
status));
}
}
if (l < 4) {
num = j * 4 + 3 - l;
} else {
num = 40 + j;
}
/* Create the MAP. */
CreateMap cm = new CreateMap();
cm.create_map(num);
}
//save the whole days
for (l = 0; l < 5; l++) { for (l = 0; l < 5; l++) {
if (DailyQcUtils.pdata[j].used[l] == 0 || qctype_flag[0] == -1) { if (DailyQcUtils.pdata[j].used[l] == 0 || qctype_flag[0] == -1) {
@ -698,25 +774,6 @@ public class SaveLevel2Data {
ga.getCommonGridAttributes(), datavals); ga.getCommonGridAttributes(), datavals);
} }
if (DailyQcUtils.mpe_dqc_save_grib == true) {
WriteDQCNetCDFGrids wng = new WriteDQCNetCDFGrids();
String ncfile = String.format("%s.nc", dbuf);
wng.write_dqc_netcdf_grids(ncfile, l, 1, 1,
ga.getCommonGridAttributes(), datavals);
WriteDQCGribGrids wgg = new WriteDQCGribGrids();
String fname_grib = String.format("%s.grb", dbuf);
int status = wgg
.write_dqc_grib_grids(ncfile, fname_grib, 1);
if (status != 0) {
statusHandler
.handle(Priority.WARN,
String.format(
"problem with writing GRIB file in write_dqc_grib_grids. status=%d\n",
status));
}
}
if (l < 4) { if (l < 4) {
num = j * 4 + 3 - l; num = j * 4 + 3 - l;
} else { } else {

View file

@ -308,6 +308,8 @@ public class AutoDailyQC {
} }
} }
num_period_qc=5;
//for the 6 hours periods
for (int l = 0; l < 5; l++) { for (int l = 0; l < 5; l++) {
if (DailyQcUtils.pdata[i].used[l] == 0) { if (DailyQcUtils.pdata[i].used[l] == 0) {
continue; continue;
@ -343,6 +345,79 @@ public class AutoDailyQC {
WriteQPFGrids wq = new WriteQPFGrids(); WriteQPFGrids wq = new WriteQPFGrids();
wq.write_qpf_grids(dbuf); wq.write_qpf_grids(dbuf);
/* output grid to file in grib format */
// create netCDF file from data, write it out then call
// nc2grib against it making a grib file, when done
// remove the unneeded netCDF file.
if (DailyQcUtils.mpe_dqc_save_grib == true) {
WriteDQCNetCDFGrids wng = new WriteDQCNetCDFGrids();
String ncfile = String.format("%s.nc", dbuf);
wng.write_dqc_netcdf_grids(ncfile, 0, 1, 1,
ga.getCommonGridAttributes(), datavals);
WriteDQCGribGrids wgg = new WriteDQCGribGrids();
String fname_grib = String.format("%s.grb", dbuf);
int status = wgg.write_dqc_grib_grids(ncfile,
fname_grib, 1);
File nfile = new File(ncfile);
nfile.delete();
nfile = null;
if (status != 0) {
System.out
.println(String
.format("\n problem with writing GRIB file in write_dqc_grib_grids. status=%d\n",
status));
}
}
int num;
if (l < 4) {
num = i * 4 + 3 - l;
} else {
num = i + 40;
}
/* create the MAP */
CreateMap cm = new CreateMap();
cm.create_map(num);
}
//for (int l = 0; l < 5; l++) {
for (int l = 0; l < num_period_qc; l++) {
if (DailyQcUtils.pdata[i].used[l] == 0) {
continue;
}
if (l < 2) {
otime.setTime(DailyQcUtils.pdata[i].data_time);
otime.add(Calendar.SECOND, -86400);
} else {
otime.setTime(DailyQcUtils.pdata[i].data_time);
}
int ll;
if (l < 4) {
ll = 0;
} else {
ll = 1;
}
RenderPcp rp = new RenderPcp();
rp.render_pcp(i, l, ll,
DailyQcUtils.precip_stations.size(),
DailyQcUtils.precip_stations,
DailyQcUtils.getHrap_grid(),
DailyQcUtils.pdata, DailyQcUtils.pcp_in_use);
/* output grid to file in Ascii format */
dbuf = String.format("%s%s_%04d%02d%02d",
DailyQcUtils.grid_file,
DailyQcUtils.timefile[2][l],
otime.get(Calendar.YEAR),
otime.get(Calendar.MONTH) + 1,
otime.get(Calendar.DAY_OF_MONTH));
WriteQPFGrids wq = new WriteQPFGrids();
wq.write_qpf_grids(dbuf);
/* output grid to file in NetCDF format */ /* output grid to file in NetCDF format */
if (DailyQcUtils.mpe_dqc_save_netcdf == true) { if (DailyQcUtils.mpe_dqc_save_netcdf == true) {
WriteDQCNetCDFGrids wng = new WriteDQCNetCDFGrids(); WriteDQCNetCDFGrids wng = new WriteDQCNetCDFGrids();
@ -351,42 +426,6 @@ public class AutoDailyQC {
ga.getCommonGridAttributes(), datavals); ga.getCommonGridAttributes(), datavals);
} }
/* output grid to file in grib format */
// create netCDF file from data, write it out then call
// nc2grib against it making a grib file, when done
// remove the unneeded netCDF file.
if (DailyQcUtils.mpe_dqc_save_grib == true) {
WriteDQCNetCDFGrids wng = new WriteDQCNetCDFGrids();
String ncfile = String.format("%s.nc", dbuf);
wng.write_dqc_netcdf_grids(ncfile, 0, 1, 1,
ga.getCommonGridAttributes(), datavals);
WriteDQCGribGrids wgg = new WriteDQCGribGrids();
String fname_grib = String.format("%s.grb", dbuf);
int status = wgg.write_dqc_grib_grids(ncfile,
fname_grib, 1);
File nfile = new File(ncfile);
nfile.delete();
nfile = null;
if (status != 0) {
System.out
.println(String
.format("\n problem with writing GRIB file in write_dqc_grib_grids. status=%d\n",
status));
}
}
int num;
if (l < 4) {
num = i * 4 + 3 - l;
} else {
num = i + 40;
}
/* create the MAP */
CreateMap cm = new CreateMap();
cm.create_map(num);
} }
} }

View file

@ -15,7 +15,8 @@
</capabilities> </capabilities>
</loadProperties> </loadProperties>
<resourceData xsi:type="satBestResResourceData" <resourceData xsi:type="satBestResResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"> isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
inclusionFactor="${inclusionFactor;0.4}">
<metadataMap> <metadataMap>
<mapping key="pluginName"> <mapping key="pluginName">
<constraint constraintValue="satellite" <constraint constraintValue="satellite"

View file

@ -26,6 +26,7 @@ import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import org.geotools.referencing.CRS; import org.geotools.referencing.CRS;
@ -67,7 +68,7 @@ import com.vividsolutions.jts.geom.Polygon;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Jul 30, 2010 mschenke Initial creation * Jul 30, 2010 mschenke Initial creation
* Oct 31, 2012 DR 15287 D. Friedman Fix overlap calculation * Nov 06, 2012 DR 15157 D. Friedman Allow configured inclusion percentage
* *
* </pre> * </pre>
* *
@ -82,6 +83,9 @@ public class SatBestResResourceData extends AbstractRequestableResourceData {
@XmlElement(name = "resource") @XmlElement(name = "resource")
protected ResourceList resourceList = new ResourceList(); protected ResourceList resourceList = new ResourceList();
@XmlAttribute
protected Double inclusionFactor;
private ResourcePair resourceToDraw; private ResourcePair resourceToDraw;
/** /**
@ -156,12 +160,14 @@ public class SatBestResResourceData extends AbstractRequestableResourceData {
Map<ResourcePair, Double> percentOfIntersection = new HashMap<ResourcePair, Double>(); Map<ResourcePair, Double> percentOfIntersection = new HashMap<ResourcePair, Double>();
if (disclosedResource != null) { if (disclosedResource != null) {
final double inclusionPercentageToUse = inclusionFactor != null ?
inclusionFactor : DESIRED_PERCENTAGE;
// check inclusion percentage of the disclosed resource // check inclusion percentage of the disclosed resource
Double inclusion = getInclusionPercentage(descriptor, Double inclusion = getInclusionPercentage(descriptor,
disclosedResource, extent); disclosedResource, extent);
if (inclusion != Double.NaN) { if (inclusion != Double.NaN) {
percentOfIntersection.put(disclosedResource, inclusion); percentOfIntersection.put(disclosedResource, inclusion);
if (inclusion < DESIRED_PERCENTAGE) { if (inclusion < inclusionPercentageToUse) {
disclosedResource = null; disclosedResource = null;
} }
} else { } else {
@ -335,7 +341,7 @@ public class SatBestResResourceData extends AbstractRequestableResourceData {
for (Polygon last : prevs) { for (Polygon last : prevs) {
// Don't want to double include percentage areas // Don't want to double include percentage areas
totalPercentage -= last.intersection(polygon).intersection(extent) totalPercentage -= last.intersection(polygon)
.getArea() / extent.getArea(); .getArea() / extent.getArea();
} }
} }
@ -347,4 +353,12 @@ public class SatBestResResourceData extends AbstractRequestableResourceData {
} }
return totalPercentage; return totalPercentage;
} }
public Double getInclusionFactor() {
return inclusionFactor;
}
public void setInclusionFactor(Double inclusionFactor) {
this.inclusionFactor = inclusionFactor;
}
} }

View file

@ -302,6 +302,7 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox;
* 12OCT2012 15418 D.Friedman Do not store product when sending in operational mode. * 12OCT2012 15418 D.Friedman Do not store product when sending in operational mode.
* Do not use changed BBB from OUPResponse. * Do not use changed BBB from OUPResponse.
* 17OCT2012 1229 rferrel Changes for non-blocking SWTMessageBox. * 17OCT2012 1229 rferrel Changes for non-blocking SWTMessageBox.
* 05Nov2012 15560 S. Naples Added check to see if we are in edit mode before capturing keys.
* </pre> * </pre>
* *
* @author lvenable * @author lvenable
@ -3530,6 +3531,10 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
textEditor.addVerifyKeyListener(new VerifyKeyListener() { textEditor.addVerifyKeyListener(new VerifyKeyListener() {
public void verifyKey(VerifyEvent event) { public void verifyKey(VerifyEvent event) {
// Ignore edit keys when not in edit mode.
if (textEditor.getEditable() == false){
return;
}
if (event.keyCode == SWT.DEL || event.character == SWT.BS if (event.keyCode == SWT.DEL || event.character == SWT.BS
|| event.keyCode == SWT.SHIFT) { || event.keyCode == SWT.SHIFT) {
// Do nothing... // Do nothing...

View file

@ -52,6 +52,7 @@ import com.raytheon.viz.texteditor.util.VtecUtil;
* Add vtec to checkHeadline signature * Add vtec to checkHeadline signature
* 20 JUL 2012 15006 mgamazaychikov Do not perform search for a list of * 20 JUL 2012 15006 mgamazaychikov Do not perform search for a list of
* county/zones names in the MWS segment heading. * county/zones names in the MWS segment heading.
* 07 NOV 2012 15003 mgamazaychikov Do not perform QC check on standalone MWS headline.
* *
* </pre> * </pre>
* *
@ -500,18 +501,13 @@ public class TextSegmentCheck implements IQCCheck {
return errorMsg; return errorMsg;
} }
/* /*
* DR15003 standalone MWS can have no headline. * DR15003: no headline QC on standalone MWS.
* To distinguish between standalone and follow up MWS * To distinguish between standalone and follow up MWS
* the VTEC check is performed as standalone MWS * the VTEC check is performed as standalone MWS
* do not contain VTEC * do not contain VTEC
*/ */
if (nnn.equals("MWS") && vtec == null) { if (nnn.equals("MWS") && vtec == null) {
if (headline.length() == 0) { return "";
return errorMsg;
} else if (!headline.endsWith("...")) {
errorMsg += "Headline should end with '...'.\n";
}
return errorMsg;
} }
if (headline.length() == 0) { if (headline.length() == 0) {

View file

@ -71,6 +71,7 @@ import com.vividsolutions.jts.geom.Geometry;
* Apr 13, 2012 #14691 Qinglu lin Added code for two more fe_area: er and nr. * Apr 13, 2012 #14691 Qinglu lin Added code for two more fe_area: er and nr.
* May 4, 2012 #14887 Qinglu lin Changed 0.25 to 0.60 for DEFAULT_PORTION_TOLERANCE; * May 4, 2012 #14887 Qinglu lin Changed 0.25 to 0.60 for DEFAULT_PORTION_TOLERANCE;
* added code to pass a Envelope calculatePortion(). * added code to pass a Envelope calculatePortion().
* Nov 9, 2012 DR 15430 D. Friedman Extracted method converFeAreaToPartList.
* *
* </pre> * </pre>
* *
@ -229,67 +230,7 @@ public class Area {
.get(parentAreaField)); .get(parentAreaField));
String feArea = (String) regionFeature.attributes String feArea = (String) regionFeature.attributes
.get("FE_AREA"); .get("FE_AREA");
final List<String> partList = new ArrayList<String>(); area.partOfParentRegion = converFeAreaToPartList(feArea);
if (feArea == null) {
// Marine warnings
partList.add("");
} else {
if (feArea.equals("pa"))
partList.add("PA");
else if (feArea.equals("mi"))
partList.add("MI");
else if (feArea.equals("pd"))
partList.add("PD");
else if (feArea.equals("up"))
partList.add("UP");
else if (feArea.equals("bb"))
partList.add("BB");
else if (feArea.equals("er"))
partList.add("ER");
else if (feArea.equals("eu"))
partList.add("EU");
else if (feArea.equals("sr"))
partList.add("SR");
else if (feArea.equals("nr"))
partList.add("NR");
else if (feArea.equals("wu"))
partList.add("WU");
else if (feArea.equals("ds"))
partList.add("DS");
else if (feArea.equals("ne"))
partList.add("NE");
else if (feArea.equals("nw"))
partList.add("NW");
else if (feArea.equals("se"))
partList.add("SE");
else if (feArea.equals("sw"))
partList.add("SW");
else {
for (int i = 0; i < feArea.length(); i++) {
char c = feArea.charAt(i);
switch (c) {
case 'c':
partList.add("CENTRAL");
break;
case 'w':
partList.add("WEST");
break;
case 'n':
partList.add("NORTH");
break;
case 'e':
partList.add("EAST");
break;
case 's':
partList.add("SOUTH");
break;
default:
break;
}
}
}
}
area.partOfParentRegion = partList;
} }
// Search against point matches // Search against point matches
@ -390,5 +331,69 @@ public class Area {
} }
return retVal; return retVal;
} }
public static List<String> converFeAreaToPartList(String feArea) {
final List<String> partList = new ArrayList<String>();
if (feArea == null) {
// Marine warnings
partList.add("");
} else {
if (feArea.equals("pa"))
partList.add("PA");
else if (feArea.equals("mi"))
partList.add("MI");
else if (feArea.equals("pd"))
partList.add("PD");
else if (feArea.equals("up"))
partList.add("UP");
else if (feArea.equals("bb"))
partList.add("BB");
else if (feArea.equals("er"))
partList.add("ER");
else if (feArea.equals("eu"))
partList.add("EU");
else if (feArea.equals("sr"))
partList.add("SR");
else if (feArea.equals("nr"))
partList.add("NR");
else if (feArea.equals("wu"))
partList.add("WU");
else if (feArea.equals("ds"))
partList.add("DS");
else if (feArea.equals("ne"))
partList.add("NE");
else if (feArea.equals("nw"))
partList.add("NW");
else if (feArea.equals("se"))
partList.add("SE");
else if (feArea.equals("sw"))
partList.add("SW");
else {
for (int i = 0; i < feArea.length(); i++) {
char c = feArea.charAt(i);
switch (c) {
case 'c':
partList.add("CENTRAL");
break;
case 'w':
partList.add("WEST");
break;
case 'n':
partList.add("NORTH");
break;
case 'e':
partList.add("EAST");
break;
case 's':
partList.add("SOUTH");
break;
default:
break;
}
}
}
}
return partList;
}
} }

View file

@ -22,12 +22,10 @@ package com.raytheon.viz.warngen.template;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.io.StringWriter; import java.io.StringWriter;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -35,9 +33,11 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties; import java.util.Properties;
import java.util.Set; import java.util.Set;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.TreeMap;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -45,14 +45,12 @@ import javax.measure.converter.UnitConverter;
import javax.measure.unit.NonSI; import javax.measure.unit.NonSI;
import javax.measure.unit.SI; import javax.measure.unit.SI;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
import org.apache.velocity.Template; import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext; import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity; import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.tools.generic.ListTool; import org.apache.velocity.tools.generic.ListTool;
import org.geotools.referencing.GeodeticCalculator;
import com.raytheon.uf.common.activetable.ActiveTableMode; import com.raytheon.uf.common.activetable.ActiveTableMode;
import com.raytheon.uf.common.activetable.ActiveTableRecord; import com.raytheon.uf.common.activetable.ActiveTableRecord;
@ -60,11 +58,11 @@ import com.raytheon.uf.common.activetable.GetActiveTableRequest;
import com.raytheon.uf.common.activetable.GetActiveTableResponse; import com.raytheon.uf.common.activetable.GetActiveTableResponse;
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord; import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction; import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.common.dataplugin.warning.config.AreaSourceConfiguration;
import com.raytheon.uf.common.dataplugin.warning.config.AreaSourceConfiguration.AreaType;
import com.raytheon.uf.common.dataplugin.warning.config.WarngenConfiguration; import com.raytheon.uf.common.dataplugin.warning.config.WarngenConfiguration;
import com.raytheon.uf.common.dataplugin.warning.gis.GeospatialData;
import com.raytheon.uf.common.dataplugin.warning.util.GeometryUtil; import com.raytheon.uf.common.dataplugin.warning.util.GeometryUtil;
import com.raytheon.uf.common.geospatial.ISpatialQuery.SearchMode;
import com.raytheon.uf.common.geospatial.SpatialQueryFactory;
import com.raytheon.uf.common.geospatial.SpatialQueryResult;
import com.raytheon.uf.common.site.SiteMap; import com.raytheon.uf.common.site.SiteMap;
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;
@ -75,7 +73,6 @@ import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.uf.edex.core.EdexException; import com.raytheon.uf.edex.core.EdexException;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.localization.LocalizationManager; import com.raytheon.uf.viz.core.localization.LocalizationManager;
import com.raytheon.uf.viz.core.maps.rsc.DbMapQueryFactory;
import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.core.requests.ThriftClient;
import com.raytheon.viz.awipstools.ToolsDataManager; import com.raytheon.viz.awipstools.ToolsDataManager;
import com.raytheon.viz.awipstools.common.StormTrackData; import com.raytheon.viz.awipstools.common.StormTrackData;
@ -101,11 +98,11 @@ import com.raytheon.viz.warngen.util.FollowUpUtil;
import com.raytheon.viz.warngen.util.WarnGenMathTool; import com.raytheon.viz.warngen.util.WarnGenMathTool;
import com.raytheon.viz.warngen.util.WatchUtil; import com.raytheon.viz.warngen.util.WatchUtil;
import com.raytheon.viz.warngen.util.WeatherAdvisoryWatch; import com.raytheon.viz.warngen.util.WeatherAdvisoryWatch;
import com.raytheon.viz.warngen.util.WeatherAdvisoryWatch.Portion;
import com.raytheon.viz.warnings.DateUtil; import com.raytheon.viz.warnings.DateUtil;
import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Polygon; import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.prep.PreparedGeometry;
import com.vividsolutions.jts.io.WKTReader; import com.vividsolutions.jts.io.WKTReader;
/** /**
@ -129,6 +126,7 @@ import com.vividsolutions.jts.io.WKTReader;
* Aug 29, 2011 15351 jsanchez Set the timezone for TML time. * Aug 29, 2011 15351 jsanchez Set the timezone for TML time.
* Sep 10, 2012 15295 snaples Added property setting for runtime log to createScript. * Sep 10, 2012 15295 snaples Added property setting for runtime log to createScript.
* Sep 18, 2012 15332 jsanchez Used a new warning text handler. * Sep 18, 2012 15332 jsanchez Used a new warning text handler.
* Nov 9, 1202 DR 15430 D. Friedman Improve watch inclusion.
* </pre> * </pre>
* *
* @author njensen * @author njensen
@ -742,7 +740,7 @@ public class TemplateRunner {
try { try {
t0 = System.currentTimeMillis(); t0 = System.currentTimeMillis();
WatchUtil watches = getWatches(warngenLayer, config, warnPolygon, WatchUtil watches = getWatches(warngenLayer, config, warnPolygon,
fourLetterSiteId); fourLetterSiteId, simulatedTime);
System.out.println("getWatches time: " System.out.println("getWatches time: "
+ (System.currentTimeMillis() - t0)); + (System.currentTimeMillis() - t0));
if (watches != null) { if (watches != null) {
@ -837,12 +835,13 @@ public class TemplateRunner {
* ([template_name_site.xml]) * ([template_name_site.xml])
* @param polygon * @param polygon
* The Geometry surrounded by the warning polygon. * The Geometry surrounded by the warning polygon.
* @param simulatedTime
* @return * @return
* @throws Exception * @throws Exception
*/ */
private static WatchUtil getWatches(WarngenLayer warngenLayer, private static WatchUtil getWatches(WarngenLayer warngenLayer,
WarngenConfiguration config, Geometry polygon, WarngenConfiguration config, Geometry polygon,
String fourLetterSiteId) throws Exception { String fourLetterSiteId, Date simulatedTime) throws Exception {
Validate.isTrue(config.getHatchedAreaSource() Validate.isTrue(config.getHatchedAreaSource()
.getIncludedWatchAreaBuffer() >= 0, .getIncludedWatchAreaBuffer() >= 0,
"IncludedWatchAreaBuffer can not be negative"); "IncludedWatchAreaBuffer can not be negative");
@ -877,8 +876,27 @@ public class TemplateRunner {
GetActiveTableResponse resp = (GetActiveTableResponse) ThriftClient GetActiveTableResponse resp = (GetActiveTableResponse) ThriftClient
.sendRequest(req); .sendRequest(req);
long t1 = System.currentTimeMillis(); long t1 = System.currentTimeMillis();
java.util.List<ActiveTableRecord> activeTable = resp java.util.List<ActiveTableRecord> respList = resp.getActiveTable();
.getActiveTable(); ArrayList<ActiveTableRecord> activeTable = new ArrayList<ActiveTableRecord>(
respList.size());
// Filter out entries representing non-active events.
for (ActiveTableRecord ar : respList) {
if ("CAN".equals(ar.getAct()) || "EXP".equals(ar.getAct()))
continue;
if (ar.getEndTime() == null) {
statusHandler.handle(Priority.ERROR, String.format(
"Watch %s has null end time; not included.",
ar.getVtecstr()));
continue;
}
// From A1 SELSparagraphs.C processWOU
if (simulatedTime.before(new Date(ar.getStartTime().getTime()
.getTime() - 180 * 1000))
|| simulatedTime.after(ar.getEndTime().getTime()))
continue;
activeTable.add(ar);
}
System.out.println("getWatches.getActiveTable time: " + (t1 - t0) System.out.println("getWatches.getActiveTable time: " + (t1 - t0)
+ ", found " + ", found "
@ -902,96 +920,293 @@ public class TemplateRunner {
t1 = System.currentTimeMillis(); t1 = System.currentTimeMillis();
System.out.println("getWatches.createWatchGeometry time: " System.out.println("getWatches.createWatchGeometry time: "
+ (t1 - t0)); + (t1 - t0));
SpatialQueryResult[] parentRegionFeatures = null;
try { t0 = System.currentTimeMillis();
String field = "the_geom"; rval = processATEntries(activeTable, warngenLayer);
t0 = System.currentTimeMillis(); System.out.println("getWatches.createPoritions time: "
List<Double> results = DbMapQueryFactory.getMapQuery( + (t1 - t0));
"mapdata.states", field).getLevels();
Collections.sort(results, Collections.reverseOrder());
Double decimationTolerance = null;
for (Double result : results) {
if (result <= 0.064) {
decimationTolerance = result;
}
}
if (decimationTolerance != null) {
DecimalFormat df = new DecimalFormat("0.######");
String suffix = "_"
+ StringUtils.replaceChars(df.format(results
.get(results.size() - 1)), '.', '_');
parentRegionFeatures = SpatialQueryFactory.create()
.query("states", field + suffix,
new String[] { "Name" }, watchArea,
null, false, SearchMode.INTERSECTS);
} else {
parentRegionFeatures = SpatialQueryFactory.create()
.query("states", new String[] { "Name" },
watchArea, null, false,
SearchMode.INTERSECTS);
}
t1 = System.currentTimeMillis();
System.out.println("getWatches.stateSpatialQuery time: "
+ (t1 - t0) + ", found "
+ parentRegionFeatures.length + " states");
} catch (Exception e) {
statusHandler.handle(Priority.PROBLEM,
"Error querying state geometries", e);
return null;
}
rval = new WatchUtil();
WeatherAdvisoryWatch watch = null;
long cumulativeIntersect = 0;
long cumulativeCalcPortion = 0;
GeodeticCalculator gc = new GeodeticCalculator();
// For each State in our watchArea...
for (int j = 0; j < parentRegionFeatures.length; j++) {
Geometry parentGeom = parentRegionFeatures[j].geometry;
List<PreparedGeometry> prepGeoms = new ArrayList<PreparedGeometry>();
GeometryUtil.recursivePreparedGeometry(parentGeom,
prepGeoms);
for (ActiveTableRecord atr : activeTable) {
// Get the intersection of watchArea with State.
watch = new WeatherAdvisoryWatch();
watch.setEndTime(atr.getEndTime().getTime());
watch.setPhensig(atr.getPhensig());
// If State intersections intersects with out ATR
// record, add watch
t0 = System.currentTimeMillis();
boolean intersects = GeometryUtil.intersects(prepGeoms,
atr.getGeometry());
t1 = System.currentTimeMillis();
cumulativeIntersect = (t1 - t0);
if (intersects) {
watch.setParentRegion(parentRegionFeatures[j].attributes
.get("Name").toString());
t0 = System.currentTimeMillis();
watch.setPartOfParentRegion(GisUtil
.asStringList(GisUtil.calculatePortion(
parentGeom, atr.getGeometry(), gc)));
t1 = System.currentTimeMillis();
cumulativeCalcPortion = (t1 - t0);
rval.addWaw(watch);
}
}
}
System.out.println("getWatches.cumulativeIntersect: "
+ cumulativeIntersect);
System.out.println("getWatches.cumulativeCalcPortion: "
+ cumulativeCalcPortion);
} }
} }
return rval; return rval;
} }
private static class WatchWork {
public WeatherAdvisoryWatch waw;
public boolean valid;
public ArrayList<String> ugcZone = new ArrayList<String>();
public WatchWork(WeatherAdvisoryWatch waw) {
this.waw = waw;
}
}
/**
* Create the list of objects representing active watches that will be
* passed to the template context.
*
* @param activeTable
* List of entries for active watches
* @param warngenLayer
* @return
*/
private static WatchUtil processATEntries(
List<ActiveTableRecord> activeTable, WarngenLayer warngenLayer) {
WatchUtil rval = new WatchUtil();
TreeMap<WeatherAdvisoryWatch, WatchWork> map = new TreeMap<WeatherAdvisoryWatch, TemplateRunner.WatchWork>();
AreaSourceConfiguration asc = null;
for (AreaSourceConfiguration a : warngenLayer.getConfiguration()
.getAreaSources()) {
if (a.getType() == AreaType.HATCHING) {
asc = a;
break;
}
}
if (asc == null) {
statusHandler
.handle(Priority.ERROR,
"Cannot process watches: missing HATCHING area source configuration");
return rval;
}
GeospatialData[] geoData = warngenLayer.getGeodataFeatures(asc
.getAreaSource() + "." + warngenLayer.getLocalizedSite());
if (geoData == null || geoData.length == 0) {
statusHandler.handle(Priority.ERROR,
"Cannot process watches: cannot get geospatial data");
return rval;
}
// For each watch event, get the end time and list of active zones
for (ActiveTableRecord ar : activeTable) {
/*
* Currently reports all zones in the watch even if a given zone is
* not in the warning polygon. If the logic is changed to only show
* the portions of the watch near our warning polygon, perform the
* isEmpty check here.
*/
WeatherAdvisoryWatch waw = new WeatherAdvisoryWatch();
waw.setPhensig(ar.getPhensig());
try {
waw.setEventId(Integer.parseInt(ar.getEtn()));
} catch (RuntimeException e) {
statusHandler.handle(Priority.ERROR, String.format(
"Watch %s has null end time; not included.",
ar.getVtecstr()));
continue;
}
WatchWork work = map.get(waw);
if (work == null) {
waw.setEndTime(ar.getEndTime().getTime());
work = new WatchWork(waw);
map.put(waw, work);
}
// TODO: Building geometry just to perform this test is probably
// inefficient with the post-DR-15430 logic...
if (!ar.getGeometry().isEmpty())
work.valid = true;
work.ugcZone.add(ar.getUgcZone());
}
for (WatchWork work : map.values()) {
/*
* If none of the areas in the watch were neer our warning polygon,
* do not included it.
*/
if (!work.valid)
continue;
if (determineAffectedPortions(work.ugcZone, asc, geoData, work.waw));
rval.addWaw(work.waw);
}
return rval;
}
/**
* Given the list of counties in a watch, fill out the "portions" part of
* the given WeatherAdvisoryWatch
*
* @param ugcs
* @param asc
* @param geoData
* @param waw
*/
private static boolean determineAffectedPortions(List<String> ugcs,
AreaSourceConfiguration asc, GeospatialData[] geoData,
WeatherAdvisoryWatch waw) {
// Maps state abbreviation to unique fe_area values
HashMap<String, Set<String>> map = new HashMap<String, Set<String>>();
for (String ugc : ugcs) {
for (Entry<String, String[]> e : FipsUtil.parseCountyHeader(ugc).entrySet()) {
String stateAbbrev = e.getKey();
if (e.getValue().length != 1) // either zero or more than one
// would be wrong
statusHandler.handle(Priority.ERROR,
"Invalid ugczone in active table entry");
Set<String> feAreas = map.get(stateAbbrev);
if (feAreas == null) {
feAreas = new HashSet<String>();
map.put(stateAbbrev, feAreas);
}
try {
feAreas.add(getFeArea(stateAbbrev, e.getValue()[0], asc,
geoData));
} catch (RuntimeException exc) {
statusHandler.handle(Priority.ERROR, "Error generating included watches.", exc);
return false;
}
}
}
ArrayList<Portion> portions = new ArrayList<Portion>(map.size());
for (Entry<String, Set<String>> e : map.entrySet()) {
Portion portion = new Portion();
try {
portion.parentRegion = getStateName(e.getKey(), asc, geoData)
.toUpperCase();
} catch (RuntimeException exc) {
statusHandler.handle(Priority.ERROR, "Error generating included watches.", exc);
return false;
}
portion.partOfParentRegion = Area
.converFeAreaToPartList(mungeFeAreas(e.getValue()));
System.out.format("Munged %s to %s (%s)\n", e.getValue(),
mungeFeAreas(e.getValue()), portion.partOfParentRegion);
portions.add(portion);
}
waw.setPortions(portions);
// Set legacy values
if (portions.size() > 0) {
waw.setParentRegion(portions.get(0).parentRegion);
waw.setPartOfParentRegion(portions.get(0).partOfParentRegion);
}
return true;
}
// Based on AWIPS 1 SELSparagraphs.C SELSparagraphs::processWOU().
private static String mungeFeAreas(Set<String> feAreas) {
String abrev = "";
// If eight or more portions, don't qualify area of state
int m = feAreas.size();
if (m < 8) {
String partAbrev = "";
/*
* TODO: Unused variables should be removed if we are not going to
* improve this in A2.
*/
@SuppressWarnings("unused")
int nw, nc, ne, wc, cc, ec, sw, sc, se, pa;
int eee, www, nnn, sss, ee, ww, nn, ss;
// Identify individual sub areas of this state affected
nw = nc = ne = wc = cc = ec = sw = sc = se = pa = 0;
eee = www = nnn = sss = ee = ww = nn = ss = 0;
for (String part : feAreas) {
if ("pa".equals(part)) {
pa = 1;
continue;
} else if ("nn".equals(part))
nnn = nn = 1;
else if ("ss".equals(part))
sss = ss = 1;
else if ("ee".equals(part))
eee = ee = 1;
else if ("ww".equals(part))
www = ww = 1;
else if ("nw".equals(part))
nnn = www = nw = 1;
else if ("nc".equals(part))
nnn = nc = 1;
else if ("ne".equals(part))
nnn = eee = ne = 1;
else if ("wc".equals(part))
www = wc = 1;
else if ("cc".equals(part)) {
cc = 1;
continue;
} else if ("ec".equals(part))
eee = ec = 1;
else if ("sw".equals(part))
sss = www = sw = 1;
else if ("sc".equals(part))
sss = sc = 1;
else if ("se".equals(part))
sss = eee = se = 1;
partAbrev = part;
}
// decide how to describe these subareas.
if (ne > 0 && nw > 0)
nn = 1;
if (se > 0 && sw > 0)
ss = 1;
if (se > 0 && ne > 0)
ee = 1;
if (sw > 0 && nw > 0)
ww = 1;
if (nnn > 0 && sss > 0 && eee > 0 && www > 0)
return abrev;
if (nn > 0 && ss > 0 || ee > 0 && ww > 0)
return abrev;
if (nnn + sss + eee + www == 3) {
if (www == 0) {
abrev = "e";
} else if (eee == 0) {
abrev = "w";
} else if (nnn == 0) {
abrev = "s";
} else if (sss == 0) {
abrev = "n";
}
return abrev;
}
if (nnn == sss && eee == www || cc == m) {
abrev = "c";
return abrev;
}
if (pa != 0 && cc == 0) {
abrev = "pa";
if (--m <= 0) {
return abrev;
}
}
if (m == 1 + cc) {
abrev += partAbrev + " ";
return abrev;
}
if (nnn != sss) {
abrev += nnn != 0 ? "n" : "s";
}
if (eee != www) {
abrev += eee != 0 ? "e" : "w";
}
}
return abrev;
}
private static String getStateName(String key, AreaSourceConfiguration asc,
GeospatialData[] geoData) {
for (GeospatialData g : geoData) {
if (key.equals((String) g.attributes.get("STATE")))
return (String) g.parent.attributes.get("NAME");
}
return null;
}
private static String getFeArea(String stateAbbrev, String ugc,
AreaSourceConfiguration asc, GeospatialData[] geoData) {
for (GeospatialData g : geoData) {
if (stateAbbrev.equals((String) g.attributes.get("STATE"))
&& ((String) g.attributes.get(asc.getFipsField()))
.endsWith(ugc))
return (String) g.attributes.get(asc.getFeAreaField());
}
return null;
}
} }

View file

@ -31,6 +31,7 @@ import java.util.List;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Jul 1, 2009 bwoodle Initial creation * Jul 1, 2009 bwoodle Initial creation
* Nov 9, 2012 DR 15430 D. Friedman Support proper watch inclusion language
* *
* </pre> * </pre>
* *
@ -39,13 +40,45 @@ import java.util.List;
*/ */
public class WeatherAdvisoryWatch implements Comparable<WeatherAdvisoryWatch> { public class WeatherAdvisoryWatch implements Comparable<WeatherAdvisoryWatch> {
public static class Portion {
public String parentRegion;
public List<String> partOfParentRegion;
public String getParentRegion() {
return parentRegion;
}
public void setParentRegion(String parentRegion) {
this.parentRegion = parentRegion;
}
public List<String> getPartOfParentRegion() {
return partOfParentRegion;
}
public void setPartOfParentRegion(List<String> partOfParentRegion) {
this.partOfParentRegion = partOfParentRegion;
}
}
/* TODO: NOTE: There is no site field. We currently only process
* WCNs for the site and not WOUs from the SPC.
*/
private String phensig; private String phensig;
private int eventId;
private Date endTime; private Date endTime;
private List<Portion> portions;
@Deprecated
private String parentRegion; private String parentRegion;
@Deprecated
private List<String> partOfParentRegion; private List<String> partOfParentRegion;
public String getPhensig() { public String getPhensig() {
@ -64,23 +97,59 @@ public class WeatherAdvisoryWatch implements Comparable<WeatherAdvisoryWatch> {
this.endTime = endTime; this.endTime = endTime;
} }
@Deprecated
public String getParentRegion() { public String getParentRegion() {
return parentRegion; return parentRegion;
} }
@Deprecated
public void setParentRegion(String parentRegion) { public void setParentRegion(String parentRegion) {
this.parentRegion = parentRegion; this.parentRegion = parentRegion;
} }
@Deprecated
public List<String> getPartOfParentRegion() { public List<String> getPartOfParentRegion() {
return partOfParentRegion; return partOfParentRegion;
} }
@Deprecated
public void setPartOfParentRegion(List<String> partOfParentRegion) { public void setPartOfParentRegion(List<String> partOfParentRegion) {
this.partOfParentRegion = partOfParentRegion; this.partOfParentRegion = partOfParentRegion;
} }
@Override
public boolean equals(Object obj) {
return obj instanceof WeatherAdvisoryWatch &&
this.compareTo((WeatherAdvisoryWatch) obj) == 0;
}
public int compareTo(WeatherAdvisoryWatch waw) { public int compareTo(WeatherAdvisoryWatch waw) {
return this.parentRegion.compareTo(waw.getParentRegion()); if (this.phensig == null)
return waw.phensig == null ? 0 : -1;
else if (waw.phensig == null)
return 1;
else {
int c = this.phensig.compareTo(waw.phensig);
if (c == 0)
return this.eventId - waw.eventId;
else
return c;
}
}
public int getEventId() {
return eventId;
}
public void setEventId(int eventId) {
this.eventId = eventId;
}
public List<Portion> getPortions() {
return portions;
}
public void setPortions(List<Portion> portions) {
this.portions = portions;
} }
} }

View file

@ -2,7 +2,8 @@
##### Qinglu Lin 04-04-2012 DR 14691. ##### Qinglu Lin 04-04-2012 DR 14691.
##### Qinglu Lin 06-18-2012 DR 15043. Use duration in secondBullet. ##### Qinglu Lin 06-18-2012 DR 15043. Use duration in secondBullet.
##### Qinglu Lin 07-31-2012 DR 15217. Use roundAndPad for movement direction in DEG. ##### Qinglu Lin 07-31-2012 DR 15217. Use roundAndPad for movement direction in DEG.
##### Qinglu Lin 08-13-2012 DR 14493. Use corToNewMarker and corEventtime. ##### Qinglu Lin 08-13-2012 DR 14493. Use corToNewMarker and corEventtime.
##### D. Friedman 11-09-2012 DR 15430. Rework included watches.
#################################################################################################### ####################################################################################################
Mile Marker Test Code Mile Marker Test Code
macro "mmarkers" use (called out of VM_global_library.vm): macro "mmarkers" use (called out of VM_global_library.vm):
@ -146,52 +147,66 @@ ${drainage.name}##
#macro(inserttorwatches $watches $list $secondtimezone $dateUtil $timeFormat) #macro(inserttorwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($torWatches = ${watches.getTorWatches()}) #set($torWatches = ${watches.getTorWatches()})
#if(${list.size($torWatches)} > 0) #set($torWatchAlso = "")
A TORNADO WATCH REMAINS IN EFFECT UNTIL ${dateUtil.format(${watches.getLatestTorTime()}, ${timeFormat.plain}, 15, ${localtimezone})}## #set($torWatchFirst = 1)
#foreach(${watch} in ${torWatches})
#if($torWatchFirst)
#set($torWatchFirst = 0)
##
#end
A TORNADO WATCH ${torWatchAlso}REMAINS IN EFFECT UNTIL ${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${localtimezone})}##
${dateUtil.period(${watches.getLatestTorTime()},${timeFormat.plain}, 15, ${localtimezone})}## ${dateUtil.period(${watches.getLatestTorTime()},${timeFormat.plain}, 15, ${localtimezone})}##
#if(${secondtimezone}) #if(${secondtimezone})
/${dateUtil.format(${list.get($torWatches, 0).endTime}, ${timeFormat.plain}, 15, ${secondtimezone})}/## /${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
#end #end
FOR ## FOR ##
#set($numWatches = ${list.size($torWatches)}) #set($numPortions = ${list.size(${watch.getPortions()})})
#set($count = 0) #set($count = 0)
#foreach(${watch} in ${torWatches}) #foreach(${portion} in ${watch.getPortions()})
#set($count = $count + 1) #set($count = $count + 1)
#areaFormat(${watch.partOfParentRegion} true false) ${watch.parentRegion}## #areaFormat(${portion.partOfParentRegion} true false) ${portion.parentRegion}##
#if($count == $numWatches - 1) #if($count == $numPortions - 1)
AND ## AND ##
#elseif($count < $numWatches) #elseif($count < $numPortions)
...## ...##
#end #end
#end #end
. #set($torWatchAlso = "ALSO ")
.##
#end #end
#end #end
#macro(insertsvrwatches $watches $list $secondtimezone $dateUtil $timeFormat) #macro(insertsvrwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($svrWatches = ${watches.getSvrWatches()}) #set($svrWatches = ${watches.getSvrWatches()})
#if(${list.size($svrWatches)} > 0) #set($svrWatchAlso = "")
A SEVERE THUNDERSTORM WATCH REMAINS IN EFFECT UNTIL ${dateUtil.format(${watches.getLatestSvrTime()}, ${timeFormat.plain}, 15, ${localtimezone})}## #set($svrWatchFirst = 1)
#foreach(${watch} in ${svrWatches})
#if($svrWatchFirst)
#set($svrWatchFirst = 0)
##
#end
A SEVERE THUNDERSTORM WATCH ${svrWatchAlso}REMAINS IN EFFECT UNTIL ${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${localtimezone})}##
${dateUtil.period(${watches.getLatestSvrTime()},${timeFormat.plain}, 15, ${localtimezone})}## ${dateUtil.period(${watches.getLatestSvrTime()},${timeFormat.plain}, 15, ${localtimezone})}##
#if(${secondtimezone}) #if(${secondtimezone})
/${dateUtil.format(${list.get($svrWatches, 0).endTime}, ${timeFormat.plain}, 15, ${secondtimezone})}/## /${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
#end #end
FOR ## FOR ##
#set($numWatches = ${list.size($svrWatches)}) #set($numPortions = ${list.size(${watch.getPortions()})})
#set($count = 0) #set($count = 0)
#foreach(${watch} in ${svrWatches}) #foreach(${portion} in ${watch.getPortions()})
#set($count = $count + 1) #set($count = $count + 1)
#areaFormat(${watch.partOfParentRegion} true false) ${watch.parentRegion}## #areaFormat(${portion.partOfParentRegion} true false) ${portion.parentRegion}##
#if($count == $numWatches - 1) #if($count == $numPortions - 1)
AND ## AND ##
#elseif($count < $numWatches) #elseif($count < $numPortions)
...## ...##
#end #end
#end #end
. #set($svrWatchAlso = "ALSO ")
.##
#end #end
#end #end
#macro(printcoords $coordinates $list) #macro(printcoords $coordinates $list)

View file

@ -21,8 +21,8 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>250160</name> <name>250160</name>
<description>QPF Grid for TIR (Ohio Basin RFC Wilmington, Ohio)</description> <description>QPF Grid for TIR (Ohio Basin RFC Wilmington, Ohio)</description>
<la1>36.19</la1> <la1>36.203</la1>
<lo1>-91.347</lo1> <lo1>-91.320</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>250</nx> <nx>250</nx>
<ny>260</ny> <ny>260</ny>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240161</name> <name>240161</name>
<description>HRAP Grid for ALR (Southeast RFC Peachtree, Georgia)</description> <description>HRAP Grid for ALR (Southeast RFC Peachtree, Georgia)</description>
<la1>27.033</la1> <la1>27.045</la1>
<lo1>-91.417</lo1> <lo1>-91.395</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>335</nx> <nx>335</nx>
<ny>412</ny> <ny>412</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240162</name> <name>240162</name>
<description>HRAP Grid for WFR (West Gulf RFC Fort Worth, Texas)</description> <description>HRAP Grid for WFR (West Gulf RFC Fort Worth, Texas)</description>
<la1>24.852</la1> <la1>24.869</la1>
<lo1>-108.99</lo1> <lo1>-108.973</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>425</nx> <nx>425</nx>
<ny>390</ny> <ny>390</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240156</name> <name>240156</name>
<description>HRAP Grid for KRF (Missouri Basin RFC Pleasant Hill, Missouri)</description> <description>HRAP Grid for KRF (Missouri Basin RFC Pleasant Hill, Missouri)</description>
<la1>37.275</la1> <la1>37.296</la1>
<lo1>-112.71</lo1> <lo1>-112.690</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>485</nx> <nx>485</nx>
<ny>325</ny> <ny>325</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240157</name> <name>240157</name>
<description>HRAP Grid for MSR (North Central RFC Chanhassen, Minnesota)</description> <description>HRAP Grid for MSR (North Central RFC Chanhassen, Minnesota)</description>
<la1>37.87</la1> <la1>37.889</la1>
<lo1>-105.515</lo1> <lo1>-105.492</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>450</nx> <nx>450</nx>
<ny>350</ny> <ny>350</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240154</name> <name>240154</name>
<description>HRAP Grid for ORN (Lower Mississippi RFC Slidel, Louisiana)</description> <description>HRAP Grid for ORN (Lower Mississippi RFC Slidel, Louisiana)</description>
<la1>28.686</la1> <la1>28.701</la1>
<lo1>-98.791</lo1> <lo1>-98.770</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>419</nx> <nx>419</nx>
<ny>419</ny> <ny>419</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240159</name> <name>240159</name>
<description>HRAP Grid for PTR (Northwest RFC Portland, Oregon)</description> <description>HRAP Grid for PTR (Northwest RFC Portland, Oregon)</description>
<la1>37.952</la1> <la1>38.00</la1>
<lo1>-124.207</lo1> <lo1>-124.179</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>400</nx> <nx>400</nx>
<ny>378</ny> <ny>378</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240155</name> <name>240155</name>
<description>HRAP Grid for RHA (Middle Atlantic RFC State College, PA)</description> <description>HRAP Grid for RHA (Middle Atlantic RFC State College, PA)</description>
<la1>38.025</la1> <la1>38.035</la1>
<lo1>-83.346</lo1> <lo1>-83.315</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>200</nx> <nx>200</nx>
<ny>200</ny> <ny>200</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240153</name> <name>240153</name>
<description>HRAP Grid for RSA (California-Nevada RFC Sacramento, California)</description> <description>HRAP Grid for RSA (California-Nevada RFC Sacramento, California)</description>
<la1>30.91</la1> <la1>30.931</la1>
<lo1>-120.872</lo1> <lo1>-120.858</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>235</nx> <nx>235</nx>
<ny>335</ny> <ny>335</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240152</name> <name>240152</name>
<description>HRAP Grid for STR (Colorado Basin RFC Salt Lake City, Utah)</description> <description>HRAP Grid for STR (Colorado Basin RFC Salt Lake City, Utah)</description>
<la1>30.027</la1> <la1>30.047</la1>
<lo1>-114.429</lo1> <lo1>-114.413</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>260</nx> <nx>260</nx>
<ny>360</ny> <ny>360</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240158</name> <name>240158</name>
<description>HRAP Grid for TAR (Northeast RFC Taunton, Massachusetts)</description> <description>HRAP Grid for TAR (Northeast RFC Taunton, Massachusetts)</description>
<la1>42.057</la1> <la1>42.066</la1>
<lo1>-80.004</lo1> <lo1>-79.970</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>180</nx> <nx>180</nx>
<ny>235</ny> <ny>235</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -21,13 +21,13 @@
<polarStereoGridCoverage> <polarStereoGridCoverage>
<name>240150</name> <name>240150</name>
<description>HRAP Grid for TUA (Arkansas-Red River RFC Tulsa, Oklahoma)</description> <description>HRAP Grid for TUA (Arkansas-Red River RFC Tulsa, Oklahoma)</description>
<la1>33.603</la1> <la1>33.621</la1>
<lo1>-106.455</lo1> <lo1>-106.434</lo1>
<firstGridPointCorner>LowerLeft</firstGridPointCorner> <firstGridPointCorner>LowerLeft</firstGridPointCorner>
<nx>335</nx> <nx>335</nx>
<ny>159</ny> <ny>159</ny>
<dx>4.762</dx> <dx>4.7625</dx>
<dy>4.762</dy> <dy>4.7625</dy>
<spacingUnit>km</spacingUnit> <spacingUnit>km</spacingUnit>
<minorAxis>6371229.0</minorAxis> <minorAxis>6371229.0</minorAxis>
<majorAxis>6371229.0</majorAxis> <majorAxis>6371229.0</majorAxis>

View file

@ -94,6 +94,7 @@ import com.vividsolutions.jts.geom.Polygon;
* reprojectGeometry. * reprojectGeometry.
* 06/19/2012 14988 D. Friedman Make oversampling more like AWIPS 1 * 06/19/2012 14988 D. Friedman Make oversampling more like AWIPS 1
* 09/18/2012 #1091 randerso corrected getBoundingEnvelope * 09/18/2012 #1091 randerso corrected getBoundingEnvelope
* 11/06/2012 15406 ryu Added convertToNativeEnvelope()
* *
* </pre> * </pre>
* *
@ -269,6 +270,55 @@ public class MapUtil {
return generalEnvelope; return generalEnvelope;
} }
/**
* Construct a native envelope from the grid domain represented
* by the lower left and the upper right corners.
*
* @param ll
* lower left of the grid envelope
* @param ur
* upper right of the grid envelope
* @param gloc
* grid location object
* @return a native envelope
*
*/
public static GeneralEnvelope convertToNativeEnvelope(
Coordinate ll, Coordinate ur, ISpatialObject gloc) {
GeneralEnvelope generalEnvelope = new GeneralEnvelope(2);
generalEnvelope.setCoordinateReferenceSystem(gloc.getCrs());
double minX = Double.POSITIVE_INFINITY;
double maxX = Double.NEGATIVE_INFINITY;
double minY = Double.POSITIVE_INFINITY;
double maxY = Double.NEGATIVE_INFINITY;
for (Coordinate p : new Coordinate[]{ll, ur}) {
Coordinate translated = gridCoordinateToNative(p,
PixelOrientation.CENTER, gloc);
double x = translated.x;
double y = translated.y;
if (x < minX) {
minX = x;
}
if (x > maxX) {
maxX = x;
}
if (y < minY) {
minY = y;
}
if (y > maxY) {
maxY = y;
}
}
generalEnvelope.setRange(0, minX, maxX);
generalEnvelope.setRange(1, minY, maxY);
return generalEnvelope;
}
/** /**
* Reproject a grid coverage into a different coordinate reference system * Reproject a grid coverage into a different coordinate reference system
* *

View file

@ -45,6 +45,8 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Jan 14, 2010 chammack Initial creation * Jan 14, 2010 chammack Initial creation
* *
* 10/30/2012 15448 Xiaochuan Check if container != null first in from().
*
* </pre> * </pre>
* *
* @author chammack * @author chammack
@ -156,36 +158,40 @@ public class PointDataThriftContainer implements ISerializableObject {
List<FloatPointDataObject> floatTypes = new ArrayList<FloatPointDataObject>(); List<FloatPointDataObject> floatTypes = new ArrayList<FloatPointDataObject>();
List<StringPointDataObject> stringTypes = new ArrayList<StringPointDataObject>(); List<StringPointDataObject> stringTypes = new ArrayList<StringPointDataObject>();
List<LongPointDataObject> longTypes = new ArrayList<LongPointDataObject>(); List<LongPointDataObject> longTypes = new ArrayList<LongPointDataObject>();
for (Map.Entry<String, AbstractPointDataObject<?>> v : container.pointDataTypes if( container != null )
.entrySet()) { {
AbstractPointDataObject<?> o = v.getValue(); for (Map.Entry<String, AbstractPointDataObject<?>> v : container.pointDataTypes
if (o instanceof IntPointDataObject) { .entrySet()) {
intTypes.add((IntPointDataObject) o); AbstractPointDataObject<?> o = v.getValue();
} else if (o instanceof FloatPointDataObject) { if (o instanceof IntPointDataObject) {
floatTypes.add((FloatPointDataObject) o); intTypes.add((IntPointDataObject) o);
} else if (o instanceof StringPointDataObject) { } else if (o instanceof FloatPointDataObject) {
stringTypes.add((StringPointDataObject) o); floatTypes.add((FloatPointDataObject) o);
} else if (o instanceof LongPointDataObject) { } else if (o instanceof StringPointDataObject) {
longTypes.add((LongPointDataObject) o); stringTypes.add((StringPointDataObject) o);
} else { } else if (o instanceof LongPointDataObject) {
throw new UnsupportedOperationException("Got type: " longTypes.add((LongPointDataObject) o);
} else {
throw new UnsupportedOperationException("Got type: "
+ o.getClass().getName() + o.getClass().getName()
+ ". Code must be updated to support new type"); + ". Code must be updated to support new type");
} }
}
pdtc.intData = intTypes
.toArray(new IntPointDataObject[intTypes.size()]);
pdtc.floatData = floatTypes.toArray(new FloatPointDataObject[floatTypes
.size()]);
pdtc.stringData = stringTypes
.toArray(new StringPointDataObject[stringTypes.size()]);
pdtc.longData = longTypes.toArray(new LongPointDataObject[longTypes
.size()]);
pdtc.size = container.getAllocatedSz();
} }
pdtc.intData = intTypes
.toArray(new IntPointDataObject[intTypes.size()]);
pdtc.floatData = floatTypes.toArray(new FloatPointDataObject[floatTypes
.size()]);
pdtc.stringData = stringTypes
.toArray(new StringPointDataObject[stringTypes.size()]);
pdtc.longData = longTypes.toArray(new LongPointDataObject[longTypes
.size()]);
pdtc.size = container.getAllocatedSz();
return pdtc; return pdtc;
} }

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<purgeRuleSet>
<defaultRule>
<versionsToKeep>24</versionsToKeep>
<delta>=00-01:00:00</delta>
<round>00-01:00:00</round>
</defaultRule>
</purgeRuleSet>

View file

@ -8,7 +8,7 @@ Summary: Pypies Apache HTTP Server
Name: awips2-httpd-pypies Name: awips2-httpd-pypies
Version: 2.2.3 Version: 2.2.3
# This Is Officially Release: 22%{?dist} # This Is Officially Release: 22%{?dist}
Release: 28%{?dist} Release: 29%{?dist}
URL: http://httpd.apache.org/ URL: http://httpd.apache.org/
Prefix: /awips2/httpd_pypies Prefix: /awips2/httpd_pypies
Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz

View file

@ -5,7 +5,7 @@
Name: awips2-ldm Name: awips2-ldm
Summary: AWIPS II LDM Distribution Summary: AWIPS II LDM Distribution
Version: 6.8.1 Version: 6.8.1
Release: 23 Release: 24
Group: AWIPSII Group: AWIPSII
BuildRoot: /tmp BuildRoot: /tmp
URL: N/A URL: N/A

View file

@ -59,12 +59,14 @@ EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4" EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
# #
# readnoaaport shared memory readers # readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -59,12 +59,14 @@ EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4" EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
# #
# readnoaaport shared memory readers # readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -59,12 +59,14 @@ EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4" EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
# #
# readnoaaport shared memory readers # readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -59,12 +59,14 @@ EXEC "dvbs_multicast -b 40000 -m 224.0.1.1"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.2" EXEC "dvbs_multicast -b 40000 -m 224.0.1.2"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.3" EXEC "dvbs_multicast -b 40000 -m 224.0.1.3"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.4" EXEC "dvbs_multicast -b 40000 -m 224.0.1.4"
EXEC "dvbs_multicast -b 40000 -m 224.0.1.5"
# #
# readnoaaport shared memory readers # readnoaaport shared memory readers
EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.1 -n -u 3 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.2 -n -u 4 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.3 -n -u 5 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1" EXEC "readnoaaport -m 224.0.1.4 -n -u 6 -t mhs -r 1"
EXEC "readnoaaport -m 224.0.1.5 -n -u 7 -t mhs -r 1"
# #
# rtstats uses the LDM to send product latency statistics to the UPC. # rtstats uses the LDM to send product latency statistics to the UPC.
# For more info on rtstats please see the man page. # For more info on rtstats please see the man page.

View file

@ -311,6 +311,12 @@ if [ "${1}" = "-ade" ]; then
exit 1 exit 1
fi fi
# Build the source jar file
ade_work_dir="/home/dmsys/Dim12/build/AWIPS2/AWIPS2-ADE-OB12.11.2-CM"
cd $ade_work_dir
./build_source_jar.sh
cp -v /tmp/awips2-ade-baseline-SOURCES.jar ${WORKSPACE}/${ade_directory}
# Tar the directory. # Tar the directory.
pushd . > /dev/null 2>&1 pushd . > /dev/null 2>&1
cd ${WORKSPACE} cd ${WORKSPACE}