diff --git a/cave/com.raytheon.uf.viz.personalities.cave/src/com/raytheon/uf/viz/personalities/cave/menu/ExitHandler.java b/cave/com.raytheon.uf.viz.personalities.cave/src/com/raytheon/uf/viz/personalities/cave/menu/ExitHandler.java
new file mode 100644
index 0000000000..fe3009d00d
--- /dev/null
+++ b/cave/com.raytheon.uf.viz.personalities.cave/src/com/raytheon/uf/viz/personalities/cave/menu/ExitHandler.java
@@ -0,0 +1,31 @@
+package com.raytheon.uf.viz.personalities.cave.menu;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * An exit command handler that does not rely on a Workbench window having
+ * the focus. This allows it to be used from a tear-off menu.
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * 2013-07-11 DR 15727 D. Friedman Initial creation
+ *
+ *
+ *
+ */
+
+public class ExitHandler extends AbstractHandler {
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ PlatformUI.getWorkbench().close();
+ return null;
+ }
+
+}
diff --git a/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java b/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java
index 78dc2deaef..d0e8c9b0fa 100644
--- a/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java
+++ b/cave/com.raytheon.uf.viz.radarapps.core/src/com/raytheon/uf/viz/radarapps/products/ui/BaseRadarProductUI.java
@@ -98,6 +98,7 @@ import com.raytheon.viz.ui.widgets.MinimumSizeComposite;
* needed methods abstract.
* Jul 31, 2012 #875 rferrel Points now group in menu items.
* Oct 04, 2012 #1248 rferrel Added Point change listener.
+ * Jun 24, 2013 DR16023 zwang Support all cuts for nexrad
*
*
*
@@ -1725,7 +1726,8 @@ public abstract class BaseRadarProductUI {
private static final ElevationSelection[] wsrElevationSelections = {
ElevationSelection.ALL, ElevationSelection.UP_TO,
- ElevationSelection.LOWEST_N, ElevationSelection.SINGLE };
+ ElevationSelection.LOWEST_N, ElevationSelection.SINGLE,
+ ElevationSelection.ALL_MATCHING};
private static final ElevationSelection[] tdwrElevationSelections = {
ElevationSelection.SINGLE, ElevationSelection.ALL_MATCHING };
diff --git a/cave/com.raytheon.uf.viz.ui.menus/src/com/raytheon/uf/viz/ui/menus/widgets/tearoff/MenuItemComposite.java b/cave/com.raytheon.uf.viz.ui.menus/src/com/raytheon/uf/viz/ui/menus/widgets/tearoff/MenuItemComposite.java
index e5eb5c94e9..c21d7f2262 100644
--- a/cave/com.raytheon.uf.viz.ui.menus/src/com/raytheon/uf/viz/ui/menus/widgets/tearoff/MenuItemComposite.java
+++ b/cave/com.raytheon.uf.viz.ui.menus/src/com/raytheon/uf/viz/ui/menus/widgets/tearoff/MenuItemComposite.java
@@ -30,8 +30,6 @@ import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
@@ -45,7 +43,6 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuDialog.MenuPathElement;
@@ -60,8 +57,6 @@ import com.raytheon.uf.viz.ui.menus.widgets.tearoff.TearOffMenuDialog.MenuPathEl
* ------------ ---------- ----------- --------------------------
* Sep 15, 2011 mnash Initial creation
* Apr 10, 2013 DR 15185 D. Friedman Preserve tear-offs over perspective switches.
- * Apr 30, 2013 DR 15727 D. Friedman Try to make items that depend on an active
- * workbench window work correctly.
*
*
*
@@ -383,7 +378,7 @@ public class MenuItemComposite extends Composite {
private MouseAdapter getMouseAdapter() {
MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
- public void mouseDown(final MouseEvent e) {
+ public void mouseDown(MouseEvent e) {
MenuItem item = getItem();
if (item.getMenu() != null) {
@@ -399,123 +394,73 @@ public class MenuItemComposite extends Composite {
return;
}
- /*
- * Many menu items do not work unless there in an active
- * workbench window.
- *
- * If not already active (and it probably will not be), make the
- * shell of the original menu item active and finish selecting
- * the item after receiving an activation event. Otherwise,
- * finish selecting the item immediately.
- *
- * Also select immediately if the shell if not visible or is
- * minimized because we cannot exepect to get an activation
- * event.
- *
- * TODO: This is all still a kludge and could cause unexpected
- * behavior.
- */
- final Shell shell = item.getParent().getShell();
- Display display = shell.getDisplay();
- if (shell.isVisible() && !shell.getMinimized()
- && display.getActiveShell() != shell) {
- shell.addShellListener(new ShellAdapter() {
- @Override
- public void shellActivated(ShellEvent e2) {
- shell.removeShellListener(this);
- selectItem(e);
- }
+ // handle the selection event, so if it is able to load
+ // something, do it (by looping over ALL the selection
+ // listeners assigned to the item)
+ for (Listener list : item.getListeners(SWT.Selection)) {
+ Event event = new Event();
+ event.type = SWT.Selection;
+ event.widget = item;
+ list.handleEvent(event);
+ }
- @Override
- public void shellDeiconified(ShellEvent e) {
- shell.removeShellListener(this);
- }
+ if (isDisposed()) {
+ return;
+ }
- @Override
- public void shellIconified(ShellEvent e) {
- shell.removeShellListener(this);
- }
+ // handles the check boxes, if clicking the check box
+ // need to not do this (because SWT does it already)
+ // otherwise do it
+ if (firstItem instanceof Button
+ && firstItem.getStyle() == SWT.CHECK) {
+ if (e.widget != firstItem) {
+ ((Button) firstItem).setSelection(!((Button) firstItem)
+ .getSelection());
+ }
+ }
- @Override
- public void shellClosed(ShellEvent e) {
- shell.removeShellListener(this);
+ // Handle radio selection changing...
+ Control[] siblings = getParent().getChildren();
+ for (int i = 0; i < siblings.length; i++) {
+ final MenuItemComposite mic = (MenuItemComposite) siblings[i];
+ if (mic.separator == false
+ && mic.getItem().getStyle() == SWT.RADIO) {
+ try {
+ MenuItemComposite parent = null;
+ // check whether a Label is clicked or a
+ // MenuItemComposite
+ if (e.widget instanceof MenuItemComposite) {
+ parent = (MenuItemComposite) e.widget;
+ } else {
+ parent = (MenuItemComposite) ((Control) e.widget)
+ .getParent();
+ }
+ // check that the radio groups match
+ if (mic.getData("radioGroup").equals(
+ parent.getData("radioGroup"))) {
+ if (!parent.getItem()
+ .getText()
+ .replaceAll("&", "")
+ .equals(mic.getItem().getText().replaceAll(
+ "&", ""))) {
+ mic.getItem().setSelection(false);
+ ((Button) mic.firstItem)
+ .setSelection(false);
+ } else {
+ mic.getItem().setSelection(true);
+ ((Button) mic.firstItem).setSelection(true);
+ }
+ }
+ } catch (NullPointerException e1) {
+ e1.printStackTrace();
}
- });
- shell.setActive();
- } else {
- selectItem(e);
+ }
}
}
};
return mouseAdapter;
}
- private void selectItem(MouseEvent e) {
- MenuItem item = getItem();
- // handle the selection event, so if it is able to load
- // something, do it (by looping over ALL the selection
- // listeners assigned to the item)
- for (Listener list : item.getListeners(SWT.Selection)) {
- Event event = new Event();
- event.type = SWT.Selection;
- event.widget = item;
- list.handleEvent(event);
- }
-
- if (isDisposed()) {
- return;
- }
-
- // handles the check boxes, if clicking the check box
- // need to not do this (because SWT does it already)
- // otherwise do it
- if (firstItem instanceof Button
- && firstItem.getStyle() == SWT.CHECK) {
- if (e.widget != firstItem) {
- ((Button) firstItem).setSelection(!((Button) firstItem)
- .getSelection());
- }
- }
-
- // Handle radio selection changing...
- Control[] siblings = getParent().getChildren();
- for (int i = 0; i < siblings.length; i++) {
- final MenuItemComposite mic = (MenuItemComposite) siblings[i];
- if (mic.separator == false
- && mic.getItem().getStyle() == SWT.RADIO) {
- try {
- MenuItemComposite parent = null;
- // check whether a Label is clicked or a
- // MenuItemComposite
- if (e.widget instanceof MenuItemComposite) {
- parent = (MenuItemComposite) e.widget;
- } else {
- parent = (MenuItemComposite) ((Control) e.widget)
- .getParent();
- }
- // check that the radio groups match
- if (mic.getData("radioGroup").equals(
- parent.getData("radioGroup"))) {
- if (!parent.getItem()
- .getText()
- .replaceAll("&", "")
- .equals(mic.getItem().getText().replaceAll(
- "&", ""))) {
- mic.getItem().setSelection(false);
- ((Button) mic.firstItem)
- .setSelection(false);
- } else {
- mic.getItem().setSelection(true);
- ((Button) mic.firstItem).setSelection(true);
- }
- }
- } catch (NullPointerException e1) {
- e1.printStackTrace();
- }
- }
- }
- }
-
@Override
public void dispose() {
if (arrow != null) {
diff --git a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java
index fbb1e772e7..55a3b122f5 100644
--- a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java
+++ b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackDisplay.java
@@ -97,6 +97,7 @@ import com.vividsolutions.jts.geom.LineString;
* the IGraphicsTarget drawWireframeShape method.
* 15Mar2013 15693 mgamazaychikov Made sure that magnification capability works.
* 06-11-2013 DR 16234 D. Friedman Fix pivot index when frames count is reduced.
+ * 06-24-2013 DR 16317 D. Friedman Handle "motionless" track.
*
*
*
@@ -297,6 +298,13 @@ public class StormTrackDisplay implements IRenderable {
// if (trackUtil.getDataTimes().length == 1) {
// paintDragMeText(target, paintProps, currentState.dragMePoint);
// }
+ if (currentState.isInitiallyMotionless() && ! currentState.isNonstationary()) {
+ int currentFrame = trackUtil
+ .getCurrentFrame(paintProps.getFramesInfo());
+ if (currentFrame != currentState.intialFrame) {
+ paintDragMeText(target, paintProps, currentState.dragMePoint);
+ }
+ }
break;
}
}
@@ -683,7 +691,8 @@ public class StormTrackDisplay implements IRenderable {
}
state.geomChanged = false;
}
- if (state.mode == Mode.TRACK) {
+ if (state.mode == Mode.TRACK
+ && (!state.isInitiallyMotionless() || state.isNonstationary())) {
target.drawWireframeShape(cachedTrack, state.color,
state.lineWidth, state.lineStyle);
paintLabels(target, paintProps);
@@ -791,12 +800,24 @@ public class StormTrackDisplay implements IRenderable {
.getFramesInfo());
int pivotIndex = state.displayedPivotIndex;
+ double angle;
+ double oppositeAngle;
+ double speed;
+ int startCoordIndex;
+ int endCoordIndex;
+
DataTime[] dataTimes = trackUtil.getDataTimes(paintProps
.getFramesInfo());
state.timePoints[moveIndex].coord = state.dragMePoint.getCoordinate();
- int startCoordIndex = pivotIndex < moveIndex ? pivotIndex : moveIndex;
- int endCoordIndex = pivotIndex < moveIndex ? moveIndex : pivotIndex;
+ boolean hasMotion = ! state.isInitiallyMotionless() || state.isNonstationary()
+ || moveIndex != state.intialFrame;
+ if (hasMotion) {
+ startCoordIndex = pivotIndex < moveIndex ? pivotIndex : moveIndex;
+ endCoordIndex = pivotIndex < moveIndex ? moveIndex : pivotIndex;
+ } else {
+ startCoordIndex = endCoordIndex = moveIndex;
+ }
StormCoord startCoord = state.timePoints[startCoordIndex];
StormCoord endCoord = state.timePoints[endCoordIndex];
@@ -805,18 +826,24 @@ public class StormTrackDisplay implements IRenderable {
gc.setStartingGeographicPoint(startCoord.coord.x, startCoord.coord.y);
gc.setDestinationGeographicPoint(endCoord.coord.x, endCoord.coord.y);
- // get speed and angle
- double angle = gc.getAzimuth();
- double oppositeAngle = adjustAngle(angle + 180);
+ if (hasMotion) {
+ // get speed and angle
+ angle = gc.getAzimuth();
+ oppositeAngle = adjustAngle(angle + 180);
- double speed = gc.getOrthodromicDistance()
- / trackUtil
- .timeBetweenDataTimes(startCoord.time, endCoord.time);
+ speed = gc.getOrthodromicDistance()
+ / trackUtil
+ .timeBetweenDataTimes(startCoord.time, endCoord.time);
- // Tempory fix to prevent a resource error because
- // the time between data times is 0.
- if (Double.isNaN(speed)) {
- return;
+ // Tempory fix to prevent a resource error because
+ // the time between data times is 0.
+ if (Double.isNaN(speed)) {
+ return;
+ }
+ } else {
+ angle = 0;
+ oppositeAngle = 0;
+ speed = 0;
}
StormCoord[] timePoints = new StormCoord[state.timePoints.length];
diff --git a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java
index 6791e4e801..ca7e783654 100644
--- a/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java
+++ b/cave/com.raytheon.viz.awipstools/src/com/raytheon/viz/awipstools/common/stormtrack/StormTrackState.java
@@ -46,6 +46,7 @@ import com.vividsolutions.jts.geom.Point;
* 10-27-2010 #6964 bkowal Added a public class member for the LineStyle.
* 11/29/2012 15571 Qinglu Lin Added compuateCurrentStormCenter();
* 15Mar2013 15693 mgamazaychikov Added magnification.
+ * 06-24-2013 DR 16317 D. Friedman Handle "motionless" track.
*
*
*
@@ -195,6 +196,8 @@ public class StormTrackState {
/** set magnification to default value */
public float magnification = 1.0f;
+ private boolean initiallyMotionless;
+
/** Compute the coordinate of the storm center at the time defined by dataTime via interpolation. */
public boolean compuateCurrentStormCenter(Coordinate coord, DataTime dateTime) {
if (futurePoints == null) return false;
@@ -222,4 +225,17 @@ public class StormTrackState {
coord.x = 360. + coord.x;
return true;
}
+
+ public boolean isInitiallyMotionless() {
+ return initiallyMotionless;
+ }
+
+ public void setInitiallyMotionless(boolean initiallyMotionless) {
+ this.initiallyMotionless = initiallyMotionless;
+ }
+
+ // Return true if motion is defined and is not stationary
+ public boolean isNonstationary() {
+ return mode != Mode.DRAG_ME && speed > 0;
+ }
}
diff --git a/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/ContourSupport.java b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/ContourSupport.java
index 477e8ab210..409f5ee4a7 100644
--- a/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/ContourSupport.java
+++ b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/ContourSupport.java
@@ -69,37 +69,50 @@ import com.raytheon.viz.core.contours.cache.SubGridCacheKey;
import com.raytheon.viz.core.contours.util.ContourContainer;
import com.raytheon.viz.core.contours.util.FortConBuf;
import com.raytheon.viz.core.contours.util.FortConConfig;
+import com.raytheon.viz.core.contours.util.StreamLineContainer;
+import com.raytheon.viz.core.contours.util.StreamLineContainer.StreamLinePoint;
+import com.raytheon.viz.core.contours.util.StrmPak;
+import com.raytheon.viz.core.contours.util.StrmPakConfig;
import com.raytheon.viz.core.interval.XFormFunctions;
import com.raytheon.viz.core.style.contour.ContourPreferences;
import com.vividsolutions.jts.geom.Geometry;
/**
- * ContourSupport
- *
- * Provides contouring wrapper
+ * Provides contouring wrapper.
*
*
*
- * SOFTWARE HISTORY
- *
- * Date Ticket# Engineer Description
- * ------------ ---------- ----------- --------------------------
- * Oct 22, 2007 chammack Initial Creation.
- * May 26, 2009 #2172 chammack Use zoomLevel to calculate label spacing
- * Apr 26, 2010 #4583 rjpeter Replaced fortran fortconbuf with java port.
- * Mar 4, 2011 #7747 njensen Cached subgrid envelopes
- * Jul 9, 2012 DR 14940 M. Porricelli Adjust arrow size for streamlines
- * Feb 15, 2013 1638 mschenke Moved edex.common Util functions into common Util
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Oct 22, 2007 chammack Initial Creation.
+ * May 26, 2009 #2172 chammack Use zoomLevel to calculate label spacing
+ * Apr 26, 2010 #4583 rjpeter Replaced fortran fortconbuf with java port.
+ * Mar 04, 2011 #7747 njensen Cached subgrid envelopes
+ * Jul 09, 2012 DR14940 M.Porricelli Adjust arrow size for streamlines
+ * Feb 15, 2013 1638 mschenke Moved edex.common Util functions into common Util
+ * Jun 26, 2013 #1999 dgilling Replace native fortran strmpak call
+ * with java port.
+ *
*
*
* @author chammack
- * @version 1
+ * @version 1.0
*/
public class ContourSupport {
+
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(ContourSupport.class);
private static float smallestContourValue = GridUtil.GRID_FILL_VALUE - 1;
+
+ private static final String STREAM_LINES_PROPERTY_NAME = "viz.use.legacy.streamlines";
+
+ private static final String LEGACY_STEAMLINES_ON = "true";
+
+ private static final String LEGACY_STEAMLINES_OFF = "false";
+
private static float largestContourValue = GridUtil.GRID_FILL_VALUE + 1;
@@ -421,16 +434,20 @@ public class ContourSupport {
if (contourLabeling.getNumberOfContours() > 0) {
float minData = 1e37f;
float maxData = -1e37f;
- for (float[] dataRow : subgriddedData)
- for (float data : dataRow)
- if (data < minData && data != -999999)
+ for (float[] dataRow : subgriddedData) {
+ for (float data : dataRow) {
+ if (data < minData && data != -999999) {
minData = data;
- else if (data < 999998 && data > maxData)
+ } else if (data < 999998 && data > maxData) {
maxData = data;
+ }
+ }
+ }
interval = (maxData - minData)
/ contourLabeling.getNumberOfContours();
- if (interval < 0)
+ if (interval < 0) {
interval = -interval;
+ }
if (interval > initialInterval) {
initialInterval = interval;
prefs.getContourLabeling().setIncrement(
@@ -526,9 +543,9 @@ public class ContourSupport {
int totalNegCoords = 0;
for (int i = 0; i < size; i++) {
if (contours.contourVals.get(i) > 0) {
- totalPosCoords += (int) contours.xyContourPoints.get(i).length / 2;
+ totalPosCoords += contours.xyContourPoints.get(i).length / 2;
} else {
- totalNegCoords += (int) contours.xyContourPoints.get(i).length / 2;
+ totalNegCoords += contours.xyContourPoints.get(i).length / 2;
}
}
@@ -624,9 +641,17 @@ public class ContourSupport {
int maxX = (int) Math.ceil(Math.min(env.getMaximum(0), sz[0] - 1));
int maxY = (int) Math.ceil(Math.min(env.getMaximum(1), sz[1] - 1));
- makeStreamLines(uW, vW, minX, minY, maxX, maxY, sz, contourGroup,
- currentMagnification, zoom, contourGroup.lastDensity,
- rastPosToWorldGrid);
+ if (LEGACY_STEAMLINES_ON.equals(System.getProperty(
+ STREAM_LINES_PROPERTY_NAME, LEGACY_STEAMLINES_OFF)
+ .toLowerCase())) {
+ makeStreamLinesLegacy(uW, vW, minX, minY, maxX, maxY, sz,
+ contourGroup, currentMagnification, zoom,
+ contourGroup.lastDensity, rastPosToWorldGrid);
+ } else {
+ makeStreamLinesNew(uW, vW, minX, minY, maxX, maxY, sz,
+ contourGroup, currentMagnification, zoom,
+ contourGroup.lastDensity, rastPosToWorldGrid);
+ }
}
return contourGroup;
@@ -883,17 +908,21 @@ public class ContourSupport {
// use numberOfContours
float minData = 1e37f;
float maxData = -1e37f;
- for (float[] dataRow : subgriddedData)
- for (float dataCell : dataRow)
- if (dataCell < minData && dataCell != -999999)
+ for (float[] dataRow : subgriddedData) {
+ for (float dataCell : dataRow) {
+ if (dataCell < minData && dataCell != -999999) {
minData = dataCell;
- else if (dataCell < 999998
- && dataCell > maxData)
+ } else if (dataCell < 999998
+ && dataCell > maxData) {
maxData = dataCell;
+ }
+ }
+ }
interval = (maxData - minData)
/ contourLabeling.getNumberOfContours();
- if (interval < 0)
+ if (interval < 0) {
interval = -interval;
+ }
if (interval > initialInterval) {
initialInterval = interval;
@@ -1055,10 +1084,20 @@ public class ContourSupport {
int minY = 0;
int maxX = (int) (sz[0] - 1);
int maxY = (int) (sz[1] - 1);
- makeStreamLines(uW, vW, minX, minY, maxX, maxY, sz, contourGroup,
- 1, 1, contourGroup.lastDensity * 2, gridToPixel);
- return contourGroup;
+ if (LEGACY_STEAMLINES_ON.equals(System.getProperty(
+ STREAM_LINES_PROPERTY_NAME, LEGACY_STEAMLINES_OFF)
+ .toLowerCase())) {
+ makeStreamLinesLegacy(uW, vW, minX, minY, maxX, maxY, sz,
+ contourGroup, 1, 1, contourGroup.lastDensity * 2,
+ gridToPixel);
+ } else {
+ makeStreamLinesNew(uW, vW, minX, minY, maxX, maxY, sz,
+ contourGroup, 1, 1, contourGroup.lastDensity * 2,
+ gridToPixel);
+ }
+
+ return contourGroup;
} else {
throw new UnsupportedOperationException(
"Contouring is not supported for data type: "
@@ -1067,7 +1106,9 @@ public class ContourSupport {
}
- private static void makeStreamLines(float[] uW, float[] vW, int minX,
+ // TODO Remove this function once use of Java ported version of this
+ // algorithm is accepted by end-users
+ private static void makeStreamLinesLegacy(float[] uW, float[] vW, int minX,
int minY, int maxX, int maxY, long[] sz, ContourGroup contourGroup,
double currentMagnification, float zoom, double density,
MathTransform rastPosToWorldGrid) throws VizException {
@@ -1201,6 +1242,124 @@ public class ContourSupport {
}
}
+ private static void makeStreamLinesNew(float[] uW, float[] vW, int minX,
+ int minY, int maxX, int maxY, long[] sz, ContourGroup contourGroup,
+ double currentMagnification, float zoom, double density,
+ MathTransform rastPosToWorldGrid) throws VizException {
+
+ int szX = (maxX - minX) + 1;
+ int szY = (maxY - minY) + 1;
+ int totalSz = szX * szY;
+ if (totalSz <= 0) {
+ return;
+ }
+ int x = (int) sz[0];
+ int y = (int) sz[1];
+
+ float[][] adjustedUw = new float[szX][szY];
+ float[][] adjustedVw = new float[szX][szY];
+ for (int j = 0; j < szY; j++) {
+ for (int i = 0; i < szX; i++) {
+ float uWVal = uW[(x * (j + minY)) + (i + minX)];
+ if (Float.isNaN(uWVal)) {
+ uWVal = GridUtil.GRID_FILL_VALUE;
+ }
+ adjustedUw[szX - 1 - i][j] = uWVal;
+
+ float vWVal = vW[(x * (j + minY)) + (i + minX)];
+ if (Float.isNaN(vWVal)) {
+ vWVal = GridUtil.GRID_FILL_VALUE;
+ }
+ adjustedVw[szX - 1 - i][j] = vWVal;
+ }
+ }
+
+ // Use ported legacy code to determine contour interval
+ long t0 = System.currentTimeMillis();
+
+ double[] center = new double[2];
+ double[] offCenter = new double[2];
+
+ try {
+ rastPosToWorldGrid.transform(new double[] { x / 2.0, y / 2.0 }, 0,
+ center, 0, 1);
+ rastPosToWorldGrid.transform(new double[] { (x / 2.0) + 1.0,
+ y / 2.0 }, 0, offCenter, 0, 1);
+ } catch (TransformException e) {
+ throw new VizException(
+ "Could not perform center calculations for stream lines.",
+ e);
+ }
+
+ double gridPixelSize = offCenter[0] - center[0];
+ double gridPixelMax = 2000.;
+
+ // If gridPixelSize is large, arrows on streamline will be too small, so
+ // adjust here
+ if (gridPixelSize > gridPixelMax) {
+ gridPixelSize = gridPixelSize / 5;
+ }
+ float arrowSize = (float) (currentMagnification * 5 / zoom / gridPixelSize);
+
+ double spadiv = zoom * density * gridPixelSize / 25;
+
+ double minSpacing = 1.0 / spadiv;
+ double maxSpacing = 3.0 / spadiv;
+ float minspc = 0;
+ float maxspc = 0;
+
+ if (minSpacing > 1) {
+ minspc = (float) Math.sqrt(minSpacing);
+ }
+ if (minspc < 0.1) {
+ minspc = 0.1f;
+ }
+ if (maxSpacing > 1) {
+ maxspc = (float) Math.sqrt(maxSpacing);
+ }
+ if (maxspc < 0.25) {
+ maxspc = 0.25f;
+ }
+
+ StrmPakConfig config = new StrmPakConfig(arrowSize, minspc, maxspc,
+ -1000000f, -999998f);
+ StreamLineContainer container = StrmPak.strmpak(adjustedUw, adjustedVw,
+ szX, szX, szY, config);
+
+ long t1 = System.currentTimeMillis();
+ System.out.println("Contouring took: " + (t1 - t0));
+
+ long tAccum = 0;
+
+ try {
+ for (List points : container.streamLines) {
+ double[][] valsArr = new double[points.size()][2];
+
+ for (int i = 0; i < points.size(); i++) {
+ StreamLinePoint point = points.get(i);
+ try {
+ long tZ0 = System.currentTimeMillis();
+ rastPosToWorldGrid.transform(new double[] {
+ maxX - point.getX(), point.getY() + minY }, 0,
+ valsArr[i], 0, 1);
+ long tZ1 = System.currentTimeMillis();
+ tAccum += (tZ1 - tZ0);
+ } catch (TransformException e) {
+ throw new VizException(
+ "Could not transform stream line coordinate into world grid space.",
+ e);
+ }
+ }
+
+ contourGroup.posValueShape.addLineSegment(valsArr);
+ }
+
+ System.out.println("streamline transformation time: " + tAccum);
+ } catch (Throwable e) {
+ throw new VizException("Error postprocessing contours", e);
+ }
+ }
+
private static void processMinMaxLabels(ContourContainer contours,
String minMaxLabelFormat, String minLabel, String maxLabel,
MathTransform transform, ContourGroup contourGroup,
diff --git a/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StreamLineContainer.java b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StreamLineContainer.java
new file mode 100644
index 0000000000..a943e48096
--- /dev/null
+++ b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StreamLineContainer.java
@@ -0,0 +1,85 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.viz.core.contours.util;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * An object that contains a list of coordinates used to draw stream lines over
+ * a grid.
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 21, 2013 #1999 dgilling Initial creation
+ *
+ *
+ *
+ * @author dgilling
+ * @version 1.0
+ */
+
+public class StreamLineContainer {
+
+ public static class StreamLinePoint {
+
+ private final float x;
+
+ private final float y;
+
+ public StreamLinePoint(float xPoint, float yPoint) {
+ this.x = xPoint;
+ this.y = yPoint;
+ }
+
+ public float getX() {
+ return x;
+ }
+
+ public float getY() {
+ return y;
+ }
+
+ }
+
+ public final List> streamLines;
+
+ public StreamLineContainer() {
+ this(new LinkedList>());
+ }
+
+ private StreamLineContainer(List> listImpl) {
+ streamLines = listImpl;
+ }
+
+ public static StreamLineContainer emptyContainer() {
+ List> listImpl = Collections.emptyList();
+ return new StreamLineContainer(listImpl);
+ }
+
+ public boolean addLine(List points) {
+ return streamLines.add(points);
+ }
+}
diff --git a/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StrmPak.java b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StrmPak.java
new file mode 100644
index 0000000000..6714a84180
--- /dev/null
+++ b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StrmPak.java
@@ -0,0 +1,998 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.viz.core.contours.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.raytheon.viz.core.contours.util.StreamLineContainer.StreamLinePoint;
+
+/**
+ * Port of strmpak.f.
+ *
+ * This routine draws a set of streamlines. Works in area defined by current.
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 10, 2013 #1999 dgilling Initial creation
+ *
+ *
+ *
+ * @author dgilling
+ * @version 1.0
+ */
+
+public final class StrmPak {
+
+ private final class PointValueBuffer {
+
+ private final Map buffer;
+
+ private final V defaultValue;
+
+ public PointValueBuffer(int initialSize, V defaultValue) {
+ buffer = new HashMap(initialSize, 1f);
+ this.defaultValue = defaultValue;
+ }
+
+ public V get(int key) {
+ // TODO: introduce a bounds check so that this class throws an
+ // equivalent to an ArrayIndexOutOfBoundsException when data is
+ // requested that would have been outside of the original array's
+ // bounds.
+ // For now, neglecting for performance reasons
+ V retVal = buffer.get(key);
+ if (retVal == null) {
+ retVal = defaultValue;
+ }
+ return retVal;
+ }
+
+ public V put(int key, V value) {
+ // TODO: introduce a bounds check so that this class throws an
+ // equivalent to an ArrayIndexOutOfBoundsException when data is
+ // requested that would have been outside of the original array's
+ // bounds.
+ // For now, neglecting for performance reasons
+ return buffer.put(key, value);
+ }
+
+ public void clear() {
+ buffer.clear();
+ }
+ }
+
+ private static final float minmag = 0.0f;
+
+ private static final float maxmag = 1e36f;
+
+ @SuppressWarnings("unused")
+ private static final float checkval = 1e36f;
+
+ // private static Queue instancePool = new
+ // ConcurrentLinkedQueue();
+
+ private int ill;
+
+ private int iur;
+
+ private int jll;
+
+ private int jur;
+
+ private int ium;
+
+ private int jum;
+
+ private float asiz;
+
+ // in fortran itrack/jtrack were size 2000 arrays, indexed 1 ->
+ // 2000
+ private final PointValueBuffer itrack;
+
+ private final PointValueBuffer jtrack;
+
+ // A2 porting note: LCPnt was a byte array in the original
+ // source, but the only values ever assigned to the array were 0 or 1,
+ // so a boolean array will work just as well.
+ // in fortran LCPnt/IPnt/JPnt were size 8001 arrays, indexed -4000 ->
+ // 4000
+ private final PointValueBuffer LCPnt;
+
+ private final PointValueBuffer IPnt;
+
+ private final PointValueBuffer JPnt;
+
+ public static StreamLineContainer strmpak(float[][] uComp, float[][] vComp,
+ int xSize, int nx, int ny, StrmPakConfig config) {
+ StrmPak instance = new StrmPak();
+ StreamLineContainer rval = instance.strmpakInternal(uComp, vComp,
+ xSize, nx, ny, config);
+ return rval;
+ }
+
+ private StrmPak() {
+ itrack = new PointValueBuffer(512, 0);
+ jtrack = new PointValueBuffer(512, 0);
+ LCPnt = new PointValueBuffer(64, Boolean.TRUE);
+ IPnt = new PointValueBuffer(512, 0.0f);
+ JPnt = new PointValueBuffer(512, 0.0f);
+ }
+
+ /**
+ * This routine draws a set of streamlines. Works in area defined by
+ * current.
+ *
+ * @param U
+ * Array of U components
+ * @param V
+ * Array of V components
+ * @param mnx
+ * First dimension of data arrays.
+ * @param nx
+ * Inner dimension of grid.
+ * @param ny
+ * Outer dimension of grid.
+ * @param config
+ * Parameters for drawing the stream lines.
+ *
+ * @return A StreamLineContainer
containing the coordinates for
+ * the stream lines. Line segments will be divided by the sentinel
+ * value (-99999, -99999).
+ */
+ private StreamLineContainer strmpakInternal(float[][] U, float[][] V,
+ int mnx, int nx, int ny, StrmPakConfig config) {
+ StreamLineContainer rVal = new StreamLineContainer();
+
+ // Initialize environment of streamline output.
+ float minmag2 = minmag * minmag;
+ float maxmag2 = maxmag * maxmag;
+ ill = 0;
+ jll = 0;
+ iur = nx - 1;
+ jur = ny - 1;
+ ium = iur - 1;
+ jum = jur - 1;
+ asiz = config.asize;
+
+ // Initialize work arrays.
+ // A2 porting note: In the fortran, Work was an int/short array, but I'm
+ // using byte because it seems the only values ever used in this
+ // algorithm are -1, 0, and 1.
+ byte[][][] Work = new byte[2][nx][ny];
+ for (int i = ill; i <= ium; i++) {
+ int ii = i + 1;
+
+ for (int j = jll; j <= jum; j++) {
+ int jj = j + 1;
+
+ if ((!((U[i][j] < config.badlo) || U[i][j] > config.badhi))
+ || (!((U[i][jj] < config.badlo) || U[i][jj] > config.badhi))
+ || (!((U[ii][j] < config.badlo) || U[ii][j] > config.badhi))
+ || (!((U[ii][jj] < config.badlo) || U[ii][jj] > config.badhi))
+ || (!((V[i][j] < config.badlo) || V[i][j] > config.badhi))
+ || (!((V[i][jj] < config.badlo) || V[i][jj] > config.badhi))
+ || (!((V[ii][j] < config.badlo) || V[ii][j] > config.badhi))
+ || (!((V[ii][jj] < config.badlo) || V[ii][jj] > config.badhi))) {
+ Work[0][i][j] = -1;
+ Work[1][i][j] = -1;
+ continue;
+ }
+
+ if ((minmag <= 0.0f) && (maxmag >= config.badlo)) {
+ continue;
+ }
+ float mag2 = U[i][j] * U[i][j] + V[i][j] * V[i][j];
+ if ((mag2 >= minmag2) && (mag2 <= maxmag2)) {
+ continue;
+ }
+ mag2 = U[ii][j] * U[ii][j] + V[ii][j] * V[ii][j];
+ if ((mag2 >= minmag2) && (mag2 <= maxmag2)) {
+ continue;
+ }
+ mag2 = U[i][jj] * U[i][jj] + V[i][jj] * V[i][jj];
+ if ((mag2 >= minmag2) && (mag2 <= maxmag2)) {
+ continue;
+ }
+ mag2 = U[ii][jj] * U[ii][jj] + V[ii][jj] * V[ii][jj];
+ if ((mag2 >= minmag2) && (mag2 <= maxmag2)) {
+ continue;
+ }
+ Work[0][i][j] = -1;
+ Work[1][i][j] = -1;
+ }
+ }
+
+ float maxspc4 = (config.maxspc * 4);
+ int k = (int) ((maxspc4 >= 0) ? (maxspc4 + 0.5f) : (maxspc4 - 0.5f));
+ if (k < 1) {
+ k = 1;
+ }
+
+ do {
+ int i1 = (ill + iur) / 2;
+ int i2 = i1 + 1;
+ int j1 = (jll + jur) / 2;
+ int j2 = j1 + 1;
+
+ boolean again;
+ do {
+ again = false;
+ float mymax = config.maxspc;
+ if (k > mymax) {
+ mymax = k;
+ }
+
+ if (j1 >= jll) {
+ float rj0 = j1;
+ for (int i = i1; i <= i2 - 1; i += k) {
+ float ri0 = i + 0.5f;
+ StrmLin(U, V, Work, mnx, ri0, rj0, config.minspc,
+ mymax, rVal);
+ }
+ j1 -= k;
+ again = true;
+ }
+
+ if (i1 >= ill) {
+ float ri0 = i1;
+ for (int j = j1; j <= j2 - 1; j += k) {
+ float rj0 = j + 0.5f;
+ StrmLin(U, V, Work, mnx, ri0, rj0, config.minspc,
+ mymax, rVal);
+
+ }
+ i1 -= k;
+ again = true;
+ }
+
+ if (j2 < jur) {
+ float rj0 = j2;
+ for (int i = i1; i <= i2 - 1; i += k) {
+ float ri0 = i + 0.5f;
+ StrmLin(U, V, Work, mnx, ri0, rj0, config.minspc,
+ mymax, rVal);
+ }
+ j2 += k;
+ again = true;
+ }
+
+ if (i2 <= iur) {
+ float ri0 = i2;
+ for (int j = j1; j <= j2 - 1; j += k) {
+ float rj0 = j + 0.5f;
+ StrmLin(U, V, Work, mnx, ri0, rj0, config.minspc,
+ mymax, rVal);
+ }
+ i2 += k;
+ again = true;
+ }
+ } while (again);
+
+ k /= 2;
+ } while (k >= 1);
+
+ return rVal;
+ }
+
+ /**
+ * This routine draws a single streamline through the point (ri0, rj0). ri0
+ * are rj0 real numbers in array index space.
+ *
+ * @param U
+ * Array of U components
+ * @param V
+ * Array of V components
+ * @param Work
+ * Workspace which keeps track of how many streamlines have been
+ * drawn in each cell. A value of -1 designates a cell as having
+ * bad or missing data. 1 is for previously drawn streamlines, 2
+ * includes the streamline currently being drawn.
+ * @param mnx
+ * First dimension of array to be countoured.
+ * @param ri0
+ * X-coordinate to draw the streamline through. Coordinates are
+ * in array index space.
+ * @param rj0
+ * Y-coordinate to draw the streamline through. Coordinates are
+ * in array index space.
+ * @param minspc
+ * If greater than one, no two streamlines will approach any
+ * closer than this number of cells. If less than zero, a
+ * streamline will terminate if it runs through 1/minspc
+ * consecutive already occupied cells.
+ * @param maxspc
+ * No streamline will be started any closer than this number of
+ * cells to an existing streamline.
+ * @param container
+ * StreamLineContainer
object accumulating all line
+ * segments necessary to draw stream lines for U and V.
+ */
+ private void StrmLin(float[][] U, float[][] V, byte[][][] Work, int mnx,
+ float ri0, float rj0, float minspc, float maxspc,
+ StreamLineContainer container) {
+ if ((ri0 < ill) || (ri0 > iur) || (rj0 < jll) || (rj0 > jur)) {
+ return;
+ }
+
+ // declare formal arguments
+ int side0;
+ int i;
+ int ii;
+ int iii;
+ int j;
+ int jj;
+ int jjj;
+ int k;
+ int kk;
+ int kkk;
+ int ovrlap = 0;
+ float x;
+ float y;
+ // FIXME? in fortran SgSide was a size 8 array, indexed 1 -> 8
+ int[] SgSide = new int[9];
+ float[] SgLoc = new float[9];
+ float[] SgSF = new float[9];
+ // FIXME? in fortran SgCont was a size 8 array, indexed 1 -> 8
+ float[] SgCont = new float[9];
+
+ itrack.clear();
+ jtrack.clear();
+ LCPnt.clear();
+ IPnt.clear();
+ JPnt.clear();
+
+ // Initialize some variables.
+ int ntb = 1 + Math.min(iur - ill, jur - jll) / 4;
+ int track = 0;
+ int ntrack = (int) ((maxspc >= 0) ? (maxspc + 0.5f) : (maxspc - 0.5f));
+ if (ntrack < ntb) {
+ ntrack = ntb;
+ }
+ int qi0 = (int) ((ri0 >= 0) ? (ri0 + 0.5f) : (ri0 - 0.5f));
+ int qj0 = (int) ((rj0 >= 0) ? (rj0 + 0.5f) : (rj0 - 0.5f));
+ int kpnt1 = 0;
+ int kpnt2 = 0;
+
+ // Loop for trying streamlines in both directions from this point.
+ for (int kstrm = 1; kstrm <= 2; kstrm++) {
+ int kpnt = 0;
+ int dkpnt = 0;
+ int btrack = track + 1;
+
+ // NOTE on A2 port: we use named blocks to substitute for common
+ // goto points within the original fortran code.
+ LABEL_7777: {
+ LABEL_7775: {
+ // Determine which side and which cell we are starting with
+ if (Math.abs(ri0 - qi0) < Math.abs(rj0 - qj0)) {
+ if (kstrm == 1) {
+ side0 = 4;
+ i = (int) ((ri0 >= 0) ? (ri0 + 0.5f) : (ri0 - 0.5f));
+ j = (int) rj0;
+ k = Math.max(
+ ((int) ((maxspc >= 0) ? (maxspc + 0.5f)
+ : (maxspc - 0.5f)) - 1), 0);
+ for (jjj = Math.max(jll, (j - k)); jjj <= Math.min(
+ jum, j + k); jjj++) {
+ for (iii = Math.max(ill, (i - k - 1)); iii <= Math
+ .min(ium, i + k); iii++) {
+ if (Work[0][iii][jjj] > 0) {
+ return;
+ }
+ }
+ }
+ if (i > ium) {
+ break LABEL_7775;
+ }
+ } else {
+ side0 = 2;
+ i = (int) ((ri0 >= 0) ? (ri0 + 0.5f) : (ri0 - 0.5f)) - 1;
+ j = (int) rj0;
+ if (i < 1) {
+ break LABEL_7775;
+ }
+ }
+
+ x = qi0 - (float) i;
+ y = rj0 - j;
+ } else {
+ if (kstrm == 1) {
+ side0 = 1;
+ i = (int) ri0;
+ j = (int) ((rj0 >= 0) ? (rj0 + 0.5f) : (rj0 - 0.5f));
+ k = Math.max(
+ ((int) ((maxspc >= 0) ? (maxspc + 0.5f)
+ : (maxspc - 0.5f)) - 1), 0);
+ for (jjj = Math.max(jll, (j - k)); jjj <= Math.min(
+ jum, (j + k)); jjj++) {
+ for (iii = Math.max(ill, (i - k - 1)); iii <= Math
+ .min(ium, (i + k)); iii++) {
+ if (Work[0][iii][jjj] > 0) {
+ return;
+ }
+ }
+ }
+ if (j > jum) {
+ break LABEL_7775;
+ }
+ } else {
+ side0 = 3;
+ i = (int) ri0;
+ j = (int) ((rj0 >= 0) ? (rj0 + 0.5f) : (rj0 - 0.5f)) - 1;
+ if (j < 1) {
+ break LABEL_7775;
+ }
+ }
+
+ x = ri0 - i;
+ y = qj0 - (float) j;
+ }
+
+ ii = i + 1;
+ jj = j + 1;
+
+ // Check if cell has missing values.
+ if (Work[0][i][j] == -1) {
+ break LABEL_7777;
+ }
+
+ // Determine whether we are working with or against the
+ // flow.
+ float dirflg;
+ float influx;
+ if (side0 == 1) {
+ influx = V[i][j] * (1.0f - x) + V[ii][j] * x;
+ } else if (side0 == 2) {
+ influx = -(U[ii][j] * (1.0f - y) + U[ii][jj] * y);
+ } else if (side0 == 3) {
+ influx = -(V[i][jj] * (1.0f - x) + V[ii][jj] * x);
+ } else {
+ influx = U[i][j] * (1.0f - y) + U[i][jj] * y;
+ }
+ if (influx < 0.0f) {
+ dirflg = -1.0f;
+ dkpnt = -1;
+ } else if (influx > 0.0f) {
+ dirflg = 1.0f;
+ dkpnt = 1;
+ } else {
+ break LABEL_7777;
+ }
+
+ // Set some initialize values at streamline start point.
+ float rpxi = i;
+ float rpyj = j;
+ int narrow = (ntb + 3) * 3 / 4;
+ boolean done = false;
+ int ntot = (narrow + 1) / 2;
+ int loopct = 0;
+ IPnt.put(kpnt, rpxi + x);
+ JPnt.put(kpnt, rpyj + y);
+
+ int i1 = 0;
+ int j1 = 0;
+ int i0 = 0;
+ int j0 = 0;
+ int icheck = 0;
+
+ float xx;
+ float yy;
+
+ // Start process of crossing this cell, check if we have
+ // missing data.
+ while (true) {
+ if (Work[0][i][j] == -1) {
+ break LABEL_7777;
+ }
+
+ // Determine if there are already too many streamlines
+ // around.
+ if (track > btrack) {
+ if (minspc < 1.5f) {
+ if (Work[icheck][i][j] == 0) {
+ ovrlap = 0;
+ } else {
+ ovrlap += Work[icheck][i][j];
+ float minspcInv = 1.0f / minspc;
+ if (ovrlap >= (int) ((minspcInv >= 0) ? (minspcInv + 0.5f)
+ : (minspcInv - 0.5f))) {
+ break LABEL_7777;
+ }
+ }
+
+ icheck = 1;
+ } else {
+ if (Work[icheck][i][j] > 0) {
+ break LABEL_7777;
+ }
+ for (int djj = -1; djj <= 0; djj++) {
+ LABEL_20: for (int dii = -1; dii <= 0; dii++) {
+ if ((dii == 0) && (djj == 0)) {
+ continue;
+ }
+
+ if ((dii != 0) && (djj != 0)) {
+ float minspc707 = minspc * .707f;
+ k = (int) ((minspc707 >= 0) ? (minspc707 + 0.5f)
+ : (minspc707 - 0.5f)) - 1;
+ } else {
+ k = (int) ((minspc >= 0) ? (minspc + 0.5f)
+ : (minspc - 0.5f)) - 1;
+ }
+ if (k > (track - btrack)) {
+ k = track - btrack;
+ }
+ if (k < 1) {
+ continue;
+ }
+
+ iii = i;
+ jjj = j;
+ LABEL_18: for (int l = 1; l <= k; l++) {
+ iii += dii;
+ if ((iii < ill) || (iii > ium)) {
+ continue LABEL_20;
+ }
+ jjj += djj;
+ if ((jjj < jll) || (jjj > jum)) {
+ continue LABEL_20;
+ }
+
+ if (Work[0][iii][jjj] > 0) {
+ break LABEL_7777;
+ }
+ if (Work[1][iii][jjj] <= 0) {
+ continue;
+ }
+
+ for (int kkkk = (1 + track - k); kkkk <= track; kkkk++) {
+ if ((itrack.get(kkkk) == iii)
+ && (jtrack.get(kkkk) == jjj)) {
+ continue LABEL_18;
+ }
+ }
+ break LABEL_7777;
+ }
+ }
+ }
+ }
+
+ icheck = 1;
+ }
+
+ // Determine flux contributions from each component.
+ // FIXME? in fortran Flux was a size 8 array, indexed 1
+ // -> 8
+ float[] Flux = { Float.NaN, (-dirflg) * V[i][j],
+ (-dirflg) * V[ii][j], dirflg * U[ii][j],
+ dirflg * U[ii][jj], dirflg * V[ii][jj],
+ dirflg * V[i][jj], (-dirflg) * U[i][jj],
+ (-dirflg) * U[i][j] };
+
+ // Count total number of in, out, and zero contributions
+ // to net flux.
+ int nin = 0;
+ int nout = 0;
+ for (k = 1; k <= 8; k++) {
+ if (Flux[k] < 0.0f) {
+ nin++;
+ } else if (Flux[k] > 0.0f) {
+ nout++;
+ }
+ }
+ if (nin == 0) {
+ break LABEL_7777;
+ }
+
+ // Check if there are no exit points in this cell.
+ LABEL_77: {
+ if (nout == 0) {
+ // Determine termination point within this cell.
+ float x1 = -Flux[8] - Flux[7];
+ float x2 = -Flux[4] - Flux[3];
+ if ((x1 + x2) <= 0.0f) {
+ xx = 0.5f;
+ } else {
+ xx = x1 / (x1 + x2);
+ }
+
+ float y1 = -Flux[5] - Flux[6];
+ float y2 = -Flux[1] - Flux[2];
+ if ((y1 + y2) <= 0.0f) {
+ yy = 0.5f;
+ } else {
+ yy = y1 / (y1 + y2);
+ }
+ done = true;
+
+ // go to drawing portion
+ break LABEL_77;
+ }
+
+ // Make a list of segments on cell border with like
+ // contribution to flux. Record location, side, and
+ // flux contribution.
+ influx = 0.0f;
+ float outflux = 0.0f;
+ int nsg = 0;
+ SgLoc[0] = 0.0f;
+ for (k = 1; k <= 4; k++) {
+ kkk = k + k;
+ kk = kkk - 1;
+ boolean flxflg;
+ if (Flux[kk] < 0.0f) {
+ flxflg = (Flux[kkk] > 0.0f);
+ } else if (Flux[kk] > 0.0f) {
+ flxflg = (Flux[kkk] < 0.0f);
+ } else {
+ flxflg = false;
+ }
+
+ if (flxflg) {
+ float xy = Flux[kk]
+ / (Flux[kk] - Flux[kkk]);
+ if (xy > 0.0f) {
+ nsg++;
+ SgSide[nsg] = k;
+ SgLoc[nsg] = (k - 1f) + xy;
+ SgCont[nsg] = xy * Flux[kk] / 2f;
+ if (SgCont[nsg] < 0.0f) {
+ influx += SgCont[nsg];
+ } else {
+ outflux += SgCont[nsg];
+ }
+ }
+
+ if (xy < 1.0f) {
+ nsg++;
+ SgSide[nsg] = k;
+ SgCont[nsg] = (1.0f - xy) * Flux[kkk]
+ / 2f;
+ }
+
+ SgLoc[nsg] = k;
+ } else {
+ nsg++;
+ SgLoc[nsg] = k;
+ SgSide[nsg] = k;
+ SgCont[nsg] = Flux[kk] + Flux[kkk];
+ }
+
+ if (SgCont[nsg] < 0.0f) {
+ influx += SgCont[nsg];
+ } else {
+ outflux += SgCont[nsg];
+ }
+ }
+
+ // Adjust the magnitude of the flux segments to make
+ // total flux integrated around the cell zero.
+ // Integrate to get stream function values.
+ float mult = (float) Math.sqrt((-outflux) / influx);
+ SgSF[0] = 0.0f;
+ for (k = 1; k < nsg; k++) {
+ if (SgCont[k] > 0.0f) {
+ SgSF[k] = SgSF[k - 1] + SgCont[k] / mult;
+ } else {
+ SgSF[k] = SgSF[k - 1] + SgCont[k] * mult;
+ }
+ }
+ k = nsg + 1;
+ SgSF[nsg] = 0.0f;
+
+ // Based on side of entry, determine circular
+ // location of endpoint and direction to search for
+ // exit point.
+ float curloc;
+ boolean forward;
+ if (side0 == 1) {
+ curloc = x;
+ forward = ((dirflg * (U[i][j] * (1.0f - x) + U[ii][j]
+ * x)) > 0.0f);
+ } else if (side0 == 2) {
+ curloc = 1.0f + y;
+ forward = ((dirflg * (V[ii][j] * (1.0f - y) + V[ii][jj]
+ * y)) > 0.0f);
+ } else if (side0 == 3) {
+ curloc = 3.0f - x;
+ forward = ((dirflg * (U[i][jj] * x + U[ii][jj]
+ * (1.0f - x))) < 0.0f);
+ } else {
+ curloc = 4.0f - y;
+ forward = ((dirflg * (V[i][j] * y + V[i][jj]
+ * (1.0f - y))) < 0.0f);
+ }
+
+ // Determine stream function value of entry
+ // location.
+ float curSF = 0.0f;
+ for (kk = 1; kk <= nsg; kk++) {
+ if ((SgLoc[kk] > curloc) || (kk == nsg)) {
+ k = kk - 1;
+ if (SgCont[kk] >= 0.0f) {
+ break LABEL_7777;
+ }
+ curSF = SgSF[k] + (SgSF[kk] - SgSF[k])
+ * (curloc - SgLoc[k])
+ / (SgLoc[kk] - SgLoc[k]);
+ if (k < 1) {
+ k = nsg;
+ }
+ break;
+ }
+ }
+
+ // Search for next occurrence of this value of the
+ // stream function.
+ kkk = k;
+ if (forward) {
+ do {
+ k = kk;
+ kk++;
+ if (kk > nsg) {
+ kk = 1;
+ }
+ if (k == kkk) {
+ break LABEL_7777;
+ }
+ } while ((SgCont[kk] <= 0.0f)
+ || ((SgSF[k] <= curSF) != (curSF < SgSF[kk])));
+ } else {
+ do {
+ kk = k;
+ k--;
+ if (k < 1) {
+ k = nsg;
+ }
+ if (k == kkk) {
+ break LABEL_7777;
+ }
+ } while ((SgCont[kk] <= 0.0f)
+ || ((SgSF[k] <= curSF) != (curSF < SgSF[kk])));
+ }
+ if (k == nsg) {
+ k = 0;
+ }
+ float outloc = SgLoc[k] + (SgLoc[kk] - SgLoc[k])
+ * (curSF - SgSF[k]) / (SgSF[kk] - SgSF[k]);
+ side0 = SgSide[kk];
+
+ // Based upon exit side, figure out location in x/y
+ // space.
+ if (side0 == 1) {
+ xx = outloc;
+ yy = 0.0f;
+ } else if (side0 == 2) {
+ xx = 1.0f;
+ yy = outloc - 1.0f;
+ } else if (side0 == 3) {
+ xx = 3.0f - outloc;
+ yy = 1.0f;
+ } else {
+ xx = 0.0f;
+ yy = 4.0f - outloc;
+ }
+ }
+
+ // Record plotting location for this cell.
+ ntot++;
+ kpnt += dkpnt;
+ if ((ntot > narrow) && (Work[1][i][j] == 0)) {
+ float dx = xx - x;
+ float dy = yy - y;
+ float mag = (float) Math.sqrt(dx * dx + dy * dy);
+ if (mag >= 0.2f) {
+ LCPnt.put(kpnt, Boolean.FALSE);
+ ntot = 0;
+ }
+ }
+ IPnt.put(kpnt, rpxi + xx);
+ JPnt.put(kpnt, rpyj + yy);
+
+ // Patch to prevent infinite loop.
+ i1 = i0;
+ j1 = j0;
+ i0 = i;
+ j0 = j;
+
+ // Keep track of cells used so far.
+ Work[1][i][j]++;
+ track++;
+ itrack.put(track, i);
+ jtrack.put(track, j);
+
+ // Based on exit side, figure out stuff for next cell.
+ if (done) {
+ break LABEL_7775;
+ }
+ if (side0 == 1) {
+ side0 = 3;
+ jj = j;
+ j--;
+ if (j < 1) {
+ break LABEL_7775;
+ }
+ rpyj -= 1.0f;
+ x = xx;
+ y = 1.0f;
+ } else if (side0 == 2) {
+ side0 = 4;
+ i = ii;
+ ii++;
+ if (i > ium) {
+ break LABEL_7775;
+ }
+ rpxi += 1.0f;
+ x = 0.0f;
+ y = yy;
+ } else if (side0 == 3) {
+ side0 = 1;
+ j = jj;
+ jj++;
+ if (j > jum) {
+ break LABEL_7775;
+ }
+ rpyj += 1.0f;
+ x = xx;
+ y = 0.0f;
+ } else if (side0 == 4) {
+ side0 = 2;
+ ii = i;
+ i--;
+ if (i < 1) {
+ break LABEL_7775;
+ }
+ rpxi -= 1.0f;
+ x = 1.0f;
+ y = yy;
+ }
+
+ // Patch to prevent infinite loop.
+ if ((i == i1) && (j == j1)) {
+ loopct++;
+ if (loopct >= 3) {
+ break LABEL_7777;
+ }
+ } else {
+ loopct = 0;
+ }
+ }
+ }
+
+ // Escape point for streamline hitting grid border, source, or
+ // sink.
+ // allow shorter streamlines in this case.
+ ntrack = (ntrack + 1) / 2;
+ }
+
+ // Escape point for all others...record kpnt value.
+ if (dkpnt == -1) {
+ kpnt1 = kpnt;
+ } else if (dkpnt == 1) {
+ kpnt2 = kpnt;
+ }
+ }
+
+ // Don't draw this streamline if it is too short.
+ if (track < ntrack) {
+ for (k = 1; k <= track; k++) {
+ Work[1][itrack.get(k)][jtrack.get(k)]--;
+ }
+ // A2 porting note: this code appeared in the original algorithm but
+ // is unnecessary since the values stored to LCPnt don't persist
+ // between calls to StrmLin().
+ // for (k = kpnt1; k <= kpnt2; k++) {
+ // LCPnt.put(k, Boolean.TRUE);
+ // }
+ return;
+ } else {
+ for (k = 1; k <= track; k++) {
+ Work[0][itrack.get(k)][jtrack.get(k)]++;
+ }
+ }
+
+ int npass = 5;
+ int wgt1 = 6;
+ int wgt2 = 88;
+
+ // Do smoothing.
+ if (npass > 0) {
+ for (int kkkk = 1; kkkk <= npass; kkkk++) {
+ k = kpnt1 + 1;
+ float im = IPnt.get(kpnt1);
+ float xx = IPnt.get(k);
+ float jm = JPnt.get(kpnt1);
+ float yy = JPnt.get(k);
+
+ for (int kp = kpnt1 + 2; kp <= kpnt2; kp++) {
+ float ip = IPnt.get(kp);
+ float jp = JPnt.get(kp);
+ IPnt.put(k, (wgt1 * (ip + im) + wgt2 * xx) / 100f);
+ JPnt.put(k, (wgt1 * (jp + jm) + wgt2 * yy) / 100f);
+ im = xx;
+ jm = yy;
+ xx = ip;
+ yy = jp;
+ k = kp;
+ }
+ }
+ }
+
+ // Draw streamline.
+ List lineSegment = new ArrayList(
+ kpnt2 - kpnt1 + 1);
+ for (i = kpnt1; i <= kpnt2; i++) {
+ lineSegment.add(new StreamLinePoint(IPnt.get(i), JPnt.get(i)));
+ }
+ container.addLine(lineSegment);
+
+ // Draw arrows.
+ if (kpnt1 < 0) {
+ kkk = kpnt1 + 2;
+ LCPnt.put(kkk,
+ LCPnt.get(kpnt1).booleanValue()
+ && LCPnt.get(kpnt1 + 1).booleanValue());
+ } else {
+ kkk = kpnt1;
+ }
+
+ for (k = kkk; k <= kpnt2; k++) {
+ if (!LCPnt.get(k)) {
+ LCPnt.put(k, Boolean.TRUE);
+
+ int km = ((k < 0) ? k : k - 1);
+ int kp = ((k < 0) ? k + 1 : k);
+
+ float dx = IPnt.get(kp) - IPnt.get(km);
+ float dy = JPnt.get(kp) - JPnt.get(km);
+ float mag = (float) Math.sqrt(dx * dx + dy * dy);
+ if (mag != 0.0f) {
+ mag /= asiz;
+ dx /= mag;
+ dy /= mag;
+ x = (IPnt.get(km) + IPnt.get(kp)) / 2f;
+ y = (JPnt.get(km) + JPnt.get(kp)) / 2f;
+
+ // A2 porting note: these variables are not required in our
+ // port of this code--they were used specifically by the A1
+ // D2D drawing routines
+ // float[] px = { (dy - dx), 0, (0 - dx - dx) };
+ // float[] py = { px[2], 0, (0 - px[0]) };
+
+ List arrowHead = new ArrayList(
+ 3);
+ arrowHead.add(new StreamLinePoint((x - (dy - dx)),
+ (y - (-dy - dx))));
+ arrowHead.add(new StreamLinePoint(x, y));
+ arrowHead.add(new StreamLinePoint((x - (-dy - dx)),
+ (y + (dy - dx))));
+ container.addLine(arrowHead);
+ }
+ }
+ }
+ }
+}
diff --git a/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StrmPakConfig.java b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StrmPakConfig.java
new file mode 100644
index 0000000000..ed33f7f923
--- /dev/null
+++ b/cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/util/StrmPakConfig.java
@@ -0,0 +1,75 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.viz.core.contours.util;
+
+/**
+ * Configuration parameters for calculating stream lines.
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 26, 2013 #1999 dgilling Initial creation
+ *
+ *
+ *
+ * @author dgilling
+ * @version 1.0
+ */
+
+public final class StrmPakConfig {
+
+ public float asize;
+
+ public float minspc;
+
+ public float maxspc;
+
+ public float badlo;
+
+ public float badhi;
+
+ /**
+ * Creates a new configuration to run StrmPak.
+ *
+ * @param asize
+ * Size of arrows in MVI.
+ * @param minspc
+ * If greater than one, no two streamlines will approach any
+ * closer than this number of cells. If less than one, a
+ * streamline will terminate if it runs through 1/minspc
+ * consecutive already occupied cells.
+ * @param maxspc
+ * No streamline will be started any closer than this number of
+ * cells to an existing streamline.
+ * @param badlo
+ * @param badhi
+ */
+ public StrmPakConfig(float asize, float minspc, float maxspc, float badlo,
+ float badhi) {
+ this.asize = asize;
+ this.minspc = minspc;
+ this.maxspc = maxspc;
+ this.badlo = badlo;
+ this.badhi = badhi;
+ }
+}
diff --git a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/VizGroupResourceData.java b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/VizGroupResourceData.java
index 8a0828a0d5..dce1d6f6e0 100644
--- a/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/VizGroupResourceData.java
+++ b/cave/com.raytheon.viz.core/src/com/raytheon/viz/core/rsc/VizGroupResourceData.java
@@ -55,6 +55,7 @@ import com.raytheon.uf.viz.core.rsc.ResourceList;
* ------------ ---------- ----------- --------------------------
* Jan 28, 2011 mpduff Initial creation.
* Sep 11, 2012 1162 mpduff Made mergeMetaDataMap method public.
+ * Jun 21, 2013 DR15394 mgamazaychikov Remove implementation of resourceChanged
*
*
*
@@ -104,9 +105,9 @@ public class VizGroupResourceData extends AbstractRequestableResourceData
.construct(resourceList.get(i).getLoadProperties(),
descriptor);
rsc.setDescriptor(descriptor);
+ rsc.getResourceData().addChangeListener(this);
resourceList.get(i).setResource(rsc);
rscs.add(rsc);
- rsc.getResourceData().addChangeListener(this);
} catch (NoDataAvailableException e) {
// Do nothing
}
@@ -276,12 +277,7 @@ public class VizGroupResourceData extends AbstractRequestableResourceData
*/
@Override
public void resourceChanged(ChangeType type, Object object) {
- for (ResourcePair rp : resourceList) {
- if ((rp.getResource() != null)
- && (rp.getResource().getResourceData() != null)) {
- fireChangeListeners(type, object);
- }
- }
+ // TODO Auto-generated method stub
}
@Override
diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ReferenceSetManager.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ReferenceSetManager.java
index 9cdd922859..0da3d99d06 100644
--- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ReferenceSetManager.java
+++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/ReferenceSetManager.java
@@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
+ *
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
- *
+ *
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
- *
+ *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@@ -95,10 +95,10 @@ import com.vividsolutions.jts.geom.Envelope;
* The ReferenceSetMgr keeps track of the activeRefSet and interfaces to the
* server to save, delete, and load Reference sets. It keeps track of the
* availableRefSets and sends notification of changes to the inventory.
- *
+ *
* Requests are made to the ReferenceSetMgr to change, clear, and toggle the
* reference set.
- *
+ *
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
@@ -107,9 +107,10 @@ import com.vividsolutions.jts.geom.Envelope;
* 02/14/2013 #1506 mnash Move QueryScript to use new Python concurrency implementation
* 02/12/2013 #1597 randerso Improved error message for exceptions evaluating queries
* 02/26/2013 #1708 randerso Removed no longer needed near duplicate methods
- *
+ * 06/21/2013 14983 ryu Added method for synchronous evaluation of query.
+ *
*
- *
+ *
* @author randerso
* @version 1.0
*/
@@ -188,7 +189,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Set the wait cursor on or off
- *
+ *
* @param state
* 0 = wait cursor on, 1 = wait cursor off
*/
@@ -219,11 +220,11 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Gets and updates the reference set inventory from the server.
- *
+ *
* Uses net() to get a pointer to the reference network (referenceNet). Asks
* the reference server for the inventory. Stores the inventory and sends a
* RefSetInventoryChanged message if the inventory has changed.
- *
+ *
*/
private void getInventory() {
// load the complete list of edit areas
@@ -341,7 +342,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.IReferenceSetManager#getGroupInventory()
*/
@Override
@@ -359,7 +360,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.IReferenceSetManager#getGroupData(java.lang
* .String)
@@ -386,7 +387,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Returns list of areas which are not in any group
- *
+ *
* @return
*/
private List getMisc() {
@@ -538,7 +539,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Command to update the reference data cache based on additions, deletions,
* and changes.
- *
+ *
* @param additions
* @param deletions
* @param changes
@@ -560,9 +561,9 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Constructor for ReferenceSet taking a pointer to the Data Manager
- *
+ *
* Stores the pointer in private data. Gets the inventory. *
- *
+ *
* @param dataManager
*/
@SuppressWarnings("unchecked")
@@ -668,7 +669,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#getActiveRefSet()
*/
@@ -679,7 +680,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#setActiveRefSet
* (com.raytheon.edex.plugin.gfe.reference.ReferenceData)
@@ -720,7 +721,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#getAvailableSets
* ()
@@ -732,7 +733,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#emptyRefSet()
*/
@@ -743,7 +744,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.internal.IReferenceSetManager#fullRefSet()
*/
@Override
@@ -753,7 +754,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#loadRefSet(com
* .raytheon.edex.plugin.gfe.reference.ReferenceID)
@@ -807,7 +808,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Retrieves a list of ReferenceData corresponding to the referenceIDs
- *
+ *
* @param need
* the referenceIDs
* @return a List of ReferenceData
@@ -823,7 +824,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#saveActiveRefSet
* (com.raytheon.edex.plugin.gfe.reference.ReferenceID)
@@ -852,7 +853,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#saveRefSet(com
* .raytheon.edex.plugin.gfe.reference.ReferenceData)
@@ -902,7 +903,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#deleteRefSet(
* com.raytheon.edex.plugin.gfe.reference.ReferenceID)
@@ -935,7 +936,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.internal.IReferenceSetManager#undoRefSet()
*/
@Override
@@ -950,10 +951,10 @@ public class ReferenceSetManager implements IReferenceSetManager,
* set has changed. The bypassActiveCheck bypasses the checking for whether
* a change has occurred in the active ref set. This is only set for saving
* the active reference set to prevent extra work.
- *
+ *
* Updates the reference data cache. Can update the active ref set. Sends
* out inventory change notifications.
- *
+ *
* @param inventory
* @param additions
* @param deletions
@@ -1043,7 +1044,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#taperGrid(com
* .raytheon.edex.plugin.gfe.reference.ReferenceData, int)
@@ -1130,7 +1131,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#directionTaperGrid
* (com.raytheon.edex.plugin.gfe.reference.ReferenceData, java.lang.String)
@@ -1214,7 +1215,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#siteGridpoints
* (java.lang.String[], boolean)
@@ -1255,7 +1256,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#mySiteGridpoints
* ()
@@ -1267,7 +1268,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/**
* Returns the Discrepancy Area Id number
- *
+ *
* @return the Discrepancy Area Id number
*/
public int nextAreaIdNumber() {
@@ -1281,7 +1282,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.internal.IReferenceSetManager#toString()
*/
@Override
@@ -1291,7 +1292,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.internal.IReferenceSetManager#getMode()
*/
@Override
@@ -1301,7 +1302,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.internal.IReferenceSetManager#setMode(com.raytheon
* .viz.gfe.core.internal.ReferenceSetManager.RefSetMode)
@@ -1313,7 +1314,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.IReferenceSetManager#incomingRefSet(com.raytheon
* .edex.plugin.gfe.reference.ReferenceData,
@@ -1403,7 +1404,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.IReferenceSetManager#clearRefSet()
*/
@Override
@@ -1413,7 +1414,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.IReferenceSetManager#toggleRefSet()
*/
@Override
@@ -1425,7 +1426,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* addReferenceSetInvChangedListener
* (com.raytheon.viz.gfe.core.msgs.IReferenceSetInvChangedListener)
@@ -1438,7 +1439,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* removeReferenceSetInvChangedListener
* (com.raytheon.viz.gfe.core.msgs.IReferenceSetInvChangedListener)
@@ -1451,7 +1452,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.IReferenceSetManager#addReferenceSetChangedListener
* (com.raytheon.viz.gfe.core.msgs.IReferenceSetChangedListener)
@@ -1464,7 +1465,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* removeReferenceSetChangedListener
* (com.raytheon.viz.gfe.core.msgs.IReferenceSetChangedListener)
@@ -1477,7 +1478,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* addReferenceSetIDChangedListener
* (com.raytheon.viz.gfe.core.msgs.IReferenceSetIDChangedListener)
@@ -1490,7 +1491,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* removeReferenceSetIDChangedListener
* (com.raytheon.viz.gfe.core.msgs.IReferenceSetIDChangedListener)
@@ -1503,7 +1504,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* addEditAreaGroupInvChangedListener
* (com.raytheon.viz.gfe.core.msgs.IEditAreaGroupInvChangedListener)
@@ -1516,7 +1517,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @seecom.raytheon.viz.gfe.core.IReferenceSetManager#
* removeEditAreaGroupInvChangedListener
* (com.raytheon.viz.gfe.core.msgs.IEditAreaGroupInvChangedListener)
@@ -1529,7 +1530,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.IReferenceSetManager#handleQuickSet(int)
*/
@Override
@@ -1594,7 +1595,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.IReferenceSetManager#toggleQuickSetMode()
*/
@Override
@@ -1624,7 +1625,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.IReferenceSetManager#getQuickSetMode()
*/
@Override
@@ -1737,6 +1738,31 @@ public class ReferenceSetManager implements IReferenceSetManager,
}
}
+ /**
+ * Evaluate the query and return the usable edit area.
+ *
+ * @param query
+ * The query to be evaluated.
+ * @return The resulting edit area.
+ */
+ public ReferenceData evaluateQuery(String query) {
+ ReferenceData ea = null;
+
+ Map argMap = new HashMap();
+ argMap.put("expression", query);
+
+ IPythonExecutor executor = new QueryScriptExecutor(
+ "evaluate", argMap);
+ try {
+ ea = coordinator.submitSyncJob(executor);
+ } catch (Exception e) {
+ statusHandler.handle(Priority.ERROR,
+ "Failed to evaluate query: " + query, e);
+ }
+
+ return ea;
+ }
+
@Override
public boolean willRecurse(String name, String query) {
Map argMap = new HashMap();
@@ -1769,7 +1795,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see
* com.raytheon.viz.gfe.core.msgs.Message.IMessageClient#receiveMessage(
* com.raytheon.viz.gfe.core.msgs.Message)
@@ -1824,7 +1850,7 @@ public class ReferenceSetManager implements IReferenceSetManager,
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.core.msgs.ISpatialEditorTimeChangedListener#
* spatialEditorTimeChanged(java.util.Date)
*/
diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/zones/ZoneDbResource.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/zones/ZoneDbResource.java
index 0644cf1a8f..c4b883da11 100644
--- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/zones/ZoneDbResource.java
+++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/zones/ZoneDbResource.java
@@ -96,6 +96,7 @@ import com.vividsolutions.jts.io.WKBReader;
* ------------ ---------- ----------- --------------------------
* wldougher Initial creation
* Jul 11, 2011 9928 rferrel moveGroup now takes list of groups.
+ * Jun 24, 2013 2134 randerso Fixed NullPointerException in fitToCWA.
*
*
*
@@ -1317,7 +1318,6 @@ public class ZoneDbResource extends
query.toString(), MAP_DB, QueryLanguage.SQL);
if ((result != null) && (result.size() > 0)) {
WKBReader wkbReader = new WKBReader();
- cwaGeometry = wkbReader.read((byte[]) result.get(0)[0]);
Geometry geometry = null;
// Combine the geometries in the CWA into one geometry
for (Object[] row : result) {
@@ -1325,7 +1325,11 @@ public class ZoneDbResource extends
// areas w/o marine zones return a row containing null
if (wkb != null) {
geometry = wkbReader.read(wkb);
- cwaGeometry = cwaGeometry.union(geometry);
+ if (cwaGeometry == null) {
+ cwaGeometry = geometry;
+ } else {
+ cwaGeometry = cwaGeometry.union(geometry);
+ }
}
}
}
diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/SmartUtil.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/SmartUtil.java
index b44dda7594..3f83503148 100644
--- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/SmartUtil.java
+++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/SmartUtil.java
@@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
+ *
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
- *
+ *
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
- *
+ *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@@ -43,7 +43,7 @@ import com.raytheon.viz.gfe.ui.runtimeui.SelectionDlg;
/**
* Utilities for smart tools
- *
+ *
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
@@ -51,9 +51,10 @@ import com.raytheon.viz.gfe.ui.runtimeui.SelectionDlg;
* Feb 21, 2008 njensen Initial creation
* Dec 1, 2009 1426 ryu Add time range warning
* Nov 15, 2012 1298 rferrel Changes for non-blocking prcedures.
- *
+ * Jun 25, 2013 16065 ryu Passing outerLevel to smart tool job.
+ *
*
- *
+ *
* @author njensen
* @version 1.0
*/
@@ -66,7 +67,7 @@ public class SmartUtil {
* Checks if LD_PRELOAD is set in the environment. If not, jep may have
* issues importing modules. (Note that this presumes LD_PRELOAD was set
* correctly to point at the python .so file).
- *
+ *
* @return if LD_PRELOAD is set
*/
public static boolean isLdPreloadSet() {
@@ -80,9 +81,10 @@ public class SmartUtil {
}
public static SmartToolRequest buildSmartToolRequest(DataManager dm,
- PreviewInfo preview) {
+ PreviewInfo preview, boolean outerLevel) {
SmartToolRequest req = new SmartToolRequest();
req.setPreview(preview);
+ req.setOuterLevel(outerLevel);
return req;
}
@@ -114,7 +116,7 @@ public class SmartUtil {
private static void runToolNoVarDict(DataManager dm, String toolName) {
PreviewInfo pi = checkAndBuildPreview(dm, toolName);
if (pi != null) {
- SmartToolRequest req = buildSmartToolRequest(dm, pi);
+ SmartToolRequest req = buildSmartToolRequest(dm, pi, true);
if (req != null) {
SmartToolJob.enqueue(dm, req);
}
@@ -143,7 +145,8 @@ public class SmartUtil {
timeRange, editArea, emptyEditAreaFlag,
MissingDataMode.valueFrom(missingDataMode));
PreviewInfo pi = new PreviewInfo(editAction, passErrors, parm);
- final SmartToolRequest req = SmartUtil.buildSmartToolRequest(dm, pi);
+ final SmartToolRequest req = SmartUtil.
+ buildSmartToolRequest(dm, pi, false);
if (varDict != null) {
req.setVarDict(varDict);
diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolJob.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolJob.java
index 2165c3dfa4..0b58e7d93e 100644
--- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolJob.java
+++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolJob.java
@@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
+ *
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
- *
+ *
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
- *
+ *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@@ -46,18 +46,19 @@ import com.raytheon.viz.gfe.smarttool.Tool;
/**
* Job for running smart tools off the UI thread
- *
+ *
*
- *
+ *
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jan 19, 2010 njensen Initial creation
* Jan 18, 2013 1509 njensen Garbage collect after running tool
* Apr 03, 2013 1855 njensen Never dispose interpreters until shutdown
- *
+ * Jun 25, 2013 16065 ryu Clear undo parms list before tool execution
+ *
*
- *
+ *
* @author njensen
* @version 1.0
*/
@@ -141,6 +142,9 @@ public class SmartToolJob extends AbstractQueueJob {
progressJob.schedule();
IStatus pjResult = Status.CANCEL_STATUS;
try {
+ if (request.getOuterLevel()) {
+ dataMgr.getParmOp().clearUndoParmList();
+ }
Tool tool = new Tool(dataMgr.getParmManager(),
request.getPreview().getParm(),
ea.getItemName(), python);
@@ -202,7 +206,7 @@ public class SmartToolJob extends AbstractQueueJob {
/**
* Remove a job from the Data Manger's job list.
- *
+ *
* @param dataMgr
* - The job's data manager
* @param job
@@ -230,7 +234,7 @@ public class SmartToolJob extends AbstractQueueJob {
/**
* This manages the scheduling of jobs to service a Data Manger's requests.
- *
+ *
* @param dataMgr
* - Data Manger for the request
* @param request
@@ -283,7 +287,7 @@ public class SmartToolJob extends AbstractQueueJob {
* This returns an array of two integers the first is the number of Smart
* Tool Jobs being processed and the second is the number in the queue
* waiting to be processed.
- *
+ *
* @return cnts
*/
public static int[] getJobCount() {
@@ -303,7 +307,7 @@ public class SmartToolJob extends AbstractQueueJob {
/**
* Determine if there are any Smart Tool Jobs queued and/or being processed.
- *
+ *
* @return true when there are job(s)s queued or being processed otherwise
* false
*/
diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolRequest.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolRequest.java
index ec73eaead4..4f48fb3e1e 100644
--- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolRequest.java
+++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolRequest.java
@@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
+ *
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
- *
+ *
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
- *
+ *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@@ -27,16 +27,17 @@ import com.raytheon.viz.gfe.smarttool.PreviewInfo;
/**
* Request to run a smart tool off the UI thread
- *
+ *
*
- *
+ *
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jan 19, 2010 njensen Initial creation
- *
+ * Jun 25, 2013 16065 ryu Adding outerLevel attribute
+ *
*
- *
+ *
* @author njensen
* @version 1.0
*/
@@ -53,6 +54,8 @@ public class SmartToolRequest extends QueueJobRequest {
private Object result;
+ private boolean outerLevel;
+
public SmartToolRequest() {
super();
@@ -88,6 +91,14 @@ public class SmartToolRequest extends QueueJobRequest {
this.preview = preview;
}
+ public boolean getOuterLevel() {
+ return outerLevel;
+ }
+
+ public void setOuterLevel(boolean outerLevel) {
+ this.outerLevel = outerLevel;
+ }
+
public void requestComplete(Object result) {
this.result = result;
completedSemaphore.release();
diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolSelectionDlg.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolSelectionDlg.java
index deca1bd4f9..2646891061 100644
--- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolSelectionDlg.java
+++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/smarttool/script/SmartToolSelectionDlg.java
@@ -1,19 +1,19 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
+ *
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
- *
+ *
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
- *
+ *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
@@ -31,16 +31,17 @@ import com.raytheon.viz.gfe.ui.runtimeui.SelectionDlg;
/**
* Dynamic GUI for showing smart tools' Variable Lists and running the tools
- *
+ *
*
- *
+ *
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Feb 9, 2010 njensen Initial creation
- *
+ * Jun 25, 2013 16065 ryu Passing outerLevel to tool job
+ *
*
- *
+ *
* @author njensen
* @version 1.0
*/
@@ -54,14 +55,15 @@ public class SmartToolSelectionDlg extends SelectionDlg {
/*
* (non-Javadoc)
- *
+ *
* @see com.raytheon.viz.gfe.ui.runtimeui.SelectionDlg#run()
*/
@Override
public void run() {
PreviewInfo pi = SmartUtil.checkAndBuildPreview(dataMgr, name);
if (pi != null) {
- SmartToolRequest req = SmartUtil.buildSmartToolRequest(dataMgr, pi);
+ SmartToolRequest req = SmartUtil.
+ buildSmartToolRequest(dataMgr, pi, true);
if (req != null) {
String varDict = dataMgr.getSmartToolInterface()
.transformVarDict(getValues());
diff --git a/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml b/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml
index ff063d9038..441bc15cc6 100644
--- a/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml
+++ b/cave/com.raytheon.viz.grid/localization/styleRules/gridImageryStyleRules.xml
@@ -4169,6 +4169,14 @@
TPCSG
+ TPCSG-20
+ TPCSG-30
+ TPCSG-40
+ TPCSG-50
+ TPCSG-60
+ TPCSG-70
+ TPCSG-80
+ TPCSG-90
ft
@@ -4188,15 +4196,30 @@
-->
- TPCSG_61E2
- TPCSG_305E2
- TPCSG_274E2
- TPCSG_244E2
- TPCSG_213E2
- TPCSG_183E2
- TPCSG_152E2
- TPCSG_122E2
- TPCSG_91E2
+ TPCSG-61E2
+ TPCSG-91E2
+ TPCSG-122E2
+ TPCSG-152E2
+ TPCSG-183E2
+ TPCSG-213E2
+ TPCSG-244E2
+ TPCSG-274E2
+ TPCSG-305E2
+ TPCSG-335E2
+ TPCSG-366E2
+ TPCSG-396E2
+ TPCSG-457E2
+ TPCSG-427E2
+ TPCSG-488E2
+ TPCSG-518E2
+ TPCSG-549E2
+ TPCSG-579E2
+ TPCSG-610E2
+ TPCSG-640E2
+ TPCSG-671E2
+ TPCSG-701E2
+ TPCSG-732E2
+ TPCSG-762E2
%
@@ -4842,4 +4865,4 @@
-
\ No newline at end of file
+
diff --git a/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml b/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml
index ff71abbd4f..997811c16d 100644
--- a/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml
+++ b/cave/com.raytheon.viz.grid/localization/volumebrowser/FieldDisplayTypes.xml
@@ -47,15 +47,38 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/FFGVizGroupResource.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/FFGVizGroupResource.java
index 4c3a774cbe..9adfcc93d5 100644
--- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/FFGVizGroupResource.java
+++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/FFGVizGroupResource.java
@@ -35,7 +35,6 @@ import com.raytheon.uf.viz.core.rsc.IResourceDataChanged;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.ResourceList;
import com.raytheon.uf.viz.core.rsc.capabilities.AbstractCapability;
-import com.raytheon.viz.core.rsc.VizGroupResourceData;
/**
* FFG Group Resource class.
@@ -49,6 +48,8 @@ import com.raytheon.viz.core.rsc.VizGroupResourceData;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 19, 2012 1162 mpduff Initial creation.
+ * Jun 21, 2013 DR15394 mgamazaychikov Implement IResourceDataChanged and
+ * override resourceChanged method.
*
*
*
@@ -57,8 +58,8 @@ import com.raytheon.viz.core.rsc.VizGroupResourceData;
*/
public class FFGVizGroupResource extends
- AbstractVizResource implements
- IResourceDataChanged, IRefreshListener {
+ AbstractVizResource implements
+ IResourceDataChanged, IRefreshListener {
private final String NO_DATA = "No Data";
@@ -68,10 +69,11 @@ public class FFGVizGroupResource extends
* @param resourceData
* @param loadProperties
*/
- protected FFGVizGroupResource(VizGroupResourceData resourceData,
+ protected FFGVizGroupResource(FfgVizGroupResourceData resourceData,
LoadProperties loadProperties) {
super(resourceData, loadProperties);
dataTimes = new ArrayList();
+ this.resourceData.addChangeListener(this);
}
/*
@@ -189,7 +191,6 @@ public class FFGVizGroupResource extends
@Override
public void refresh() {
// TODO Auto-generated method stub
-
}
/*
@@ -200,8 +201,15 @@ public class FFGVizGroupResource extends
* .raytheon.uf.viz.core.rsc.IResourceDataChanged.ChangeType,
* java.lang.Object)
*/
- @Override
- public void resourceChanged(ChangeType type, Object object) {
- // TODO Auto-generated method stub
+ @Override
+ public void resourceChanged(ChangeType type, Object object) {
+ if ( object instanceof Object[]){
+ this.resourceData.getRscs().get(0).getResourceData().update(object);
+ }
+ else if (object instanceof Object){
+ ArrayList theObjectList = new ArrayList();
+ theObjectList.add(object);
+ this.resourceData.getRscs().get(0).getResourceData().update(theObjectList.toArray());
+ }
}
}
diff --git a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesAction.java b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesAction.java
index 53ac5a315f..b88a81f16a 100644
--- a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesAction.java
+++ b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesAction.java
@@ -38,6 +38,7 @@ import org.eclipse.core.commands.ExecutionException;
* ------------ ---------- ----------- --------------------------
* 6/27/06 lvenable Initial Creation.
* 02/05/2013 1578 rferrel Changes for non-blocking singleton TimeSeriesDlg.
+ * 6/8/2013 15980 wkwock Fix selected station not update
*
*
*
@@ -48,8 +49,10 @@ public class TimeSeriesAction extends AbstractHandler {
@Override
public Object execute(ExecutionEvent arg0) throws ExecutionException {
- TimeSeriesDlg.getInstance().open();
+ TimeSeriesDlg tsd = TimeSeriesDlg.getInstance();
+ tsd.open();
+ tsd.updateFromDisplayManager();
- return null;
+ return null;
}
}
diff --git a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDlg.java b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDlg.java
index 70017bfcb3..9d4024bf4f 100644
--- a/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDlg.java
+++ b/cave/com.raytheon.viz.hydro/src/com/raytheon/viz/hydro/timeseries/TimeSeriesDlg.java
@@ -122,6 +122,7 @@ import com.raytheon.viz.hydrocommon.util.StnClassSyncUtil;
* 05 Feb 2013 1578 rferrel Dialog made non-blocking and a singleton.
* 06 May 2013 1976 mpduff Code cleanup.
* 06 Jun 2013 2076 mpduff Fix station list selection and graph button enabling.
+ * 0 Jun 2013 15980 wkwock Fix selected station not update
*
*
* @author lvenable
@@ -2612,4 +2613,18 @@ public class TimeSeriesDlg extends CaveHydroSWTDialog {
protected void preOpened() {
super.preOpened();
}
+
+ /**
+ * In case user selected a different station in the Hydro perspective,
+ * update currentLid, etc
+ */
+ public void updateFromDisplayManager() {
+ HydroDisplayManager hdm = HydroDisplayManager.getInstance();
+ String newLid=hdm.getCurrentLid();
+ if (newLid!=null && !newLid.equalsIgnoreCase(currentLid)) {
+ updateAndOpen(newLid, this.displayGraph);
+ openGraph();
+ }
+ }
+
}
diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/RadarBiasTableDialog.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/RadarBiasTableDialog.java
index ea331c6c25..cfea9f1aa9 100644
--- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/RadarBiasTableDialog.java
+++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/RadarBiasTableDialog.java
@@ -63,6 +63,7 @@ import com.raytheon.viz.mpe.ui.radartable.ReadBiasTableParam;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 14, 2009 snaples Initial creation
+ * Jun 18, 2013 16053 snaples Removed reference to setRadarEditFlag
*
*
*
@@ -501,7 +502,6 @@ public class RadarBiasTableDialog extends Dialog {
rwrr.setMemSpanUsed((double) memspan);
rwrr.setRwBiasValUsed((double) editbias[i]);
IHFSDbGenerated.UpdateRWRadarResult(rwrr);
- MPEDataManager.getInstance().setRadarEditFlag(true);
} else {
continue;
}
diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/EditBiasDlg.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/EditBiasDlg.java
index 183b8498be..e27220e845 100644
--- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/EditBiasDlg.java
+++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/EditBiasDlg.java
@@ -53,6 +53,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* ------------ ---------- ----------- --------------------------
* Jul 27, 2009 2675 mpduff Initial creation
* Aug 13, 2009 2675 mpduff TIM changes added
+ * Jun 18, 2013 16053 snaples Removed reference to setRadarEditFlag
*
*
*
@@ -250,8 +251,6 @@ public class EditBiasDlg extends CaveSWTDialog {
+ (double) biasSlider.getSelection() / 100);
rwrr.setRwBiasValUsed((double) biasSlider.getSelection() / 100);
IHFSDbGenerated.UpdateRWRadarResult(rwrr);
-
- MPEDataManager.getInstance().setRadarEditFlag(true);
setReturnValue(new Double((double) biasSlider.getSelection() / 100));
}
}
diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/ReviewHourlyRadarDlg.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/ReviewHourlyRadarDlg.java
index 72de48a8dc..e2200424ae 100644
--- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/ReviewHourlyRadarDlg.java
+++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/hourlyradar/ReviewHourlyRadarDlg.java
@@ -95,6 +95,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Jul 22, 2009 2675 mpduff Initial creation
* Aug 13, 2009 2675 mpduff TIM changes added
* Nov 08, 2009 3232 mpduff Implement the precip gage overlay
+ * Jun 18, 2013 16053 snaples Removed reference to setRadarEditFlag
*
*
*
@@ -316,8 +317,6 @@ public class ReviewHourlyRadarDlg extends CaveSWTDialog implements
.updateIgnoreRadar(radId, dpaDate, ignoreRadar);
if (status == 0) {
System.err.println("Update not successful");
- } else {
- MPEDataManager.getInstance().setRadarEditFlag(true);
}
} catch (VizException e) {
System.err
diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/polygon/PolygonEditManager.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/polygon/PolygonEditManager.java
index e8d0935a29..0156455054 100644
--- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/polygon/PolygonEditManager.java
+++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/dialogs/polygon/PolygonEditManager.java
@@ -55,7 +55,12 @@ import com.raytheon.viz.mpe.ui.dialogs.polygon.RubberPolyData.PolygonEditAction;
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
- * Dec 3, 2012 mschenke Initial creation
+ * Dec 3, 2012 mschenke Initial creation
+ * July 9, 2013 #2172 bkowal Set a polygon edit flag whenever new polygon
+ * files are written.
+ * Jul 15, 2013 15963 snaples Removed polygon edit flag, and
+ * removed unneeded Constant for Backward compatibility.
+ *
*
*
*
@@ -141,15 +146,6 @@ public class PolygonEditManager {
}
}
- /**
- * This value is used as a multiplier in the file since the values before
- * this class existed were multiplied by this value due to incorrect
- * descaling in the UI class. It is expected that values in the
- * {@link RubberPolyData} are now actually set to precip values and not
- * scaled by 100*precipValue like before
- */
- private static final double BACKWARDS_COMPATIBILITY_VALUE = 100.0;
-
private final static Set listeners = new LinkedHashSet();
public static void registerListener(IPolygonEditsChangedListener listener) {
@@ -231,12 +227,11 @@ public class PolygonEditManager {
PolygonEditAction editAction = polyEdit.getEditAction();
DisplayFieldData subDrawSource = polyEdit.getSubDrawSource();
- double precipValue = polyEdit.getPrecipValue()
- * BACKWARDS_COMPATIBILITY_VALUE;
+ double precipValue = polyEdit.getPrecipValue();
Point[] editPoints = polyEdit.getEditPoints();
boolean visible = polyEdit.isVisible();
- String polyEditStr = editAction
+ String polyEditStr = editAction.toPrettyName()
+ " "
+ (subDrawSource != null ? subDrawSource.getCv_use()
: String.format("%6.2f", precipValue)) + " "
@@ -360,8 +355,7 @@ public class PolygonEditManager {
subData, -999.0, editPoints, visible,
persistent));
} else {
- double precipValue = Double.parseDouble(pieces[2])
- / BACKWARDS_COMPATIBILITY_VALUE;
+ double precipValue = Double.parseDouble(pieces[2]);
polygonEdits.add(new RubberPolyData(editAction, null,
precipValue, editPoints, visible, persistent));
}
diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/rsc/MPEFieldResource.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/rsc/MPEFieldResource.java
index 9bedb14729..9ef86a4890 100644
--- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/rsc/MPEFieldResource.java
+++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/rsc/MPEFieldResource.java
@@ -74,6 +74,9 @@ import com.raytheon.viz.mpe.ui.rsc.MPEFieldResourceData.MPEFieldFrame;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Nov 29, 2012 mschenke Initial creation
+ * May 28, 2013 15971 lbousaidi change the reading hour for SATPRE
+ * since the start time in the file is one
+ * hour less than the file time stamp.
*
*
*
@@ -317,9 +320,15 @@ public class MPEFieldResource extends
for (int i = 0; i < accumInterval; ++i) {
timeToLoad.setTime(currTime.getRefTime());
timeToLoad.add(Calendar.HOUR, -i);
-
+
+ if (displayField==DisplayFieldData.satPre) {
+ //SATPRE MPE file time stamp is the start time of the hour
+ //i.e. a 12z -13z product has a time stamp of 12z.
+ timeToLoad.add(Calendar.HOUR, -1);
+ }
+
XmrgFile file = MPEDisplayManager.getXmrgFile(displayField,
- timeToLoad.getTime());
+ timeToLoad.getTime());
try {
file.load();
} catch (IOException e) {
diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/MPEDataManager.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/MPEDataManager.java
index c819ed6b4d..5917669ba6 100644
--- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/MPEDataManager.java
+++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/MPEDataManager.java
@@ -77,6 +77,8 @@ import com.vividsolutions.jts.geom.Coordinate;
* Nov 6, 2008 1649 snaples Added new methods for getting and
* updating RawPP records
* Nov 24, 2008 1748 snaples Added getters to MPEGageData
+ * Jun 18, 2013 16053 snaples Removed methods set and getRadarEditFlag
+ * July 9, 2013 2172 bkowal Added a polygon edit flag
*
*
* @author randerso
@@ -670,7 +672,7 @@ public class MPEDataManager {
private ArrayList badGages = new ArrayList();
- private boolean radarEditFlag = false;
+ private boolean polygonEditFlag = false;
private Map dateMap;
@@ -746,8 +748,8 @@ public class MPEDataManager {
}
public Map getDateMap(boolean update) {
-
- getDates(update);
+
+ getDates(update);
return dateMap;
}
@@ -1484,19 +1486,12 @@ public class MPEDataManager {
}
}
- /**
- * @param radarEditFlag
- * the radarEditFlag to set
- */
- public void setRadarEditFlag(boolean radarEditFlag) {
- this.radarEditFlag = radarEditFlag;
+ public boolean isPolygonEditFlag() {
+ return polygonEditFlag;
}
- /**
- * @return the radarEditFlag
- */
- public boolean isRadarEditFlag() {
- return radarEditFlag;
+ public void setPolygonEditFlag(boolean polygonEditFlag) {
+ this.polygonEditFlag = polygonEditFlag;
}
/**
diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/RegenHrFlds.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/RegenHrFlds.java
index f22fd148cf..4f63a3d994 100644
--- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/RegenHrFlds.java
+++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/core/RegenHrFlds.java
@@ -55,6 +55,9 @@ import com.raytheon.viz.mpe.core.MPEDataManager.MPEGageData;
* Aug 8, 2012 15271 snaples Updated hourly slot
* Jan 02, 2013 15565 snaples Fixed problem with wrong time being sent to mpe_fieldgen
* Mar 14, 2013 1457 mpduff Fixed memory leak.
+ * Jun 18, 2013 16053 snaples Removed check for Radar Edit flag
+ * July 7, 2013 2172 bkowal Polygon Edits will now also trigger an hourly
+ * mpe field regeneration.
*
*
* @author snaples
@@ -85,8 +88,6 @@ public class RegenHrFlds {
double pp_value;
- private static final int NUM_HOURLY_SLOTS = 24;
-
private static final int NUM_6HOURLY_SLOTS = 4;
GagePPOptions options = new GagePPOptions();
@@ -164,6 +165,10 @@ public class RegenHrFlds {
int pCount = pseudoList.size();
num_gage_edit += pCount;
}
+
+ private boolean polygonsModified() {
+ return MPEDataManager.getInstance().isPolygonEditFlag();
+ }
public double round(final double x) {
double tmp = x + 0.5;
@@ -181,10 +186,9 @@ public class RegenHrFlds {
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getShell();
this.checkGages();
- boolean ref = MPEDataManager.getInstance().isRadarEditFlag();
/* Store any gage edits into the HourlyPP or PseudoGageVal table. */
- if (num_gage_edit > 0 || ref == true) {
- options.shef_duplicate = shef_dup.USE_REVCODE;
+
+ options.shef_duplicate = shef_dup.USE_REVCODE;
for (MPEGageData gData : gages.values()) {
@@ -270,7 +274,7 @@ public class RegenHrFlds {
}
}
- MPEDataManager.getInstance().setRadarEditFlag(false);
+ MPEDataManager.getInstance().setPolygonEditFlag(false);
/*-------------------------------------------------------------------------*/
/* Read Gage Data and store in structure */
/*-------------------------------------------------------------------------*/
@@ -299,7 +303,7 @@ public class RegenHrFlds {
MPEDataManager.getInstance().clearEditGages();
shell.setCursor(null);
- }
+
}
/**
diff --git a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java
index d80816d76a..ddb376e3a2 100644
--- a/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java
+++ b/cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/rsc/PlotResource2.java
@@ -91,6 +91,8 @@ import com.vividsolutions.jts.geom.Coordinate;
* Apr 21, 2009 chammack Refactor to common pointData model
* Feb 01, 2013 1567 njensen Refactor handling of updates
* May 14, 2013 1869 bsteffen Get plots working without dataURI
+ * May 23, 2013 14996 snaples Updated processUpdatedPlot to handle AWOS
+ * stations updates properly
* Jun 06, 2013 2072 bsteffen Fix concurrency problems when init is
* called before time matching is done.
* Jun 25, 2013 1869 bsteffen Fix plot sampling.
@@ -404,6 +406,17 @@ public class PlotResource2 extends
if (existingStation.plotImage != null) {
existingStation.plotImage.getImage().dispose();
existingStation.plotImage = null;
+ // DR14966
+ existingStation.rawMessage = null;
+ PlotInfo[] samplePlot = new PlotInfo[1];
+ samplePlot[0] = new PlotInfo();
+ samplePlot[0] = plot;
+ List list = new ArrayList();
+ list.add(samplePlot);
+ Params params = Params.SAMPLE_ONLY;
+ GetDataTask task = new GetDataTask(list, params);
+ generator.queueStation(task);
+ // End DR14996
}
boolean dup = false;
for (int i = 0; i < existingStation.info.length; i++) {
@@ -415,9 +428,9 @@ public class PlotResource2 extends
}
}
if (!dup) {
- existingStation.info = Arrays.copyOf(existingStation.info,
- existingStation.info.length + 1);
- existingStation.info[existingStation.info.length - 1] = plot;
+ // Added for DR14996
+ existingStation.info = Arrays.copyOf(existingStation.info, 1);
+ existingStation.info[0] = plot;
Arrays.sort(existingStation.info, new Comparator() {
@Override
public int compare(PlotInfo o1, PlotInfo o2) {
diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/interrogators/RadarGFMInterrogator.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/interrogators/RadarGFMInterrogator.java
index a5771b139a..a4b32dc0c0 100644
--- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/interrogators/RadarGFMInterrogator.java
+++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/interrogators/RadarGFMInterrogator.java
@@ -51,6 +51,7 @@ import com.vividsolutions.jts.geom.Envelope;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 03/04/2013 DCS51 zwang Initial creation
+ * 06/18/2013 DR16162 zwang Remove "wind behind"
*
*
*
@@ -185,24 +186,6 @@ public class RadarGFMInterrogator extends RadarGraphicInterrogator implements
pSpd = getSpeed(pU, pV);
pDir = getDir(pU, pV);
- // avg_speed
- String spdStr = currFeature
- .getValue(GFMAttributeIDs.AVG_SPEED.toString());
- if ((spdStr != null) && (spdStr.length() > 0)) {
- double spd = metersPerSecondToKnots
- .convert(new Double(spdStr));
- spdStr = formatter.format(spd);
- }
-
- // avg_direction
- String dirStr = currFeature
- .getValue(GFMAttributeIDs.AVG_DIRECTION.toString());
-
- if ((dirStr != null) && (dirStr.length() > 0)) {
- double dir = new Double(dirStr);
- dirStr = formatter.format(dir);
- }
-
// wsHarzard
String wsStr = currFeature
.getValue(GFMAttributeIDs.WSHAZARD.toString());
@@ -214,7 +197,6 @@ public class RadarGFMInterrogator extends RadarGraphicInterrogator implements
rval.append("Movement " + formatter.format(pSpd) + "kts@"
+ formatter.format(pDir) + "\n");
- rval.append("Wind Behind " + spdStr + "kts@" + dirStr + "\n");
rval.append("Wind Shear Hazard " + wsStr + "kts ");
}
diff --git a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java
index 6b4ae4321e..ce04cd41a0 100644
--- a/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java
+++ b/cave/com.raytheon.viz.radar/src/com/raytheon/viz/radar/rsc/graphic/RadarGraphicsPage.java
@@ -120,6 +120,7 @@ import com.vividsolutions.jts.geom.LineString;
* ------------ ---------- ----------- --------------------------
* Jan 8, 2009 chammack Initial creation
* 03/05/2013 DCS51 zwang Handle GFM product
+ * 06/24/2013 DR16162 zwang Remove "wind behind"
*
*
*
@@ -907,11 +908,9 @@ public class RadarGraphicsPage implements IRenderable {
int numPoints = currFeature.getPoints().size();
int numParam = currFeature.getParameters().size();
- String propU, propV, windU, windV, windX, windY;
+ String propU, propV, windX, windY;
double pU = 0.0;
double pV = 0.0;
- double wU = 0.0;
- double wV = 0.0;
double wX = 0.0;
double wY = 0.0;
@@ -929,14 +928,6 @@ public class RadarGraphicsPage implements IRenderable {
if ((propV != null) && (propV.length() > 0)) {
pV = metersPerSecondToKnots.convert(new Double(propV));
}
- windU = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDU.getName());
- if ((windU != null) && (windU.length() > 0)) {
- wU = metersPerSecondToKnots.convert(new Double(windU));
- }
- windV = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDV.getName());
- if ((windV != null) && (windV.length() > 0)) {
- wV = metersPerSecondToKnots.convert(new Double(windV));
- }
windX = currFeature.getValue(GFMPacket.GFMAttributeIDs.WINDBEHINDX.getName());
if ((windX != null) && (windX.length() > 0)) {
wX = Float.parseFloat(windX);
@@ -946,6 +937,13 @@ public class RadarGraphicsPage implements IRenderable {
wY = Float.parseFloat(windY);
}
+ // Get the nearest point on the MIGFA front to the wind behind point
+ // Plot front movement arrow at this point
+ Coordinate windBehind = new Coordinate(wX, wY);
+ Coordinate plotPoint = getPlotPoint(currFeature, windBehind);
+ wX = plotPoint.x;
+ wY = plotPoint.y;
+
// Prop wind arrow
PlotObject poWind = new PlotObject();
PointWindDisplay barb = new PointWindDisplay(imgSize * 0.4, 0.5, 2, 0);
@@ -964,26 +962,11 @@ public class RadarGraphicsPage implements IRenderable {
IImage img = this.target.initializeRaster(new IODataPreparer(imgBuf, UUID.randomUUID().toString(), 0), null);
poWind.image = img;
- // Wind barb behind front
- PlotObject wWind = new PlotObject();
- PointWindDisplay barb1 = new PointWindDisplay(imgSize * 0.4, 0.5, 2, 0);
- barb1.setImageParameters(imgSize, imgSize, 255, 255, 255, 1);
- barb1.setColor(this.color);
- barb1.setWind(wU, wV, false);
- BufferedImage imgBuf1 = barb1.getWindImage(false, DisplayType.BARB, 1);
- IImage img1 = this.target.initializeRaster(new IODataPreparer(imgBuf1, UUID.randomUUID().toString(), 0), null);
- wWind.image = img1;
-
ReferencedCoordinate rc = referencedGfmCoord(wX, wY);
try {
poWind.coord = rc.asPixel(this.descriptor.getGridGeometry());
poWind.pixelOffset = new int[] { 0, 0 };
images.add(poWind);
-
- wWind.coord = rc.asPixel(this.descriptor.getGridGeometry());
- wWind.pixelOffset = new int[] { 0, 0 };
- images.add(wWind);
-
} catch (Exception e) {
throw new VizException("Unable to transform coordinates", e);
}
@@ -1504,4 +1487,38 @@ public class RadarGraphicsPage implements IRenderable {
this.gridGeometry, Type.GRID_CENTER);
}
+ /**
+ * Gets the nearest point from GFM front to wind behind point to plot
+ * front movement arrow
+ *
+ * @param AreaComponent
+ * @param Coordinate
+ * @return Coordinate
+ *
+ */
+ private Coordinate getPlotPoint(AreaComponent currFeature, Coordinate windBehind) {
+ Coordinate point = new Coordinate();
+ double minDist = Double.MAX_VALUE;
+
+ int numPoints = currFeature.getPoints().size();
+ double x1 = windBehind.x;
+ double y1 = windBehind.y;
+ double x2 = 0.0;
+ double y2 = 0.0;
+ double dist = 0.0;
+
+ for (int k = 0; k < numPoints; k++) {
+ x2 = currFeature.getPoints().get(k).getCoordinate1();
+ y2 = currFeature.getPoints().get(k).getCoordinate2();
+ dist = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
+ if (dist < minDist) {
+ point.x = x2;
+ point.y = y2;
+ minDist = dist;
+ }
+ }
+
+ return point;
+ }
+
}
diff --git a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatResource.java b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatResource.java
index beee2420f1..67dbd6040f 100644
--- a/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatResource.java
+++ b/cave/com.raytheon.viz.satellite/src/com/raytheon/viz/satellite/rsc/SatResource.java
@@ -38,8 +38,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.datum.PixelInCell;
import com.raytheon.uf.common.colormap.IColorMap;
-import com.raytheon.uf.common.colormap.prefs.ColorMapParameters;
-import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord;
import com.raytheon.uf.common.dataplugin.satellite.units.SatelliteUnits;
@@ -59,6 +57,7 @@ import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.DrawableImage;
import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.IMeshCallback;
+import com.raytheon.uf.common.colormap.prefs.ColorMapParameters;
import com.raytheon.uf.viz.core.drawables.PaintProperties;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.map.MapDescriptor;
@@ -67,6 +66,7 @@ import com.raytheon.uf.viz.core.rsc.IResourceDataChanged;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.capabilities.ColorMapCapability;
import com.raytheon.uf.viz.core.rsc.hdf5.ImageTile;
+import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences;
import com.raytheon.uf.viz.core.style.ParamLevelMatchCriteria;
import com.raytheon.uf.viz.core.style.StyleManager;
import com.raytheon.uf.viz.core.style.StyleRule;
@@ -98,6 +98,7 @@ import com.raytheon.viz.satellite.SatelliteConstants;
* - AWIPS2 Baseline Repository --------
* 07/17/2012 798 jkorman Use decimationLevels from SatelliteRecord. Removed hard-coded
* data set names.
+ * 06/14/2013 DR 16070 jgerth Support for sampling from data mapping
*
*
* @author chammack
@@ -244,6 +245,7 @@ public class SatResource extends
colorMapParameters.setColorMapMin(0.0f);
colorMapParameters.setColorMapMax(255.0f);
}
+
if (unit instanceof GenericPixel) {
// Derived parameter data will be signed
colorMapParameters.setDataMin(-128.0f);
@@ -255,8 +257,8 @@ public class SatResource extends
colorMapParameters.setColorMapMin(0.0f);
colorMapParameters.setColorMapMax(252.0f);
} else {
- colorMapParameters.setDataMin(0.0f);
- colorMapParameters.setDataMax(255.0f);
+ colorMapParameters.setDataMin(0.0f);
+ colorMapParameters.setDataMax(255.0f);
}
if (colorMap != null) {
@@ -404,11 +406,24 @@ public class SatResource extends
DataMappingPreferences dataMapping = cmp.getDataMapping();
if (dataMapping != null) {
// convert to pixel value for checking labels
- double pixelValue = cmp.getDisplayToDataConverter().convert(
- value.doubleValue());
- // if the pixel value matches the data mapping entry use that
- // label instead
- String label = dataMapping.getLabelValueForDataValue(pixelValue);
+ // START DR 16070 fix 1
+ double pixelValue = value.doubleValue();
+ if (cmp.getDisplayToDataConverter() != null)
+ pixelValue = cmp.getDisplayToDataConverter().convert(
+ value.doubleValue());
+ // if the pixel value matches the data mapping entry use that
+ // label instead
+ String label = null;
+ String gfs = null;
+ if (sampleRange != null) {
+ gfs = sampleRange.getFormatString();
+ }
+ if (gfs != null && gfs.length() < 3) {
+ label = dataMapping.getLabelValueForDataValue(pixelValue, gfs);
+ } else {
+ label = dataMapping.getLabelValueForDataValue(pixelValue);
+ }
+ // END fix 1
if (label != null) {
return label;
}
@@ -419,6 +434,16 @@ public class SatResource extends
// counts was not an acceptable unit.
String unitString = unit == null ? ""
: unit.toString().equals("bit") ? "counts" : unit.toString();
+ // START DR 16070 fix 2
+ if (dataMapping != null)
+ if (dataMapping.getEntries() != null)
+ if (dataMapping.getEntries().get(0) != null)
+ if (dataMapping.getEntries().get(0).getOperator() != null)
+ if (unitString.equals("")
+ && dataMapping.getEntries().get(0).getOperator().equals("i")
+ && dataMapping.getEntries().get(0).getLabel() != null)
+ unitString = dataMapping.getEntries().get(0).getLabel();
+ // END fix 2
double f1 = Double.NEGATIVE_INFINITY;
double f2 = Double.POSITIVE_INFINITY;
if (sampleRange != null) {
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/FontSizeCfg.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/FontSizeCfg.java
new file mode 100644
index 0000000000..b106539fa9
--- /dev/null
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/FontSizeCfg.java
@@ -0,0 +1,61 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.viz.texteditor.dialogs;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.raytheon.uf.common.serialization.ISerializableObject;
+
+/**
+ * TODO Add Description
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 07, 2013 DR 15733 Xiaochuan Initial creation
+ *
+ *
+ *
+ * @author XHuang
+ * @version 1.0
+ */
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.NONE)
+public class FontSizeCfg implements ISerializableObject {
+ @XmlElements({ @XmlElement(name = "SizeButtonCfg", type = SizeButtonCfg.class) })
+ private List buttons;
+
+ public List getButtons() {
+ return buttons;
+ }
+
+ public void setButtons(List buttons) {
+ this.buttons = buttons;
+ }
+}
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/RGBColorAdapter.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/RGBColorAdapter.java
new file mode 100644
index 0000000000..d394e603ca
--- /dev/null
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/RGBColorAdapter.java
@@ -0,0 +1,137 @@
+package com.raytheon.viz.texteditor.dialogs;
+
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+/**
+ * TODO Add Description
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 24, 2013 DR 15733 Xiaochuan Modified to have the functionality that can
+ * handle color of strings like "red", "green",...
+ *
+ *
+ *
+ * @author XHuang
+ * @version 1.0
+ */
+
+import org.eclipse.swt.graphics.RGB;
+import com.raytheon.uf.viz.core.RGBColors;
+
+public class RGBColorAdapter extends XmlAdapter {
+
+ private final RGB DEFAULT_COLOR = new RGB(255, 0, 0);
+
+ @Override
+ public String marshal(RGB rgbColor) throws Exception {
+ // Set rgb to color string go here if save to file
+
+ int red = DEFAULT_COLOR.red;
+ int green = DEFAULT_COLOR.green;
+ int blue = DEFAULT_COLOR.blue;
+
+ if(rgbColor != null) {
+ red = rgbColor.red;
+ green = rgbColor.green;
+ blue = rgbColor.blue;
+ }
+
+ String rgbStringValue = buildRGBStringValue(red, green, blue);
+
+ return rgbStringValue;
+ }
+
+ @Override
+ public RGB unmarshal(String colorStringValue) throws Exception {
+ int red = 255, green = 0, blue = 0;
+ RGB rgb = null;
+ String colorString = colorStringValue.trim();
+
+ if(colorStringValue == null || colorString.trim().length() == 0)
+ return DEFAULT_COLOR;
+
+ int sz = colorString.split(",").length;
+ if( colorString.split(",").length == 1) {
+ System.out.println(" Convert string color "
+ + colorString + ",,,");
+ rgb = RGBColors.getRGBColor(colorString);
+
+ }
+ else {
+ int[] colorArray = parseStringToIntArray(colorString);
+ if(colorArray != null) {
+ red = colorArray[0];
+ green = colorArray[1];
+ blue = colorArray[2];
+ rgb = new RGB(red, green, blue);
+ }
+ }
+
+ return rgb;
+ }
+
+ private int[] parseStringToIntArray(String colorStringValue) {
+ boolean isStringValid = false;
+ int beginIndex = colorStringValue.indexOf('{');
+ int endIndex = colorStringValue.indexOf('}');
+ String rgbstring = null;
+ try {
+ if( beginIndex > -1 && endIndex > -1)
+ rgbstring = colorStringValue.substring(beginIndex+1, endIndex);
+ else
+ rgbstring = colorStringValue;
+
+ } catch(IndexOutOfBoundsException iobe) {
+ //do nothing
+ }
+
+ if(rgbstring == null)
+ return null;
+ String[] rgbStringArray = rgbstring.split(",");
+ if(rgbStringArray.length != 3)
+ return null;
+
+ int[] rgbIntArray = new int[3];
+ try {
+ for(int i=0; i<3; i++) {
+ int rgbIntValue = Integer.parseInt(rgbStringArray[i].trim());
+ if(!isRGBValid(rgbIntValue)) {
+ return null;
+ }
+ rgbIntArray[i] = rgbIntValue;
+ }
+ isStringValid = true;
+ } catch(NumberFormatException nfe) {
+ // do nothing
+ }
+
+ if(!isStringValid)
+ return null;
+ return rgbIntArray;
+ }
+
+ /*
+ * This helper method is for future checking implementation
+ */
+ private boolean isRGBValid(int rgbIntValue) {
+ return true;
+ }
+
+ private String buildRGBStringValue(int red, int green, int blue) {
+ StringBuilder strBuilder = new StringBuilder(20);
+// strBuilder.append("RGB {")
+
+ strBuilder.append(red)
+ .append(", ")
+ .append(green)
+ .append(", ")
+ .append(blue)
+ .append("}");
+ return strBuilder.toString();
+ }
+}
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/SizeButtonCfg.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/SizeButtonCfg.java
new file mode 100644
index 0000000000..3dd073a91c
--- /dev/null
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/SizeButtonCfg.java
@@ -0,0 +1,71 @@
+package com.raytheon.viz.texteditor.dialogs;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+
+import com.raytheon.uf.common.serialization.ISerializableObject;
+
+/**
+ * TODO Add Description
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 07, 2013 DR 15733 Xiaochuan Initial creation
+ *
+ *
+ *
+ * @author XHuang
+ * @version 1.0
+ */
+
+@XmlAccessorType(XmlAccessType.NONE)
+public class SizeButtonCfg implements ISerializableObject {
+ @XmlElement(name = "LabelName")
+ private String labelName;
+
+ @XmlElement(name = "SizeEnabled")
+ private boolean sizeEnabled;
+
+ @XmlElement(name = "FontSize")
+ private int fontSize;
+
+ @XmlElement(name = "Selected")
+ private boolean selected;
+
+ public String getLabelName() {
+ return labelName;
+ }
+
+ public void setLabelName(String labelName) {
+ this.labelName = labelName;
+ }
+
+ public boolean isSizeEnabled() {
+ return sizeEnabled;
+ }
+
+ public void setSizeEnabled(boolean sizeEnabled) {
+ this.sizeEnabled = sizeEnabled;
+ }
+
+ public int getFontSize() {
+ return fontSize;
+ }
+
+ public void setFontSize(int fontSize) {
+ this.fontSize = fontSize;
+ }
+
+ public boolean isSelected() {
+ return selected;
+ }
+
+ public void setSelected(boolean selected) {
+ this.selected = selected;
+ }
+}
\ No newline at end of file
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextColorElement.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextColorElement.java
new file mode 100644
index 0000000000..3bb95d7a35
--- /dev/null
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextColorElement.java
@@ -0,0 +1,58 @@
+package com.raytheon.viz.texteditor.dialogs;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import com.raytheon.uf.common.serialization.ISerializableObject;
+
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ * TODO Add Description
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 24, 2013 DR 15733 Xiaochuan Initial creation
+ *
+ *
+ *
+ * @author XHuang
+ * @version 1.0
+ */
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement(name = "TextColorElement")
+public class TextColorElement implements ISerializableObject {
+
+ @XmlAttribute
+ @XmlJavaTypeAdapter(RGBColorAdapter.class)
+ private RGB color;
+
+ @XmlAttribute
+ private String paramName;
+
+ public RGB getColor() {
+ return color;
+ }
+
+ public void setColor(RGB color) {
+ this.color = color;
+ }
+
+ public String getParamName() {
+ return paramName;
+ }
+
+ public void setParamName(String paramName) {
+ this.paramName = paramName;
+ }
+
+}
\ No newline at end of file
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextColorsCfg.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextColorsCfg.java
new file mode 100644
index 0000000000..17af89845c
--- /dev/null
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextColorsCfg.java
@@ -0,0 +1,66 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.viz.texteditor.dialogs;
+
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.raytheon.uf.common.serialization.ISerializableObject;
+
+/**
+ * TODO Add Description
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jun 15, 2013 DR 15733 Xiaochuan Initial creation
+ *
+ *
+ *
+ * @author XHuang
+ * @version 1.0
+ */
+@XmlRootElement(name = "textColorsCfg")
+@XmlAccessorType(XmlAccessType.NONE)
+public class TextColorsCfg implements ISerializableObject {
+ @XmlElements({ @XmlElement(name = "TextColorElement", type = TextColorElement.class) })
+ private List colorElements;
+
+ public List getTextColorElements() {
+ return colorElements;
+ }
+
+ public void setTextColorElements(List colorElements) {
+ this.colorElements = colorElements;
+ }
+
+
+
+
+
+}
diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java
index 5794d32966..4877425341 100644
--- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java
+++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java
@@ -86,6 +86,7 @@ import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.FontMetrics;
@@ -141,6 +142,7 @@ import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.edex.decodertools.time.TimeTools;
import com.raytheon.uf.edex.services.textdbsrv.IQueryTransport;
import com.raytheon.uf.edex.wmo.message.WMOHeader;
+// import com.raytheon.uf.viz.core.RGBColors;
import com.raytheon.uf.viz.core.VizApp;
import com.raytheon.uf.viz.core.auth.UserController;
import com.raytheon.uf.viz.core.exception.VizException;
@@ -322,6 +324,11 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox;
* 31JAN2013 1568 rferrel Spell checker now tied to this dialog instead of parent.
* 26Apr2013 16123 snaples Removed setFocus to TextEditor in postExecute method.
* 07Jun2013 1981 mpduff Add user id to OUPRequest as it is now protected.
+ * 20Jun2013 15733 XHuang Add functionalities that get Font size, Text colors from
+ * *.xml files in localization;
+ * add selection listener to catch the highlight words and
+ * set the highlight colors.
+ *
*
*
* @author lvenable
@@ -368,6 +375,11 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
* System colro to use for foreground color when an obs is updated.
*/
private static final int UPDATE_FG = SWT.COLOR_WHITE;
+
+ private final int HIGHLIGHT_BG = SWT.COLOR_RED;
+
+// Color red = shell.getDisplay().getSystemColor(SWT.COLOR_RED);
+// Color black = shell.getDisplay().getSystemColor(SWT.COLOR_BLACK);
/**
* The length of BEGIN_ELEMENT_TAG.
@@ -779,19 +791,19 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
/**
* Small font menu item.
*/
- private MenuItem smallFontItem;
+// private MenuItem smallFontItem;
/**
* Medium font menu item.
*/
- private MenuItem mediumFontItem;
+ // private MenuItem mediumFontItem;
/**
* Large font menu item.
*/
- private MenuItem largeFontItem;
+// private MenuItem largeFontItem;
- /**
+ /**
* Overstrike (overwrite) menu item.
*/
private MenuItem overStrikeItem;
@@ -1005,21 +1017,16 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
* Styled text editor.
*/
private StyledText textEditor;
-
+
/**
- * Small font.
+ * default font
*/
- private Font smlFont;
-
+ private Font dftFont;
+
/**
- * Medium font.
+ * default funt size.
*/
- private Font medFont;
-
- /**
- * Large font.
- */
- private Font lrgFont;
+ private final int DEFAULT_FUNT_SIZE = 11;
/**
* Composite containing the editor buttons.
@@ -1292,12 +1299,12 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
*/
private static final String[] popupItems = { "Select All", "Cut", "Copy",
"Paste" };
-
+
/**
* Currently active popupItems.
*/
private static final boolean[] isPopItemDefault = { true, false, true,
- false };
+ false };
/**
* Indictes this instance of dialog if for a warnGen.
@@ -1375,6 +1382,14 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
* needs to be done.
*/
private boolean isPreviousLineWrapped;
+
+ private Color textForeground;
+ private Color textBackground;
+ private Color highlightForeground;
+ private Color highlightBackground;
+
+// protected Color color;
+
/**
* Constructor with additional cave style rules
@@ -1470,14 +1485,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
*/
@Override
protected void initializeComponents(final Shell shell) {
- Display display = getDisplay();
clipboard = new Clipboard(getDisplay());
- // Set the fonts.
- smlFont = new Font(display, "Courier", 9, SWT.NORMAL);
- medFont = new Font(display, "Courier", 11, SWT.NORMAL);
- lrgFont = new Font(display, "Courier", 13, SWT.NORMAL);
-
if (textWorkstationFlag || isWarnGenDlg) {
shell.addShellListener(new ShellAdapter() {
@Override
@@ -2041,9 +2050,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
Menu fontSizeSubMenu = new Menu(shell, SWT.DROP_DOWN);
fontSizeMenuItem.setMenu(fontSizeSubMenu);
-
createFontSizeSubMenu(fontSizeSubMenu);
-
+
// ------------------------------
// Create overstrike menu item
// ------------------------------
@@ -2864,7 +2872,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
private void createAutoWrapSubMenu(Menu autoWrapSubMenu) {
AutoWrapCfg autoWrapcfg = getAutoWrapCfg();
for (WrapButtonCfg buttonCfg : autoWrapcfg.getButtons()) {
- MenuItem item = new MenuItem(autoWrapSubMenu, SWT.RADIO);
+ MenuItem item = new MenuItem(autoWrapSubMenu, SWT.RADIO);
item.setText(buttonCfg.getLabelName());
item.setSelection(buttonCfg.isSelected());
item.setData(buttonCfg);
@@ -2952,44 +2960,113 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
* The font size sub menu.
*/
private void createFontSizeSubMenu(Menu fontSizeSubMenu) {
- smallFontItem = new MenuItem(fontSizeSubMenu, SWT.RADIO);
- smallFontItem.setText("Small");
- smallFontItem.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent event) {
- if (smallFontItem.getSelection()) {
- textEditor.setFont(smlFont);
- headerTF.setFont(smlFont);
- }
+ int selectFontSize = DEFAULT_FUNT_SIZE;
+
+ FontSizeCfg fontSizeCfg = getFontSizeCfg();
+ for (SizeButtonCfg buttonCfg : fontSizeCfg.getButtons()) {
+ MenuItem item = new MenuItem(fontSizeSubMenu, SWT.RADIO);
+ item.setText(buttonCfg.getLabelName());
+ item.setSelection(buttonCfg.isSelected());
+ item.setData(buttonCfg);
+ if (buttonCfg.isSizeEnabled() && buttonCfg.isSelected()) {
+ selectFontSize = buttonCfg.getFontSize();
+ item.setSelection(true);
+ setDefaultFont(selectFontSize);
}
- });
-
- mediumFontItem = new MenuItem(fontSizeSubMenu, SWT.RADIO);
- mediumFontItem.setText("Medium");
- mediumFontItem.setSelection(true);
- mediumFontItem.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent event) {
- if (mediumFontItem.getSelection()) {
- textEditor.setFont(medFont);
- headerTF.setFont(medFont);
+
+ item.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ MenuItem item = (MenuItem) event.getSource();
+ if (item.getSelection()) {
+ int selectFontSize = ( (SizeButtonCfg) item.getData()).getFontSize();
+ setDefaultFont(selectFontSize);
+
+ textEditor.setFont(dftFont);
+ headerTF.setFont(dftFont);
+ }
}
- }
- });
-
- largeFontItem = new MenuItem(fontSizeSubMenu, SWT.RADIO);
- largeFontItem.setText("Large");
- largeFontItem.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent event) {
- if (largeFontItem.getSelection()) {
- textEditor.setFont(lrgFont);
- headerTF.setFont(lrgFont);
- }
- }
- });
+ });
+ }
+
}
+ private FontSizeCfg getFontSizeCfg() {
+ FontSizeCfg fontSizeCfg = null;
+
+ try {
+ IPathManager pm = PathManagerFactory.getPathManager();
+ File path = pm.getStaticFile("textws/gui/FontSizeCfg.xml");
+ fontSizeCfg = JAXB.unmarshal(path, FontSizeCfg.class);
+
+ } catch (Exception e) {
+ IUFStatusHandler statusHandler = UFStatus
+ .getHandler(TextEditorDialog.class);
+ statusHandler.handle(Priority.ERROR,
+ "Unable to parse Autowrap menu configuration.", e);
+ fontSizeCfg = new FontSizeCfg();
+
+ }
+
+ // Perform Sanity Checks on configuration.
+ StringBuilder message = new StringBuilder();
+
+ // Check buttonCfg values.
+ int selectionCnt = 0;
+ String selectionLabel = null;
+ if (fontSizeCfg.getButtons() != null) {
+ for (SizeButtonCfg buttonCfg : fontSizeCfg.getButtons()) {
+ if (buttonCfg.isSelected()) {
+ ++selectionCnt;
+ if (selectionCnt == 1) {
+ selectionLabel = buttonCfg.getLabelName();
+ } else {
+ buttonCfg.setSelected(false);
+ }
+ }
+
+ if (buttonCfg.isSizeEnabled()) {
+ int fntSize = buttonCfg.getFontSize();
+ if (fntSize <= 0) {
+ message.append("Item \"")
+ .append(buttonCfg.getLabelName())
+ .append("\" bad fntSize value (")
+ .append(buttonCfg.getFontSize())
+ .append(") changing to ")
+ .append(DEFAULT_FUNT_SIZE).append("\n");
+ buttonCfg.setFontSize(DEFAULT_FUNT_SIZE);
+ }
+ }
+ }
+
+ if (selectionCnt == 0 && fontSizeCfg.getButtons().size() > 0) {
+ SizeButtonCfg buttonCfg = fontSizeCfg.getButtons().get(0);
+ message.append("No button selected. Selecting top item \"")
+ .append(buttonCfg.getLabelName()).append("\"\n");
+ buttonCfg.setSelected(true);
+ } else if (selectionCnt > 1) {
+ message.append(selectionCnt)
+ .append(" items selected; will select item \"")
+ .append(selectionLabel).append("\"\n");
+ }
+
+ if (message.length() > 0) {
+ message.insert(0, "FontSize problem(s): ");
+ IUFStatusHandler statusHandler = UFStatus
+ .getHandler(TextEditorDialog.class);
+ statusHandler.handle(Priority.PROBLEM, message.toString());
+ }
+ }
+
+ return fontSizeCfg;
+
+ }
+
+ public void setDefaultFont(int fontSize) {
+ dftFont = new Font(getDisplay(), "Courier", fontSize, SWT.NORMAL);
+
+ }
+
/**
* Initialize the components and put them on the display.
*/
@@ -3030,7 +3107,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
displayAfosBrowser();
}
});
-
+
// Add the Load History button.
rd = new RowData(BUTTON_WIDTH, BUTTON_HEIGHT);
loadHistoryBtn = new Button(topBtnRowComp, SWT.PUSH);
@@ -3561,7 +3638,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
headerTF = new Text(headerTFComp, SWT.BORDER | SWT.MULTI
| SWT.READ_ONLY);
headerTF.setLayoutData(gd);
- headerTF.setFont(medFont);
+
+ headerTF.setFont(dftFont);
headerTF.setEditable(false);
headerTFComp.layout();
@@ -3727,13 +3805,16 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
textEditorComp = new Composite(shell, SWT.NONE);
GridLayout gridLayout = new GridLayout(1, false);
+ TextColorsCfg textColorCfg = null;
+
textEditorComp.setLayout(gridLayout);
textEditorComp.setLayoutData(gd);
textEditor = new StyledText(textEditorComp, SWT.BORDER | SWT.MULTI
| SWT.V_SCROLL | SWT.H_SCROLL);
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- textEditor.setFont(medFont);
+ textEditor.setFont(dftFont);
+
GC gc = new GC(textEditor);
FontMetrics fm = gc.getFontMetrics();
gc.dispose();
@@ -3745,6 +3826,31 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
textEditor.setEditable(false);
airportToolTip = new DefaultToolTip(textEditor, SWT.DEFAULT, true);
textEditor.setKeyBinding(SWT.INSERT, SWT.NULL); // DR 7826
+
+ textColorCfg = getTextColorCfg();
+ setDefaultTextColor(textColorCfg);
+ textEditor.setForeground(textForeground);
+ textEditor.setBackground(textBackground);
+
+ textEditor.addSelectionListener(new SelectionListener() {
+ @Override
+ public void widgetDefaultSelected(SelectionEvent e) {
+ System.out.println("\ntextEditor default selection event --" + e.toString());
+ }
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+
+ StyledText stylText = (StyledText) e.getSource();
+
+ // String slctText = stylText.getSelectionText();
+ // int length = slctText.length();
+
+ stylText.setSelectionBackground(highlightBackground);
+ stylText.setSelectionForeground(highlightForeground);
+
+ }
+ });
textEditor.addKeyListener(new KeyAdapter() {
@Override
@@ -3810,8 +3916,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
public void verifyKey(VerifyEvent event) {
// Ignore edit keys when not in edit mode.
if (textEditor.getEditable() == false) {
- return;
- }
+ return;
+ }
if (event.keyCode == SWT.DEL || event.keyCode == SWT.BS
|| event.keyCode == SWT.SHIFT) {
// Do nothing...
@@ -3911,7 +4017,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
}
if (e.button == 3) {
- processPopup();
+ processPopup();
}
}
@@ -3923,51 +4029,130 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
});
}
+ private TextColorsCfg getTextColorCfg() {
+ TextColorsCfg textColorsCfg = null;
+
+ try {
+ IPathManager pm = PathManagerFactory.getPathManager();
+ File path = pm.getStaticFile("textws/gui/TextColorsCfg.xml");
+ textColorsCfg = JAXB.unmarshal(path, TextColorsCfg.class);
+
+ } catch (Exception e) {
+ IUFStatusHandler statusHandler = UFStatus
+ .getHandler(TextEditorDialog.class);
+ statusHandler.handle(Priority.ERROR,
+ "Unable to parse TextColors configuration.", e);
+ textColorsCfg = new TextColorsCfg();
+
+ }
+
+ // Perform Sanity Checks on configuration.
+ StringBuilder message = new StringBuilder();
+
+ for (TextColorElement textElm : textColorsCfg.getTextColorElements()) {
+ String prmtName = textElm.getParamName();
+ if (prmtName == null) {
+ message.append("Item \"paramName\" problem!\n");
+
+ }
+
+ if( textElm.getColor() == null ) {
+ message.append("Item \"color\" data enter problem!\n");
+ }
+
+ if (message.length() > 0) {
+ message.insert(0, "TextColorsCfg broblem(s): ");
+ IUFStatusHandler statusHandler = UFStatus
+ .getHandler(TextEditorDialog.class);
+ statusHandler.handle(Priority.PROBLEM, message.toString());
+ }
+
+ }
+
+ return textColorsCfg;
+
+ }
+
+ private void setDefaultTextColor(TextColorsCfg clrCfg) {
+
+ for (TextColorElement textElm : clrCfg.getTextColorElements()) {
+
+ String paramName = textElm.getParamName().trim();
+ if( paramName.equalsIgnoreCase("textBG")) {
+ if ( textElm.getColor() != null)
+ textBackground = new Color(shell.getDisplay(), textElm.getColor());
+ else
+ textBackground = shell.getDisplay().getSystemColor(UPDATE_BG);
+
+ }
+ else if( paramName.equalsIgnoreCase("textFG")) {
+ if ( textElm.getColor() != null)
+ textForeground = new Color(shell.getDisplay(), textElm.getColor());
+ else
+ textForeground = shell.getDisplay().getSystemColor(UPDATE_FG);
+ }
+ else if( paramName.equalsIgnoreCase("highlightBG")) {
+ if ( textElm.getColor() != null)
+ highlightBackground = new Color(shell.getDisplay(), textElm.getColor());
+ else
+ highlightBackground = shell.getDisplay().getSystemColor(HIGHLIGHT_BG);
+ }
+ else if( paramName.equalsIgnoreCase("highlightFG")) {
+ if ( textElm.getColor() != null)
+ highlightForeground = new Color(shell.getDisplay(), textElm.getColor());
+ else
+ highlightForeground = shell.getDisplay().getSystemColor(UPDATE_FG);
+ }
+
+ }
+
+ }
+
/**
* Process the user choice from the popup list. DR14842 - re-written
*/
- private void processPopup() {
- Menu menu = new Menu(shell, SWT.POP_UP);
- List items = Arrays.asList(popupItems);
- for (String pi : popupItems) {
- MenuItem mi = new MenuItem(menu, SWT.PUSH);
- mi.setText(pi);
- if (isEditMode()) {
- mi.setEnabled(true);
- } else {
- mi.setEnabled(isPopItemDefault[items.indexOf(pi)]);
- }
- mi.addListener(SWT.Selection, new Listener() {
+ private void processPopup() {
+ Menu menu = new Menu(shell, SWT.POP_UP);
+ List items = Arrays.asList(popupItems);
+ for (String pi : popupItems) {
+ MenuItem mi = new MenuItem(menu, SWT.PUSH);
+ mi.setText(pi);
+ if (isEditMode()) {
+ mi.setEnabled(true);
+ } else {
+ mi.setEnabled(isPopItemDefault[items.indexOf(pi)]);
+ }
+ mi.addListener(SWT.Selection, new Listener() {
@Override
- public void handleEvent(Event event) {
- handleSelection(event);
- }
- });
- }
- menu.setVisible(true);
- }
-
+ public void handleEvent(Event event) {
+ handleSelection(event);
+ }
+ });
+ }
+ menu.setVisible(true);
+ }
+
/**
- * Handle the selection from the popup menu
+ * Handle the selection from the popup menu
*
* @param event
*/
- protected void handleSelection(Event event) {
- MenuItem item = (MenuItem) event.widget;
- String choice = item.getText();
- if (choice != null) {
- if (popupItems[0].equals(choice)) {
- textEditor.selectAll();
- } else if (popupItems[1].equals(choice)) {
- cutText();
- } else if (popupItems[2].equals(choice)) {
- copyText();
- } else if (popupItems[3].equals(choice)) {
- pasteText();
- }
- textEditor.update();
- }
- }
+ protected void handleSelection(Event event) {
+ MenuItem item = (MenuItem) event.widget;
+ String choice = item.getText();
+ if (choice != null) {
+ if (popupItems[0].equals(choice)) {
+ textEditor.selectAll();
+ } else if (popupItems[1].equals(choice)) {
+ cutText();
+ } else if (popupItems[2].equals(choice)) {
+ copyText();
+ } else if (popupItems[3].equals(choice)) {
+ pasteText();
+ }
+ textEditor.update();
+ }
+ }
/**
* creates the bar containing the script runner controls.
@@ -5546,94 +5731,93 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
textEditor.setText("");
}
} else {
- // TODO FIX PARSING
+ // TODO FIX PARSING
- // First, set the current header by assuming that it usually
- // consists of the first two lines of text in the text product,
- // though there will be exceptions to that "rule" as handled below.
- // So, obtain the AFOS NNNxxx. If it's where it is supposed to be
- // in the new format, then the existing header is already an AWIPS
+ // First, set the current header by assuming that it usually
+ // consists of the first two lines of text in the text product,
+ // though there will be exceptions to that "rule" as handled below.
+ // So, obtain the AFOS NNNxxx. If it's where it is supposed to be
+ // in the new format, then the existing header is already an AWIPS
// text product identifier. Otherwise it is a legacy AFOS
// identifier.
- if (TextDisplayModel.getInstance().hasStdTextProduct(token)) {
- StdTextProduct textProd = TextDisplayModel.getInstance()
- .getStdTextProduct(token);
- StdTextProductId prodId = textProd.getProdId();
- try {
- // start of second line of text
- start = textEditor.getOffsetAtLine(thisLine + 1);
- if ((textEditor.getText(start, start + afosNnnLimit)
- .equals(prodId.getNnnid()))
+ if (TextDisplayModel.getInstance().hasStdTextProduct(token)) {
+ StdTextProduct textProd = TextDisplayModel.getInstance()
+ .getStdTextProduct(token);
+ StdTextProductId prodId = textProd.getProdId();
+ try {
+ // start of second line of text
+ start = textEditor.getOffsetAtLine(thisLine + 1);
+ if ((textEditor.getText(start, start + afosNnnLimit)
+ .equals(prodId.getNnnid()))
&& (textEditor.getText(start + afosNnnLimit + 1,
start + afosXxxLimit).equals(prodId
.getXxxid()))) {
- // Text matches the products nnnid and xxxid
- numberOfLinesOfHeaderText = 2;
+ // Text matches the products nnnid and xxxid
+ numberOfLinesOfHeaderText = 2;
} else if (textEditor.getText(start,
start + afosNnnLimit + 2).equals(
AFOSParser.DRAFT_PIL)
|| textEditor.getText(start,
start + afosNnnLimit + 2).equals("TTAA0")) {
- // Text matches temporary WRKWG#
- numberOfLinesOfHeaderText = 2;
- } else {
- // Assume this header block is a legacy AFOS identifier.
- numberOfLinesOfHeaderText = 1;
- }
- } catch (IllegalArgumentException e) {
+ // Text matches temporary WRKWG#
+ numberOfLinesOfHeaderText = 2;
+ } else {
// Assume this header block is a legacy AFOS identifier.
numberOfLinesOfHeaderText = 1;
}
- }
-
- try {
- start = 0;
- finish = textEditor.getOffsetAtLine(thisLine
- + numberOfLinesOfHeaderText) - 1;
} catch (IllegalArgumentException e) {
- // The text does not span enough lines so use the full extent
- // of the product.
- finish = textEditor.getCharCount() - 1;
+ // Assume this header block is a legacy AFOS identifier.
+ numberOfLinesOfHeaderText = 1;
}
+ }
- // Set the content of the header block to consist of just the header
- // of
- // the text product... it will get reunited with the body when it is
- // saved.
- if (finish > start) {
- headerTF.setText(textEditor.getText(start, finish));
- } else {
- headerTF.setText("");
- }
+ try {
+ start = 0;
+ finish = textEditor.getOffsetAtLine(thisLine
+ + numberOfLinesOfHeaderText) - 1;
+ } catch (IllegalArgumentException e) {
+ // The text does not span enough lines so use the full extent
+ // of the product.
+ finish = textEditor.getCharCount() - 1;
+ }
- // Next, set the current body by assuming that it always
- // consists of the rest of the text product beyond the line(s)
- // of text in the header.
- try {
- int numberOfBlankLines = -1;
- String line = null;
- do {
- numberOfBlankLines++;
+ // Set the content of the header block to consist of just the header of
+ // the text product... it will get reunited with the body when it is
+ // saved.
+ if (finish > start) {
+ headerTF.setText(textEditor.getText(start, finish));
+ } else {
+ headerTF.setText("");
+ }
+
+ // Next, set the current body by assuming that it always
+ // consists of the rest of the text product beyond the line(s)
+ // of text in the header.
+ try {
+ int numberOfBlankLines = -1;
+ String line = null;
+ do {
+ numberOfBlankLines++;
line = textEditor.getLine(thisLine
+ numberOfLinesOfHeaderText + numberOfBlankLines);
- } while (line.length() == 0 || line.equals(""));
- // Note: 'st' is a reference to 'textEditor'...
- // delelete the header from the text in 'textEditor'
- finish = textEditor.getOffsetAtLine(thisLine
- + numberOfLinesOfHeaderText + numberOfBlankLines);
- textEditor.setSelection(start, finish);
- textEditor.setEditable(true);
- textEditor.invokeAction(SWT.DEL);
- textEditor.setEditable(false);
- } catch (IllegalArgumentException e) {
- // There is no text product body, so set it to the empty string.
- textEditor.setText("");
- }
+ } while (line.length() == 0 || line.equals(""));
+ // Note: 'st' is a reference to 'textEditor'...
+ // delelete the header from the text in 'textEditor'
+ finish = textEditor.getOffsetAtLine(thisLine
+ + numberOfLinesOfHeaderText + numberOfBlankLines);
+ textEditor.setSelection(start, finish);
+ textEditor.setEditable(true);
+ textEditor.invokeAction(SWT.DEL);
+ textEditor.setEditable(false);
+ } catch (IllegalArgumentException e) {
+ // There is no text product body, so set it to the empty string.
+ textEditor.setText("");
+ }
}
// set editor status flags
dirty = false;
}
-
+
/**
* Update the editor's header text field.
*
@@ -5840,9 +6024,9 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
statusBarLabel.update();
setBusy(true);
- if (queryTransport == null) {
- queryTransport = TextEditorUtil.getTextDbsrvTransport();
- }
+ if (queryTransport == null) {
+ queryTransport = TextEditorUtil.getTextDbsrvTransport();
+ }
productQueryJob.addRequest(command, isObsUpdated);
}
@@ -7527,17 +7711,9 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
protected void disposed() {
textEditor.setFont(shell.getFont());
headerTF.setFont(shell.getFont());
-
- if (smlFont != null) {
- smlFont.dispose();
- }
-
- if (medFont != null) {
- medFont.dispose();
- }
-
- if (lrgFont != null) {
- lrgFont.dispose();
+
+ if (dftFont != null) {
+ dftFont.dispose();
}
if (clipboard != null) {
@@ -8129,7 +8305,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
private void displayAirportTooltip(Point location) {
String word = parseProduct(textEditor, location.y);
if (word != null) {
- String result = AfosBrowserModel.getInstance().getNodeHelp(word);
+ String result = AfosBrowserModel.getInstance().getNodeHelp(word);
if (result != null) {
// dispaly below and to the right of location.
location.x += 5;
@@ -8155,29 +8331,29 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
String result = new String("");
try {
- char c = lineText.charAt(0);
- if ((c == 'M') || (c == 'S') || (c == 'T')) {
+ char c = lineText.charAt(0);
+ if ((c == 'M') || (c == 'S') || (c == 'T')) {
// # Most obs start with METAR, SPECI, TESTM, or TESTS. Skip
// over
- // that tag,
- // # a space, and the K or P, to get to the 3-char station ID.
- if (lineText.length() > 10) {
- result = lineText.substring(7, 10);
- } else {
- result = lineText.substring(lineText.length() - 3);
- }
- } else if ((c == 'W') || (c == 'Y')) {
+ // that tag,
+ // # a space, and the K or P, to get to the 3-char station ID.
+ if (lineText.length() > 10) {
+ result = lineText.substring(7, 10);
+ } else {
+ result = lineText.substring(lineText.length() - 3);
+ }
+ } else if ((c == 'W') || (c == 'Y')) {
// # Canadian SAOs have 3-character IDs, starting with W or Y.
// Grab
- // 'em.
- result = lineText.substring(0, 3);
- } else {
+ // 'em.
+ result = lineText.substring(0, 3);
+ } else {
// # Some military obs don't get tagged. Skip the K or P and get
// 3
- // chars.
- int wordLineStart = 1;
- result = lineText.substring(wordLineStart, wordLineStart + 4);
- }
+ // chars.
+ int wordLineStart = 1;
+ result = lineText.substring(wordLineStart, wordLineStart + 4);
+ }
} catch (StringIndexOutOfBoundsException ex) {
// User has non METAR/SAO products and the parsing failed.
result = null;
diff --git a/cave/com.raytheon.viz.textworkstation/src/com/raytheon/viz/textworkstation/TextWorkstationDlg.java b/cave/com.raytheon.viz.textworkstation/src/com/raytheon/viz/textworkstation/TextWorkstationDlg.java
index f6c37b5452..4defe68bb7 100644
--- a/cave/com.raytheon.viz.textworkstation/src/com/raytheon/viz/textworkstation/TextWorkstationDlg.java
+++ b/cave/com.raytheon.viz.textworkstation/src/com/raytheon/viz/textworkstation/TextWorkstationDlg.java
@@ -91,6 +91,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
* 02Oct2012 1229 rferrel Option to allow blocking when top dialog.
* 13Dec2012 1353 rferrel Fix bug introduced in the Show all dialogs.
* 30Jan2013 DR 14736 D. Friedman Display local time.
+ * 24Jun2013 DR 15733 XHuang Display MAX_BUTTON_CNT (8 button).
*
*
*
@@ -436,7 +437,7 @@ public class TextWorkstationDlg extends CaveSWTDialog implements
textBtnArray = new ArrayList();
textEditorArray = new ArrayList();
- for (int x = 1; x <= INIT_BUTTON_CNT; ++x) {
+ for (int x = 1; x <= MAX_BUTTON_CNT; ++x) {
createButtonAndTextEditor(x);
}
}
diff --git a/cave/com.raytheon.viz.volumebrowser/localization/volumebrowser/LevelMappingFile.xml b/cave/com.raytheon.viz.volumebrowser/localization/volumebrowser/LevelMappingFile.xml
index a025e86afa..295028eef1 100644
--- a/cave/com.raytheon.viz.volumebrowser/localization/volumebrowser/LevelMappingFile.xml
+++ b/cave/com.raytheon.viz.volumebrowser/localization/volumebrowser/LevelMappingFile.xml
@@ -38,9 +38,6 @@
-
-
-
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/GisUtil.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/GisUtil.java
index f7c6ec3042..5fcb24e5b6 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/GisUtil.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/GisUtil.java
@@ -31,6 +31,7 @@ import org.geotools.referencing.GeodeticCalculator;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.GeometryFactory;
/**
*
@@ -102,11 +103,20 @@ public class GisUtil {
// Test for central by not being near adjacent borders.
if (useCentral && iQuad.centralGeom != null
- && iQuad.centralGeom.contains(warnedArea)) {
+ && iQuad.centralGeom.intersects(warnedArea) && !iQuad.north
+ && !iQuad.south && !iQuad.east && !iQuad.west) {
portions.add(Direction.CENTRAL);
return portions;
}
+ // If the parentGeom is oddly shaped (i.e. BROOMFIELD), the intended
+ // special cases won't work. A basic comparison can only be applied.
+ Coordinate centre = parentGeom.getEnvelopeInternal().centre();
+ GeometryFactory gf = new GeometryFactory();
+ if (!parentGeom.intersects(gf.createPoint(centre))) {
+ return getPointDesc(iQuad, useExtreme);
+ }
+
// Possible case of a stripe across the middle
if (iQuad.q == 0) {
// Only one direction encoded
@@ -120,8 +130,9 @@ public class GisUtil {
// All quadrants in use.
if (iQuad.q == 4 && iQuad.qq == 4) {
- if ((iQuad.north && iQuad.south && !iQuad.east && !iQuad.west)
- || (iQuad.east && iQuad.west && !iQuad.north && !iQuad.south)) {
+ if (useCentral
+ && ((iQuad.north && iQuad.south && !iQuad.east && !iQuad.west) || (iQuad.east
+ && iQuad.west && !iQuad.north && !iQuad.south))) {
// Add CENTRAL if north and south are impacted, but not east and
// west. Apply vice versa
portions.add(Direction.CENTRAL);
@@ -161,19 +172,6 @@ public class GisUtil {
}
}
- // Three diagonal quadrants in use.
- if (iQuad.qq == 3 && portions.isEmpty()) {
- if (iQuad.nn == 0) {
- portions.add(Direction.SOUTH);
- } else if (iQuad.ss == 0) {
- portions.add(Direction.NORTH);
- } else if (iQuad.ww == 0) {
- portions.add(Direction.EAST);
- } else if (iQuad.ee == 0) {
- portions.add(Direction.WEST);
- }
- }
-
// add extreme for three quadrant case.
if (!portions.isEmpty()) {
if (useExtreme && iQuad.xxx > 0) {
@@ -230,18 +228,18 @@ public class GisUtil {
EnumSet portions = EnumSet.noneOf(Direction.class);
int counter = 0;
- if (iQuad.north) {
+ if (iQuad.north && !iQuad.south) {
portions.add(Direction.NORTH);
counter++;
- } else if (iQuad.south) {
+ } else if (iQuad.south && !iQuad.north) {
portions.add(Direction.SOUTH);
counter++;
}
- if (iQuad.east) {
+ if (iQuad.east && !iQuad.west) {
portions.add(Direction.EAST);
counter++;
- } else if (iQuad.west) {
+ } else if (iQuad.west && !iQuad.east) {
portions.add(Direction.WEST);
counter++;
}
@@ -264,6 +262,10 @@ public class GisUtil {
while (dirIter.hasNext()) {
list.add(dirIter.next().toString());
}
+
+ if (list.isEmpty()) {
+ return null;
+ }
return list;
}
@@ -368,11 +370,9 @@ public class GisUtil {
portions.add(Direction.WEST);
}
- if (azimuth < (90 - DIRECTION_DELTA)
- && azimuth > (-90 + DIRECTION_DELTA)) {
+ if (Math.abs(azimuth) < (90 - DIRECTION_DELTA)) {
portions.add(Direction.NORTH);
- } else if (azimuth > (90 + DIRECTION_DELTA)
- && azimuth < (-90 - DIRECTION_DELTA)) {
+ } else if (Math.abs(azimuth) > (90 + DIRECTION_DELTA)) {
portions.add(Direction.SOUTH);
}
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/ImpactedQuadrants.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/ImpactedQuadrants.java
index c0b424629b..acb3f6e94e 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/ImpactedQuadrants.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/ImpactedQuadrants.java
@@ -338,7 +338,7 @@ public class ImpactedQuadrants {
}
/**
- * Identifies portions of the parent envelope which is 20% from each edge.
+ * Identifies portions of the parent envelope which is 15% from each edge.
*
* @param impactedQuadrants
* @param parentEnvelopeInternal
@@ -348,8 +348,8 @@ public class ImpactedQuadrants {
ImpactedQuadrants impactedQuadrants,
Envelope parentEnvelopeInternal, Geometry warnedArea) {
- double deltaY = parentEnvelopeInternal.getHeight() * 0.20;
- double deltaX = parentEnvelopeInternal.getWidth() * 0.20;
+ double deltaY = parentEnvelopeInternal.getHeight() * 0.15;
+ double deltaX = parentEnvelopeInternal.getWidth() * 0.15;
double minLat = parentEnvelopeInternal.getMinY();
double maxLat = parentEnvelopeInternal.getMaxY();
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/PolygonUtil.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/PolygonUtil.java
index 56408c45be..6cb13d2f8c 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/PolygonUtil.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/PolygonUtil.java
@@ -65,6 +65,10 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
* 04/16/2013 DR 16045 Qinglu Lin Relocated removeDuplicateCoordinate(), computeSlope(),
* computeCoordinate(), and adjustPolygon from WarngenUIState.
* 05/23/2013 DR 16169 D. Friedman Improve redraw-from-hatched-area polygons.
+ * 06/17/2013 DR 15787 Qinglu Lin Added removeOverlaidLinesegments() and removeTriplyOverlaidLinesegments().
+ * 07/11/2013 DR 16376 Qinglu Lin Removed removeTriplyOverlaidLinesegments() and updated computeSlope()
+ * and removeOverlaidLinesegments().
+
*
*
*
@@ -1112,8 +1116,8 @@ public class PolygonUtil {
*/
private static double computeSlope(Coordinate[] coords, int i) {
double min = 1.0E-08;
+ double slope = 1.0E08;
double dx = coords[i].x - coords[i + 1].x;
- double slope = 0.0;
if (Math.abs(dx) > min) {
slope = (coords[i].y - coords[i + 1].y) / dx;
}
@@ -1251,4 +1255,59 @@ public class PolygonUtil {
}
}
}
+
+ public static Coordinate[] removeOverlaidLinesegments(Coordinate[] coords) {
+ Coordinate[] expandedCoords = null;
+ boolean flag = true;
+ while (flag) {
+ expandedCoords = new Coordinate[coords.length+1];
+ flag = false;
+ for (int i = 0; i < coords.length; i++) {
+ expandedCoords[i] = new Coordinate(coords[i]);
+ }
+ expandedCoords[expandedCoords.length-1] = new Coordinate(coords[1]);
+ double min = 1.0E-8;
+ int m = expandedCoords.length;
+ int count = 0;
+ double slope = 0.0, slope1 = 0.0;
+ for (int i = 0; i < m - 1; i++) {
+ slope = computeSlope(expandedCoords,i);
+ if (count == 0) {
+ slope1 = slope;
+ count += 1;
+ } else {
+ if (Math.abs(slope - slope1) < min) {
+ count += 1;
+ } else {
+ count = 0;
+ slope1 = slope;
+ count += 1;
+ }
+ }
+ if (count == 2) {
+ // remove the middle point, i.e., that has index of i, of the three that either form two
+ // overlaid/partial overlaid line segments or is in the middle
+ // of a straight line segment
+ coords = new Coordinate[coords.length - 1];
+ if (i == m - 2) {
+ for (int j = 1; j < m - 2; j++) {
+ coords[j-1] = new Coordinate(expandedCoords[j]);
+ }
+ coords[coords.length-1] = new Coordinate(coords[0]);
+ } else {
+ for (int j = 0; j < i; j++) {
+ coords[j] = new Coordinate(expandedCoords[j]);
+ }
+ for (int j = i + 1; j < expandedCoords.length-2; j++) {
+ coords[j-1] = new Coordinate(expandedCoords[j]);
+ }
+ coords[coords.length-1] = new Coordinate(coords[0]);
+ }
+ flag = true;
+ break;
+ }
+ }
+ }
+ return coords;
+ }
}
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Wx.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Wx.java
index 836f2fb125..741aabf8ba 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Wx.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gis/Wx.java
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -108,6 +109,11 @@ import com.vividsolutions.jts.geom.Point;
* Mar 25, 2013 1605 jsanchez Checks if a storm location is over an urban bound area.
* Apr 24, 2013 1943 jsanchez Calculated partOfArea for a storm location over an urban bound area.
* May 2, 2013 1963 jsanchez Referenced calculateLocationPortion from GisUtil.
+ * Jun 20, 2013 16224 Qinglu Lin Updated pathcast() by removing restriction of "i < maxCount" at line 478,
+ * and added findPointsToBeRemoved(), computeAngle(), and remove pathcast's
+ * points that are in the past.
+ * Jun 24, 2013 DR 16317 D. Friedman Handle "motionless" track.
+ * Jun 25, 2013 16224 Qinglu Lin Resolved the issue with "Date start" for pathcast in CON.
*
*
*
@@ -249,6 +255,8 @@ public class Wx {
GeometryFactory gf = new GeometryFactory();
+ boolean flag = true;
+ List pointsToBeRemoved = null;
try {
Abbreviation areaTypeAbbrev = null;
String trxFileStr = pathcastConfiguration
@@ -268,11 +276,11 @@ public class Wx {
Geometry bufferedPathCastArea = null;
List pathcasts = new ArrayList();
Map pathCastCoords = new HashMap();
- if (stormTrackState.trackVisible) {
+ if (stormTrackState.isNonstationary()) {
List coordinates = new ArrayList();
- Date start = DateUtil.roundDate(new Date(wwaStartTime + delta),
- pathcastConfiguration.getInterval());
- Date stormTime = new Date(wwaStartTime);
+ Date stormTime = new Date();
+ Date start = DateUtil.roundDate(new Date(stormTime.getTime() + delta),
+ pathcastConfiguration.getInterval());
DestinationGeodeticCalculator gc = new DestinationGeodeticCalculator();
while (start.getTime() <= wwaStopTime) {
PathCast cast = new PathCast();
@@ -440,6 +448,23 @@ public class Wx {
} else {
points = new ArrayList(0);
}
+ if (flag) {
+ pointsToBeRemoved = findPointsToBeRemoved(centroid, points, stormTrackState.angle);
+ flag = false;
+ }
+
+ if (pointsToBeRemoved != null) {
+ for (int i=0; i points = pcPoints.get(pc);
- for (int i = 0; i < points.size() && i < maxCount; ++i) {
+ for (int i = 0; i < points.size(); ++i) {
ClosestPoint cp = points.get(i);
for (PathCast pc2 : tmp) {
if (pc2 != pc) {
List points2 = pcPoints.get(pc2);
- ClosestPoint found = find(cp, points2, maxCount);
+ ClosestPoint found = find(cp, points2, Integer.MAX_VALUE);
if (found != null) {
// We found a point within maxCount in this
// list.
@@ -932,4 +957,30 @@ public class Wx {
public Date getObsTime() {
return new Date(this.wwaStartTime);
}
+
+ private List findPointsToBeRemoved(Point centroid, List points, double stormtrackAngle) {
+ // convert storm track angle to geometry angle in range of (0,360)
+ double convertedAngle = 90.0 - stormtrackAngle;
+ if (convertedAngle < 0.0)
+ convertedAngle += 360.0;
+
+ Iterator iter = points.iterator();
+ List removedPoints = new ArrayList();
+ while (iter.hasNext()) {
+ ClosestPoint cp = iter.next();
+ double d = Math.abs(convertedAngle - computeAngle(centroid, cp.point));
+ if (d > 180.0)
+ d = 360.0 - d;
+ if (d > 90.0)
+ removedPoints.add(cp);
+ }
+ return removedPoints;
+ }
+
+ private double computeAngle(Point p, Coordinate c) {
+ double angle = Math.atan2(c.y - p.getY(), c.x - p.getX()) * 180 / Math.PI;
+ if (angle < 0)
+ angle += 360;
+ return angle;
+ }
}
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java
index c7dd126109..5f710b1cfd 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java
@@ -139,6 +139,8 @@ import com.vividsolutions.jts.geom.Polygon;
* Apr 30, 2013 DR 16118 Qinglu Lin For reissue (followup NEW), called redrawFromWarned() in okPressed().
* May 17, 2013 DR 16118 Qinglu Lin Copied the fix from 13.4.1.
* May 17, 2013 2012 jsanchez Preserved the warned area if the hatched area source is the same when changing templates.
+ * Jun 24, 2013 DR 16317 D. Friedman Handle "motionless" track.
+ * Jul 16, 2013 DR 16387 Qinglu Lin Reset totalSegments for each followup product.
*
*
* @author chammack
@@ -830,8 +832,10 @@ public class WarngenDialog extends CaveSWTDialog implements
if (warngenLayer.getWarningArea() == null) {
str = "Area selected has no overlap with current area of responsibility";
} else {
-
- if (warngenLayer.getStormTrackState().trackVisible) {
+ if (warngenLayer.getStormTrackState().isInitiallyMotionless() &&
+ ! warngenLayer.getStormTrackState().isNonstationary()) {
+ str += WarngenConstants.INSTRUCTION_DRAG_STORM + "\n";
+ } else if (warngenLayer.getStormTrackState().trackVisible) {
str += "Adjust Centroid in any Frame" + "\n";
}
str += "Adjust box around Warning Area";
@@ -1022,6 +1026,7 @@ public class WarngenDialog extends CaveSWTDialog implements
startTime.getTime(), endTime.getTime(),
selectedBullets, followupData, backupData);
Matcher m = FollowUpUtil.vtecPtrn.matcher(result);
+ totalSegments = 0;
while (m.find()) {
totalSegments++;
}
@@ -1195,7 +1200,7 @@ public class WarngenDialog extends CaveSWTDialog implements
}
if (warngenLayer.getConfiguration().isTrackEnabled() == false
|| warngenLayer.getConfiguration().getPathcastConfig() == null) {
- warngenLayer.getStormTrackState().trackVisible = false;
+ warngenLayer.getStormTrackState().setInitiallyMotionless(true);
}
warngenLayer.resetInitialFrame();
warngenLayer.setWarningAction(null);
@@ -1457,11 +1462,15 @@ public class WarngenDialog extends CaveSWTDialog implements
warngenLayer.getStormTrackState().displayType = lineOfStorms
.getSelection() ? DisplayType.POLY : DisplayType.POINT;
}
- if (warngenLayer.getConfiguration().isTrackEnabled() == false
- || warngenLayer.getConfiguration().getPathcastConfig() == null) {
- warngenLayer.getStormTrackState().trackVisible = false;
+ warngenLayer.getStormTrackState().setInitiallyMotionless(
+ warngenLayer.getConfiguration().isTrackEnabled() == false
+ || warngenLayer.getConfiguration()
+ .getPathcastConfig() == null);
+ if (warngenLayer.getStormTrackState().isInitiallyMotionless()) {
+ warngenLayer.getStormTrackState().speed = 0;
+ warngenLayer.getStormTrackState().angle = 0;
} else {
- warngenLayer.getStormTrackState().trackVisible = true;
+ warngenLayer.getStormTrackState().pointMoved = true;
}
restartBtn.setEnabled(true);
} else {
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java
index 999672510c..d4537d3a1b 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java
@@ -178,6 +178,10 @@ import com.vividsolutions.jts.io.WKTReader;
* 05/23/2013 DR 16169 D. Friedman Improve redraw-from-hatched-area polygons.
* 05/31/2013 DR 16237 D. Friedman Refactor goespatial data routines and watch handling.
* 06/05/2013 DR 16279 D. Friedman Fix determination of frame time from parsed storm track.
+ * 06/17/1013 DR 15787 Qinglu Lin Called removeTriplyOverlaidLinesegments().
+ * 06/24/2013 DR 16317 D. Friedman Handle "motionless" track.
+ * 06/25/2013 DR 16013 Qinglu Lin Added setUniqueFip() and code for re-hatching polygon.
+ * 07/09/2013 DR 16376 Qinglu Lin Removed calling removeOverTriplylaidLinesegment() but called removeOverlaidLinesegment().
*
*
* @author mschenke
@@ -188,6 +192,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(WarngenLayer.class);
+ String uniqueFip = null;
+
private static class GeospatialDataList {
private static final String LOCAL_GEOM = "localGeometry";
@@ -409,11 +415,13 @@ public class WarngenLayer extends AbstractStormTrackResource {
Coordinate[] coords = hatched.getCoordinates();
PolygonUtil.round(coords, 2);
PolygonUtil.adjustPolygon(coords);
+ PolygonUtil.removeOverlaidLinesegments(coords);
GeometryFactory gf = new GeometryFactory();
LinearRing lr = gf.createLinearRing(coords);
hatchedArea = gf.createPolygon(lr, null);
- if (!hatchedArea.isValid())
+ if (!hatchedArea.isValid()) {
hatchedArea = adjustVertex(hatchedArea);
+ }
hatchedWarningArea = createWarnedArea(
latLonToLocal(hatchedArea),
latLonToLocal(warningArea));
@@ -619,7 +627,13 @@ public class WarngenLayer extends AbstractStormTrackResource {
try {
// TODO: Check to see if feasible to try STIData first, might be
// too slow
- if (checkStormTrackData(data = ToolsDataManager.getInstance()
+ displayState.setInitiallyMotionless(!configuration
+ .isTrackEnabled());
+ if (!configuration.isTrackEnabled()) {
+ displayState.angle = 0;
+ displayState.speed = 0;
+ } else if (checkStormTrackData(data = ToolsDataManager
+ .getInstance()
.getStormTrackData())) {
displayState.angle = adjustAngle(data.getMotionDirection());
displayState.speed = knotToMeterPerSec.convert(data
@@ -766,13 +780,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
if (warningAction == null || warningAction == WarningAction.NEW) {
// Initialize box
+ redrawBoxFromTrack();
if (((configuration.isTrackEnabled() == false || configuration
.getPathcastConfig() == null) && this.displayState.displayType != DisplayType.POLY)
|| frameCount == 1) {
- createSquare();
resetInitialFrame();
- } else {
- redrawBoxFromTrack();
}
} else {
redrawBoxFromTrack();
@@ -795,11 +807,6 @@ public class WarngenLayer extends AbstractStormTrackResource {
if (hasDrawnShaded && shouldDrawShaded) {
target.drawShadedShape(shadedCoveredArea, 1.0f);
}
-
- if (displayState.trackVisible == false
- && trackUtil.getCurrentFrame(paintProps.getFramesInfo()) != displayState.intialFrame) {
- displayState.trackVisible = true;
- }
}
lastMode = displayState.mode;
@@ -947,8 +954,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
if (config != null) {
init(config);
- displayState.trackVisible = this.configuration.isTrackEnabled()
- && this.configuration.getPathcastConfig() != null;
+ displayState.setInitiallyMotionless(
+ this.configuration.isTrackEnabled() == false
+ || this.configuration.getPathcastConfig() == null);
}
}
@@ -1888,6 +1896,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
if (displayState.mode == Mode.DRAG_ME) {
return;
}
+ if ((configuration.isTrackEnabled() == false ||
+ configuration.getPathcastConfig() == null)
+ && !this.displayState.isNonstationary()
+ && this.displayState.displayType != DisplayType.POLY) {
+ createSquare();
+ return;
+ }
+
DestinationGeodeticCalculator gc = new DestinationGeodeticCalculator();
GeometryFactory gf = new GeometryFactory();
@@ -2212,8 +2228,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
Point point = displayState.dragMePoint;
- displayState.trackVisible = (motdir != null && motspd != null);
- if (displayState.trackVisible) {
+ if (motdir != null && motspd != null) {
+ displayState.setInitiallyMotionless(false);
displayState.angle = adjustAngle(motdir);
displayState.speed = knotToMeterPerSec.convert(motspd);
@@ -2228,6 +2244,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
point = gf.createPoint(figurePoint(recordFrameTime,
currentFrameTime, displayState.speed, displayState.angle));
+ } else {
+ displayState.setInitiallyMotionless(true);
+ displayState.angle = 0;
+ displayState.speed = 0;
}
// Uses the new dragMePoint when creating a track
@@ -2313,7 +2333,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
int currentFrame = trackUtil.getCurrentFrame(info);
int frameCount = trackUtil.getFrameCount(info);
if (currentFrame == frameCount - 1
- || displayState.trackVisible == false) {
+ || ! displayState.isNonstationary()) {
return coordinate;
}
DataTime[] datatimes = trackUtil.getDataTimes(info);
@@ -2621,6 +2641,10 @@ public class WarngenLayer extends AbstractStormTrackResource {
Geometry tmp = removeCounty(state.getWarningArea(),
getFips(f));
if (tmp.isEmpty()) {
+ String fip = getFips(f);
+ if (fip != null && uniqueFip != null && fip.equals(uniqueFip)) {
+ updateWarnedAreas(true);
+ }
break;
}
@@ -3130,4 +3154,15 @@ public class WarngenLayer extends AbstractStormTrackResource {
}
return new HashSet(namePrefix.values());
}
+
+ public void setUniqueFip() {
+ Geometry g = state.getWarningArea();
+ if (g != null) {
+ if (getAllFipsInArea(g).size() == 1) {
+ Set fips = getAllFipsInArea(g);
+ Iterator iter = fips.iterator();
+ uniqueFip = iter.next();
+ }
+ }
+ }
}
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIManager.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIManager.java
index b27164d960..f46990fcd3 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIManager.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenUIManager.java
@@ -64,6 +64,7 @@ import com.vividsolutions.jts.geom.Polygon;
* Jan 30, 2013 15439 Qinglu Lin Code were added to prevent nullPointException from occurring
* when c2 is null for "case SINGLE_POINT" in move().
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
+ * Jun 25, 2013 DR 16013 Qinglu Lin Called setUniqueFip() in handleMouseUp().
*
*
*
@@ -270,6 +271,9 @@ public class WarngenUIManager extends InputAdapter {
pointDeleted = false;
pointCreated = false;
menuMove = false;
+ if (mouseButton == 1) {
+ warngenLayer.setUniqueFip();
+ }
return rval;
}
diff --git a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java
index 84372073eb..36158e6bfe 100644
--- a/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java
+++ b/cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/template/TemplateRunner.java
@@ -153,6 +153,7 @@ import com.vividsolutions.jts.io.WKTReader;
* and secondtimezone can get correct values when warning area covers two time zones.
* May 10, 2013 1951 rjpeter Updated ugcZones references
* May 30, 2013 DR 16237 D. Friedman Fix watch query.
+ * Jun 18, 2013 2118 njensen Only calculate pathcast if it's actually used
*
*
* @author njensen
@@ -488,12 +489,23 @@ public class TemplateRunner {
context.put(variableName, points.get(variableName));
}
- PathCast[] pathCast = wx.pathcast(threeLetterSiteId);
- context.put(config.getPathcastConfig().getVariable(), pathCast);
+ boolean hasPathCast = false;
+ for (String s : selectedBullets) {
+ if (s.indexOf("pathcast") > -1) {
+ hasPathCast = true;
+ break;
+ }
+ }
+ if (hasPathCast) {
+ PathCast[] pathCast = wx.pathcast(threeLetterSiteId);
+ context.put(config.getPathcastConfig().getVariable(),
+ pathCast);
- if (pathCast == null) {
- statusHandler.handle(Priority.PROBLEM,
- "WarnGen critical error: No PathCast Information");
+ if (pathCast == null) {
+ statusHandler
+ .handle(Priority.PROBLEM,
+ "WarnGen critical error: No PathCast Information");
+ }
}
// Now create the "other areas
@@ -1012,15 +1024,17 @@ public class TemplateRunner {
request.addConstraint("startTime", new RequestConstraint(
TimeUtil.formatDate(startConstraintTime),
ConstraintType.LESS_THAN_EQUALS));
- request.addConstraint("endTime", new RequestConstraint(
- TimeUtil.formatDate(endConstraintTime),
- ConstraintType.GREATER_THAN_EQUALS));
+ request.addConstraint(
+ "endTime",
+ new RequestConstraint(TimeUtil
+ .formatDate(endConstraintTime),
+ ConstraintType.GREATER_THAN_EQUALS));
/*
* TODO: Currently limited to filtering out one of
* ("CAN","EXP"). Could use "Act" in addition to "act", but this
* should really be fixed the underlying system.
- request.addConstraint("act", new RequestConstraint("CAN",
- ConstraintType.NOT_EQUALS));
+ * request.addConstraint("act", new RequestConstraint("CAN",
+ * ConstraintType.NOT_EQUALS));
*/
request.addConstraint("act", new RequestConstraint("EXP",
ConstraintType.NOT_EQUALS));
@@ -1030,20 +1044,22 @@ public class TemplateRunner {
// TODO: Talk to Jonathan about this... Do I even need officeid
// IN or is ugc zone good enough?
- /* Get all UGCs in the CWA now so that the watches will be
+ /*
+ * Get all UGCs in the CWA now so that the watches will be
* formatted with all portions of the affected state(s).
*
* Filtering for valid UGCs is performed in processATEntries
*/
RequestConstraint ugcConstraint = new RequestConstraint("",
ConstraintType.IN);
- ugcConstraint.setConstraintValueList(warngenLayer.getAllCountyUgcs());
+ ugcConstraint.setConstraintValueList(warngenLayer
+ .getAllCountyUgcs());
request.addConstraint("ugcZone", ugcConstraint);
// These are the only fields we need for processing watches
request.addFields(new String[] { "issueTime", "startTime",
- "endTime", "ugcZone", "phensig", "vtecstr",
- "etn", "act" });
+ "endTime", "ugcZone", "phensig", "vtecstr", "etn",
+ "act" });
DbQueryResponse response = (DbQueryResponse) ThriftClient
.sendRequest(request);
@@ -1051,9 +1067,10 @@ public class TemplateRunner {
List records = new ArrayList(
response.getNumResults());
for (Map result : response.getResults()) {
- /* TODO: Doing this here because only "EXP" is filtered
- * out by the query. Remove "act" from the field list
- * once this is fixed.
+ /*
+ * TODO: Doing this here because only "EXP" is filtered out
+ * by the query. Remove "act" from the field list once this
+ * is fixed.
*/
if ("CAN".equals(result.get("act")))
continue;
@@ -1081,14 +1098,18 @@ public class TemplateRunner {
t1 = System.currentTimeMillis();
System.out.println("getWatches.polygonBuffer time: "
+ (t1 - t0));
- validUgcZones = warngenLayer.getUgcsForCountyWatches(watchArea);
+ validUgcZones = warngenLayer
+ .getUgcsForCountyWatches(watchArea);
} catch (RuntimeException e) {
- statusHandler.handle(Priority.ERROR,
- "Error determining areas to search for watches.", e);
+ statusHandler
+ .handle(Priority.ERROR,
+ "Error determining areas to search for watches.",
+ e);
return rval;
}
- rval = processATEntries(records, warngenLayer, validUgcZones);
+ rval = processATEntries(records, warngenLayer,
+ validUgcZones);
}
}
}
diff --git a/cotsSource/org.apache.qpid/java/broker/bin/qpid-server b/cotsSource/org.apache.qpid/java/broker/bin/qpid-server
index 4e11fd5fe7..1371178352 100755
--- a/cotsSource/org.apache.qpid/java/broker/bin/qpid-server
+++ b/cotsSource/org.apache.qpid/java/broker/bin/qpid-server
@@ -30,7 +30,7 @@ QPID_LIBS=$QPID_HOME/lib/qpid-all.jar:$QPID_HOME/lib/bdbstore-launch.jar
export JAVA=java \
JAVA_VM=-server \
JAVA_MEM=-Xmx1024m \
- JAVA_GC="-XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError" \
+ JAVA_GC="-XX:+UseConcMarkSweepGC -XX:+CMSIIncrementalMode -XX:NewSize=300m -XX:MaxNewSize=300m -XX:SurvivorRatio=6 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/fxa/qpid" \
QPID_CLASSPATH=$QPID_LIBS \
QPID_RUN_LOG=2
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/ffmp/FFMPSourceConfig.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/ffmp/FFMPSourceConfig.xml
index a535884d7e..c3b7685e65 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/ffmp/FFMPSourceConfig.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/ffmp/FFMPSourceConfig.xml
@@ -1,221 +1,236 @@
-
- DHR
- DHR
- 0
- /radar/%/%/32/0.0/0.0
- radar
- RADAR
- QPE
- rate
- 10
-
-
- DPR
- DPR
- 0
- /radar/%/%/176/0.0/0.0
- radar
- RADAR
- QPE
- rate
- 15
-
-
- DHRMOSAIC
- HPE DHR MOSAIC
- 0
- hpe_dhrmosaic_dir
- XMRG
- QPE
- rate
- 15
- 0.0003937
- yyyyMMddHHmm
- 4
-
-
- BDHRMOSAIC
- HPE Bias DHR MOSAIC
- 1
- hpe_bdhrmosaic_dir
- XMRG
- QPE
- rate
- 15
- 0.0003937
- yyyyMMddHHmm
- 4
-
-
- QPFSCAN
- QPFSCAN
- 1
- /qpf/%/%/PRECIP_AMT
- qpf
- com.raytheon.uf.common.dataplugin.qpf.QPFRecord
- com.raytheon.uf.common.dataplugin.qpf.dao.QPFDao
- PDO
- QPF
- accum
- 15
- true
-
-
- PRTM
- HPE Nowcast
- 1
- hpe_nowcast_dir
- XMRG
- QPF
- accum
- 15
- 0.0003937
- true
- yyyyMMddHHmm
- 4
-
-
- BPRTM
- HPE Bias Nowcast
- 1
- hpe_nowcast_dir
- XMRG
- QPF
- accum
- 15
- 0.0003937
- true
- yyyyMMddHHmm
- 4
-
-
- FFG0124hr
- RFCFFG
- 1
- /grid/%/%/.*/.*/.*/FFG0124hr/SFC/0.0/-999999.0/
- grid
- GRID
- GUIDANCE
- accum
- 2080
- true
- true
- 0.03937
- true
- RFC
-
-
- FFG0324hr
- RFCFFG
- 3
- /grid/%/%/.*/.*/.*/FFG0324hr/SFC/0.0/-999999.0/
- grid
- GRID
- GUIDANCE
- accum
- 2080
- true
- true
- 0.03937
- true
- RFC
-
-
- FFG0624hr
- RFCFFG
- 6
- /grid/%/%/.*/.*/.*/FFG0624hr/SFC/0.0/-999999.0/
- grid
- GRID
- GUIDANCE
- accum
- 2080
- true
- true
- 0.03937
- true
- RFC
-
-
- VGBBIASHPE
- Virtual Gage Basins HPE
- 0
- hd_ob92oax
- XMRG
- GAGE
- rate
- 30
- 0.0003937
- 4
-
-
- VGBHPE
- Virtual Gage Basins HPE
- 0
- hd_ob92oax
- XMRG
- GAGE
- rate
- 30
- 0.0003937
- 4
-
-
- VGBDHR
- Virtual Gage Basins DHR
- 1
- hd_ob92oax
- RADAR
- GAGE
- rate
- 15
-
-
- VGBDPR
- Virtual Gage Basins DPR
- 1
- hd_ob92oax
- RADAR
- GAGE
- rate
- 15
-
-
- DHRMOSAIC
- DHRMOSAIC
- PRTM
- BPRTM
- QPFSCAN
- FFG0124hr, FFG0324hr, FFG0624hr
- VGBHPE
-
-
- BDHRMOSAIC
- BDHRMOSAIC
- BPRTM
- PRTM
- QPFSCAN
- FFG0124hr, FFG0324hr, FFG0624hr
- VGBBIASHPE
-
-
- DHR
- DHR
- QPFSCAN
- PRTM
- BPRTM
- FFG0124hr, FFG0324hr, FFG0624hr
- VGBDHR
-
-
- DPR
- DPR
- QPFSCAN
- BPRTM
- PRTM
- FFG0124hr, FFG0324hr, FFG0624hr
- VGBDPR
-
-
\ No newline at end of file
+
+ DHR
+ DHR
+ 0.0
+ /radar/%/%/32/0.0/0.0
+ radar
+ RADAR
+ QPE
+ rate
+ 10
+ 1.0
+ false
+
+
+ DPR
+ DPR
+ 0.0
+ /radar/%/%/176/0.0/0.0
+ radar
+ RADAR
+ QPE
+ rate
+ 15
+ 1.0
+ false
+
+
+ DHRMOSAIC
+ HPE DHR MOSAIC
+ 0.0
+ hpe_dhrmosaic_dir
+ XMRG
+ QPE
+ rate
+ 15
+ 3.937E-4
+ false
+ yyyyMMddHHmm
+ 4
+
+
+ BDHRMOSAIC
+ HPE Bias DHR MOSAIC
+ 1.0
+ hpe_bdhrmosaic_dir
+ XMRG
+ QPE
+ rate
+ 15
+ false
+ false
+ 3.937E-4
+ false
+ yyyyMMddHHmm
+ 4
+
+
+ QPFSCAN
+ QPFSCAN
+ 1.0
+ /qpf/%/%/PRECIP_AMT
+ qpf
+ com.raytheon.uf.common.dataplugin.qpf.QPFRecord
+ com.raytheon.uf.common.dataplugin.qpf.dao.QPFDao
+ PDO
+ QPF
+ accum
+ 15
+ 1.0
+ true
+
+
+ PRTM
+ HPE Nowcast
+ 1.0
+ hpe_nowcast_dir
+ XMRG
+ QPF
+ accum
+ 15
+ 3.937E-4
+ true
+ yyyyMMddHHmm
+ 4
+
+
+ BPRTM
+ HPE Bias Nowcast
+ 1.0
+ hpe_nowcast_dir
+ XMRG
+ QPF
+ accum
+ 15
+ 3.937E-4
+ true
+ yyyyMMddHHmm
+ 4
+
+
+ FFG0124hr
+ RFCFFG
+ 1.0
+ /grid/%/%/.*/.*/.*/FFG0124hr/SFC/0.0/-999999.0/
+ grid
+ GRID
+ GUIDANCE
+ accum
+ 2080
+ true
+ true
+ 0.03937
+ true
+ RFC
+
+
+ FFG0324hr
+ RFCFFG
+ 3.0
+ /grid/%/%/.*/.*/.*/FFG0324hr/SFC/0.0/-999999.0/
+ grid
+ GRID
+ GUIDANCE
+ accum
+ 2080
+ true
+ true
+ 0.03937
+ true
+ RFC
+
+
+ FFG0624hr
+ RFCFFG
+ 6.0
+ /grid/%/%/.*/.*/.*/FFG0624hr/SFC/0.0/-999999.0/
+ grid
+ GRID
+ GUIDANCE
+ accum
+ 2080
+ true
+ true
+ 0.03937
+ true
+ RFC
+
+
+ VGBBIASHPE
+ Virtual Gage Basins HPE
+ 0.0
+ hd_ob92oax
+ XMRG
+ GAGE
+ rate
+ 30
+ 3.937E-4
+ false
+ 4
+
+
+ VGBHPE
+ Virtual Gage Basins HPE
+ 0.0
+ hd_ob92oax
+ XMRG
+ GAGE
+ rate
+ 30
+ 3.937E-4
+ false
+ 4
+
+
+ VGBDHR
+ Virtual Gage Basins DHR
+ 1.0
+ hd_ob92oax
+ RADAR
+ GAGE
+ rate
+ 15
+ 1.0
+ false
+
+
+ VGBDPR
+ Virtual Gage Basins DPR
+ 1.0
+ hd_ob92oax
+ RADAR
+ GAGE
+ rate
+ 15
+ 1.0
+ false
+
+
+ DHRMOSAIC
+ DHRMOSAIC
+ PRTM
+ BPRTM
+ QPFSCAN
+ FFG0124hr, FFG0324hr, FFG0624hr
+ VGBHPE
+
+
+ BDHRMOSAIC
+ BDHRMOSAIC
+ BPRTM
+ PRTM
+ QPFSCAN
+ FFG0124hr, FFG0324hr, FFG0624hr
+ VGBBIASHPE
+
+
+ DHR
+ DHR
+ QPFSCAN
+ PRTM
+ BPRTM
+ FFG0124hr, FFG0324hr, FFG0624hr
+ VGBDHR
+
+
+ DPR
+ DPR
+ QPFSCAN
+ BPRTM
+ PRTM
+ FFG0124hr, FFG0324hr, FFG0624hr
+ VGBDPR
+
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm
index 1a2cc5eb84..8386264e1c 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/VM_global_library.vm
@@ -1,12 +1,16 @@
-##### UPDATED 3/2/12 12.2.1-4 BY EVAN BOOKBINDER
+##### MERGED 12.12 1//7/13 BY EVAN BOOKBINDER
##### Qinglu Lin 04-04-2012 DR 14691.
-##### 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 08-13-2012 DR 14493. Use corToNewMarker and corEventtime.
-##### D. Friedman 11-09-2012 DR 15430. Rework included watches.
-##### QINGLU LIN 12-27-2012 DR 15594. Added $lock to headlineLocList.
-##### D. Friedman 03-13-2013 DR 15892. Do not lock portion of state in firstBullet.
+##### Qinglu Lin 06-18-2012 DR 15043. Use duration in secondBullet. (crosses new day)
+##### Qinglu Lin 08-13-2012 DR 14493. Use corToNewMarker and corEventtime.
+##### Evan Bookbinder 09-12-2012 Corrected syntax errors in mmarkers and tml functions.
+##### Removed lock tags (will be handled by J Sanchez)
+##### Altered areaFormat macro to prevent extra blank spaces
+##### D. Friedman 11-09-2012 DR 15430. Rework included watches.
+##### Evan Bookbinder 02-06-2013 Added WrapText macro to handle customization of indents
+##### like the ~ and % characters in A1.
+##### Evan Bookbinder 05-05-2013 handleClosesPoints and 3rd bullet changes (OVER & now)
####################################################################################################
+#*
Mile Marker Test Code
macro "mmarkers" use (called out of VM_global_library.vm):
@@ -24,24 +28,12 @@ $simplify is a boolean value (true or false)
- false is a big list (MM 2...3...AND 4)
###################################################################################################
*#
-### AUTHOR: EVAN BOOKBINDER
-### PURPOSE: Retrieve closetPoint object name for a given index field
-### in the database table.
-#macro(getmarker $objMarkers $markeridx)
-#set($markercounter = 1)
-#foreach($xxmarker in $objMarkers)
-#if ($markercounter == $markeridx)
-$xxmarker.name##
-#end
-#set($markercounter = $markercounter + 1)
-#end
-#end
### AUTHORS: EVAN BOOKBINDER & MIKE DANGELO
### PURPOSE: OUTPUT MILE MARKER, ROAD, INTERSECTION INFO
-#macro(mmarkers $markers $id $name $type $simplify)
+#macro(mmarkers$markers $id $name $type $simplify)
#set($size = ${list.size($markers)})
-#if (${type.length()} > 0)
+#if(${type.length()} > 0)
#set($singType = "${type} ")
#set($plurType = "${type}S ")
#else
@@ -54,34 +46,32 @@ $xxmarker.name##
#set($phraseCount = 0)
#set($intIndex = 0)
#if($size > 0)
-$name ##
+${name} ##
#if($simplify)
#foreach($index in $id)
-#set($counter = $counter + 1)
#set($intIndex = $intIndex.parseInt($index.name))
-#if($counter == 1)
+#if($counter == 0)
#set($startIdx = $intIndex)
#set($endIdx = $intIndex)
#set($startCounter = $counter)
#set($endCounter = $counter)
-## Only one item in the list
-#if($counter == $size)
-## GET MARKER @ INDEX 1
-#set ($marker1 = "#getmarker(${markers},1)")
-NEAR $singType$marker1.
+## Only one item in the list and it's the first item
+#if($size == 1)
+## GET MARKER @ 0 index
+NEAR ${singType}${list.get(${markers},0).name}.
#end
##Continuation of current segment
-#elseif(($intIndex - $endIdx) == 1 && ($counter != $size))
+#elseif(($intIndex - $endIdx) == 1 && (${counter} + 1 != ${size}))
#set($endIdx = $intIndex)
#set($endCounter = $counter)
##We've found a break and we're not on the last item
-#elseif($counter != $size)
-#set ($marker1 = "#getmarker(${markers},${startCounter})")
-#set ($marker2 = "#getmarker(${markers},${endCounter})")
-#if($startCounter == $endCounter)
-NEAR $singType$marker1...##
+#elseif(${counter} + 1 != ${size})
+#set($marker1 = ${list.get(${markers},${startCounter}).name})
+#set($marker2 = ${list.get(${markers},${endCounter}).name})
+#if(${startCounter} == ${endCounter})
+NEAR ${singType}${marker1}...##
#else
-BETWEEN $plurType$marker1 AND $marker2...##
+BETWEEN ${plurType}${marker1} AND ${marker2}...##
#end
#set($phraseCount = $phraseCount + 1)
#set($startIdx = $intIndex)
@@ -94,26 +84,27 @@ BETWEEN $plurType$marker1 AND $marker2...##
AND ##
#end
##Continuous range (e.g. 1,2,3,4)
-#if (($intIndex - $endIdx) == 1)
-#set ($marker1 = "#getmarker(${markers},${startCounter})")
-#set ($marker2 = "#getmarker(${markers},${counter})")
-BETWEEN $plurType$marker1 AND $marker2.
+#if(($intIndex - $endIdx) == 1)
+#set($marker1 = ${list.get(${markers},${startCounter}).name})
+#set($marker2 = ${list.get(${markers},${counter}).name})
+BETWEEN ${plurType}${marker1} AND ${marker2}.
##Isolated mile marker previous and current (e.g. 1,4)
-#elseif ($startIdx == $endIdx)
-#set ($marker1 = "#getmarker(${markers},${startCounter})")
-#set ($marker2 = "#getmarker(${markers},${counter})")
-$singType$marker1 AND NEAR $singType$marker2.
+#elseif($startIdx == $endIdx)
+#set($marker1 = ${list.get(${markers},${startCounter}).name})
+#set($marker2 = ${list.get(${markers},${counter}).name})
+${singType}${marker1} AND NEAR ${singType}${marker2}.
##Continuous range + isolated milemarker at end (e.g. 1,2,3,6)
#else
-#set ($marker1 = "#getmarker(${markers},${startCounter})")
-#set ($marker2 = "#getmarker(${markers},${endCounter})")
-#set ($marker3 = "#getmarker(${markers},${counter})")
-BETWEEN $plurType$marker1 AND $marker2...AND NEAR $singType$marker3.
+#set($marker1 = ${list.get(${markers},${startCounter}).name})
+#set($marker2 = ${list.get(${markers},${endCounter}).name})
+#set($marker3 = ${list.get(${markers},${counter}).name})
+BETWEEN ${plurType}${marker1} AND ${marker2}...AND NEAR ${singType}${marker3}.
#end
#end
+#set($counter = $counter + 1)
#end
#else
-NEAR $type##
+NEAR ${plurType}##
#foreach($item in $markers)
#set($counter = $counter + 1)
#if($size > 1 && $counter == $size)
@@ -127,6 +118,52 @@ ${item.name}...##
#end
#end
#end
+########END MACRO
+
+### POINT MARKERS - VARIANCE OF MMARKERS BY EVAN BOOKBINDER & MIKE DANGELO
+### see pointMarkers.vm for details
+### AUTHORS: MIKE DANGELO AND DAVE TOMALAK
+### PURPOSE: OUTPUT IMPORTANT LOCATIONS/LARGE VENUES
+#macro(pmarkers $markers $id $name $type $column)
+#set($size = ${list.size($markers)})
+#set($lastEntry = ${size} - 1)
+#set($firstPoint = ${list.get($markers, 0).name})
+#set($lastPoint = ${list.get($markers, $lastEntry).name})
+#if(${type.length()} > 0)
+#set($singType = "${type} ")
+#set($plurType = "${type}S ")
+#else
+#set($singType = "")
+#set($plurType = "")
+#end
+#if(${size} == 1)
+${firstPoint}.
+#end
+#if(${size} == 2)
+${firstPoint} AND ${lastPoint}.
+#end
+#if(${size} > 2)
+#set($counter = 0)
+${name} ${plurType}
+#foreach($item in ${markers})
+#set($counter= ${counter} + 1)
+#if($column)
+#if (${counter} == ${size})
+AND ${lastPoint}.
+#else
+${item.name}...
+#end
+#else
+#if (${counter} == ${size})
+AND ${item.name}.
+#else
+${item.name}...##
+#end
+#end
+#end
+#end
+#end
+################# END OF POINT MARKERS MACRO
#macro(drainages $riverdrainages)
#set($size = ${list.size($riverdrainages)})
@@ -146,6 +183,7 @@ ${drainage.name}##
#end
#end
+########END MACRO
#macro(inserttorwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($torWatches = ${watches.getTorWatches()})
@@ -154,6 +192,7 @@ ${drainage.name}##
#foreach(${watch} in ${torWatches})
#if($torWatchFirst)
#set($torWatchFirst = 0)
+#else
##
#end
A TORNADO WATCH ${torWatchAlso}REMAINS IN EFFECT UNTIL ${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${localtimezone})}##
@@ -166,7 +205,7 @@ ${dateUtil.period(${watches.getLatestTorTime()},${timeFormat.plain}, 15, ${local
#set($count = 0)
#foreach(${portion} in ${watch.getPortions()})
#set($count = $count + 1)
-#areaFormat(${portion.partOfParentRegion} true false) ${portion.parentRegion}##
+#areaFormat(${portion.partOfParentRegion} true false false) ${portion.parentRegion}##
#if($count == $numPortions - 1)
AND ##
#elseif($count < $numPortions)
@@ -178,6 +217,7 @@ ${dateUtil.period(${watches.getLatestTorTime()},${timeFormat.plain}, 15, ${local
#end
#end
+########END MACRO
#macro(insertsvrwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($svrWatches = ${watches.getSvrWatches()})
@@ -186,6 +226,7 @@ ${dateUtil.period(${watches.getLatestTorTime()},${timeFormat.plain}, 15, ${local
#foreach(${watch} in ${svrWatches})
#if($svrWatchFirst)
#set($svrWatchFirst = 0)
+#else
##
#end
A SEVERE THUNDERSTORM WATCH ${svrWatchAlso}REMAINS IN EFFECT UNTIL ${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${localtimezone})}##
@@ -210,6 +251,7 @@ ${dateUtil.period(${watches.getLatestSvrTime()},${timeFormat.plain}, 15, ${local
#end
#end
+########END MACRO
#macro(printcoords $coordinates $list)
#set($count = 0)
@@ -226,16 +268,19 @@ LAT...LON ##
#end
#end
#end
+########END MACRO
#macro(headline $officeLoc $backupSite)
#headlineext(${officeLoc}, ${backupSite}, false)
#end
+########END MACRO
#macro(backupText $backupSite)
#if($backupSite)
ISSUED BY NATIONAL WEATHER SERVICE ${backupSite}
#end
#end
+########END MACRO
#macro(headlineext $officeLoc $backupSite $extend)
#if($extend)
@@ -245,126 +290,141 @@ ISSUED BY NATIONAL WEATHER SERVICE ${backupSite}
#end
THE NATIONAL WEATHER SERVICE IN ${officeLoc} HAS ${issueVar}
#end
+########END MACRO
#macro(direction $d)
#if($d==45)
SOUTHWEST##
-#elseif ($d==90)
+#elseif($d==90)
WEST##
-#elseif ($d==135)
+#elseif($d==135)
NORTHWEST##
-#elseif ($d==180)
+#elseif($d==180)
NORTH##
-#elseif ($d==225)
+#elseif($d==225)
NORTHEAST##
-#elseif ($d==270)
+#elseif($d==270)
EAST##
-#elseif ($d==315)
+#elseif($d==315)
SOUTHEAST##
#else
SOUTH##
#end
#end
+########END MACRO
-#macro(areaFormat $directionSet $useCentral $useExtreme)
-#if($useExtreme)
-#if($list.contains($directionSet, "EXTREME"))
-EXTREME ##
+#macro(areaFormat $directionSet $useCentral $useExtreme $addSpace)
+#set($output = "")
+#if(${useExtreme})
+#if(${list.contains($directionSet, "EXTREME")})
+#set($output = "EXTREME ")
#end
#end
-#if($list.contains($directionSet, "PA"))
-THE PANHANDLE OF##
+#if(${list.contains($directionSet, "PA")})
+#set($output = "${output}THE PANHANDLE OF")
#end
-#if($list.contains($directionSet, "MI"))
-MIDDLE##
+#if(${list.contains($directionSet, "MI")})
+#set($output = "${output}MIDDLE")
#end
-#if($list.contains($directionSet, "PD"))
-THE PIEDMONT OF##
+#if(${list.contains($directionSet, "PD")})
+#set($output = "${output}THE PIEDMONT OF")
#end
-#if($list.contains($directionSet, "UP"))
-UPSTATE##
+#if(${list.contains($directionSet, "UP")})
+#set($output = "${output}UPSTATE")
#end
-#if($list.contains($directionSet, "BB"))
-BIG BEND##
+#if(${list.contains($directionSet, "BB")})
+#set($output = "${output}BIG BEND")
#end
-#if($list.contains($directionSet, "ER"))
-EAST CENTRAL UPPER##
+#if(${list.contains($directionSet, "ER")})
+#set($output = "${output}EAST CENTRAL UPPER")
#end
-#if($list.contains($directionSet, "EU"))
-EASTERN UPPER##
+#if(${list.contains($directionSet, "EU")})
+#set($output = "${output}EASTERN UPPER")
#end
-#if($list.contains($directionSet, "SR"))
-SOUTH CENTRAL UPPER##
+#if(${list.contains($directionSet, "SR")})
+#set($output = "${output}SOUTH CENTRAL UPPER")
#end
-#if($list.contains($directionSet, "NR"))
-NORTH CENTRAL UPPER##
+#if(${list.contains($directionSet, "NR")})
+#set($output = "${output}NORTH CENTRAL UPPER")
#end
-#if($list.contains($directionSet, "WU"))
-WESTERN UPPER##
+#if(${list.contains($directionSet, "WU")})
+#set($output = "${output}WESTERN UPPER")
#end
-#if($list.contains($directionSet, "DS"))
-DEEP SOUTH##
+#if(${list.contains($directionSet, "DS")})
+#set($output = "${output}DEEP SOUTH")
#end
-#if($list.contains($directionSet, "NORTH"))
-NORTH##
+#if(${list.contains($directionSet, "NORTH")})
+#set($output = "${output}NORTH")
#end
-#if($list.contains($directionSet, "SOUTH"))
-SOUTH##
+#if(${list.contains($directionSet, "SOUTH")})
+#set($output = "${output}SOUTH")
#end
-#if($list.contains($directionSet, "EAST"))
-EAST##
+#if(${list.contains($directionSet, "EAST")})
+#set($output = "${output}EAST")
#end
-#if($list.contains($directionSet, "WEST"))
-WEST##
+#if(${list.contains($directionSet, "WEST")})
+#set($output = "${output}WEST")
#end
-#if($list.contains($directionSet, "NE"))
-NORTHEAST##
+#if(${list.contains($directionSet, "NE")})
+#set($output = "${output}NORTHEAST")
#end
-#if($list.contains($directionSet, "NW"))
-NORTHWEST##
+#if(${list.contains($directionSet, "NW")})
+#set($output = "${output}NORTHWEST")
#end
-#if($list.contains($directionSet, "SE"))
-SOUTHEAST##
+#if(${list.contains($directionSet, "SE")})
+#set($output = "${output}SOUTHEAST")
#end
-#if($list.contains($directionSet, "SW"))
-SOUTHWEST##
+#if(${list.contains($directionSet, "SW")})
+#set($output = "${output}SOUTHWEST")
#end
-#if($useCentral && $list.contains($directionSet, "CENTRAL"))
-#if ($list.contains($directionSet, "NORTH") || $list.contains($directionSet, "SOUTH") || $list.contains($directionSet, "EAST") ||$list.contains($directionSet, "WEST"))
- ##
+#if(${useCentral} && ${list.contains($directionSet, "CENTRAL")})
+#if(${list.contains($directionSet, "NORTH")} || ${list.contains($directionSet, "SOUTH")} || ${list.contains($directionSet, "EAST")} || ${list.contains($directionSet, "WEST")})
+#set($output = "${output} ")
#end
-CENTRAL##
-#elseif ($list.contains($directionSet, "NORTH") || $list.contains($directionSet, "SOUTH") || $list.contains($directionSet, "EAST") ||$list.contains($directionSet, "WEST"))
-ERN##
+#set($output = "${output}CENTRAL")
+#elseif(${list.contains($directionSet, "NORTH")} || ${list.contains($directionSet, "SOUTH")} || ${list.contains($directionSet, "EAST")} || ${list.contains($directionSet, "WEST")})
+#set($output = "${output}ERN")
#end
+#if($addSpace && (${output.length()} > 0))
+#set($output = "${output} ")
#end
+$output##
+#end
+########END MACRO
#macro(llFormat $v)
#set($v100 = $v * 100)
${mathUtil.abs(${mathUtil.round($v100)})}##
#end
+########END MACRO
-#macro( tml $time $motdir $motspd $timeFormat $eventlocation )
-TIME...MOT...LOC ##
-${dateUtil.format(${start}, ${timeFormat.time})}Z ##
+#macro(tml $time $timeFormat $motdir $motspd $eventlocation )
+###set($time = ${now})
+#if(${corToNewMarker})
+##overload eventTime with global corCreateTime variable
+#set($time = ${corCreateTime})
+#end
+TIME...MOT...LOC ##
+${dateUtil.format(${time}, ${timeFormat.time})}Z ##
${mathUtil.roundAndPad(${motdir})}DEG ##
${mathUtil.round(${motspd})}KT ##
#foreach(${eventCoord} in ${eventLocation})
#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
#end
#end
+########END MACRO
-#macro(handleClosestPoints $list, $points1, $points2, $stormType, $nearText, $threshold, $units, $useSecondRef)
+#macro(handleClosestPoints $list, $points1, $points2, $stormType, $nearText, $nearThreshold, $overText, $overThreshold, $units, $useSecondRef)
#if(${stormType} == "line")
#set($used = [])
#set($used1 = [])
#lineOfStorms($used1, $used, $points1, $threshold, $units)
-ALONG A LINE EXTENDING FROM #outputLineOfStorms($used1, $threshold, $units)##
+ALONG A LINE EXTENDING FROM #outputLineOfStorms($used1, $nearText, $nearThreshold, $overThreshold, $units)##
#if($points2 && $useSecondRef)
#set($used2 = [])
#lineOfStorms($used2, $used, $points2, $threshold, $units)
#if(${used1.size()} == ${used2.size()})
-...OR ALONG A LINE EXTENDING FROM #outputLineOfStorms($used2, $threshold, $units)##
+...OR ALONG A LINE EXTENDING FROM #outputLineOfStorms($used2, $nearText, $nearThreshold, $overThreshold, $units)##
#end
#end
#else
@@ -372,17 +432,39 @@ ALONG A LINE EXTENDING FROM #outputLineOfStorms($used1, $threshold, $units)##
#if($points2)
#set($point2 = ${list.get(${points2}, 0)})
#end
-#if($point1.roundedDistance <= $threshold)
+#if($point1.roundedDistance <= $overThreshold)
+${overText} ##
+#elseif($point1.roundedDistance <= $nearThreshold)
${nearText} ##
#else
${point1.roundedDistance} $units #direction(${point1.oppositeRoundedAzimuth}) OF ##
#end
-${point1.name}##
+#if(${point1.partOfArea})
+#set($location = "#areaFormat(${point1.partOfArea} true false false) ${point1.name}")
+#set($location = ${location.trim()})
+#else
+#set($location = "${point1.name}")
+#end
+${location}##
#if($point2 && $useSecondRef && ${point2.name} != ${point1.name})
-...OR ${point2.roundedDistance} $units #direction(${point2.oppositeRoundedAzimuth}) OF ${point2.name}##
+#if($point2.roundedDistance <= $overThreshold)
+...OR ${overText} ##
+#elseif($point2.roundedDistance <= $nearThreshold)
+...OR ${nearText} ##
+#else
+...OR ${point2.roundedDistance} $units #direction(${point2.oppositeRoundedAzimuth}) OF ##
+#end
+#if(${point2.partOfArea})
+#set($location = "#areaFormat(${point2.partOfArea} true false false) ${point2.name}")
+#set($location = ${location.trim()})
+#else
+#set($location = "${point2.name}")
+#end
+${location}##
#end
#end
#end
+########END MACRO
#macro(lineOfStorms $toUse, $usedList, $line, $nearThreshold, $units)
#foreach(${closestPoints} in ${line})
@@ -398,22 +480,26 @@ ${point1.name}##
#end
#end
#end
+########END MACRO
-#macro(outputLineOfStorms $points, $nearThreshold, $units)
-#set ($first = "true")
+#macro(outputLineOfStorms $points, $nearText, $nearThreshold, $overThreshold, $units)
+#set($first = "true")
#foreach(${closestPoint} in ${points})
#if(${first} == "true")
-#set ($first = "false")
+#set($first = "false")
#else
TO ##
#end
-#if(${closestPoint.roundedDistance} < ${nearThreshold})
+#if(${closestPoint.roundedDistance} < ${overThreshold})
${closestPoint.name}##
+#elseif(${closestPoint.roundedDistance} < ${nearThreshold})
+${nearText} ${closestPoint.name}##
#else
${closestPoint.roundedDistance} ${units} #direction(${closestPoint.oppositeRoundedAzimuth}) OF ${closestPoint.name}##
#end
#end
#end
+########END MACRO
##################################################################
##### BEGIN NEW STATEMENT/ADVISORY COUNTY HEADLINE CODE ##########
@@ -421,7 +507,7 @@ ${closestPoint.roundedDistance} ${units} #direction(${closestPoint.oppositeRound
## useCentralxxx = boolean to use the word CENTRAL in the County or State phrase
## useExtremexxx = boolean to use the word EXTREME in the county of State phrase
##################################################################
-#macro(headlineLocList $areas $useCentralCounty $useExtremeCounty $useCentralState $useExtremeState $lock)
+#macro(headlineLocList $areas $useCentralCounty $useExtremeCounty $useCentralState $useExtremeState)
#set($countyCount = 0)
#set($countyCounter = 0)
#set($itemCount = 0)
@@ -474,6 +560,7 @@ ${closestPoint.roundedDistance} ${units} #direction(${closestPoint.oppositeRound
#set($prevCounty = ${area.name})
#set($prevCountyType = ${area.areaNotation})
#set($prevCountiesType = ${area.areasNotation})
+#set($prevStateAbbrev = ${area.stateabbr})
#set($prevState = ${area.parentRegion})
#set($prevPartOfState = ${partOfState})
#end
@@ -489,137 +576,93 @@ ${closestPoint.roundedDistance} ${units} #direction(${closestPoint.oppositeRound
#if(${countyCounter} > 2)
...##
#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
#if(${prevPartOfCounty.size()} > 0)
-#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty}) ##
+#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty} true)##
#end
-#if(${lock} == true)
-${prevCounty} ##
-#else
${prevCounty}##
-#end
-#if(${prevCountyType} != ${area.areaNotation} || ${useStates} == true)
-#if(${lock} == true)
- ${prevCountyType} ##
-#else
+#if((${prevCountyType} != ${area.areaNotation} || ${useStates} == true) && ${prevStateAbbrev} != "DC")
${prevCountyType}##
#end
-#end
-#if(${useStates} == true)
-#if(${lock} == true)
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState} ##
-#else
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState}##
-#end
+#if(${useStates} == true && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
#end
#else
AND ##
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
#if(${prevPartOfCounty.size()} > 0)
-#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty}) ##
+#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty} true)##
#end
-#if(${lock} == true)
-${prevCounty} ##
-#else
${prevCounty}##
-#end
#if(${prevCountyType} != ${area.areaNotation} || ${useStates} == true)
#if(${countyCount} > 1)
#if(${prevCountiesType})
-#if(${lock} == true)
- ${prevCountiesType} ##
-#else
${prevCountiesType}##
#end
-#end
#elseif(${prevCountyType})
-#if(${lock} == true)
- ${prevCountyType} ##
-#else
${prevCountyType}##
#end
#end
-#end
-#if(${useStates} == true)
-#if(${lock} == true)
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState} ##
-#else
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState}##
-#end
+#if(${useStates} == true && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
#end
#end
#set($countyCount = 1)
### IF WE ARE ON THE LAST ITEM...OUTPUT THE PREVIOUS AND LAST ITEM
-#elseif (${itemCount} == ${numCounties})
+#elseif(${itemCount} == ${numCounties})
#if(${countyCount} >= 1)
#if(${countyCounter} > 2)
...##
#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
#if(${prevPartOfCounty.size()} > 0)
-#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty}) ##
+#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty} true)##
#end
-#if(${lock} == true)
-${prevCounty} ##
-#else
${prevCounty}##
-#end
-#if(${prevCountyType} != ${area.areaNotation} || (${prevCountyType} != ${area.areaNotation} || ((${prevState} != ${area.parentRegion} || ${prevPartOfState} != ${partOfState}) && ${useStates} == true)))
+#if(${prevStateAbbrev} != "DC" && (${prevCountyType} != ${area.areaNotation} || (${prevCountyType} != ${area.areaNotation} || ((${prevState} != ${area.parentRegion} || ${prevPartOfState} != ${partOfState}) && ${useStates} == true))))
#if(${countyCount} > 1)
#if(${prevCountiesType})
-#if(${lock} == true)
- ${prevCountiesType} ##
-#else
${prevCountiesType}##
#end
-#end
#elseif(${prevCountyType})
-#if(${lock} == true)
- ${prevCountyType} ##
-#else
${prevCountyType}##
#end
#end
-#end
-#if((${prevCountyType} != ${area.areaNotation} || ((${prevState} != ${area.parentRegion} || ${prevPartOfState} != ${partOfState}) && ${useStates} == true)))
-#if(${lock} == true)
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState} ##
-#else
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState}##
-#end
+#if((${prevCountyType} != ${area.areaNotation} || ((${prevState} != ${area.parentRegion} || ${prevPartOfState} != ${partOfState}) && ${useStates} == true)) && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
#end
AND ##
+#if(${area.stateabbr} == "DC")
+THE ##
+#end
#if(${area.partOfArea})
-#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty}) ##
+#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty} true)##
#end
-#if(${lock} == true)
-${area.name}##
-#else
${area.name}##
-#end
-#if(${countyCount} >= 1)
#if(${area.areasNotation})
-#if(${lock} == true)
- ${area.areasNotation} ##
-#else
+#if(${countyCount} >= 1)
${area.areasNotation}##
-#end
-#end
-#elseif(${area.areaNotation})
-#if(${lock} == true)
- ${area.areaNotation} ##
#else
${area.areaNotation}##
#end
#end
-#if(${lock} == true)
- ##
-#else
##
-#end
-#if(${useStates} == true)
-#if(${lock} == true)
- IN #areaFormat(${partOfState} ${useCentralState} ${useExtremeState}) ${area.parentRegion} ##
-#else
- IN #areaFormat(${partOfState} ${useCentralState} ${useExtremeState}) ${area.parentRegion}##
-#end
+#if(${useStates} == true && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${partOfState} ${useCentralState} ${useExtremeState} true)##
+${area.parentRegion}##
#end
#else
#if(${countyCounter} > 1)
@@ -628,20 +671,17 @@ ${area.name}##
AND ##
#end
#end
+#if(${area.stateabbr} == "DC")
+THE ##
+#end
#if(${area.partOfArea})
-#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty}) ##
+#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty} true)##
#end
-#if(${lock} == true)
-${area.name} ${area.areaNotation} ##
-#else
${area.name} ${area.areaNotation}##
-#end
-#if(${useStates} == true)
-#if(${lock} == true)
- IN #areaFormat(${partOfState} ${useCentralState} ${useExtremeState}) ${area.parentRegion} ##
-#else
- IN #areaFormat(${partOfState} ${useCentralState} ${useExtremeState}) ${area.parentRegion}##
-#end
+#if(${useStates} == true && ${area.stateabbr} != "DC")
+ IN ##
+#areaFormat(${partOfState} ${useCentralState} ${useExtremeState} true)##
+${area.parentRegion}##
#end
#end
#set($countyCount = 0)
@@ -652,15 +692,14 @@ ${area.name} ${area.areaNotation}##
#if(${countyCounter} > 2)
...##
#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
#if(${prevPartOfCounty.size()} > 0)
-#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty}) ##
+#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty} true)##
#end
-#if(${lock} == true)
-${prevCounty} ##
-#else
${prevCounty}##
#end
-#end
#set($countyCount= $countyCount + 1)
#end
####DONE OUTPUTTING. SET CURRENT VARIABLES TO PREVIOUS
@@ -673,6 +712,7 @@ ${prevCounty}##
#set($prevCountyType = ${area.areaNotation})
#set($prevCountiesType = ${area.areasNotation})
#set($prevState = ${area.parentRegion})
+#set($prevStateAbbrev = ${area.stateabbr})
#set($prevPartOfState = ${partOfState})
####THIS IS AN INDEPENDENT CITY...ADD TO COUNTER FOR NOW
#else
@@ -687,71 +727,266 @@ ${prevCounty}##
#set($intFIPS = 0)
#if(${intFIPS.parseInt($FIPS)} >= 500 && ${area.stateabbr} != "TX")
#set($indepCityCount= $indepCityCount + 1)
-#if (${indepCityCount} == 1 && ${countyCount} > 0)
-#if(${prevPartOfCounty})
-#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty}) ##
+#if(${indepCityCount} == 1 && ${countyCount} > 0)
+#if(${countyCounter} > 1)
+...##
+#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
+#if(${prevPartOfCounty})
+#areaFormat(${prevPartOfCounty} ${useCentralCounty} ${useExtremeCounty} true)##
+#end
+${prevCounty} ##
+#if(${countyCount} > 1 && ${prevStateAbbrev} != "DC")
+#if(${prevCountiesType})
+${prevCountiesType}##
+#elseif(${prevCountyType})
+${prevCountyType}##
#end
-#if(${lock} == true)
-${prevCounty} ${prevCountyType} ##
-#else
-${prevCounty} ${prevCountyType}##
#end
#if(${useStates} == true)
-#if(${lock} == true)
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState} ##
-#else
- IN #areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState}) ${prevState}##
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
#end
#end
-#end
-#if (${indepCityCount} == ${numIndepCity})
-#if (${indepCityCount} == 1)
+#if(${indepCityCount} == ${numIndepCity})
+#if(${indepCityCount} == 1)
### COUNTIES + 1 INDEPENDENT CITY
-#if (${numCounties} > ${numIndepCity})
-#if(${lock} == true)
- AND THE ${area.name} ##
-#else
+#if(${numCounties} > ${numIndepCity})
AND THE ${area.name}##
-#end
### NO COUNTIES AND ONE INDEPENDENT CITY
#else
-#if(${lock} == true)
-THE ${area.name} ##
-#else
-THE ${area.name}##
+THE ##
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty} true)##
#end
+${area.name}##
#end
#else
## MULTIPLE INDEPENDENT CITIES...LAST ITEM IN THE LIST
-#if(${lock} == true)
- AND THE ${area.name} ##
-#else
- AND THE ${area.name}##
+ AND THE ##
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty} true)##
#end
+${area.name}##
#end
#else
-#if(${lock} == true)
-...THE ${area.name} ##
-#else
-...THE ${area.name}##
-#end
+...THE ##
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} ${useCentralCounty} ${useExtremeCounty} true)##
+#end
+${area.name}##
#end
#end
#end
#end
#end
+########END MACRO
+####################################################################
+##### BEGIN NEW STATEMENT/ADVISORY ZONE HEADLINE CODE ##########
+## AUTHORED BY EVAN BOOKBINDER WFO EAX 9-13-2012 ##########
+## useCentralxxx = boolean to use the word CENTRAL in the Zone or State phrase
+## useExtremexxx = boolean to use the word EXTREME in the county of State phrase
+####################################################################
+#macro(zoneHeadlineLocList $areas $useCentralZone $useExtremeZone $useCentralState $useExtremeState)
+#set($zoneCount = 0)
+#set($zoneCounter = 0)
+#set($itemCount = 0)
+#set($numZones = ${list.size($areas)})
+#set($useStates = false)
+### CHECK FOR DUPLICATE COUNTY NAMES WITHIN A CWA
+#parse("dupCounties.vm")
+#foreach (${area} in ${areas})
+#if(${list.contains($dupcounties, "${area.fips}")})
+#set($useStates = true)
+#end
+#end
+##END DUPE COUNTY NAME CHECK
+#foreach (${area} in ${areas})
+####
+## THIS SECTION OF CODE REMOVES CENTRAL AND/OR EXTREME FROM THE PART OF STATE ARRAY
+## IF NECESSARY SO THAT WE CAN LOGICALLY DO OUR COMPARISONS
+#set($partOfState = [])
+#foreach ($pos in ${area.partOfParentRegion})
+#if(${pos} == "CENTRAL")
+#if(${useCentralState})
+#set($temp = $partOfState.add(${pos}))
+#end
+#elseif(${pos} == "EXTREME")
+#if(${useExtremeState})
+#set($temp = $partOfState.add(${pos}))
+#end
+#else
+#set($temp = $partOfState.add(${pos}))
+#end
+#end
+####
+#set($itemCount = $itemCount + 1)
+#set($zoneCounter = $zoneCounter + 1)
+##INITIALIZE CHECK VARIABLES
+#if($zoneCount == 0)
+#if(${area.partOfArea})
+#set($prevPartOfZone = ${area.partOfArea})
+#else
+#set($prevPartOfZone = [])
+#end
+#set($prevZone = ${area.name})
+#set($prevStateAbbrev = ${area.stateabbr})
+#set($prevState = ${area.parentRegion})
+#set($prevPartOfState = ${partOfState})
+#end
+### BEGIN FORMULATING HEADLINE...CHECKING FOR CHANGES IN PART OF STATE,
+### STATE, COUNTYTYPE, AND INDEPENDENT CITIES...AS WELL AS PLURALITY
+###
+### IF WE ARE NOT ON THE LAST ITEM, BUT WE HAVE EITHER
+### 1.) CHANGED COUNTY NOMENCLATURE (COUNTY TO PARISH)
+### 2.) CHANGED STATE (and we have a duplicate zonename requiring the state to be output)
+### 3.) CHANGED PART OF STATE (and we have a duplicate zonename requiring the state to be output)
+#if(${itemCount} < ${numZones} && (((${prevState} != ${area.parentRegion} || ${prevPartOfState} != ${partOfState}) && ${useStates} == true)))
+#if(${zoneCount} == 1)
+#if(${zoneCounter} > 2)
+...##
+#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
+#if(${prevPartOfZone.size()} > 0)
+#areaFormat(${prevPartOfZone} ${useCentralZone} ${useExtremeZone} true)##
+#end
+${prevZone}##
+#if(${useStates} == true && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
+#end
+#else
+ AND ##
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
+#if(${prevPartOfZone.size()} > 0)
+#areaFormat(${prevPartOfZone} ${useCentralZone} ${useExtremeZone} true)##
+#end
+${prevZone}##
+#if(${useStates} == true && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
+#end
+#end
+#set($zoneCount = 1)
+### IF WE ARE ON THE LAST ITEM...OUTPUT THE PREVIOUS AND LAST ITEM
+#elseif(${itemCount} == ${numZones})
+#if(${zoneCount} >= 1)
+#if(${zoneCounter} > 2)
+...##
+#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
+#if(${prevPartOfZone.size()} > 0)
+#areaFormat(${prevPartOfZone} ${useCentralZone} ${useExtremeZone} true)##
+#end
+${prevZone}##
+#if(((${prevState} != ${area.parentRegion} || ${prevPartOfState} != ${partOfState}) && ${useStates} == true)) && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${prevPartOfState} ${useCentralState} ${useExtremeState} true)##
+${prevState}##
+#end
+ AND ##
+#if(${area.stateabbr} == "DC")
+THE ##
+#end
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} ${useCentralZone} ${useExtremeZone} true)##
+#end
+${area.name}##
+#if(${useStates} == true && ${prevStateAbbrev} != "DC")
+ IN ##
+#areaFormat(${partOfState} ${useCentralState} ${useExtremeState} true)##
+${area.parentRegion}##
+#end
+#else
+#if(${zoneCounter} > 1)
+...AND ##
+#end
+#if(${area.stateabbr} == "DC")
+THE ##
+#end
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} ${useCentralZone} ${useExtremeZone} true)##
+#end
+${area.name} ##
+#if(${useStates} == true && ${area.stateabbr} != "DC")
+ IN ##
+#areaFormat(${partOfState} ${useCentralState} ${useExtremeState} true)##
+${area.parentRegion}##
+#end
+#end
+#set($zoneCount = 0)
+###ELSE WE ARE IN THE MIDDLE OF OUR LIST WITH NO CHANGES...JUST OUTPUT THE
+###AREA NAME
+#else
+#if(${zoneCounter} > 1)
+#if(${zoneCounter} > 2)
+...##
+#end
+#if(${prevStateAbbrev} == "DC")
+THE ##
+#end
+#if(${prevPartOfZone.size()} > 0)
+#areaFormat(${prevPartOfZone} ${useCentralZone} ${useExtremeZone} true)##
+#end
+${prevZone}##
+#end
+#set($zoneCount= $zoneCount + 1)
+#end
+####DONE OUTPUTTING. SET CURRENT VARIABLES TO PREVIOUS
+#if(${area.partOfArea})
+#set($prevPartOfZone = ${area.partOfArea})
+#else
+#set($prevPartOfZone = [])
+#end
+#set($prevZone = ${area.name})
+#set($prevState = ${area.parentRegion})
+#set($prevStateAbbrev = ${area.stateabbr})
+#set($prevPartOfState = ${partOfState})
+#end
+#end
+########END MACRO
+
+######### MACRO TO GENERATE FIRST BULLET IN WARNINGS ##########
#macro(firstBullet $areas)
#foreach (${area} in ${areas})
-#if(${area.partOfArea})
-#areaFormat(${area.partOfArea} true true) ##
-#end
#set($FIPS = ${area.fips.substring(2)})
#set($intFIPS = 0)
-#if(${intFIPS.parseInt($FIPS)} < 500 || ${area.stateabbr} == "TX")
-${area.name} ${area.areaNotation} IN #areaFormat(${area.partOfParentRegion} true false) ${area.parentRegion}...
+##OUTPUT FOR NORMAL COUNTIES/ZONES
+#if((${intFIPS.parseInt($FIPS)} < 500 || ${area.stateabbr} == "TX") && ${area.stateabbr} != "DC")
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} true true true)##
+#end
+${area.name} ${area.areaNotation} IN ##
+#areaFormat(${area.partOfParentRegion} true false true)##
+${area.parentRegion}...
+##OUTPUT FOR D.C.
+#elseif (${area.stateabbr} == "DC")
+THE ##
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} true false true)##
+#end
+${area.name}...
+##OUTPUT FOR INDEPENDENT CITIES
#else
-${area.name} IN #areaFormat(${area.partOfParentRegion} true false) ${area.parentRegion}...
+THE ##
+#if(${area.partOfArea})
+#areaFormat(${area.partOfArea} true false true)##
+#end
+${area.name} IN ##
+#areaFormat(${area.partOfParentRegion} true false true)##
+${area.parentRegion}...
#end
#end
## COMMENTED OUT 5 LINES BELOW THIS IS GENERALLY NOT UTILIZED - you can unREMARK if desired
@@ -761,7 +996,90 @@ THE ${area.name}##
## THIS INCLUDES THE CITY OF ${list.get(${area.points},0)}
## #end
#end
+########END MACRO
+######### MACRO TO GENERATE FIRST BULLET IN WARNINGS ##########
+#macro(firstBulletNew $areas)
+#set($countyFlag = 0)
+#set($parishFlag = 0)
+##ONE LOCATION AND ONLY DC
+#if(${list.size($areas)} == 1 && ${list.get(${areas},0).stateabbr} == "DC")
+...
+##ONE LOCATION AND ONLY Louisiana
+#elseif(${list.size($areas)} == 1 && ${list.get(${areas},0).stateabbr} == "LA")
+THE FOLLOWING PARISH...
+
+##ONE LOCATION OTHERWISE
+#elseif(${list.size($areas)} == 1)
+THE FOLLOWING COUNTY...
+#else
+##MULTIPLE LOCATIONS
+#foreach (${area} in ${areas})
+#if(${area.stateabbr} == "LA")
+#set($parishFlag = ${parishFlag} + 1)
+#end
+#end
+#if(${parishFlag} == 0)
+THE FOLLOWING COUNTIES...
+
+#elseif(${list.size($areas)} == ${parishFlag})
+THE FOLLOWING PARISHES...
+
+#else
+THE FOLLOWING COUNTIES AND PARISHES...
+
+#end
+#end
+
+#set($partOfState = "")
+#set($stateAbbrev = "")
+#foreach (${area} in ${areas})
+#set($test1 = "#areaFormat(${area.partOfParentRegion} true false true)")
+#set($test2 = ${area.stateabbr})
+#if(${test1} != ${partOfState} || ${test2} != ${stateAbbrev})
+#set($partOfState = ${test1})
+#set($stateAbbrev = ${test2})
+#if (${area.stateabbr} != "DC")
+
+ IN ${partOfState}${area.parentRegion}...
+#end
+#end
+#set($FIPS = ${area.fips.substring(2)})
+#set($intFIPS = 0)
+#set($partOfArea = "")
+##OUTPUT FOR NORMAL COUNTIES/ZONES
+#if((${intFIPS.parseInt($FIPS)} < 500 || ${area.stateabbr} == "TX") && ${area.stateabbr} != "DC")
+#if(${area.partOfArea})
+#set($partOfArea = "#areaFormat(${area.partOfArea} true true true)")
+#end
+ ${partOfArea}${area.name}...
+##OUTPUT FOR D.C.
+#elseif (${area.stateabbr} == "DC")
+
+ THE ##
+#if(${area.partOfArea})
+#set($partOfArea = "#areaFormat(${area.partOfArea} true false true)")
+#end
+${partOfArea}${area.name}...
+##OUTPUT FOR INDEPENDENT CITIES
+#else
+ THE ##
+#if(${area.partOfArea})
+#set($partOfArea = "#areaFormat(${area.partOfArea} true false true)")
+#end
+${partOfArea}${area.name}...
+#end
+#end
+## COMMENTED OUT 5 LINES BELOW THIS IS GENERALLY NOT UTILIZED - you can unREMARK if desired
+## #if(${list.size($area.points)} > 1)
+## THIS INCLUDES THE CITIES OF... #foreach (${city} in ${area.points})${city}... #end
+## #elseif(${list.size($area.points)} > 0)
+## THIS INCLUDES THE CITY OF ${list.get(${area.points},0)}
+## #end
+#end
+########END MACRO
+
+######### MACRO TO GENERATE SECOND BULLET (UNTIL XXXX AMPM TZ (DAY) IN WARNINGS ##########
#macro(secondBullet $dateUtil $expire $timeFormat $localtimezone $secondtimezone $duration)
#if(${duration} >= 360)
UNTIL ${dateUtil.format(${expire}, ${timeFormat.plain}, 15, ${localtimezone})}##
@@ -776,17 +1094,27 @@ UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}##
#end
#end
#end
+########END MACRO
-#macro(thirdBullet $dateUtil $eventtime $timeFormat $localtimezone $secondtimezone)
+######### MACRO TO GENERATE START OF THIRD BULLET
+#macro(thirdBullet $dateUtil $eventTime $timeFormat $localtimezone $secondtimezone)
+#set($time = ${now})
#if(${corToNewMarker})
-AT ${corEventtime}##
-#else
-AT ${dateUtil.format(${eventtime}, ${timeFormat.clock}, ${localtimezone})}##
+##overload eventTime with global corCreateTime variable
+#set($time = ${corCreateTime})
#end
+###OLD CODE BLOCK FOR EVENT TIME
+###set($time = ${eventTime})
+###if(${corToNewMarker})
+####overload eventTime with global corEventTime variable
+###set($time = ${corEventTime})
+###end
+AT ${dateUtil.format(${time}, ${timeFormat.clock}, ${localtimezone})}##
#if(${secondtimezone})
- /${dateUtil.format(${eventtime}, ${timeFormat.clock}, ${secondtimezone})}/##
+ /${dateUtil.format(${time}, ${timeFormat.clock}, ${secondtimezone})}/##
#end
#end
+########END MACRO
## AUTHOR: EVAN BOOKBINDER
## This macro will output a pathcast based on the thresholds/parameters
@@ -818,7 +1146,13 @@ ${pathcastLead}
#set($count = 0)
##
#foreach (${city} in ${pc.points})
-${city.name}##
+#if(${city.partOfArea})
+#set($location = "#areaFormat(${city.partOfArea} true false false) ${city.name}")
+#set($location = ${city.trim()})
+#else
+#set($location = "${city.name}")
+#end
+${location}##
#set($count = $count + 1)
#if($count == $numCities - 1)
AND ##
@@ -835,9 +1169,15 @@ ${city.name}##
OTHER LOCATIONS IMPACTED BY ${otherLead} INCLUDE ##
#set($count = 0)
-#foreach(${location} in ${otherPoints})
+#foreach(${loc} in ${otherPoints})
#set($count = $count + 1)
-${location.name}##
+#if(${loc.partOfArea})
+#set($location = "#areaFormat(${loc.partOfArea} true false false) ${loc.name}")
+#set($location = ${loc.trim()})
+#else
+#set($location = "${loc.name}")
+#end
+${location}##
#if($count == $numOtherPoints - 1)
AND ##
#elseif($count < $numOtherPoints)
@@ -852,15 +1192,21 @@ ${location.name}##
${otherLead} WILL REMAIN OVER MAINLY OPEN WATERS.
#else
${otherLead} WILL REMAIN OVER MAINLY RURAL AREAS OF ##
-#headlineLocList(${areas} true true true false false).##
+#headlineLocList(${areas} true true true false).##
###NOW SEARCH FOR OTHER POINTS (PRESUMABLY 3s) AND LIST THEM HERE
### NEED TO CODE THIS ONCE SECTION IS ADDED
#set($numOtherPoints = ${list.size($thirdTier)})
#if($numOtherPoints > 0)
..INCLUDING THE FOLLOWING LOCATIONS ##
#set($count = 0)
-#foreach(${location} in ${thirdTier})
+#foreach(${loc} in ${thirdTier})
#set($count = $count + 1)
+#if(${loc.partOfArea})
+#set($location = "#areaFormat(${loc.partOfArea} true false false) ${loc.name}")
+#set($location = ${loc.trim()})
+#else
+#set($location = "${loc.name}")
+#end
${location.name}##
#if($count == $numOtherPoints - 1)
AND ##
@@ -875,10 +1221,52 @@ ${location.name}##
#end
#end
#end
+########END MACRO
+
+## AUTHOR: EVAN BOOKBINDER
+## FORCES INDENTED TEXT/LINE WRAPPING
+## INPUT VARIABLES: inString - Input String
+## indentChars - # of characters to indent on first line
+## indentCharsSub - # of chars to indent on subsequent lines
+#macro(wrapText $inString $indentChars $indentCharsSub)
+#set($defLineWrap = 69)
+#set($lineNum = 1)
+#set($applyIndent = 1)
+#set($charcount = 0)
+#set($strArray = ${inString.split(" ")})
+#foreach ($word in $strArray)
+#if(($charcount + ${word.length()} + 1) > $defLineWrap)
+#set($lineNum = ${lineNum} + 1)
+#set($applyIndent = 1)
+#set($charcount = 0)
+
+#end
+#if($applyIndent == 1)
+#set($applyIndent = 0)
+#if($lineNum == 1)
+#set($spaces = $indentChars)
+#else
+#set($spaces = $indentCharsSub)
+#end
+##INITIALIZE Character count for this line
+#set($charcount = $spaces)
+#if(${spaces} > 0)
+#foreach ($indent in [1..${spaces}])
+ ##
+#end
+#end
+#end
+${word} ##
+#set($charcount = $charcount + ${word.length()} + 1)
+#end
+
+#end
+########END MACRO
## AUTHOR: EVAN BOOKBINDER
## OUTPUTS A STRING PADDED WITH WHITESPACE
## USED FOR COLUMN FORMATTING OF CITIES
+## input string, column width, force line feeds?
#macro(padOutput $inString $width $lineFeed)
#set($ellipsesTest = $width - 3)
#if(${inString.length()} >= $ellipsesTest)
@@ -900,6 +1288,7 @@ ${inString}...##
#end
#end
#end
+########END MACRO
## AUTHOR: EVAN BOOKBINDER
## Updated by Phil Kurimski to fix an error with one location impacted
@@ -923,23 +1312,29 @@ ${inString}...##
## dateUtil (date utility object)
## timeFormat (time formatting object)
## marineFlag (1 if marine product)
-#macro(locationsList $bulletLead $ruralPhrase $columns $cityList $otherCityList $areas $dateUtil $timeFormat $marineFlag)
-#set($numMajorPoints = ${list.size($cityList)})
+#macro(locationsList $bulletLead $ruralPhrase $columns $locList $otherLocList $areas $dateUtil $timeFormat $marineFlag)
+#set($numMajorPoints = ${list.size($locList)})
#if($numMajorPoints > 0)
${bulletLead}
#set($count = 0)
-#set($colWidth = 67 / $columns)
+#set($colWidth = 69 / $columns)
#set($colCount = 0)
-#foreach(${city} in ${cityList})
+#foreach(${loc} in ${locList})
+#if(${loc.partOfArea})
+#set($location = "#areaFormat(${loc.partOfArea} true false false) ${loc.name}")
+#set($location = ${location.trim()})
+#else
+#set($location = "${loc.name}")
+#end
#set($count = $count + 1)
#if($count < $numMajorPoints)
-#set($strOutput = "${city.name}...")
+#set($strOutput = "${location}...")
#else
-#set($strOutput = "${city.name}.")
+#set($strOutput = "${location}.")
#end
##Exception for 2 items in straight list
#if((${count} == ${numMajorPoints} - 1) && $columns == 0)
-#set($strOutput = "${city.name} ")
+#set($strOutput = "${location} ")
#end
##STRAIGHT LIST
#if($columns == 0)
@@ -965,9 +1360,9 @@ AND ${strOutput}
#else
#set($colCount = $colCount + 1)
#if($colCount != $columns)
-#padOutput(${city.name} $colWidth 0)
+#padOutput(${location} $colWidth 0)
#else
-#padOutput(${city.name} $colWidth 1)
+#padOutput(${location} $colWidth 1)
#set($colCount = 0)
#end
#end
@@ -981,26 +1376,32 @@ AND ${strOutput}
${ruralPhrase} WILL REMAIN OVER MAINLY OPEN WATERS.
#else
## NO MAJOR POINTS FOUND. LIST RURAL AREAS
-${ruralPhrase} WILL REMAIN OVER MAINLY RURAL AREAS OF #headlineLocList(${areas} true true true false false).##
-#set($numMinorPoints = ${list.size($otherCityList)})
+${ruralPhrase} WILL REMAIN OVER MAINLY RURAL AREAS OF #headlineLocList(${areas} true true true false).##
+#set($numMinorPoints = ${list.size($otherLocList)})
#if(${numMinorPoints} == 1)
-..INCLUDING THE COMMUNITY OF ##
+..WHICH INCLUDES ##
#elseif(${numMinorPoints} > 1)
-..INCLUDING THE COMMUNITIES OF ##
+..INCLUDING THE FOLLOWING LOCATIONS...##
#else
#end
#set($count = 0)
-#foreach(${city} in ${otherCityList})
+#foreach(${loc} in ${otherLocList})
+#if(${loc.partOfArea})
+#set($location = "#areaFormat(${loc.partOfArea} true false false) ${loc.name}")
+#set($location = ${location.trim()})
+#else
+#set($location = "${loc.name}")
+#end
#set($count = $count + 1)
#if(${count} < ${numMinorPoints} - 1)
-${city.name}...##
+${location}...##
#elseif(${count} == ${numMinorPoints} - 1)
-${city.name} ##
-#elseif (${count} == ${numMinorPoints} && ${count} != 1)
-AND ${city.name}.
-#elseif (${count} == ${numMinorPoints})
-${city.name}.
+${location} ##
+#elseif(${count} == ${numMinorPoints} && ${count} != 1)
+AND ${location}.
+#elseif(${count} == ${numMinorPoints})
+${location}.
#end
#end
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/airportWeatherWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/airportWeatherWarning.vm
new file mode 100644
index 0000000000..6e81ff75e1
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/airportWeatherWarning.vm
@@ -0,0 +1,134 @@
+######################################################
+## AIRPORT WEATHER WARNING TEMPLATE ##
+## EXAMPLE TEMPLATE USING HUNTSVILLE PRODUCT ##
+## CREATED BY PHIL KURIMSKI - WFO DTX ##
+## VERSION AWIPS II 1.0 -- APR 12 2012 ##
+## VERSION AWIPS II 1.1 -- SEP 12 2012 OB12.9.1-12 ##
+######################################################
+##
+${WMOId} ${vtecOffice} 000000 ${BBBId}
+AWW${siteId}
+#if(${productClass}=="T")
+TEST...AIRPORT WEATHER WARNING...TEST##
+#else
+AIRPORT WEATHER WARNING##
+#end
+
+NATIONAL WEATHER SERVICE ${officeShort}
+#backupText(${backupSite})
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+#if(${productClass}=="T")
+...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
+#end
+
+${ugcline}
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
+#end
+${zoneList}
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#######################################################################
+## Set initial variables for initial issuance
+#######################################################################
+#set ($cancel = "")
+#set ($issue = "ISSUED AN")
+#######################################################################
+## Override initial variables if a cancellation is selected
+#######################################################################
+#if(${list.contains(${bullets}, "cancelAWW")})
+#set ($cancel = " CANCELLED")
+#set ($issue = "CANCELLED THE")
+#end
+#######################################################################
+## Set the airport based on selection in template
+## Sites can use different airports by modifying the code below
+#######################################################################
+#set ($site = "!** YOU DIDN'T SELECT AN AIRPORT **!")
+#if(${list.contains(${bullets}, "HSV")})
+ #set ($site = "HUNTSVILLE INTERNATIONAL AIRPORT /HSV/")
+#end
+#if(${list.contains(${bullets}, "MSL")})
+ #set ($site = "NORTHWEST ALABAMA REGIONAL AIRPORT (IN MUSCLE SHOALS) /MSL/")
+#end
+######################################################
+###### Storm current location description ##########
+######################################################
+...AIRPORT WEATHER WARNING${cancel}...
+
+THE NATIONAL WEATHER SERVICE IN ${officeLoc} HAS ${issue} AIRPORT WEATHER WARNING FOR...
+
+${site}
+
+####################################################
+############# SECOND BULLET ########################
+####################################################
+## If cancelling the AWW do not output any text
+####################################################
+#if(${list.contains(${bullets}, "cancelAWW")})
+!** GIVE REASON FOR CANCELLATION **!
+#else
+* ##
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
+
+
+FOR THE FOLLOWING THREATS...
+
+###################################################################
+## Create threats based on selections in the xml file
+## Sites can add or modify threats by changing the code below
+###################################################################
+#if(${list.contains(${bullets}, "wind")})
+* WIND GUSTS 30 KNOTS OR HIGHER.
+
+#end
+#if(${list.contains(${bullets}, "lightning")})
+* CLOUD TO GROUND LIGHTNING WITHIN 5 NM OF THE AIRPORT.
+
+#end
+#if(${list.contains(${bullets}, "hail")})
+* HAIL OF 1/2 INCH OR GREATER.
+
+#end
+#if(${list.contains(${bullets}, "freezingRain")})
+* ONSET OF FREEZING RAIN.
+
+#end
+#if(${list.contains(${bullets}, "sleetSnow")})
+* ONSET OF ACCUMULATING SLEET OR SNOW.
+
+#end
+
+## parse file command here is to pull in mile marker info
+## #parse("mileMarkers.vm")
+#end
+#############
+## WATCHES ##
+#############
+#######################################################################
+## If sites do not want watches in their AWW product comment out the
+## section below
+#######################################################################
+#if(${list.contains(${includedWatches}, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
+#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
+
+#end
+#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
+#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
+
+#end
+
+###printcoords(${areaPoly}, ${list})
+
+$$
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/airportWeatherWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/airportWeatherWarning.xml
new file mode 100644
index 0000000000..bcfb659b62
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/airportWeatherWarning.xml
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+ nmi
+ kn
+
+
+
+ ACARS Airport Locations
+ Forecast Zones
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ true
+
+
+
+ torWatches
+ svrWatches
+
+
+
+ 60
+
+ 15
+ 30
+ 45
+ 60
+ 75
+ 90
+ 120
+ 180
+ 240
+ 300
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Zone
+ 0
+ AND
+ 0
+
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ STATE_ZONE
+
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
+
+
+ NAME
+ 1
+ AREA
+ TRACK
+ true
+ 10
+ 10
+
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+
+ NAME
+ AREA
+ POINTS
+
+
+
+
+
+
+
+
+ 1
+ 100
+
+ distance
+ warngenlev
+
+
+
+
+ NAME
+ AREA
+ POINTS
+
+
+
+
+
+
+
+
+ 5
+ 100
+
+ distance
+ warngenlev
+
+
+
+
+ AREA
+ true
+ 8.0
+ 5
+ 5
+ 10
+ 8
+ Name
+
+ NAME -->
+ STATE
+ STATE
+ countyTypes.txt
+
+ warngenlev
+ population
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+ NAME
+ 1
+ AREA
+ TRACK
+ true
+ 20
+ 10
+
+
+
+
+
+
+
+
+
+ warngenlev
+ population
+ distance
+
+
+
+
+
+
+
+
+
+ WarnGenLoc
+
+ Zone
+ States
+ TIMEZONES
+ TIME_ZONE
+
+
+
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.vm
index 57cd016faa..ecc8003cf1 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.vm
@@ -1,14 +1,18 @@
####################
## FLOOD ADVISORY ##
####################
-## Edited by Phil Kurimski 8-17-2011 for OB11.8.0-4 ##
-## Evan Bookbinder 9-16-2011 for OB11.8.0-8 ##
-## Mike Dangelo 9-19-2011 at Alaska TIM ##
-## Mike Dangelo 1-25-2012 at CRH TIM ##
-## Evan Bookbinder 2-24-2012 ##
-## Phil Kurimski 2-28-2012 for OB 12.2.1-3 ##
-## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
-##
+##################################################################################
+## Edited by Phil Kurimski 8-17-2011 for OB11.8.0-4 ##
+## Evan Bookbinder 9-16-2011 for OB11.8.0-8 ##
+## Mike Dangelo 9-19-2011 at Alaska TIM ##
+## Mike Dangelo 1-25-2012 at CRH TIM ##
+## Evan Bookbinder 2-24-2012 ##
+## Phil Kurimski 2-28-2012 for OB 12.2.1-3 ##
+## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND) ##
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
+## Phil Kurimski 9-13-2012 for OB 12.9.1-12 ##
+## Phil Kurimski 2-05-2013 for OB13.2.1-3 Added rain so far section ##
+##################################################################################
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
#set($extend = true)
@@ -19,18 +23,21 @@
##
#set($advType = "FLOOD ADVISORY")
#set($advTypeShort = "MINOR FLOODING")
-#if(${list.contains($bullets, "small")})
+#if(${list.contains(${bullets}, "general")})
+ #set($advType = "FLOOD ADVISORY")
+ #set($advTypeShort = "MINOR FLOODING")
+#elseif(${list.contains(${bullets}, "small")})
#set($advType = "SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "uss")})
+#elseif(${list.contains(${bullets}, "uss")})
#set($advType = "URBAN AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "URBAN AND SMALL STREAM FLOODING")
#set($extend = false)
-#elseif(${list.contains($bullets, "arroyo")})
+#elseif(${list.contains(${bullets}, "arroyo")})
#set($advType = "ARROYO AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "ARROYO AND SMALL STREAM FLOODING")
#set($extend = false)
-#elseif(${list.contains($bullets, "hydrologic")})
+#elseif(${list.contains(${bullets}, "hydrologic")})
#set($advType = "HYDROLOGIC ADVISORY")
#set($advTypeShort = "MINOR FLOODING")
#set($extend = false)
@@ -38,29 +45,32 @@
##
#set($ic = "ER")
#set($hycType = "")
-#if(${list.contains($bullets, "SM")})
+#if(${list.contains(${bullets}, "ER")})
+ #set($ic = "ER")
+ #set($hycType = "")
+#elseif(${list.contains(${bullets}, "SM")})
#set($ic = "SM")
#set($hycType = "MELTING SNOW")
-#elseif(${list.contains($bullets, "RS")})
+#elseif(${list.contains(${bullets}, "RS")})
#set($ic = "RS")
#set($hycType = "RAIN AND MELTING SNOW")
-#elseif(${list.contains($bullets, "IJ")})
+#elseif(${list.contains(${bullets}, "IJ")})
#set($ic = "IJ")
#set($hycType = "ICE JAM FLOODING")
-#elseif(${list.contains($bullets, "IC")})
+#elseif(${list.contains(${bullets}, "IC")})
#set($ic = "IC")
-#elseif(${list.contains($bullets, "DR")})
+#elseif(${list.contains(${bullets}, "DR")})
#set($ic = "DR")
#set($hycType = "A DAM FLOODGATE RELEASE")
-#elseif(${list.contains($bullets, "GO")})
+#elseif(${list.contains(${bullets}, "GO")})
#set($ic = "GO")
#set($hycType = "A GLACIER-DAMMED LAKE OUTBURST")
-#elseif(${list.contains($bullets, "OT")})
+#elseif(${list.contains(${bullets}, "OT")})
#set($ic = "OT")
#set($hycType = "GROUND WATER FLOODING")
-#elseif(${list.contains($bullets, "rapidRiver")})
+#elseif(${list.contains(${bullets}, "rapidRiver")})
#set($hycType = "RAPID RIVER RISES")
-#elseif(${list.contains($bullets, "poorDrainage")})
+#elseif(${list.contains(${bullets}, "poorDrainage")})
#set($hycType = "MINOR FLOODING OF POOR DRAINAGE AREAS")
#end
##
@@ -96,103 +106,120 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
${advType} FOR...
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN...
#end
#firstBullet(${areas})
-#set ($report = "!** warning basis **!")
-#set ($report2 = "")
-#set ($cause = "HEAVY RAIN")
-#if(${list.contains($bullets, "SM")})
- #set ($cause = "SNOW MELT")
+#set($report = "!** warning basis **!")
+#set($report2 = "")
+#set($cause = "HEAVY RAIN")
+#if(${list.contains(${bullets}, "SM")})
+ #set($cause = "SNOW MELT")
#end
-#if(${list.contains($bullets, "RS")})
- #set ($cause = "HEAVY RAIN AND SNOW MELT")
+#if(${list.contains(${bullets}, "RS")})
+ #set($cause = "HEAVY RAIN AND SNOW MELT")
#end
-#if(${list.contains($bullets, "IJ")})
- #set ($cause = "AN ICE JAM")
+#if(${list.contains(${bullets}, "IJ")})
+ #set($cause = "AN ICE JAM")
#end
-#if(${list.contains($bullets, "IC")})
- #set ($cause = "AN ICE JAM AND HEAVY RAIN")
+#if(${list.contains(${bullets}, "IC")})
+ #set($cause = "AN ICE JAM AND HEAVY RAIN")
#end
-#if(${list.contains($bullets, "rapidRiver")})
- #set ($report2 = ". RAPID RIVER RISES WILL RESULT IN MINOR FLOODING")
+#if(${list.contains($bullets, "DR")})
+ #set ($cause = "A DAM FLOODGATE RELEASE")
#end
-#if(${list.contains($bullets, "poorDrainage")})
- #set ($report2 = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
+#if(${list.contains(${bullets}, "rapidRiver")})
+ #set($report2 = ". RAPID RIVER RISES WILL RESULT IN MINOR FLOODING")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "poorDrainage")})
+ #set($report2 = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "actual")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} WHICH WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "actual")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "actual")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} WHICH WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "actual")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "actual")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "actual")})
- #set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "doppler")} || ${list.contains($bullets, "dopplerGauge")})
-#set($estimate = "UP TO !** Number **! INCHES OF RAIN HAS FALLEN IN THE PAST HOUR.")
-#else
-#set($estimate = "")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#end
+#if(${list.contains(${bullets}, "satelliteEstimates")})
+ #set($report = "SATELLITE ESTIMATES INDICATE ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#end
+#if(${list.contains(${bullets}, "satelliteEstimates")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATE ${cause} FROM THUNDERSTORMS OVER !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#end
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -205,39 +232,40 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${rainAmount}
-#set ($phenomena = "FLOOD")
-#set ($warningType = "ADVISORY")
+#set($phenomena = "FLOOD")
+#set($warningType = "ADVISORY")
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "MINOR FLOODING" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
!** Enter Location **! IS THE MOST LIKELY PLACE TO EXPERIENCE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
+#end
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
-#end
#####################
## CALL TO ACTIONS ##
#####################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
@@ -246,35 +274,35 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
@@ -291,4 +319,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml
index be7d050092..d773113741 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory.xml
@@ -6,7 +6,9 @@
Evan Bookbinder 2-24-2012 for OB12.2.1
Phil Kurimski 2-28-2012 for OB12.2.1-3
Qinglu Lin 04-04-2012 DR 14691. Added tag.
-
+ Evan Bookbinder 09-12-2012 Added settings for locations shapefile
+ Added new areaSource object
+ Phil Kurimski 02-05-2013 Added rain so far section
-->
@@ -74,31 +76,39 @@
-
+
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -128,20 +138,28 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
@@ -170,19 +188,28 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -199,30 +226,32 @@
-
- 0.00
- AND
- 0
- COUNTYNAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
- NAME
-
+false
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
@@ -233,6 +262,7 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
@@ -242,52 +272,66 @@
distance
-
+
-
+
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
-
-
+
+
+
+
+
+
+and place into this template
+-->
- City
+ WarnGenLoc
County
States
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.vm
index cd24581ad3..3f53c37c24 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.vm
@@ -1,14 +1,16 @@
##############################
## FLOOD ADVISORY FOLLOW-UP ##
##############################
-## EDITED BY PHIL KURIMSKI 8-18-2011 FOR OB11.8.0-4
-## EVAN BOOKBINDER 9-16-2011 FOR OB11.0.8-8
-## Mike Dangelo 9-19-2011 at Alaska TIM
-## Mike and Phil 1-25-2012 at CRH TIM
-## Evan Bookbinder 2-24-2012
-## Phil Kurimski 2-28-2012 for OB 12.2.1-3
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
-##
+##################################################################################
+## EDITED BY PHIL KURIMSKI 8-18-2011 FOR OB11.8.0-4 ##
+## EVAN BOOKBINDER 9-16-2011 FOR OB11.0.8-8 ##
+## Mike Dangelo 9-19-2011 at Alaska TIM ##
+## Mike and Phil 1-25-2012 at CRH TIM ##
+## Evan Bookbinder 2-24-2012 ##
+## Phil Kurimski 2-28-2012 for OB 12.2.1-3 ##
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
+## Phil Kurimski 2-05-2013 for OB13.2.1-3 Added rain so far section ##
+##################################################################################
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
#set($extend = true)
@@ -19,16 +21,16 @@
##
#set($advType = "FLOOD ADVISORY")
#set($advTypeShort = "MINOR FLOODING")
-#if(${list.contains($bullets, "small")})
+#if(${list.contains(${bullets}, "small")})
#set($advType = "SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "uss")})
+#elseif(${list.contains(${bullets}, "uss")})
#set($advType = "URBAN AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "URBAN AND SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "arroyo")})
+#elseif(${list.contains(${bullets}, "arroyo")})
#set($advType = "ARROYO AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "ARROYO AND SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "hydrologic")})
+#elseif(${list.contains(${bullets}, "hydrologic")})
#set($advType = "HYDROLOGIC ADVISORY")
#set($advTypeShort = "MINOR FLOODING")
#end
@@ -37,11 +39,11 @@
#set ($report = "!** warning basis **!")
#set ($report2 = "")
#set ($cause = "HEAVY RAIN")
-#if(${list.contains($bullets, "rapidRiver")})
+#if(${list.contains(${bullets}, "rapidRiver")})
#set ($report2 = ". RAPID RIVER RISES WILL RESULT IN MINOR FLOODING")
#set ($hycType = "FOR RAPID RIVER RISES ")
#end
-#if(${list.contains($bullets, "poorDrainage")})
+#if(${list.contains(${bullets}, "poorDrainage")})
#set ($report2 = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
#set ($hycType = "FOR MINOR FLOODING OF POOR DRAINAGE AREAS ")
#end
@@ -64,77 +66,85 @@
#if(${ic} == "IC")
#set ($cause = "AN ICE JAM AND HEAVY RAIN")
#end
-#if(${list.contains($bullets, "doppler")})
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
+#end
+#if(${list.contains(${bullets}, "doppler")})
#set ($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "actual")})
#set ($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
#set ($report = "DOPPLER RADAR INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
+#if(${list.contains(${bullets}, "dopplerGauge")})
#set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause}. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "actual")})
#set ($report = "DOPPLER RADAR INDICATED ${cause} CAUSING ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
#set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
+#if(${list.contains(${bullets}, "trainedSpotters")})
#set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
#set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "actual")})
#set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
#set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
+#if(${list.contains(${bullets}, "lawEnforcement")})
#set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
#set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "actual")})
#set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
#set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
+#if(${list.contains(${bullets}, "emergencyManagement")})
#set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
#set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "actual")})
#set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
#set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "public")})
+#if(${list.contains(${bullets}, "public")})
#set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
#set ($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO THUNDERSTORMS. THIS WILL CAUSE ${advTypeShort}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "actual")})
#set ($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
#set ($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "doppler")} || ${list.contains($bullets, "dopplerGauge")})
-#set($estimate = "UP TO !** Number **! INCHES OF RAIN HAS FALLEN IN THE PAST HOUR.")
-#else
-#set($estimate = "")
-#end
##########################################
## FLOOD ADVISORY FOLLOW-UP HEADER INFO ##
##########################################
@@ -183,14 +193,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${areas} true true true false true)##
-...
+#headlineLocList(${areas} true true true false)...
-#if(${list.contains($bullets, "recedingWater")})
+#if(${list.contains(${bullets}, "recedingWater")})
THE HIGH WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
#end
-#if(${list.contains($bullets, "rainEnded")})
+#if(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#end
@@ -208,15 +217,14 @@ EXPIRED AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone
#else
WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
#end
-#headlineLocList(${areas} true true true false true)##
-...
+#headlineLocList(${areas} true true true false)...
-#if(${list.contains($bullets, "recedingWater")})
+#if(${list.contains(${bullets}, "recedingWater")})
THE HIGH WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
#end
-#if(${list.contains($bullets, "rainEnded")})
+#if(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#end
@@ -229,16 +237,18 @@ THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
-...##
+#headlineLocList(${areas} true true true false)...
########### END NEW HEADLINE CODE ####################
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...!** warning basis **!
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...!** warning basis **!
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${rainAmount}
#end
#set ($phenomena = "FLASH FLOOD")
@@ -249,25 +259,25 @@ THIS IS A TEST MESSAGE. ##
#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THIS FLOODING" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
#####################
## CALL TO ACTIONS ##
#####################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
#set ($ctaSelected = "YES")
#end
#end
@@ -276,35 +286,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT.
#end
@@ -352,8 +362,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)##
-...
+#headlineLocList(${cancelareas} true true true false)...
########### END NEW HEADLINE CODE ####################
!** THE HEAVY RAIN HAS ENDED (AND/OR) FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **!
@@ -384,16 +393,18 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} REMAINS IN EFFECT UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
-#headlineLocList(${areas} true true true false true)
-...##
+#headlineLocList(${areas} true true true false)...
########### END NEW HEADLINE CODE ####################
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...!** warning basis **!
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...!** warning basis **!
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${rainAmount}
#end
#set ($phenomena = "FLASH FLOOD")
@@ -404,15 +415,15 @@ THIS IS A TEST MESSAGE. ##
#end
#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -423,8 +434,8 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#####################
## CALL TO ACTIONS ##
#####################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
#set ($ctaSelected = "YES")
#end
#end
@@ -433,35 +444,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
@@ -504,8 +515,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${areas} true true true false true)##
-...
+#headlineLocList(${areas} true true true false)...
########### END NEW HEADLINE CODE ####################
!** THE HEAVY RAIN HAS ENDED (AND/OR) FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **!
@@ -536,16 +546,18 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} REMAINS IN EFFECT UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
-#headlineLocList(${areas} true true true false true)
-...##
+#headlineLocList(${areas} true true true false)...
########### END NEW HEADLINE CODE ####################
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...!** warning basis **!
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...!** warning basis **!
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${rainAmount}
#end
#set ($phenomena = "FLASH FLOOD")
@@ -556,15 +568,15 @@ THIS IS A TEST MESSAGE. ##
#end
#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -575,8 +587,8 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#####################
## CALL TO ACTIONS ##
#####################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
#set ($ctaSelected = "YES")
#end
#end
@@ -585,35 +597,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
@@ -632,4 +644,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
\ No newline at end of file
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml
index 18622249b8..5c6a5e58a5 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup.xml
@@ -6,6 +6,9 @@
Evan Bookbinder 09-16-2011 for OB11.8.0-8
Phil Kurimski 03-02-2012 for OB12.1.1-4
Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-12-2012 Added settings for locations shapefile
+ Added new areaSource object
+ Phil Kurimski 02-05-2013 Added rain so far section
-->
@@ -95,19 +98,28 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -131,19 +143,28 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -160,30 +181,32 @@
-
- 0.00
- AND
- 0
- COUNTYNAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
- NAME
-
+false
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
@@ -194,6 +217,7 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
STATE
@@ -205,49 +229,63 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
+and place into this template
+-->
- City
+ WarnGenLoc
County
States
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm
index 4e49e3e820..d08608219d 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm
@@ -4,7 +4,7 @@
## Created by Mike Dangelo 09-19-2011 at Alaska TIM for zones
## Edited by Mike Dangelo 01-26-2012 at CRH TIM
## Edited by Phil Kurimski 2-29-2012
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
##
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
@@ -14,16 +14,16 @@
#set($extend = false)
#end
##
-#if(${list.contains($bullets, "uss")})
+#if(${list.contains(${bullets}, "uss")})
#set($advType = "URBAN AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "URBAN AND SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "small")})
+#elseif(${list.contains(${bullets}, "small")})
#set($advType = "SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "arroyo")})
+#elseif(${list.contains(${bullets}, "arroyo")})
#set($advType = "ARROYO AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "ARROYO AND SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "hydrologic")})
+#elseif(${list.contains(${bullets}, "hydrologic")})
#set($advType = "HYDROLOGIC ADVISORY")
#set($advTypeShort = "MINOR FLOODING")
#else
@@ -38,148 +38,148 @@
#set($hycType = "FOR ICE JAM FLOODING IN")
#elseif(${ic} == "IC")
#set($hycType = "FOR AN ICE JAM AND RAIN")
-#elseif(${list.contains($bullets, "ic1")})
+#elseif(${list.contains(${bullets}, "ic1")})
#set($hycType = "FOR RAPID RIVER RISES IN")
-#elseif(${list.contains($bullets, "ic2")})
+#elseif(${list.contains(${bullets}, "ic2")})
#set($hycType = "FOR MINOR FLOODING OF POOR DRAINAGE AREAS IN")
#end
-#set ($hycType = "")
-#set ($report = "!** warning basis **!")
-#set ($typeofevent = "")
-#set ($report2 = "")
-#set ($cause = "HEAVY RAIN")
-#if(${list.contains($bullets, "rapidRiver")})
- #set ($report2 = ". RAPID RIVER RISES WILL RESULT IN MINOR FLOODING")
- #set ($hycType = "FOR RAPID RIVER RISES ")
+#set($hycType = "")
+#set($report = "!** warning basis **!")
+#set($typeofevent = "")
+#set($report2 = "")
+#set($cause = "HEAVY RAIN")
+#if(${list.contains(${bullets}, "rapidRiver")})
+ #set($report2 = ". RAPID RIVER RISES WILL RESULT IN MINOR FLOODING")
+ #set($hycType = "FOR RAPID RIVER RISES ")
#end
-#if(${list.contains($bullets, "poorDrainage")})
- #set ($report2 = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
- #set ($hycType = "FOR MINOR FLOODING OF POOR DRAINAGE AREAS ")
+#if(${list.contains(${bullets}, "poorDrainage")})
+ #set($report2 = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
+ #set($hycType = "FOR MINOR FLOODING OF POOR DRAINAGE AREAS ")
#end
#if(${ic} == "SM")
- #set ($cause = "SNOW MELT")
- #set ($hycType = "FOR MELTING SNOW ")
+ #set($cause = "SNOW MELT")
+ #set($hycType = "FOR MELTING SNOW ")
#end
#if(${ic} == "RS")
- #set ($cause = "HEAVY RAIN AND SNOW MELT")
- #set ($hycType = "FOR RAIN AND MELTING SNOW ")
+ #set($cause = "HEAVY RAIN AND SNOW MELT")
+ #set($hycType = "FOR RAIN AND MELTING SNOW ")
#end
#if(${ic} == "IJ")
- #set ($cause = "AN ICE JAM")
- #set ($hycType = "FOR ICE JAM FLOODING ")
+ #set($cause = "AN ICE JAM")
+ #set($hycType = "FOR ICE JAM FLOODING ")
#end
#if(${ic} == "IC")
- #set ($cause = "AN ICE JAM AND HEAVY RAIN")
+ #set($cause = "AN ICE JAM AND HEAVY RAIN")
#end
-#if(${list.contains($bullets, "rapidRiver")})
- #set ($typeofevent = ". RAPID RIVER RISES ARE EXPECTED")
+#if(${list.contains(${bullets}, "rapidRiver")})
+ #set($typeofevent = ". RAPID RIVER RISES ARE EXPECTED")
#end
-#if(${list.contains($bullets, "poorDrainage")})
- #set ($typeofevent = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
+#if(${list.contains(${bullets}, "poorDrainage")})
+ #set($typeofevent = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
#end
-#if(${list.contains($bullets, "glacierOutburst")})
- #set ($report = "A GLACIER-DAMMED LAKEOUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
+#if(${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "A GLACIER-DAMMED LAKEOUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
#end
-#if(${list.contains($bullets, "groundWater")})
- #set ($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
+#if(${list.contains(${bullets}, "groundWater")})
+ #set($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "actual")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "actual")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "actual")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "actual")})
- #set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE MINOR FLOODING${report2}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE MINOR FLOODING${report2}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "doppler")} || ${list.contains($bullets, "dopplerGauge")})
+#if(${list.contains(${bullets}, "doppler")} || ${list.contains(${bullets}, "dopplerGauge")})
#set($estimate = "UP TO !** Number **! INCHES OF RAIN HAS FALLEN IN THE PAST HOUR.")
#else
#set($estimate = "")
@@ -212,9 +212,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugcline}
/${productClass}.${action}.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -231,17 +233,19 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ##
-## REMMED OUT FOR Alaska
-## #headlineLocList(${areas} true true true false)
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)...
!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
-#if(${list.contains($bullets, "recedingWater")})
+#if(${list.contains(${bullets}, "recedingWater")})
THE HIGH WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
#end
-#if(${list.contains($bullets, "rainEnded")})
+#if(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#else
@@ -262,17 +266,19 @@ EXPIRED AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone
#else
WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
#end
-## REMMED OUT FOR Alaska
-## #headlineLocList(${areas} true true true false)
-!**INSERT RIVER/STREAM OR AREA **! IN !**INSERT GEO AREA**!...
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
-#if(${list.contains($bullets, "recedingWater")})
+#if(${list.contains(${bullets}, "recedingWater")})
THE HIGH WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
#end
-#if(${list.contains($bullets, "rainEnded")})
+#if(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#end
@@ -285,28 +291,33 @@ THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-## REMMED OUT FOR Alaska
-## #headlineLocList(${areas} true true true false)
-!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...##
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...!** warning basis **!
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...!** warning basis **!
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${estimate}
#end
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "ADVISORY")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "ADVISORY")
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
## REMMED OUT FOR Alaska
## #locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA
-#if(${list.contains($bullets, "fcstPoint")})
+#if(${list.contains(${bullets}, "fcstPoint")})
FOR THE !** insert river name and forecast point **!...
AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET.
FLOOD STAGE IS !** xx.x **! FEET.
@@ -317,15 +328,15 @@ IMPACTS...!** discussion of expected impacts and flood path **!
#end
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL CAUSE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -336,11 +347,11 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#####################
## CALL TO ACTIONS ##
#####################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -348,35 +359,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. KEEP AN EYE ON WATERWAYS AND BE PREPARED TO TAKE ACTION.
#end
@@ -409,9 +420,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugclinecan}
/${productClass}.CAN.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${cancelareas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -438,9 +451,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugclinecan}
/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${cancelareas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -452,8 +467,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)
-...##
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${cancelareas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${cancelaffectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
## One line explanation - user can delete the one they don't want
@@ -473,9 +491,11 @@ $$
${ugcline}
/${productClass}.CON.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -487,27 +507,32 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} REMAINS IN EFFECT UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
-## REMMED OUT FOR Alaska
-## #headlineLocList(${areas} true true true false)
-!**INSERT RIVER/STREAM OR AREA **! IN !**INSERT GEO AREA**!...##
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...!** warning basis **!
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...!** warning basis **!
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${estimate}
#end
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "ADVISORY")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "ADVISORY")
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
##locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA
-#if(${list.contains($bullets, "fcstPoint")})
+#if(${list.contains(${bullets}, "fcstPoint")})
FOR THE !** insert river name and forecast point **!...
AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET.
FLOOD STAGE IS !** xx.x **! FEET.
@@ -517,25 +542,25 @@ IMPACTS...!** discussion of expected impacts and flood path **!
!** insert impacts and flood path **!
#end
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
#####################
## CALL TO ACTIONS ##
#####################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -543,35 +568,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
@@ -600,9 +625,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugclinecan}
/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${cancelareas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -629,9 +656,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugclinecan}
/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${cancelareas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -643,8 +672,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)
-...##
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${cancelareas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${cancelaffectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
## One line explanation - user can delete the one they don't want
@@ -664,9 +696,11 @@ $$
${ugcline}
/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -678,27 +712,32 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE ${advType} REMAINS IN EFFECT UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
-## REMMED OUT FOR Alaska
-## #headlineLocList(${areas} true true true false)
-!**INSERT RIVER/STREAM OR AREA **! IN !**INSERT GEO AREA**!...##
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
########### END NEW HEADLINE CODE ####################
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...!** warning basis **!
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...!** warning basis **!
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${estimate}
#end
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "ADVISORY")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "ADVISORY")
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
##locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA
-#if(${list.contains($bullets, "fcstPoint")})
+#if(${list.contains(${bullets}, "fcstPoint")})
FOR THE !** insert river name and forecast point **!...
AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET.
FLOOD STAGE IS !** xx.x **! FEET.
@@ -708,25 +747,25 @@ IMPACTS...!** discussion of expected impacts and flood path **!
!** insert impacts and flood path **!
#end
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
#####################
## CALL TO ACTIONS ##
#####################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -734,35 +773,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
@@ -784,4 +823,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
\ No newline at end of file
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml
index 01f9f0c8a7..b1c7b3fd20 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml
@@ -3,7 +3,11 @@
@@ -66,8 +70,8 @@
-
-
+
+
@@ -81,8 +85,8 @@
-
-
+
+
@@ -94,26 +98,26 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -140,26 +144,26 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -179,45 +183,73 @@
-
+false
-
-
-
+
+
+
-
-
-
- 0.00
- AND
- 0
-
- NAME
-
- STATE_ZONE
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- NAME
-
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
+
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
- false
+
+ AREA
true
8.0
5
@@ -237,50 +269,63 @@
+
+
+
NAME
+ AREA
+ 1
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
+and place into this template
+-->
-
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm
index 1531f39034..85ce41f807 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm
@@ -5,7 +5,9 @@
## Mary-Beth Schreck, Ed Plumb, Aaron Jacobs 9-22-2011 at Alaska TIM
## Mike Dangelo 01-26-2012 at CRH TIM
## Phil Kurimski 2-29-2012
-## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
+## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
+## Mike Dangelo 2-06-2013 default bullets for advType, advTypeShort, ic and hycType
##
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
@@ -15,50 +17,55 @@
#set($extend = false)
#end
##
-#if(${list.contains($bullets, "small")})
+#set($advType = "FLOOD ADVISORY")
+#set($advTypeShort = "MINOR FLOODING")
+#if(${list.contains(${bullets}, "general")})
+ #set($advType = "FLOOD ADVISORY")
+ #set($advTypeShort = "MINOR FLOODING")
+#elseif(${list.contains(${bullets}, "small")})
#set($advType = "SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "SMALL STREAM FLOODING")
-#elseif(${list.contains($bullets, "uss")})
+#elseif(${list.contains(${bullets}, "uss")})
#set($advType = "URBAN AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "URBAN AND SMALL STREAM FLOODING")
#set($extend = false)
-#elseif(${list.contains($bullets, "arroyo")})
+#elseif(${list.contains(${bullets}, "arroyo")})
#set($advType = "ARROYO AND SMALL STREAM FLOOD ADVISORY")
#set($advTypeShort = "ARROYO AND SMALL STREAM FLOODING")
#set($extend = false)
-#elseif(${list.contains($bullets, "hydrologic")})
+#elseif(${list.contains(${bullets}, "hydrologic")})
#set($advType = "HYDROLOGIC ADVISORY")
#set($advTypeShort = "MINOR FLOODING")
#set($extend = false)
-#else
- #set($advType = "FLOOD ADVISORY")
- #set($advTypeShort = "MINOR FLOODING")
#end
##
#set($ic = "ER")
#set($hycType = "")
-#if(${list.contains($bullets, "SM")})
+#if(${list.contains(${bullets}, "ER")})
+ #set($ic = "ER")
+ #set($hycType = "")
+#elseif(${list.contains(${bullets}, "SM")})
#set($ic = "SM")
#set($hycType = "MELTING SNOW")
-#elseif(${list.contains($bullets, "RS")})
+#elseif(${list.contains(${bullets}, "RS")})
#set($ic = "RS")
#set($hycType = "RAIN AND MELTING SNOW")
-#elseif(${list.contains($bullets, "IJ")})
+#elseif(${list.contains(${bullets}, "IJ")})
#set($ic = "IJ")
#set($hycType = "ICE JAM FLOODING")
-#elseif(${list.contains($bullets, "IC")})
+#elseif(${list.contains(${bullets}, "IC")})
#set($ic = "IC")
-#elseif(${list.contains($bullets, "rapidRiver")})
+#elseif(${list.contains(${bullets}, "rapidRiver")})
#set($hycType = "RAPID RIVER RISES")
-#elseif(${list.contains($bullets, "poorDrainage")})
+#elseif(${list.contains(${bullets}, "poorDrainage")})
#set($hycType = "MINOR FLOODING OF POOR DRAINAGE AREAS")
-#elseif(${list.contains($bullets, "GO")})
+#elseif(${list.contains(${bullets}, "GO")})
#set($ic = "GO")
#set($hycType = "A GLACIER-DAMMED LAKE OUTBURST")
-#elseif(${list.contains($bullets, "OT")})
+#elseif(${list.contains(${bullets}, "OT")})
#set($ic = "OT")
#set($hycType = "GROUND WATER FLOODING")
-#elseif(${list.contains($bullets, "DR")})
+#elseif(${list.contains(${bullets}, "DR")})
#set($ic = "DR")
#set($hycType = "DAM GATE RELEASE")
#end
@@ -78,9 +85,6 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugcline}
/${productClass}.${action}.${vtecOffice}.FA.Y.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
-#end
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -95,12 +99,15 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
${advType} FOR...
-#if (${hycType} != "")
+#if(${hycType} != "")
## ${hycType} IN... (EXCLUDED FOR AK)
${hycType}...
#end
-## #firstBullet(${areas}) (EXCLUDED FOR AK)
-!**INSERT RIVER/STREAM OR AREA **! IN !**INSERT GEO AREA**!...
+##REMMED OUT FOR ALASKA
+###firstBullet(${areas})
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###firstBullet(${affectedCounties})
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
* ##
#if(${productClass}=="T")
@@ -108,155 +115,155 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#set ($report = "!** warning basis **!")
-#set ($typeofevent = "")
-#set ($cause = "HEAVY RAIN")
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "SM")})
- #set ($cause = "SNOW MELT")
+#set($report = "!** warning basis **!")
+#set($typeofevent = "")
+#set($cause = "HEAVY RAIN")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "SM")})
+ #set($cause = "SNOW MELT")
#end
-#if(${list.contains($bullets, "RS")})
- #set ($cause = "HEAVY RAIN AND SNOW MELT")
+#if(${list.contains(${bullets}, "RS")})
+ #set($cause = "HEAVY RAIN AND SNOW MELT")
#end
-#if(${list.contains($bullets, "IJ")})
- #set ($cause = "AN ICE JAM")
+#if(${list.contains(${bullets}, "IJ")})
+ #set($cause = "AN ICE JAM")
#end
-#if(${list.contains($bullets, "IC")})
- #set ($cause = "AN ICE JAM AND HEAVY RAIN")
+#if(${list.contains(${bullets}, "IC")})
+ #set($cause = "AN ICE JAM AND HEAVY RAIN")
#end
-#if(${list.contains($bullets, "SM")})
- #set ($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO SNOW MELT")
+#if(${list.contains(${bullets}, "SM")})
+ #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO SNOW MELT")
#end
-#if(${list.contains($bullets, "RS")})
- #set ($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO HEAVY RAIN AND SNOW MELT")
+#if(${list.contains(${bullets}, "RS")})
+ #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO HEAVY RAIN AND SNOW MELT")
#end
-#if(${list.contains($bullets, "IJ")})
- #set ($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO AN ICE JAM")
+#if(${list.contains(${bullets}, "IJ")})
+ #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO AN ICE JAM")
#end
-#if(${list.contains($bullets, "IC")})
- #set ($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO AN ICE JAM AND HEAVY RAIN")
+#if(${list.contains(${bullets}, "IC")})
+ #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO AN ICE JAM AND HEAVY RAIN")
#end
-#if(${list.contains($bullets, "rapidRiver")})
- #set ($typeofevent = ". RAPID RIVER RISES ARE EXPECTED")
+#if(${list.contains(${bullets}, "rapidRiver")})
+ #set($typeofevent = ". RAPID RIVER RISES ARE EXPECTED")
#end
-#if(${list.contains($bullets, "glacierOutburst")})
- #set ($report = "A GLACIER-DAMMED LAKEOUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
+#if(${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "A GLACIER-DAMMED LAKEOUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
#end
-#if(${list.contains($bullets, "groundWater")})
- #set ($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
+#if(${list.contains(${bullets}, "groundWater")})
+ #set($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!")
#end
-#if(${list.contains($bullets, "poorDrainage")})
- #set ($typeofevent = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
+#if(${list.contains(${bullets}, "poorDrainage")})
+ #set($typeofevent = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "AUTOMATED RAIN GAUGES INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "AUTOMATED RAIN GAUGES INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "actual")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "actual")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "actual")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "actual")})
- #set ($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "actual")})
+ #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE MINOR FLOODING${typeofevent}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE MINOR FLOODING${typeofevent}")
#end
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "doppler")} || ${list.contains($bullets, "dopplerGauge")})
+#if(${list.contains(${bullets}, "doppler")} || ${list.contains(${bullets}, "dopplerGauge")})
#set($estimate = "UP TO !** Number **! INCHES OF RAIN HAS FALLEN IN THE PAST HOUR.")
#else
#set($estimate = "")
@@ -266,16 +273,17 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${estimate}${rainAmount}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${estimate}${rainAmount}
-#set ($phenomena = "FLOOD")
-#set ($warningType = "ADVISORY")
+#set($phenomena = "FLOOD")
+#set($warningType = "ADVISORY")
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
## #locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA
-#if(${list.contains($bullets, "fcstPoint")})
+#if(${list.contains(${bullets}, "fcstPoint")})
FOR THE !** insert river name and forecast point **!...
AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET.
FLOOD STAGE IS !** xx.x **! FEET.
@@ -285,16 +293,16 @@ IMPACTS...!** discussion of expected impacts and flood path **!
!** insert impacts and flood path **!
#end
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL CAUSE MINOR FLOODING.
#end
-#if(${list.contains($bullets, "specificPlace")})
+#if(${list.contains(${bullets}, "specificPlace")})
MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -305,9 +313,9 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
#####################
## CALL TO ACTIONS ##
#####################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -315,35 +323,35 @@ MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!.
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "advisoryMeansCTA")})
+#if(${list.contains(${bullets}, "advisoryMeansCTA")})
A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
@@ -362,4 +370,5 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml
index a05ab96e23..aaa466f272 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml
@@ -1,9 +1,15 @@
@@ -72,12 +78,13 @@
-
+
-
+
+
@@ -86,22 +93,22 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -140,22 +147,22 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -194,22 +201,22 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -233,91 +240,139 @@
+ false
-
-
+
+
-
-
- 0.00
- AND
- 0
-
- NAME
-
- STATE_ZONE
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- NAME
-
+
+
+ Zone
+
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ STATE_ZONE
+
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
+
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
+ AREA
+ 1
true
8.0
5
5
4
8
- Name
-
- NAME
+ Name
+ AREA
+ COUNTYNAME
+
STATE
STATE
countyTypes.txt
distance
+
+
+
+
+
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
@@ -326,7 +381,7 @@ and place into this template -->
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.vm
index 1cc8c788f0..47bb0364c8 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.vm
@@ -1,11 +1,16 @@
+##############################
### AREAL FLOOD WARNING ######
-###########################################
+##############################
############################################################################
## EDITED BY MIKE DANGELO 7-13-2011 ##
## Edited by Phil Kurimski 8-16-2011 R11.8 ##
## EDITED BY MIKE DANGELO 9-19-2011 at Alaska TIM ##
## EDITED BY Evan Bookbinder 2-24-2012
## EDITED BY Phil Kurimski 2-28-2012
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}##
+## Phil Kurimski 2-05-2013
+## Mike Dangelo 2-6-2013 added satellite estimate logic
+## Mike Dangelo 5-2-2013 removed redundant entry/logic for particular/specific stream
#################################### SET SOME VARIABLES ###################################
##
#if(${action} == "EXT")
@@ -16,43 +21,46 @@
#set($extend = false)
#end
##
-#if(${list.contains($bullets, "smallstreams")})
+#if(${list.contains(${bullets}, "smallstreams")})
#set($advType = "SMALL STREAM FLOOD WARNING")
-#elseif(${list.contains($bullets, "urbansmallstreams")})
+#elseif(${list.contains(${bullets}, "urbansmallstreams")})
#set($advType = "URBAN AND SMALL STREAM FLOOD WARNING")
#else
#set($advType = "FLOOD WARNING")
#end
#set($ic = "ER")
#set($hycType = "")
-#if(${list.contains($bullets, "sm")})
+#if(${list.contains(${bullets}, "er")})
+ #set($ic = "ER")
+ #set($hycType = "")
+#elseif(${list.contains(${bullets}, "sm")})
#set($ic = "SM")
#set($hycType = "SNOW MELT")
-#elseif(${list.contains($bullets, "dm")})
+#elseif(${list.contains(${bullets}, "dm")})
#set($ic = "DM")
#set($hycType = "A LEVEE FAILURE")
-#elseif(${list.contains($bullets, "dr")})
+#elseif(${list.contains(${bullets}, "dr")})
#set($ic = "DR")
#set($hycType = "A DAM GATE RELEASE")
-#elseif(${list.contains($bullets, "rs")})
+#elseif(${list.contains(${bullets}, "rs")})
#set($ic = "RS")
#set($hycType = "RAIN AND SNOW MELT")
-#elseif(${list.contains($bullets, "ij")})
+#elseif(${list.contains(${bullets}, "ij")})
#set($ic = "IJ")
#set($hycType = "AN ICE JAM")
-#elseif(${list.contains($bullets, "ic")})
+#elseif(${list.contains(${bullets}, "ic")})
#set($ic = "IC")
#set($hycType = "AN ICE JAM WITH RAIN AND SNOW MELT")
-#elseif(${list.contains($bullets, "go")})
+#elseif(${list.contains(${bullets}, "go")})
#set($ic = "GO")
#set($hycType = "A GLACIAL LAKE OUTBURST")
-#elseif(${list.contains($bullets, "mc")})
+#elseif(${list.contains(${bullets}, "mc")})
#set($ic = "MC")
+ #set($hycType = "")
## #set($hycType = "FOR MULTIPLE CAUSES")
-#elseif(${list.contains($bullets, "uu")})
+#elseif(${list.contains(${bullets}, "uu")})
#set($ic = "UU")
-#else
- #set($ic = "ER")
+ #set($hycType = "")
#end
##
${WMOId} ${vtecOffice} 000000 ${BBBId}
@@ -91,7 +99,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
${advType} FOR...
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN...
#end
#firstBullet(${areas})
@@ -105,70 +113,76 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#set ($report = "!**YOU DID NOT SELECT AN /EVENT/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN THAT WILL CAUSE FLOODING.")
+#set($report = "!**YOU DID NOT SELECT AN /EVENT/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN WHICH WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN WHICH WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. THAT HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. THAT HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS WITH HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS WITH HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO THUNDERSTORMS THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO THUNDERSTORMS THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "floodOccurring")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "floodOccurring")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED THUNDERSTORMS WITH HEAVY RAIN OVER !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED THUNDERSTORMS WITH HEAVY RAIN OVER !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "floodOccurring")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "floodOccurring")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED THUNDERSTORMS WITH HEAVY RAIN IN !** LOCATION **!. THE HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED THUNDERSTORMS WITH HEAVY RAIN IN !** LOCATION **!. THE HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "floodOccurring")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "floodOccurring")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. THE HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. THE HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED THUNDERSTORMS WITH HEAVY RAIN IN !** LOCATION **!. THE HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED THUNDERSTORMS WITH HEAVY RAIN IN !** LOCATION **!. THE HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "floodOccurring")})
- #set ($report = "THE PUBLIC REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "floodOccurring")})
+ #set($report = "THE PUBLIC REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!. THAT HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!. THAT HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "genericFlood")})
- #set ($report = "!** ENTER REASON AND FORECAST FOR FLOOD **!")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAIN IN !** LOCATION **!. THAT HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE FLOODING IN THE WARNING AREA.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "genericFlood")})
+ #set($report = "!** ENTER REASON AND FORECAST FOR FLOOD **!")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
#end
#################################
@@ -178,14 +192,15 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ${rainAmount}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ${rainAmount}
#############################################################
######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) #########
#############################################################
-#set ($phenomena = "FLOOD")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "listofcities")})
+#set($phenomena = "FLOOD")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -202,16 +217,16 @@ THIS IS A TEST MESSAGE. ##
######################################
###### WHERE ADD INFO GOES ###########
######################################
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
-#if(${list.contains($bullets, "specificStream")})
+#if(${list.contains(${bullets}, "specificStream")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -222,11 +237,11 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
######################################
####### CALL TO ACTIONS ##############
######################################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -235,51 +250,47 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED. STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED. HOWEVER...ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS IMMEDIATELY.
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
-#if(${list.contains($bullets, "USS_CTA")})
+#if(${list.contains(${bullets}, "USS_CTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES IN URBAN AREAS. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "specificCTA")})
-FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
-
-#end
-#if(${list.contains($bullets, "nightCTA")})
+#if(${list.contains(${bullets}, "nightCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperCTA")})
+#if(${list.contains(${bullets}, "camperCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
@@ -300,8 +311,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
-
-########### EXAMPLES OF PARSE OR INCLUDE STATEMENTS ################################
-## #parse ("someFileInSiteWarngen.vm")
-## #include ("username.txt")
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml
index 65931d7e21..b359d03bf6 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning.xml
@@ -4,8 +4,11 @@
Mike Dangelo 01-25-2012 at CRH TIM
Evan Bookbinder 2-24-2012
Phil Kurimski 2-28-2012
- Qinglu Lin 04-04-2012 DR 14691. Added tag.
- Qinglu Lin 10-03-2012 DR 15426. Changed ic to pc in tag.
+ Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Phil Kurimski 02-05-2013 Added additional valid duration times
+ Mike Dangelo 02-06-2013 added default bullet for ic
+ 05-02-2013 removed redundant specific CTA
-->
@@ -48,18 +51,23 @@
180
60
+ 90
120
- 150
180
- 210
- 240
360
- 480
- 600
+ 540
720
+ 1440
+ 2160
+ 2880
+ 3600
+ 4320
+ 5760
+ 7200
+ 10080
-pc
+ic
@@ -67,16 +75,17 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -84,22 +93,20 @@
-
-
+
+
-
-
-
-
+
+
+
+
-
+
@@ -108,7 +115,6 @@
-
@@ -124,15 +130,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -140,21 +146,23 @@
-
-
+
+
-
-
-
+
+
+
+
-
+
+
+
+
@@ -164,7 +172,6 @@
-
@@ -180,15 +187,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -196,21 +203,23 @@
-
-
+
+
-
-
-
+
+
+
+
-
+
+
+
+
@@ -220,7 +229,6 @@
-
@@ -231,63 +239,82 @@
-
- 0.00
- AND
- 0
- COUNTYNAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
- NAME
-
+false
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
30
200
+
+
+
+
+
+
+
+
- population
+ distance
+and place into this template
+-->
-
- false
+
@@ -298,6 +325,7 @@ and place into this template -->
4
8
Name
+ AREA
COUNTYNAME
STATE
STATE
@@ -309,11 +337,14 @@ and place into this template -->
+
+
+
- City
+ WarnGenLoc
County
States
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.vm
index bc6e7ad5ee..99ee662ab0 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.vm
@@ -4,38 +4,40 @@
## Edited by Evan Bookbinder 9-16-2011 FOR OB11.8.0-8 ##
## EDITED BY MIKE DANGELO 9-19-2011 at Alaska TIM ##
## EDITED BY MIKE DANGELO 1-25-2012 at CRH TIM ##
-## EDITED BY EVAN BOOKBINDER 2-24-2012 ##
+## EDITED BY EVAN BOOKBINDER 2-24-2012 ##
## EDITED BY PHIL KURIMSKI 2-28-2012 ##
## EDITED BY MIKE REGA 5-02-2012 DR 14885 MND blank line ##
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
+## Phil Kurimski 2-05-2013 FOR OB13.2.1-5
+## Evan Bookbinder 3-1-2013 segment ending $$ issues
#################################### SET SOME VARs ###################################
-#set ($hycType = "")
-#set ($floodReason = "")
-#set ($floodType = "FLOODING")
+#set($hycType = "")
+#set($floodReason = "")
+#set($floodType = "FLOODING")
#if(${ic} == "SM")
- #set ($hycType = "RAPID SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
+ #set($hycType = "RAPID SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
#elseif(${ic} == "RS")
- #set ($hycType = "RAIN AND SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
+ #set($hycType = "RAIN AND SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
#elseif(${ic} == "IJ")
- #set ($hycType = "ICE JAM FLOODING")
- #set ($floodReason = " AN ICE JAM IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
+ #set($hycType = "ICE JAM FLOODING")
+ #set($floodReason = " AN ICE JAM IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
#elseif(${ic} == "IC")
- #set ($hycType = "AN ICE JAM AND HEAVY RAIN")
- #set ($floodReason = " FLOODING DUE TO AN ICE JAM AND HEAVY RAIN WILL CONTINUE.")
+ #set($hycType = "AN ICE JAM AND HEAVY RAIN")
+ #set($floodReason = " FLOODING DUE TO AN ICE JAM AND HEAVY RAIN WILL CONTINUE.")
#elseif(${ic} == "MC")
- #set ($hycType = "")
- #set ($floodReason = "")
+ #set($hycType = "")
+ #set($floodReason = "")
#elseif(${ic} == "UU")
- #set ($hycType = "")
- #set ($floodReason = "")
+ #set($hycType = "")
+ #set($floodReason = "")
#elseif(${ic} == "DM")
- #set ($hycType = "LEVEE FAILURE")
- #set ($floodReason = " FLOODING DUE TO A LEVEE FAILURE WILL CONTINUE.")
+ #set($hycType = "LEVEE FAILURE")
+ #set($floodReason = " FLOODING DUE TO A LEVEE FAILURE WILL CONTINUE.")
#elseif(${ic} == "DR")
- #set ($hycType = "DAM GATE RELEASE")
- #set ($floodReason = " FLOODING DUE TO A DAM GATE RELEASE.")
+ #set($hycType = "DAM GATE RELEASE")
+ #set($floodReason = " FLOODING DUE TO A DAM GATE RELEASE.")
#end
##
######################################################################################
@@ -110,19 +112,17 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${action}=="EXP" || ${action}=="CAN")
...THE FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${areas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${cancelareas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
#end
############################
## END CAN/EXP HEADLINE ####
@@ -131,13 +131,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## EXPIRATION/CANCELLATION BODY ##
#######################################
#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
-#if(${list.contains($bullets, "recedingWater")} && ${list.contains($bullets, "rainEnded")})
+#if(${list.contains(${bullets}, "recedingWater")} && ${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED AND FLOOD WATERS HAVE RECEDED...NO LONGER POSING A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
-#elseif(${list.contains($bullets, "recedingWater")})
+#elseif(${list.contains(${bullets}, "recedingWater")})
FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
-#elseif(${list.contains($bullets, "rainEnded")})
+#elseif(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#else
@@ -148,7 +148,7 @@ THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#printcoords(${areaPoly}, ${list})
-
+$$
#end
#################################### END OF CAN STUFF ###################################
#### IF PARTIAL CANCELLATION, INSERT $$ AND 2ND UGC/MND SECTION PRIOR TO CON PORTION
@@ -194,59 +194,59 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...A FLOOD WARNING ##
-#if (${hycType} != "")
+#if(${hycType} != "")
FOR ${hycType} ##
#end
REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)...
+#headlineLocList(${areas} true true true false)...
################################################
#################################
######## MAIN PARAGRAPH ###########
#################################
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = " UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = " UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = " UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = " UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = " UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = " UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = " !** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = " !** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
#end
-#set ($reportBy = "!**YOU DID NOT SELECT A /SOURCE/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
-#if(${list.contains($bullets, "doppler")})
- #set ($reportBy = "DOPPLER RADAR INDICATED")
-#elseif(${list.contains($bullets, "dopplerGauge")})
- #set ($reportBy = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED")
-#elseif(${list.contains($bullets, "satellite")})
- #set ($reportBy = "SATELLITE ESTIMATES INDICATED")
-#elseif(${list.contains($bullets, "satelliteGauge")})
- #set ($reportBy = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED")
-#elseif(${list.contains($bullets, "trainedSpotters")})
- #set ($reportBy = "TRAINED WEATHER SPOTTERS REPORTED")
-#elseif(${list.contains($bullets, "lawEnforcement")})
- #set ($reportBy = "LOCAL LAW ENFORCEMENT REPORTED")
-#elseif(${list.contains($bullets, "public")})
- #set ($reportBy = "THE PUBLIC REPORTED")
-#elseif(${list.contains($bullets, "emergencyManagement")})
- #set ($reportBy = "EMERGENCY MANAGEMENT REPORTED")
+#set($reportBy = "!**YOU DID NOT SELECT A /SOURCE/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($reportBy = "DOPPLER RADAR INDICATED")
+#elseif(${list.contains(${bullets}, "dopplerGauge")})
+ #set($reportBy = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED")
+#elseif(${list.contains(${bullets}, "satellite")})
+ #set($reportBy = "SATELLITE ESTIMATES INDICATED")
+#elseif(${list.contains(${bullets}, "satelliteGauge")})
+ #set($reportBy = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED")
+#elseif(${list.contains(${bullets}, "trainedSpotters")})
+ #set($reportBy = "TRAINED WEATHER SPOTTERS REPORTED")
+#elseif(${list.contains(${bullets}, "lawEnforcement")})
+ #set($reportBy = "LOCAL LAW ENFORCEMENT REPORTED")
+#elseif(${list.contains(${bullets}, "public")})
+ #set($reportBy = "THE PUBLIC REPORTED")
+#elseif(${list.contains(${bullets}, "emergencyManagement")})
+ #set($reportBy = "EMERGENCY MANAGEMENT REPORTED")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#set($cityListLead = "RUNOFF FROM THIS EXCESSIVE RAINFALL WILL CAUSE ${floodType} TO OCCUR. ")
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
-#if(${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "thunder")})
${reportBy} SLOW MOVING THUNDERSTORMS WITH VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason}
-#elseif(${list.contains($bullets, "plainRain")})
+#elseif(${list.contains(${bullets}, "plainRain")})
${reportBy} AN AREA OF VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason}
-#elseif(${list.contains($bullets, "floodOccurring")})
+#elseif(${list.contains(${bullets}, "floodOccurring")})
${reportBy} ${floodType} ACROSS THE WARNED AREA.${rainAmount}${floodReason} !** ENTER SPECIFIC REPORTS OF FLOODING AND EXPECTED RAINFALL AMOUNTS **!
-#elseif(${list.contains($bullets, "genericFlood")})
+#elseif(${list.contains(${bullets}, "genericFlood")})
!** ENTER REASON AND FORECAST FOR FLOOD **!
#else
!**YOU DID NOT SELECT AN /EVENT/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!
@@ -255,7 +255,7 @@ ${reportBy} ${floodType} ACROSS THE WARNED AREA.${rainAmount}${floodReason} !**
############################################
######## (CITY LIST) #########
############################################
-#if(${list.contains($bullets, "listofcities")})
+#if(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -271,15 +271,15 @@ THIS IS A TEST MESSAGE. ##
###### WHERE ADDITIONAL INFO GOES ####
######################################
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "particularStream")})
+#if(${list.contains(${bullets}, "particularStream")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -292,9 +292,9 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
####### CALL TO ACTIONS ##############
######################################
##Check to see if we've selected any calls to action.
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -302,51 +302,51 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED. STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED. HOWEVER...ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS IMMEDIATELY.
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES.
#end
-#if(${list.contains($bullets, "USS_CTA")})
+#if(${list.contains(${bullets}, "USS_CTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES IN URBAN AREAS. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "specificCTA")})
+#if(${list.contains(${bullets}, "specificCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "nightCTA")})
+#if(${list.contains(${bullets}, "nightCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperCTA")})
+#if(${list.contains(${bullets}, "camperCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
@@ -365,7 +365,9 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-#end
-$$
-!**NAME/INITIALS**!
+$$
+#end
+
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml
index 6f51d34850..97413db074 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup.xml
@@ -4,6 +4,8 @@
Edited by Evan Bookbinder 2-24-2012
Edited by Phil Kurimski 2-28-2012
Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Phil Kurimski 02-05-2013
-->
@@ -89,28 +91,28 @@
-
-
+
+
-
-
-
-
+
+
+
+
-
+
+
+
+
-
@@ -130,10 +132,8 @@
-
-
+
+
@@ -144,18 +144,20 @@
-
-
-
-
+
+
+
+
-
+
+
+
+
-
@@ -172,33 +174,33 @@
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- FIPS
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- NAME
-
+ false
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
-
- false
-
+
+
true
@@ -208,6 +210,7 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
@@ -220,44 +223,63 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
30
200
+
+
+
+
+
+
+
+
- population
+ distance
+and place into this template
+-->
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm
index baa4ce0eb2..88d705f130 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm
@@ -4,62 +4,62 @@
## Created BY MIKE DANGELO 9-19-2011 at Alaska TIM for zones coding ##
## Edited by Phil kurimski 2-29-2012
## Edited by Mike Rega 5-02-2012 DR 14885-MND blank line
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
#################################### SET SOME VARs ###################################
-#set ($hycType = "")
-#set ($floodReason = "")
-#set ($floodType = "FLOODING")
+#set($hycType = "")
+#set($floodReason = "")
+#set($floodType = "FLOODING")
###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY
#*
-#if(${list.contains($bullets, "icrs")})
- #set ($hycType = "RAIN AND SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
-#elseif(${list.contains($bullets, "icsm")})
- #set ($hycType = "RAPID SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CAUSE ${floodType}.")
-#elseif(${list.contains($bullets, "icij")})
- #set ($hycType = "ICE JAM FLOODING")
- #set ($floodReason = " AN ICE JAM IS OCCURRING AND WILL CAUSE ${floodType}.")
-#elseif(${list.contains($bullets, "icicr")})
- #set ($hycType = "AN ICE JAM AND HEAVY RAIN")
- #set ($floodReason = " AN ICE JAM IS ALSO OCCURRING AND WILL CAUSE ${floodType}.")
-#elseif(${list.contains($bullets, "icics")})
- #set ($hycType = "AN ICE JAM AND RAPID SNOW MELT")
- #set ($floodReason = " AN ICE JAM AND RAPID SNOW MELT ARE ALSO OCCURRING AND WILL CAUSE ${floodType}.")
-#elseif(${list.contains($bullets, "icerr")})
- #set ($hycType = "RAPID RIVER RISES")
+#if(${list.contains(${bullets}, "icrs")})
+ #set($hycType = "RAIN AND SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
+#elseif(${list.contains(${bullets}, "icsm")})
+ #set($hycType = "RAPID SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CAUSE ${floodType}.")
+#elseif(${list.contains(${bullets}, "icij")})
+ #set($hycType = "ICE JAM FLOODING")
+ #set($floodReason = " AN ICE JAM IS OCCURRING AND WILL CAUSE ${floodType}.")
+#elseif(${list.contains(${bullets}, "icicr")})
+ #set($hycType = "AN ICE JAM AND HEAVY RAIN")
+ #set($floodReason = " AN ICE JAM IS ALSO OCCURRING AND WILL CAUSE ${floodType}.")
+#elseif(${list.contains(${bullets}, "icics")})
+ #set($hycType = "AN ICE JAM AND RAPID SNOW MELT")
+ #set($floodReason = " AN ICE JAM AND RAPID SNOW MELT ARE ALSO OCCURRING AND WILL CAUSE ${floodType}.")
+#elseif(${list.contains(${bullets}, "icerr")})
+ #set($hycType = "RAPID RIVER RISES")
#end
*#
#if(${ic} == "SM")
- #set ($hycType = "RAPID SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
+ #set($hycType = "RAPID SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
#elseif(${ic} == "RS")
- #set ($hycType = "RAIN AND SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
+ #set($hycType = "RAIN AND SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
#elseif(${ic} == "IJ")
- #set ($hycType = "ICE JAM FLOODING")
- #set ($floodReason = " AN ICE JAM IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
+ #set($hycType = "ICE JAM FLOODING")
+ #set($floodReason = " AN ICE JAM IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.")
#elseif(${ic} == "IC")
- #set ($hycType = "AN ICE JAM AND HEAVY RAIN")
- #set ($floodReason = " FLOODING DUE TO AN ICE JAM AND HEAVY RAIN WILL CONTINUE.")
+ #set($hycType = "AN ICE JAM AND HEAVY RAIN")
+ #set($floodReason = " FLOODING DUE TO AN ICE JAM AND HEAVY RAIN WILL CONTINUE.")
#elseif(${ic} == "MC")
- #set ($hycType = "")
- #set ($floodReason = "")
+ #set($hycType = "")
+ #set($floodReason = "")
#elseif(${ic} == "UU")
- #set ($hycType = "")
- #set ($floodReason = "")
+ #set($hycType = "")
+ #set($floodReason = "")
#elseif(${ic} == "DM")
- #set ($hycType = "LEVEE FAILURE")
- #set ($floodReason = " FLOODING DUE TO A LEVEE FAILURE WILL CONTINUE.")
+ #set($hycType = "LEVEE FAILURE")
+ #set($floodReason = " FLOODING DUE TO A LEVEE FAILURE WILL CONTINUE.")
#elseif(${ic} == "DR")
- #set ($hycType = "DAM GATE RELEASE")
- #set ($floodReason = " FLOODING DUE TO A DAM GATE RELEASE.")
+ #set($hycType = "DAM GATE RELEASE")
+ #set($floodReason = " FLOODING DUE TO A DAM GATE RELEASE.")
#elseif(${ic} == "GO")
- #set ($hycType = "GLACIER-DAMMED LAKE OUTBURST")
- #set ($floodReason = " FLOODING DUE TO A GLACIER-DAMMED LAKE OUTBURST.")
+ #set($hycType = "GLACIER-DAMMED LAKE OUTBURST")
+ #set($floodReason = " FLOODING DUE TO A GLACIER-DAMMED LAKE OUTBURST.")
#elseif(${ic} == "OT")
- #set ($hycType = "GROUND WATER FLOODING")
- #set ($floodReason = " FLOODING DUE TO GROUND WATER.")
+ #set($hycType = "GROUND WATER FLOODING")
+ #set($floodReason = " FLOODING DUE TO GROUND WATER.")
#end
##
######################################################################################
@@ -85,26 +85,31 @@ ${ugclinecan}
################### VTEC/COUNTY LINE ##################
/${productClass}.CAN.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#set($zoneList = "")
#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
#elseif(${CORCAN}=="true")
${ugclinecan}
################### VTEC/COUNTY LINE ##################
/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#set($zoneList = "")
#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
#else
${ugcline}
################### VTEC/COUNTY LINE ##################
/${productClass}.${action}.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
-#end
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -135,18 +140,26 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${action}=="EXP" || ${action}=="CAN")
...THE FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${areas} true true true false true)
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
${expcanHLTag}...
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${cancelareas} true true true false true)
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${cancelareas} true true true false)
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${cancelaffectedCounties} true true true false)
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
${expcanHLTag}...
#end
@@ -157,11 +170,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## EXPIRATION/CANCELLATION STATEMENT ##
#######################################
#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN})
-#if(${list.contains($bullets, "recedingWater")} && ${list.contains($bullets, "rainEnded")})
+#if(${list.contains(${bullets}, "recedingWater")} && ${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED AND FLOOD WATERS HAVE RECEDED...NO LONGER POSING A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
-#elseif(${list.contains($bullets, "recedingWater")})
+#elseif(${list.contains(${bullets}, "recedingWater")})
FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
-#elseif(${list.contains($bullets, "rainEnded")})
+#elseif(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#else
!** THE HEAVY RAIN HAS ENDED. !** OR **! THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **!
@@ -180,9 +193,11 @@ THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
${ugcline}
/${productClass}.CON.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -196,9 +211,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugcline}
/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -215,67 +232,71 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLOOD WARNING ##
-#if (${hycType} != "")
+#if(${hycType} != "")
FOR ${hycType} ##
#end
REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)...
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###zoneHeadlineLocList(${areas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
################################################
#################################
######## MAIN PARAGRAPH ###########
#################################
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = " UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = " UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = " UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = " UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = " UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = " UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = " !** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = " !** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#set ($reportBy = "!**YOU DID NOT SELECT A /SOURCE/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
-#if(${list.contains($bullets, "doppler")})
- #set ($reportBy = "DOPPLER RADAR INDICATED")
-#elseif(${list.contains($bullets, "dopplerGauge")})
- #set ($reportBy = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED")
-#elseif(${list.contains($bullets, "trainedSpotters")})
- #set ($reportBy = "TRAINED WEATHER SPOTTERS REPORTED")
-#elseif(${list.contains($bullets, "lawEnforcement")})
- #set ($reportBy = "LOCAL LAW ENFORCEMENT REPORTED")
-#elseif(${list.contains($bullets, "public")})
- #set ($reportBy = "THE PUBLIC REPORTED")
-#elseif(${list.contains($bullets, "emergencyManagement")})
- #set ($reportBy = "EMERGENCY MANAGEMENT REPORTED")
-#elseif(${list.contains($bullets, "satellite")})
- #set ($reportBy = "SATELLITE ESTIMATES INDICATED")
-#elseif(${list.contains($bullets, "satelliteGauge")})
- #set ($reportBy = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED")
+#set($reportBy = "!**YOU DID NOT SELECT A /SOURCE/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($reportBy = "DOPPLER RADAR INDICATED")
+#elseif(${list.contains(${bullets}, "dopplerGauge")})
+ #set($reportBy = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED")
+#elseif(${list.contains(${bullets}, "trainedSpotters")})
+ #set($reportBy = "TRAINED WEATHER SPOTTERS REPORTED")
+#elseif(${list.contains(${bullets}, "lawEnforcement")})
+ #set($reportBy = "LOCAL LAW ENFORCEMENT REPORTED")
+#elseif(${list.contains(${bullets}, "public")})
+ #set($reportBy = "THE PUBLIC REPORTED")
+#elseif(${list.contains(${bullets}, "emergencyManagement")})
+ #set($reportBy = "EMERGENCY MANAGEMENT REPORTED")
+#elseif(${list.contains(${bullets}, "satellite")})
+ #set($reportBy = "SATELLITE ESTIMATES INDICATED")
+#elseif(${list.contains(${bullets}, "satelliteGauge")})
+ #set($reportBy = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#set($cityListLead = "RUNOFF FROM THIS EXCESSIVE RAINFALL WILL CAUSE ${floodType} TO OCCUR. ")
-#if(${list.contains($bullets, "thunder")})
+#if(${list.contains(${bullets}, "thunder")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
${reportBy} SLOW MOVING THUNDERSTORMS WITH VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason}
-#elseif(${list.contains($bullets, "plainRain")})
+#elseif(${list.contains(${bullets}, "plainRain")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
${reportBy} AN AREA OF VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason}
-#elseif(${list.contains($bullets, "floodOccurring")})
+#elseif(${list.contains(${bullets}, "floodOccurring")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
${reportBy} ${floodType} ACROSS THE WARNED AREA.${rainAmount}${floodReason} !** ENTER SPECIFIC REPORTS OF FLOODING AND EXPECTED RAINFALL AMOUNTS **!
-#elseif(${list.contains($bullets, "genericFlood")})
+#elseif(${list.contains(${bullets}, "genericFlood")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
!** ENTER REASON AND FORECAST FOR FLOOD **!
-#elseif(${list.contains($bullets, "glacierOutburst")})
+#elseif(${list.contains(${bullets}, "glacierOutburst")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
${reportBy} FLOODING DUE TO A GLACIER-DAMMED LAKE OUTBURST ACROSS THE WARNED AREA.${rainAmount}
-#elseif(${list.contains($bullets, "groundWater")})
+#elseif(${list.contains(${bullets}, "groundWater")})
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
${reportBy} FLOODING DUE TO GROUND WATER ACROSS THE WARNED AREA.${rainAmount}
#else
@@ -299,7 +320,7 @@ ${cityListLead}
######################################
###### WHERE ADDITIONAL INFO GOES ####
######################################
-#if(${list.contains($bullets, "fcstPoint")})
+#if(${list.contains(${bullets}, "fcstPoint")})
FOR THE !** insert river name and forecast point **!:
AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET.
FLOOD STAGE IS !** xx.x **! FEET.
@@ -310,11 +331,11 @@ IMPACTS...!** discussion of expected impacts and flood path **!
!** insert impacts and flood path **!
#end
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -327,9 +348,9 @@ ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AR
####### CALL TO ACTIONS ##############
######################################
##Check to see if we've selected any calls to action.
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -337,59 +358,59 @@ ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AR
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED. STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED. HOWEVER...ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS IMMEDIATELY.
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER ON COUNTRY ROADS AND FARMLAND ALONG THE BANKS OF CREEKS AND STREAMS.
#end
-#if(${list.contains($bullets, "USS_CTA")})
+#if(${list.contains(${bullets}, "USS_CTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES IN URBAN AREAS. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "particularStreamCTA")})
+#if(${list.contains(${bullets}, "particularStreamCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "specificCTA")})
+#if(${list.contains(${bullets}, "specificCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "nightCTA")})
+#if(${list.contains(${bullets}, "nightCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "autoSafetyCTA")})
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperCTA")})
+#if(${list.contains(${bullets}, "camperCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
@@ -412,13 +433,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
-
-## example of a for-each loop which will include interstate/mile marker information
-## #foreach (${local} in ${alpha})
-## spot is ${local.name}...
-## #end
-
-########### EXAMPLES OF PARSE OR INCLUDE STATEMENTS ################################
-## #parse ("test.vm")
-## #include ("username.txt")
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml
index ca49de4272..ac8e88d277 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml
@@ -4,6 +4,10 @@
@@ -111,9 +115,9 @@
-
-
-
+
+
+
@@ -169,9 +173,9 @@
-
-
-
+
+
+
@@ -196,42 +200,67 @@
-
+ false
-
-
-
+
+
+
-
-
-
- 0.00
- AND
- 0
-
- NAME
-
- STATE_ZONE
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- NAME
-
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
+
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
@@ -244,6 +273,7 @@
Name
NAME
+ AREA
STATE
STATE
countyTypes.txt
@@ -254,49 +284,63 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
+and place into this template
+-->
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.vm
index e7920874f6..06674f50d8 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.vm
@@ -3,6 +3,7 @@
## Mary-Beth Schreck, Ed Plumb, Aaron Jacobs 9-23-2011 at Alaska TIM
## edited by Mike Dangelo 01-26-2012 at CRH TIM
## edited by Phil Kurimski 2-29-2012
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
#################################### SET SOME VARIABLES ###################################
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
@@ -12,42 +13,42 @@
#set($extend = false)
#end
##
-#if(${list.contains($bullets, "small")})
+#if(${list.contains(${bullets}, "small")})
#set($advType = "SMALL STREAM FLOOD WARNING")
-#elseif(${list.contains($bullets, "uss")})
+#elseif(${list.contains(${bullets}, "uss")})
#set($advType = "URBAN AND SMALL STREAM FLOOD WARNING")
#else
#set($advType = "FLOOD WARNING")
#end
#set($ic = "ER")
#set($hycType = "")
-#if(${list.contains($bullets, "sm")})
+#if(${list.contains(${bullets}, "sm")})
#set($ic = "SM")
#set($hycType = "SNOW MELT")
-#elseif(${list.contains($bullets, "rs")})
+#elseif(${list.contains(${bullets}, "rs")})
#set($ic = "RS")
#set($hycType = "RAIN AND SNOW MELT")
-#elseif(${list.contains($bullets, "ij")})
+#elseif(${list.contains(${bullets}, "ij")})
#set($ic = "IJ")
#set($hycType = "AN ICE JAM")
-#elseif(${list.contains($bullets, "ic")})
+#elseif(${list.contains(${bullets}, "ic")})
#set($ic = "IC")
#set($hycType = "AN ICE JAM WITH RAIN AND SNOW MELT")
-#elseif(${list.contains($bullets, "go")})
+#elseif(${list.contains(${bullets}, "go")})
#set($ic = "GO")
#set($hycType = "A GLACIER-DAMMED LAKE OUTBURST")
-#elseif(${list.contains($bullets, "dm")})
+#elseif(${list.contains(${bullets}, "dm")})
#set($ic = "DM")
#set($hycType = "A LEVEE FAILURE")
-#elseif(${list.contains($bullets, "dr")})
+#elseif(${list.contains(${bullets}, "dr")})
#set($ic = "DR")
#set($hycType = "A DAM GATE RELEASE")
-#elseif(${list.contains($bullets, "OT")})
+#elseif(${list.contains(${bullets}, "OT")})
#set($ic = "OT")
#set($hycType = "GROUND WATER FLOODING")
-#elseif(${list.contains($bullets, "mc")})
+#elseif(${list.contains(${bullets}, "mc")})
#set($ic = "MC")
-#elseif(${list.contains($bullets, "uu")})
+#elseif(${list.contains(${bullets}, "uu")})
#set($ic = "UU")
#end
##
@@ -67,9 +68,6 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugcline}
/${productClass}.${action}.${vtecOffice}.FA.W.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
-#end
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -87,14 +85,16 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
${advType} FOR...
-#if (${hycType} != "")
+#if(${hycType} != "")
## (EXCLUDED FOR AK)
## ${hycType} IN...
${hycType}...
#end
-## (EXCLUDED FOR AK)
-## #firstBullet(${areas})
-!**INSERT RIVER/STREAM OR AREA **! IN !**INSERT GEO AREA**!...
+##REMMED OUT FOR ALASKA
+###firstBullet(${areas})
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###firstBullet(${affectedCounties})
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
#################################
####### SECOND BULLET ###########
@@ -105,113 +105,113 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#set ($typeofevent = "")
-#set ($report = "HEAVY RAIN THAT WILL CAUSE FLOODING.")
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "rapidRiver")})
- #set ($typeofevent = ". RAPID RIVER RISES ARE EXPECTED.")
+#set($typeofevent = "")
+#set($report = "HEAVY RAIN THAT WILL CAUSE FLOODING.")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rapidRiver")})
+ #set($typeofevent = ". RAPID RIVER RISES ARE EXPECTED.")
#end
-#if(${list.contains($bullets, "glacierOutburst")})
- #set ($report = "A GLACIER-DAMMED LAKE OUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!.")
+#if(${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "A GLACIER-DAMMED LAKE OUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "groundWater")})
- #set ($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!.")
+#if(${list.contains(${bullets}, "groundWater")})
+ #set($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advType}${typeofevent} IN THE WARNING AREA.")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advType}${typeofevent} IN THE WARNING AREA.")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advType}${typeofevent} IN THE WARNING AREA.")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advType}${typeofevent} IN THE WARNING AREA.")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A LINE OF THUNDERSTORMS. THE HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A LINE OF THUNDERSTORMS. THE HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. THAT HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. THAT HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "floodReport")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "floodReport")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "floodReport")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "floodReport")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "floodReport")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "floodReport")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. THE HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. THE HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "floodReport")})
- #set ($report = "THE PUBLIC REPORTED FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "floodReport")})
+ #set($report = "THE PUBLIC REPORTED FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!. THAT HEAVY RAIN WILL CAUSE FLOODING.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!. THAT HEAVY RAIN WILL CAUSE FLOODING.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "glacierOutburst")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "glacierOutburst")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "groundWater")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "groundWater")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.")
#end
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
#end
#################################
@@ -221,14 +221,15 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ${rainAmount}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ${rainAmount}
#############################################################
######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) #########
#############################################################
-#set ($phenomena = "FLOOD")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "listofcities")})
+#set($phenomena = "FLOOD")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -240,7 +241,7 @@ THIS IS A TEST MESSAGE. ##
######################################
###### WHERE ADD INFO GOES ###########
######################################
-#if(${list.contains($bullets, "fcstPoint")})
+#if(${list.contains(${bullets}, "fcstPoint")})
FOR THE !** insert river name and forecast point **!:
AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET.
FLOOD STAGE IS !** xx.x **! FEET.
@@ -251,11 +252,11 @@ IMPACTS...!** discussion of expected impacts and flood path **!
!** insert impacts and flood path **!
#end
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -267,9 +268,9 @@ ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AR
######################################
####### CALL TO ACTIONS ##############
######################################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -278,59 +279,59 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED. STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED. HOWEVER...ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS IMMEDIATELY.
#end
-#if(${list.contains($bullets, "dontdrownCTA")})
+#if(${list.contains(${bullets}, "dontdrownCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "urbanCTA")})
+#if(${list.contains(${bullets}, "urbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralCTA")})
+#if(${list.contains(${bullets}, "ruralCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER ON COUNTRY ROADS AND FARMLAND ALONG THE BANKS OF CREEKS AND STREAMS.
#end
-#if(${list.contains($bullets, "USS_CTA")})
+#if(${list.contains(${bullets}, "USS_CTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES IN URBAN AREAS. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "particularStreamCTA")})
+#if(${list.contains(${bullets}, "particularStreamCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "specificCTA")})
+#if(${list.contains(${bullets}, "specificCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "nightCTA")})
+#if(${list.contains(${bullets}, "nightCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "donotdriveCTA")})
+#if(${list.contains(${bullets}, "donotdriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "autoSafetyCTA")})
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperCTA")})
+#if(${list.contains(${bullets}, "camperCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowspotsCTA")})
+#if(${list.contains(${bullets}, "lowspotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "powerCTA")})
+#if(${list.contains(${bullets}, "powerCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
@@ -351,5 +352,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
-
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml
index 38dd206ab2..5ef2dc44fe 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/arealFloodWarning_Zones.xml
@@ -4,6 +4,10 @@
@@ -92,12 +96,12 @@
-
-
-
-
+
+
+
+
-
+
@@ -152,12 +156,17 @@
-
-
-
-
+
+
+
+
-
+
@@ -212,12 +221,17 @@
-
-
-
-
+
+
+
+
-
+
@@ -241,40 +255,67 @@
+ false
-
-
-
+
+
+
-
-
- 0.00
- AND
- 0
-
- NAME
-
- STATE_ZONE
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- NAME
-
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
+
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
@@ -285,6 +326,7 @@
4
8
Name
+ AREA
NAME
STATE
@@ -297,49 +339,63 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
+and place into this template
+-->
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarning.vm
new file mode 100644
index 0000000000..0b7f4a7511
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarning.vm
@@ -0,0 +1,373 @@
+######################################################################
+## BURN SCAR FLASH FLOOD WARNING TEMPLATE FOR COUNTY-BASED PRODUCTS ##
+######################################################################
+## CREATED BY Phil Kurimski 2-08-2013 OB13.2.1-5
+######################################################################
+## This template can be used for any pre-defined polygon that a site
+## needs to issue a FFW for outside of a dam break.
+#################################### SET SOME VARIABLES ###################################
+#set($hycType = "")
+#set($burnDrainage = "")
+#set($burnScar = "")
+#set($burnCTA = "")
+##
+#if(${action} == "EXT")
+ #set($starttime = "000000T0000Z")
+ #set($extend = true)
+#else
+ #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})})
+ #set($extend = false)
+#end
+##
+#set($ic = "ER")
+#set($snowMelt = "")
+#if(${list.contains(${bullets}, "icrs")})
+ #set($ic = "RS")
+ #set($hycType = "RAIN AND SNOW MELT IN...")
+ #set($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE FLOODING.")
+#end
+##
+${WMOId} ${vtecOffice} 000000 ${BBBId}
+FFW${siteId}
+${ugcline}
+#################################### VTEC LINE ###################################
+/${productClass}.${action}.${vtecOffice}.FF.W.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
+/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+
+#################################### MND HEADER ###################################
+BULLETIN - EAS ACTIVATION REQUESTED
+#if(${productClass}=="T")
+TEST...FLASH FLOOD WARNING...TEST
+#else
+FLASH FLOOD WARNING
+#end
+NATIONAL WEATHER SERVICE ${officeShort}
+#backupText(${backupSite})
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+#if(${productClass}=="T")
+...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
+
+#end
+
+#############################################################################
+## Flash Flood Emergency Headline -- Coming soon to a warning near you! #
+#############################################################################
+###if(${list.contains(${bullets}, "ffwEmergency")} )
+##...FLASH FLOOD EMERGENCY FOR !** LOCATION **!...
+##
+###end
+#headlineext(${officeLoc}, ${backupSite}, ${extend})
+
+#################################
+######## FIRST BULLET ###########
+#################################
+* ##
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+FLASH FLOOD WARNING FOR...
+#if(${hycType} != "")
+ ${hycType}
+#end
+#firstBullet(${areas})
+
+#################################
+####### SECOND BULLET ###########
+#################################
+
+* ##
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
+
+################################################
+#################################
+######## THIRD BULLET ###########
+#################################
+#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
+#if(${list.contains(${bullets}, "flash")} )
+ #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
+#else
+ #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
+#end
+#if(${list.contains(${bullets}, "burnScar")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
+#elseif(${list.contains(${bullets}, "mudSlide")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
+#else
+ #set($burnScar = "")
+ #set($burnCTA = "")
+#end
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
+#end
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN ACROSS THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN ACROSS THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA.")
+#end
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE AREA.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED THUNDERSTORMS PRODUCING HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN FROM THUNDERSTORMS IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "THE PUBLIC REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE THUNDERSTORMS OVER !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IS OCCURRING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN.")
+#end
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS WERE PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#end
+#########################################################################
+## Parse command to include a burnScarInfo.vm file with site specific dam
+## information. Sites can include this information in a separate file or
+## include in the template per the coding below.
+#########################################################################
+#parse ("burnScarInfo.vm")
+
+* ##
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${report} ${rainAmount} ${isExpected} ${snowMelt}
+
+#wrapText("${burnScar}" 2 2)
+
+##########################################################################
+## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet #
+##########################################################################
+#if(${list.contains(${bullets}, "ffwEmergency")} )
+#wrapText("THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!. SEEK HIGHER GROUND NOW! THIS IS A POTENTIALLY LIFE THREATENING SITUATION!" 2 2)
+#end
+
+
+#############################################################
+######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) #########
+#############################################################
+#if(${list.contains(${bullets}, "listofcities")})
+#set($phenomena = "FLASH FLOOD")
+#set($floodType = "FLASH FLOODING")
+#set($warningType = "WARNING")
+* ##
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN
+#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT
+#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE
+#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH!
+#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE..." ${floodType} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
+#end
+########################################## END OF OPTIONAL FOURTH BULLET ##############################
+######################################
+###### WHERE ADDITIONAL INFO GOES ####
+######################################
+
+#if(${list.contains(${bullets}, "addRainfall")})
+ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
+
+#end
+#if(${list.contains(${bullets}, "drainages")})
+#drainages(${riverdrainages})
+
+#end
+#if(${list.contains(${bullets}, "particularStream")})
+FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
+
+#end
+
+#wrapText("${burnDrainage}" 2 2)
+
+## parse file command here is to pull in mile marker info
+## #parse("mileMarkers.vm")
+
+#################################### END OF ADDITIONAL STUFF ###################################
+######################################
+####### CALL TO ACTIONS ##############
+######################################
+##Check to see if we've selected any calls to action.
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
+#end
+#end
+##
+#if(${ctaSelected} == "YES")
+PRECAUTIONARY/PREPAREDNESS ACTIONS...
+
+#end
+
+${burnCTA}
+
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
+
+#end
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
+
+#end
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
+
+#end
+#if(${list.contains(${bullets}, "urbanFloodingCTA")})
+EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
+
+#end
+#if(${list.contains(${bullets}, "ruralFloodingCTA")})
+EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
+
+#end
+#if(${list.contains(${bullets}, "ruralUrbanCTA")})
+EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
+
+#end
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
+
+#end
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
+
+#end
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
+
+#end
+#if(${list.contains(${bullets}, "dontDriveCTA")})
+DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
+
+#end
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
+
+#end
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
+FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
+
+#end
+#if(${list.contains(${bullets}, "camperSafetyCTA")})
+FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
+
+#end
+#if(${list.contains(${bullets}, "lowSpotsCTA")})
+IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
+
+#end
+#if(${list.contains(${bullets}, "ffwMeansCTA")})
+A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
+
+#end
+#if(${list.contains(${bullets}, "powerFloodCTA")})
+DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
+
+#end
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
+
+#end
+#if(${ctaSelected} == "YES")
+&&
+
+#end
+#################################### END OF CTA STUFF ###################################
+
+##########################################
+########BOTTOM OF THE PRODUCT#############
+##########################################
+
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
+
+#end
+#printcoords(${areaPoly}, ${list})
+
+
+$$
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarning.xml
new file mode 100644
index 0000000000..f9d06b5a71
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarning.xml
@@ -0,0 +1,382 @@
+
+
+
+
+
+
+
+ mi
+ mph
+
+
+
+
+ County Names
+ County Warning Areas
+ FFMP Small Stream Basin Links
+ Major Rivers
+
+
+
+
+ NEW
+ COR
+ EXT
+
+
+
+
+ FF.W
+
+
+
+ true
+
+
+ true
+
+
+true
+
+
+
+
+ 45
+
+ 30
+ 45
+ 60
+ 90
+ 120
+ 180
+ 240
+ 360
+ 480
+
+
+ic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
+
+
+
+ true
+ 8.0
+ 5
+ 5
+ 4
+ 8
+ Name
+ AREA
+ COUNTYNAME
+
+ STATE
+ STATE
+ countyTypes.txt
+
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+ NAME
+ 1
+ AREA
+ POINTS
+ true
+ 30
+ 200
+
+
+
+
+
+
+
+
+
+ warngenlev
+ population
+ distance
+
+
+
+
+
+ NAME
+ AREA
+ POINTS
+ true
+ 50
+ 10
+
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ WarnGenLoc
+ County
+
+ States
+ TIMEZONES
+ TIME_ZONE
+
+
+
+ ffmp_basins
+ 0.064
+ streamname
+
+
+
+
+
+ true
+
+
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarningFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarningFollowup.vm
new file mode 100644
index 0000000000..b84926cd1c
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarningFollowup.vm
@@ -0,0 +1,475 @@
+####################################################
+## BURN SCAR FLASH FLOOD STATEMENT ##
+####################################################
+## CREATED BY Phil Kurimski 2-07-2013 OB13.2.1-5
+####################################################
+## This template can be used for any pre-defined polygon that a site
+## needs to issue a FFW for outside of a dam break.
+#################################### SET SOME VARs ###################################
+#set($hycType = "")
+#set($snowMelt = "")
+#set($floodReason = "")
+#set($floodType = "FLASH FLOODING")
+#set($burnDrainage = "")
+#set($burnScar = "")
+#set($burnCTA = "")
+#set($burnScarEnd = "")
+###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY
+#if(${ic} == "RS")
+ #set($hycType = "RAIN AND SNOW MELT")
+ #set($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
+#end
+##
+#########################################################################
+## Parse command to include a burnScarInfo.vm file with site specific dam
+## information. Sites can include this information in a separate file or
+## include in the template per the coding below.
+#########################################################################
+#parse ("burnScarInfo.vm")
+#set($endwarning = "THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT${burnScarEnd}. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#if(${list.contains(${bullets}, "rainEnded")})
+ #set($endwarning = "THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT${burnScarEnd}.")
+#end
+#if(${list.contains(${bullets}, "recedingWater")})
+ #set($endwarning = "FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY${burnScarEnd}. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.")
+#end
+######################################################################################
+${WMOId} ${vtecOffice} 000000 ${BBBId}
+FFS${siteId}
+#if(${productClass}=="T")
+TEST...FLASH FLOOD STATEMENT...TEST
+#else
+FLASH FLOOD STATEMENT
+#end
+NATIONAL WEATHER SERVICE ${officeShort}
+#backupText(${backupSite})
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+#if(${action}=="COR" && ${cancelareas})
+#set($CORCAN = "true")
+#else
+#set($CORCAN = "false")
+#end
+#if(${action}=="CANCON")
+${ugclinecan}
+################### VTEC/COUNTY LINE ##################
+/${productClass}.CAN.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/
+/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#foreach (${area} in ${cancelareas})
+${area.name} ${area.stateabbr}-##
+#end
+#elseif(${CORCAN}=="true")
+${ugclinecan}
+################### VTEC/COUNTY LINE ##################
+/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/
+/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#foreach (${area} in ${cancelareas})
+${area.name} ${area.stateabbr}-##
+#end
+#else
+${ugcline}
+################### VTEC/COUNTY LINE ##################
+/${productClass}.${action}.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
+/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#foreach (${area} in ${areas})
+${area.name} ${area.stateabbr}-##
+#end
+#end
+
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+#if(${productClass}=="T")
+...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
+
+#end
+#################################################################
+#################################################################
+## LETS START WITH EXPIRATION AND CANCELLATION SEGMENTS #####
+#################################################################
+#################################################################
+### CREATE PHRASING DEPENDING ON WHETHER WE ISSUE EXP PRIOR TO EXPIRATION TIME OR NOT
+#if(${now.compareTo(${expire})} >= 0 && ${action}=="EXP" )
+ #set($expcanHLTag = "HAS EXPIRED")
+ #set($expcanBODYTag = "HAS BEEN ALLOWED TO EXPIRE")
+#elseif(${action}=="EXP")
+ #set($expcanHLTag = "WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}")
+ #set($expcanBODYTag = "WILL BE ALLOWED TO EXPIRE")
+#elseif(${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
+ #set($expcanHLTag = "IS CANCELLED")
+ #set($expcanBODYTag = "HAS BEEN CANCELLED")
+#end
+################################
+#### CREATE HEADLINES ##########
+################################
+##
+#if(${action}=="EXP" || ${action}=="CAN")
+...THE FLASH FLOOD WARNING FOR ##
+#if(${hycType} != "")
+${hycType} IN ##
+#end
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
+## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
+#elseif(${action}=="CANCON" || ${CORCAN}=="true")
+...THE FLASH FLOOD WARNING FOR ##
+#if(${hycType} != "")
+${hycType} IN ##
+#end
+#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
+#end
+############################
+## END CAN/EXP HEADLINE ####
+############################
+#######################################
+## EXPIRATION/CANCELLATION STATEMENT ##
+#######################################
+
+#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
+
+${endwarning}
+
+#printcoords(${areaPoly}, ${list})
+########### KEEP TWO BLANK LINES BELOW
+
+
+#end
+#################################### END OF CAN STUFF ###################################
+#### IF PARTIAL CANCELLATION, INSERT $$ AND 2ND UGC/MND SECTION PRIOR TO CON PORTION
+#########################################################################################
+#if(${action}=="CANCON")
+
+
+${ugcline}
+/${productClass}.CON.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/
+/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#foreach (${area} in ${areas})
+${area.name} ${area.stateabbr}-##
+#end
+
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+#if(${productClass}=="T")
+...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
+
+#end
+#elseif(${CORCAN}=="true")
+
+
+${ugcline}
+/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/
+/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#foreach (${area} in ${areas})
+${area.name} ${area.stateabbr}-##
+#end
+
+${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
+
+#if(${productClass}=="T")
+...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
+
+#end
+#end
+############################
+## CONTINUATION STATEMENT ##
+############################
+#if(${action}=="CANCON" || ${action}=="CON" || ${action}=="COR" || ${CORCAN}=="true")
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE.##
+#end
+...THE FLASH FLOOD WARNING ##
+#if(${hycType} != "")
+FOR ${hycType} ##
+#end
+REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
+#headlineLocList(${areas} true true true false)...
+###############################################################################
+## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
+###############################################################################
+#if(${list.contains(${bullets}, "ffwEmergency")})
+#set($ctaSelected = "YES")
+
+...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
+
+#end
+
+################################################
+#################################
+######## THIRD BULLET ###########
+#################################
+#set($reportType = "HEAVY RAIN")
+#set($rainAmount = "")
+#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
+#if(${list.contains(${bullets}, "flash")} )
+ #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
+#else
+ #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
+#end
+#if(${list.contains(${bullets}, "burnScar")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
+#elseif(${list.contains(${bullets}, "mudSlide")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
+#else
+ #set($burnScar = "")
+ #set($burnCTA = "")
+#end
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#end
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** AMOUNT **! INCHES OF RAIN HAVE FALLEN.")
+#end
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN ACROSS THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN ACROSS THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA.")
+#end
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED THUNDERSTORMS PRODUCING HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN FROM THUNDERSTORMS IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "THE PUBLIC REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#end
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN OVER THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS OVER THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE WARNED AREA.")
+#end
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT THUNDERSTORMS WERE PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#end
+#########################################################################
+## Parse command to include a burnscarInfo.vm file with site specific dam
+## information. Sites can include this information in a separate file or
+## include in the template per the coding below.
+#########################################################################
+#parse ("burnScarInfo.vm")
+
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ${rainAmount} ${isExpected} ${snowMelt}
+
+${burnScar}
+
+############################################
+######## (CITY LIST) #########
+############################################
+#if(${list.contains(${bullets}, "listofcities")})
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN
+#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT
+#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE
+#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH!
+#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE..." ${floodType} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
+
+#end
+########### KEEP TWO BLANK LINES BELOW
+
+
+########################################## END OF OPTIONAL FOURTH BULLET ##############################
+######################################
+###### WHERE ADDITIONAL INFO GOES ####
+######################################
+#if(${list.contains(${bullets}, "addRainfall")})
+ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
+
+#end
+#if(${list.contains(${bullets}, "particularStream")})
+FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
+
+#end
+#if(${list.contains(${bullets}, "drainages")})
+#drainages(${riverdrainages})
+
+#end
+
+${burnDrainage}
+
+## parse file command here is to pull in mile marker info
+## #parse("mileMarkers.vm")
+
+#################################### END OF ADDITIONAL STUFF ###################################
+######################################
+####### CALL TO ACTIONS ##############
+######################################
+##Check to see if we've selected any calls to action.
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
+#end
+#end
+##
+#if(${ctaSelected} == "YES")
+PRECAUTIONARY/PREPAREDNESS ACTIONS...
+
+#end
+
+${burnCTA}
+
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
+
+#end
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
+
+#end
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
+
+#end
+#if(${list.contains(${bullets}, "urbanFloodingCTA")})
+EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
+
+#end
+#if(${list.contains(${bullets}, "ruralFloodingCTA")})
+EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
+
+#end
+#if(${list.contains(${bullets}, "ruralUrbanCTA")})
+EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
+
+#end
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
+
+#end
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
+
+#end
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
+
+#end
+#if(${list.contains(${bullets}, "dontDriveCTA")})
+DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
+
+#end
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
+
+#end
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
+FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
+
+#end
+#if(${list.contains(${bullets}, "camperSafetyCTA")})
+FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
+
+#end
+#if(${list.contains(${bullets}, "lowSpotsCTA")})
+IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
+
+#end
+#if(${list.contains(${bullets}, "ffwMeansCTA")})
+A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
+
+#end
+#if(${list.contains(${bullets}, "powerFloodCTA")})
+DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
+
+#end
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
+
+#end
+#if(${ctaSelected} == "YES")
+&&
+
+#end
+#################################### END OF CTA STUFF ###################################
+
+##########################################
+########BOTTOM OF THE PRODUCT#############
+##########################################
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
+
+#end
+#printcoords(${areaPoly}, ${list})
+########### KEEP TWO BLANK LINES BELOW
+
+
+#end
+$$
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarningFollowup.xml
new file mode 100644
index 0000000000..718a4c7dbb
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarFlashFloodWarningFollowup.xml
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+ mi
+ mph
+
+
+
+ County Names
+ County Warning Areas
+
+
+
+
+
+
+ COR
+ CON
+ CAN
+ EXP
+
+
+
+
+ FF.W
+
+
+
+ false
+
+
+ true
+
+
+
+ 30
+
+ 30
+
+
+ic,dam
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
+
+
+
+ true
+ 8.0
+ 5
+ 5
+ 4
+ 8
+ Name
+ AREA
+ COUNTYNAME
+
+ STATE
+ STATE
+ countyTypes.txt
+
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+ NAME
+ 1
+ AREA
+ POINTS
+ true
+ 30
+ 200
+
+
+
+
+
+
+
+
+
+ warngenlev
+ population
+ distance
+
+
+
+
+
+ NAME
+ AREA
+ POINTS
+ true
+ 10
+ 200
+
+ name
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WarnGenLoc
+ County
+
+ States
+ TIMEZONES
+ TIME_ZONE
+
+
+
+ ffmp_basins
+ 0.064
+ streamname
+
+
+
+
+
+ true
+
+
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfo.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfo.vm
new file mode 100644
index 0000000000..059dc71c7c
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfo.vm
@@ -0,0 +1,34 @@
+#########################################################################
+## The next section is for site specific burn scars and other areas that
+## need a pre-defined polygon for a FFW. Each site should take the
+## example below and customize it with the information they used in
+## AWIPS 1. The following is an example of a burn scar area for a
+## pre-defined polygon in Boulders (BOU) cwa.
+## If you have any questions please contact Phil Kurimski - WFO DTX
+#########################################################################
+#*
+#if(${list.contains($bullets, "FourMileBurnArea")})
+ #set($burnScarName = "FOUR MILE BURN AREA")
+ #set($burnScarEnd = " OVER THE FOUR MILE BURN AREA")
+#end
+#if(${list.contains($bullets, "fourmilelowimpact")})
+ #set($ctaSelected = "YES")
+ #set($burnScar = "THIS IS A LIFE THREATENING SITUATION. HEAVY RAINFALL WILL CAUSE EXTENSIVE AND SEVERE FLASH FLOODING OF CREEKS...STREAMS...AND DITCHES IN THE FOURMILE BURN AREA.")
+ #set($burnDrainage = "SOME DRAINAGE BASINS IMPACTED INCLUDE FOURMILE CREEK...GOLD RUN...AND FOURMILE CANYON CREEK.")
+ #set($burnCTA = "THIS IS A LIFE THREATENING SITUATION. HEAVY RAINFALL WILL CAUSE EXTENSIVE AND SEVERE FLASH FLOODING OF CREEKS...STREAMS...AND DITCHES IN THE FOURMILE BURN AREA. SOME DRAINAGE BASINS IMPACTED INCLUDE FOURMILE CREEK...GOLD RUN...AND FOURMILE CANYON CREEK. SEVERE DEBRIS FLOWS CAN ALSO BE ANTICIPATED ACROSS ROADS. ROADS AND DRIVEWAYS MAY BE WASHED AWAY IN PLACES. IF YOU ENCOUNTER FLOOD WATERS...CLIMB TO SAFETY.")
+#end
+#if(${list.contains($bullets, "fourmilehighimpact")})
+ #set($ctaSelected = "YES")
+ #set($burnScar = "THIS IS A LIFE THREATENING SITUATION FOR PEOPLE ALONG BOULDER CREEK IN THE CITY OF BOULDER...IN THE FOURMILE BURN AREA...AND IN BOULDER CANYON. HEAVY RAINFALL WILL CAUSE EXTENSIVE AND SEVERE FLASH FLOODING OF CREEKS AND STREAMS FROM THE FOURMILE BURN AREA DOWNSTREAM THROUGH THE CITY OF BOULDER.")
+ #set($burnDrainage = "SOME DRAINAGE BASINS IMPACTED INCLUDE BOULDER CREEK...FOURMILE CREEK...GOLD RUN...FOURMILE CANYON CREEK...AND WONDERLAND CREEK.")
+ #set($burnCTA = "THIS IS A LIFE THREATENING SITUATION FOR PEOPLE ALONG BOULDER CREEK IN THE CITY OF BOULDER...IN THE FOURMILE BURN AREA...AND IN BOULDER CANYON. HEAVY RAINFALL WILL CAUSE EXTENSIVE AND SEVERE FLASH FLOODING OF CREEKS AND STREAMS FROM THE FOURMILE BURN AREA DOWNSTREAM THROUGH THE CITY OF BOULDER. SOME DRAINAGE BASINS IMPACTED INCLUDE BOULDER CREEK...FOURMILE CREEK...GOLD RUN...FOURMILE CANYON CREEK...AND WONDERLAND CREEK. SEVERE DEBRIS FLOWS CAN ALSO BE ANTICIPATED ACROSS ROADS. ROADWAYS AND BRIDGES MAY BE WASHED AWAY IN PLACES. IF YOU ENCOUNTER FLOOD WATERS...CLIMB TO SAFETY.")
+#end
+*#
+#########################################################
+## End of example
+#########################################################
+
+#######################################################################
+## End of Site Specific Burn Scar Information
+#######################################################################
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfoBullet.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfoBullet.xml
new file mode 100644
index 0000000000..0692cb41c0
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfoBullet.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfoBulletName.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfoBulletName.xml
new file mode 100644
index 0000000000..18b65a8deb
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/burnScarInfoBulletName.xml
@@ -0,0 +1,12 @@
+
+
+
+
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfo.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfo.vm
index 166f2129cb..ed4ec6f9b2 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfo.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfo.vm
@@ -5,44 +5,44 @@
## please contact Phil Kurimski - WFO DTX
#########################################################################
#*
-#if(${list.contains($bullets, "BigRockDam")})
+#if(${list.contains(${bullets}, "BigRockDam")})
#set($riverName = "PHIL RIVER")
#set($damName = "BIG ROCK DAM")
#set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES")
#end
-#if(${list.contains($bullets, "BigRockhighfast")})
+#if(${list.contains(${bullets}, "BigRockhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockhighnormal")})
+#if(${list.contains(${bullets}, "BigRockhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumfast")})
+#if(${list.contains(${bullets}, "BigRockmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumnormal")})
+#if(${list.contains(${bullets}, "BigRockmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockruleofthumb")})
+#if(${list.contains(${bullets}, "BigRockruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
-#if(${list.contains($bullets, "BranchedOakDam")})
+#if(${list.contains(${bullets}, "BranchedOakDam")})
#set($riverName = "KELLS RIVER")
#set($damName = "BRANCHED OAK DAM")
#set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES")
#end
-#if(${list.contains($bullets, "BranchedOakhighfast")})
+#if(${list.contains(${bullets}, "BranchedOakhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakhighnormal")})
+#if(${list.contains(${bullets}, "BranchedOakhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumfast")})
+#if(${list.contains(${bullets}, "BranchedOakmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumnormal")})
+#if(${list.contains(${bullets}, "BranchedOakmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakruleofthumb")})
+#if(${list.contains(${bullets}, "BranchedOakruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
*#
@@ -57,8 +57,8 @@
## the word "Dam". If you end with a different word you will need
## to modify the loop below.
########################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("Dam"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("Dam")})
#set($ctaSelected = "YES")
#set($sitespecSelected = "YES")
## #set($hycType = "THE ${riverName} BELOW ${damName}")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBullet.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBullet.xml
index c22510e7c8..c70436e865 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBullet.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBullet.xml
@@ -16,10 +16,4 @@
-->
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBulletName.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBulletName.xml
index c012c294bd..38be6f0974 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBulletName.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/damInfoBulletName.xml
@@ -16,8 +16,3 @@
-->
-
-
-
-
-
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/dupCounties.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/dupCounties.vm
index 848e34448e..ffc49c6e8d 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/dupCounties.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/dupCounties.vm
@@ -4,4 +4,4 @@
### For example: #set ($dupcounties = ["20091","20107","29101","29115"])
### IF YOU DO NOT HAVE DUPLICATE COUNTY NAMES USE THE FOLLOWING SYNTAX:
### Null example: #set ($dupcounties = [""])
-#set ($dupcounties = ["20091","20107","29101","29115"])
\ No newline at end of file
+#set ($dupcounties = [""])
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.vm
index 086593b64e..809df3f0e4 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.vm
@@ -5,8 +5,9 @@
## VERSION AWIPS II 1.0 -- 15-APRIL-2011
## MODIFIED EVAN BOOKBINDER 09-16-2011 OB11.0.8-8 ##
## EVAN BOOKBINDER WFO EAX 11-04-2011 OB11.9-3 (DRs) ##
-## QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
## QINGLU LIN 8-14-2012 DR 14493 use TMLtime ##
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
+## Evan Bookbinder 06-07-2013 Fixed CTAs/&&
############################################################################
## EWW PRODUCT ##
#################
@@ -32,79 +33,77 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#headline(${officeLoc}, ${backupSite})
+##################
+## FIRST BULLET ##
+##################
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-EXTREME WIND WARNING FOR THE ONSET OF SUSTAINED WINDS OF 115 MPH OR GREATER FOR...
-#foreach (${area} in ${areas})
- ##
-#if(${area.partOfArea})
-#areaFormat(${area.partOfArea} true false) ##
-#end
-${area.name} ${area.areaNotation} IN #areaFormat(${area.partOfParentRegion} true false) ${area.parentRegion}...
-#end
-#*
-#if(${list.size($area.points)} > 1)
- THIS INCLUDES THE CITIES OF... #foreach (${city} in ${area.points})${city}... #end
-#elseif(${list.size($area.points)} > 0)
- THIS INCLUDES THE CITY OF ${list.get(${area.points},0)}
-#end
-#end
-*#
+EXTREME WIND WARNING FOR...
+#firstBullet(${areas})
+
+###################
+## SECOND BULLET ##
+###################
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
+#set($reportType1 = "!**NO THREAT TYPE WAS SELECTED. PLEASE CHECK YOUR WARNGEN SELECTIONS AND RE-GENERATE THIS PRODUCT**!")
+
+#if(${list.contains(${bullets}, "var1")})
#set($reportType1 = "ASSOCIATED WITH THE EYEWALL OF HURRICANE !**name**!...WERE MOVING ONSHORE")
#set($reportType = "EXTREME WINDS")
#set($reportType2 = "THE HURRICANE EYEWALL WAS")
+#end
+
##
-#if(${list.contains($bullets, "var1")})
+#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "ASSOCIATED WITH A BROAD AREA OF INTENSE THUNDERSTORMS...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS AREA OF THUNDERSTORM WINDS WAS")
#end
##
-#if(${list.contains($bullets, "var2")})
+#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "ASSOCIATED WITH AN INTENSE LOW PRESSURE AREA...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS INTENSE LOW PRESSURE SYSTEM WAS")
#end
##
-#if(${list.contains($bullets, "var3")})
+#if(${list.contains(${bullets}, "var4")})
#set($reportType1 = "ASSOCIATED WITH A DOWNSLOPE WINDSTORM...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS AREA OF DOWNSLOPE WINDS WAS")
#end
##
-#if(${list.contains($bullets, "basis1")})
+#if(${list.contains(${bullets}, "basis1")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis2")})
+#if(${list.contains(${bullets}, "basis2")})
#set($reportType = "SURFACE OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis3")})
+#if(${list.contains(${bullets}, "basis3")})
#set($reportType = "MARITIME OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis4")})
+#if(${list.contains(${bullets}, "basis4")})
#set($reportType = "TRAINED WEATHER SPOTTERS REPORTED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis5")})
+#if(${list.contains(${bullets}, "basis5")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND SURFACE OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis6")})
+#if(${list.contains(${bullets}, "basis6")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND MARITIME OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis7")})
+#if(${list.contains(${bullets}, "basis7")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND TRAINED WEATHER SPOTTERS REPORTED EXTREME WINDS")
#end
##
@@ -114,24 +113,30 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${reportType}...${reportType1} ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", true)
-#if($movementSpeed < 3 || ${stationary})
-. ${reportType2} NEARLY STATIONARY.
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${reportType}...${reportType1} ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
#else
-...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
#end
+#if($movementSpeed < 3 || ${stationary})
+. ${reportType2} NEARLY STATIONARY.##
+#else
+...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.##
+#end
+ THIS IS AN EXTREMELY DANGEROUS AND LIFE-THREATENING SITUATION!
-#set ($phenomena = "EXTREME WINDS")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+#set($phenomena = "EXTREME WINDS")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${phenomena} WILL BE NEAR..." ${phenomena} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -144,17 +149,25 @@ THIS IS A TEST MESSAGE. ##
#end
+## parse file command here is to pull in mile marker info
+## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
#####################
## CALL TO ACTIONS ##
#####################
-#if(${list.contains($bullets, "cta1")} || ${list.contains($bullets, "cta2")} || ${list.contains($bullets, "cta3")})
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
+#end
+#end
+##
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "cta1")})
+#if(${list.contains(${bullets}, "destructiveWindsCTA")})
WIDESPREAD DESTRUCTIVE WINDS OF !** **! TO !** **! MPH WILL SPREAD ACROSS ##
#foreach (${area} in ${areas})
${area.name} ${area.areaNotation}...##
@@ -162,24 +175,28 @@ WIDESPREAD DESTRUCTIVE WINDS OF !** **! TO !** **! MPH WILL SPREAD ACROSS ##
PRODUCING SWATHS OF TORNADO-LIKE DAMAGE.
#end
-#if(${list.contains($bullets, "cta2")})
+#if(${list.contains(${bullets}, "takeCoverCTA")})
TAKE COVER NOW! TREAT THESE IMMINENT EXTREME WINDS AS IF A TORNADO WAS APPROACHING AND MOVE IMMEDIATELY TO THE SAFE ROOM IN YOUR SHELTER. TAKE ACTION NOW TO PROTECT YOUR LIFE!
#end
-#if(${list.contains($bullets, "cta3")})
+#if(${list.contains(${bullets}, "safePlacesCTA")})
THE SAFEST PLACE TO BE DURING A MAJOR LANDFALLING HURRICANE IS IN A REINFORCED INTERIOR ROOM AWAY FROM WINDOWS. GET UNDER A TABLE OR OTHER PIECE OF STURDY FURNITURE. USE MATTRESSES...BLANKETS OR PILLOWS TO COVER YOUR HEAD AND BODY. REMAIN IN PLACE THROUGH THE PASSAGE OF THESE LIFE THREATENING CONDITIONS.
+#end
+#if(${ctaSelected} == "YES")
+&&
+
#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-&&
+
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
@@ -187,15 +204,9 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${TMLtime}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml
index 4fd50c9bad..eeb8f45585 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarning.xml
@@ -1,6 +1,10 @@
@@ -56,85 +60,93 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
- 0.00
- AND
- 0
- COUNTYNAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
50
@@ -147,11 +159,15 @@
NAME
+ AREA
POINTS
-
+
-
+
+
+
+
5
100
@@ -163,6 +179,7 @@
+ 1
true
8.0
5
@@ -171,38 +188,52 @@
8
Name
COUNTYNAME
+ AREA
STATE
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -212,8 +243,11 @@
-
+
+
+
+
@@ -222,9 +256,8 @@ and place into this template
-->
-
- City
+ WarnGenLoc
County
States
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.vm
index 58862f7b0d..9575f728e9 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.vm
@@ -2,9 +2,8 @@
## EWW SVS ##
## MODIFIED EVAN BOOKBINDER 09-16-2011 OB11.0.8-8
## Evan Bookbinder 4-25-2012 for OB 12.3.1 (corText)
-## QINGLU LIN 7-31-2012 DR 15217 use roundAndPad
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
-## D. Friedman 03-13-2013 DR 15892. Use printcoords.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
+## Evan Bookbinder 06-07-2013 Fixed CTAs/&&
################################################
##
### CREATE PHRASING DEPENDING ON WHETHER WE ISSUE EXP PRIOR TO EXPIRATION TIME OR NOT
@@ -56,8 +55,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
...THE EXTREME WIND WARNING FOR ##
-#headlineLocList(${areas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
## One line explanation
!**EXPLANATION**!
@@ -65,10 +63,10 @@ THIS IS A TEST MESSAGE. ##
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -81,49 +79,49 @@ THIS IS A TEST MESSAGE. ##
#set($reportType = "EXTREME WINDS")
#set($reportType2 = "THE HURRICANE EYEWALL WAS")
##
-#if(${list.contains($bullets, "var1")})
+#if(${list.contains(${bullets}, "var1")})
#set($reportType1 = "ASSOCIATED WITH A BROAD AREA OF INTENSE THUNDERSTORMS...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS AREA OF THUNDERSTORM WINDS WAS")
#end
##
-#if(${list.contains($bullets, "var2")})
+#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "ASSOCIATED WITH AN INTENSE LOW PRESSURE AREA...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS INTENSE LOW PRESSURE SYSTEM WAS")
#end
##
-#if(${list.contains($bullets, "var3")})
+#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "ASSOCIATED WITH A DOWNSLOPE WINDSTORM...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS AREA OF DOWNSLOPE WINDS WAS")
#end
##
-#if(${list.contains($bullets, "basis1")})
+#if(${list.contains(${bullets}, "basis1")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis2")})
+#if(${list.contains(${bullets}, "basis2")})
#set($reportType = "SURFACE OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis3")})
+#if(${list.contains(${bullets}, "basis3")})
#set($reportType = "MARITIME OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis4")})
+#if(${list.contains(${bullets}, "basis4")})
#set($reportType = "TRAINED WEATHER SPOTTERS REPORTED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis5")})
+#if(${list.contains(${bullets}, "basis5")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND SURFACE OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis6")})
+#if(${list.contains(${bullets}, "basis6")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND MARITIME OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis7")})
+#if(${list.contains(${bullets}, "basis7")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND TRAINED WEATHER SPOTTERS REPORTED EXTREME WINDS")
#end
##
@@ -159,32 +157,40 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
...AN EXTREME WIND WARNING REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)...
+#headlineLocList(${areas} true true true false)...
## Storm current location description
#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${reportType}...${reportType1} ##
+THIS IS A TEST MESSAGE. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${reportType}...${reportType1} ##
#else
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${reportType}...${reportType1} ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${reportType}...${reportType1} ##
+#end
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
#end
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", true)
#if($movementSpeed < 3 || ${stationary})
-. ${reportType2} NEARLY STATIONARY.
+. ${reportType2} NEARLY STATIONARY.##
#else
-...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
+...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.##
#end
-
-#set ($phenomena = "EXTREME WINDS")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+ THIS IS AN EXTREMELY DANGEROUS AND LIFE-THREATENING SITUATION!
+
+#set($phenomena = "EXTREME WINDS")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${phenomena} WILL BE NEAR..." ${phenomena} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -195,37 +201,36 @@ THIS IS A TEST MESSAGE. ##
#locationsList("LOCATIONS IMPACTED INCLUDE..." "${phenomena} ARE EXPECTED TO REMAIN OVER MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
#end
-##############################################
+
###### mile markers ##############
-##############################################
#parse("milemarkers.vm")
#####################
## CALL TO ACTIONS ##
#####################
-#if(${list.contains($bullets, "cta1")} || ${list.contains($bullets, "cta2")} || ${list.contains($bullets, "cta3")})
+#if(${list.contains(${bullets}, "cta1")} || ${list.contains(${bullets}, "cta2")} || ${list.contains(${bullets}, "cta3")})
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "cta1")})
+#if(${list.contains(${bullets}, "cta1")})
WIDESPREAD DESTRUCTIVE WINDS OF !** **! TO !** **! MPH WILL SPREAD ACROSS ##
-#headlineLocList(${areas} true true true false true)...PRODUCING SWATHS OF TORNADO-LIKE DAMAGE.
+#headlineLocList(${areas} true true true false)...PRODUCING SWATHS OF TORNADO-LIKE DAMAGE.
#end
-#if(${list.contains($bullets, "cta2")})
+#if(${list.contains(${bullets}, "cta2")})
TAKE COVER NOW! TREAT THESE IMMINENT EXTREME WINDS AS IF A TORNADO WAS APPROACHING AND MOVE IMMEDIATELY TO THE SAFE ROOM IN YOUR SHELTER. TAKE ACTION NOW TO PROTECT YOUR LIFE!
#end
-#if(${list.contains($bullets, "cta3")})
+#if(${list.contains(${bullets}, "cta3")})
THE SAFEST PLACE TO BE DURING A MAJOR LANDFALLING HURRICANE IS IN A REINFORCED INTERIOR ROOM AWAY FROM WINDOWS. GET UNDER A TABLE OR OTHER PIECE OF STURDY FURNITURE. USE MATTRESSES...BLANKETS OR PILLOWS TO COVER YOUR HEAD AND BODY. REMAIN IN PLACE THROUGH THE PASSAGE OF THESE LIFE THREATENING CONDITIONS.
#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -238,49 +243,49 @@ THE SAFEST PLACE TO BE DURING A MAJOR LANDFALLING HURRICANE IS IN A REINFORCED I
#set($reportType = "EXTREME WINDS")
#set($reportType2 = "THE HURRICANE EYEWALL WAS")
##
-#if(${list.contains($bullets, "var1")})
+#if(${list.contains(${bullets}, "var1")})
#set($reportType1 = "ASSOCIATED WITH A BROAD AREA OF INTENSE THUNDERSTORMS...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS AREA OF THUNDERSTORM WINDS WAS")
#end
##
-#if(${list.contains($bullets, "var2")})
+#if(${list.contains(${bullets}, "var2")})
#set($reportType1 = "ASSOCIATED WITH AN INTENSE LOW PRESSURE AREA...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS INTENSE LOW PRESSURE SYSTEM WAS")
#end
##
-#if(${list.contains($bullets, "var3")})
+#if(${list.contains(${bullets}, "var3")})
#set($reportType1 = "ASSOCIATED WITH A DOWNSLOPE WINDSTORM...LOCATED")
#set($reportType = "EXTREME WINDS WERE OCCURING")
#set($reportType2 = "THIS AREA OF DOWNSLOPE WINDS WAS")
#end
##
-#if(${list.contains($bullets, "basis1")})
+#if(${list.contains(${bullets}, "basis1")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis2")})
+#if(${list.contains(${bullets}, "basis2")})
#set($reportType = "SURFACE OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis3")})
+#if(${list.contains(${bullets}, "basis3")})
#set($reportType = "MARITIME OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis4")})
+#if(${list.contains(${bullets}, "basis4")})
#set($reportType = "TRAINED WEATHER SPOTTERS REPORTED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis5")})
+#if(${list.contains(${bullets}, "basis5")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND SURFACE OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis6")})
+#if(${list.contains(${bullets}, "basis6")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND MARITIME OBSERVATIONS INDICATED EXTREME WINDS")
#end
##
-#if(${list.contains($bullets, "basis7")})
+#if(${list.contains(${bullets}, "basis7")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND TRAINED WEATHER SPOTTERS REPORTED EXTREME WINDS")
#end
##
@@ -315,9 +320,8 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${productClass}=="T")
THIS IS A TEST MESSAGE.##
#end
-...THE EXTREME WIND WARNING FOR##
-#headlineLocList(${cancelareas} true true true false true)
- ${expcanHLTag}...
+...THE EXTREME WIND WARNING FOR ##
+#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
## One line explanation
!**EXPLANATION**!
@@ -325,10 +329,10 @@ THIS IS A TEST MESSAGE.##
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")
@@ -337,13 +341,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
@@ -364,7 +362,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...AN EXTREME WIND WARNING REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)...
+#headlineLocList(${areas} true true true false)...
#if(${productClass}=="T")
@@ -373,22 +371,27 @@ THIS IS A TEST MESSAGE. AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${lo
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${reportType}...${reportType1} ##
#end
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES")
-#if($movementSpeed < 3 || ${stationary})
-. ${reportType2} NEARLY STATIONARY.
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
#else
-...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
#end
-
-#set ($phenomena = "EXTREME WINDS")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+#if($movementSpeed < 3 || ${stationary})
+. ${reportType2} NEARLY STATIONARY.##
+#else
+...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.##
+#end
+ THIS IS AN EXTREMELY DANGEROUS AND LIFE-THREATENING SITUATION!
+
+#set($phenomena = "EXTREME WINDS")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${phenomena} WILL BE NEAR..." ${phenomena} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -399,18 +402,26 @@ THIS IS A TEST MESSAGE. ##
#locationsList("LOCATIONS IMPACTED INCLUDE..." ${phenomena} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
#end
-##############################################
###### mile markers ##############
-##############################################
-#parse("milemarkers.vm")
-#####################
-## CALL TO ACTIONS ##
-#####################
-#if(${list.contains($bullets, "cta1")} || ${list.contains($bullets, "cta2")} || ${list.contains($bullets, "cta3")})
+## #parse("milemarkers.vm")
+
+##################################
+######### CALLS TO ACTION ########
+##################################
+##Check to see if we've selected any calls to action. In our .xml file
+##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
+#end
+#end
+##
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "cta1")})
+##
+#if(${list.contains(${bullets}, "destructiveWindsCTA")})
WIDESPREAD DESTRUCTIVE WINDS OF !** **! TO !** **! MPH WILL SPREAD ACROSS ##
#foreach (${area} in ${areas})
${area.name} ${area.areaNotation}...##
@@ -418,21 +429,27 @@ WIDESPREAD DESTRUCTIVE WINDS OF !** **! TO !** **! MPH WILL SPREAD ACROSS ##
PRODUCING SWATHS OF TORNADO-LIKE DAMAGE.
#end
-#if(${list.contains($bullets, "cta2")})
+#if(${list.contains(${bullets}, "takeCoverCTA")})
TAKE COVER NOW! TREAT THESE IMMINENT EXTREME WINDS AS IF A TORNADO WAS APPROACHING AND MOVE IMMEDIATELY TO THE SAFE ROOM IN YOUR SHELTER. TAKE ACTION NOW TO PROTECT YOUR LIFE!
#end
-#if(${list.contains($bullets, "cta3")})
+#if(${list.contains(${bullets}, "safePlacesCTA")})
THE SAFEST PLACE TO BE DURING A MAJOR LANDFALLING HURRICANE IS IN A REINFORCED INTERIOR ROOM AWAY FROM WINDOWS. GET UNDER A TABLE OR OTHER PIECE OF STURDY FURNITURE. USE MATTRESSES...BLANKETS OR PILLOWS TO COVER YOUR HEAD AND BODY. REMAIN IN PLACE THROUGH THE PASSAGE OF THESE LIFE THREATENING CONDITIONS.
#end
+##
+#if(${ctaSelected} == "YES")
+&&
+
+#end
+##
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -464,16 +481,15 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE EXTREME WIND WARNING FOR##
-#headlineLocList(${areas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -485,15 +501,9 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml
index 8ff99803bc..fc306ee4e1 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/extremeWindWarningFollowup.xml
@@ -2,6 +2,10 @@
MODIFIED EVAN BOOKBINDER 09-16-2011 OB11.0.8-8
EVAN BOOKBINDER WFO EAX 11-4-2011 removed bulletDefaults that prevented auto selection
Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Added new areaSource object
+ Evan Bookbinder 03-01-2013 Fixed Group Settings
+ Evan Bookbinder 06-07-2013 Fixed CTAs
-->
@@ -71,83 +75,98 @@
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
+
+
+
-
- 0.00
- AND
- 0
- COUNTYNAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -157,11 +176,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -173,6 +196,7 @@
+ 1
true
8.0
5
@@ -180,22 +204,30 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
+
+
+
+ 1
NAME
+ AREA
TRACK
true
20
@@ -204,15 +236,21 @@
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -222,8 +260,11 @@
-
+
+
+
+
@@ -232,9 +273,8 @@ and place into this template
-->
-
- City
+ WarnGenLoc
County
States
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.vm
index 122da993e3..95cb7569cf 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.vm
@@ -2,6 +2,7 @@
## FIRE WARNING TEMPLATE ##
## VERSION 1.1 ##
## CREATED BOOKBINDER/DANGELO - 2-07-12 - Initial OB12 Write ##
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
###############################################################################
${WMOId} ${vtecOffice} 000000 ${BBBId}
FRW${siteId}
@@ -28,11 +29,11 @@ THE FOLLOWING MESSAGE IS BEING TRANSMITTED AT THE REQUEST OF !** ENTER AUTHORIZI
############################
### FIRE WEATHER EMERGENCY #
############################
-#if(${list.contains($bullets, "fireEmergency")})
+#if(${list.contains(${bullets}, "fireEmergency")})
THIS IS A FIRE EMERGENCY FOR !** EDIT LOCATION(S) **!...TAKE IMMEDIATE SAFETY PRECAUTIONS NOW.
#end
-#if(${list.contains($bullets, "generic")})
+#if(${list.contains(${bullets}, "generic")})
!** TYPE FIRE DETAILS HERE **!.
@@ -40,7 +41,7 @@ THIS IS A FIRE EMERGENCY FOR !** EDIT LOCATION(S) **!...TAKE IMMEDIATE SAFETY PR
#end
-#if(${list.contains($bullets, "actual")})
+#if(${list.contains(${bullets}, "actual")})
A FIRE WAS LOCATED !** DETAILS **! AND COULD AFFECT !** AREAS **!.
@@ -48,7 +49,7 @@ A FIRE WAS LOCATED !** DETAILS **! AND COULD AFFECT !** AREAS **!.
#end
-#if(${list.contains($bullets, "racing")})
+#if(${list.contains(${bullets}, "racing")})
A FIRE WAS RACING TOWARD !** LOCATIONS **! AND COULD REACH THERE BY !** TIME **!.
@@ -57,16 +58,16 @@ A FIRE WAS RACING TOWARD !** LOCATIONS **! AND COULD REACH THERE BY !** TIME **!
#end
## parse file command here is to pull in mile marker info
-##parse("mileMarkers.vm")
+## #parse("mileMarkers.vm")
#####################
## CALL TO ACTIONS ##
#####################
###Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -79,7 +80,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
##
-#if(${list.contains($bullets, "stayIndoorsCTA")})
+#if(${list.contains(${bullets}, "stayIndoorsCTA")})
STAY INDOORS TO KEEP SAFE FROM THE SMOKE. KEEP WINDOWS AND DOORS SHUT AND TURN OFF ALL VENTILATION SYSTEMS.
@@ -87,7 +88,7 @@ STAY INDOORS TO KEEP SAFE FROM THE SMOKE. KEEP WINDOWS AND DOORS SHUT AND TURN O
#end
-#if(${list.contains($bullets, "followInstructionsCTA")})
+#if(${list.contains(${bullets}, "followInstructionsCTA")})
FOLLOW SAFETY INSTRUCTIONS FROM LOCAL LAW ENFORCEMENT OFFICIALS.
@@ -95,7 +96,7 @@ FOLLOW SAFETY INSTRUCTIONS FROM LOCAL LAW ENFORCEMENT OFFICIALS.
#end
-#if(${list.contains($bullets, "heedEvacuationsCTA")})
+#if(${list.contains(${bullets}, "heedEvacuationsCTA")})
HEED ANY EVACUATION ORDERS AND FOLLOW ALL SAFETY PRECAUTIONS.
@@ -106,10 +107,10 @@ HEED ANY EVACUATION ORDERS AND FOLLOW ALL SAFETY PRECAUTIONS.
&&
#end
-#### REMOVE ONE # BELOW FOR LAT/LON OUTPUT
-##printcoords(${areaPoly}, ${list})
+#### UN-REMARK BELOW FOR LAT/LON OUTPUT
+## #printcoords(${areaPoly}, ${list})
+
$$
-
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.xml
index 372555f6f7..e7e3d13354 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/fireWarning.xml
@@ -3,6 +3,7 @@
Version 1.1 EVAN BOOKBINDER/MIKE DANGELO 2-07-2012 Initial creation
Modified MIKE REGA 5-10-2012 DR 14525 added timeZoneField
DR 14691 added feAreaField
+ Evan Bookbinder 09-12-2012 added new areaSource object
-->
@@ -87,38 +88,45 @@
-
- 0.00
- AND
- 0
- COUNTYNAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
+
+
+ Zone
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ FE_AREA
+ TIME_ZONE
+ STATE
+ countyTypes.txt
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -128,11 +136,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -142,6 +154,8 @@
+ 1
+ AREA
true
8.0
5
@@ -154,17 +168,24 @@
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
@@ -173,15 +194,21 @@
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -191,13 +218,16 @@
-
+
+
+
+
- City
+ WarnGenLoc
County
States
TIMEZONES
@@ -207,7 +237,6 @@
-
-
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.vm
index 487eb2aa26..6417edfdb1 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.vm
@@ -10,9 +10,11 @@
## EDITED BY MIKE DANGELO 1-25-2012 at CRH TIM
## EDITED BY MIKE DANGELO 2-23-2012
## EDITED BY EVAN BOOKBINDER 2-24-2012
-
+## EDITED BY Phil Kurimski 9-13-2012 OB12.9.1-12 to add Flash Flood Emergency Headline
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
+## Phil Kurimski 2-05-2013 revised CTA statements
#################################### SET SOME VARIABLES ###################################
-#set ($hycType = "")
+#set($hycType = "")
##
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
@@ -23,11 +25,11 @@
#end
##
#set($ic = "ER")
-#set ($snowMelt = "")
-#if(${list.contains($bullets, "icrs")})
+#set($snowMelt = "")
+#if(${list.contains(${bullets}, "icrs")})
#set($ic = "RS")
- #set ($hycType = "RAIN AND SNOW MELT IN...")
- #set ($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE FLOODING.")
+ #set($hycType = "RAIN AND SNOW MELT IN...")
+ #set($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE FLOODING.")
#end
##
${WMOId} ${vtecOffice} 000000 ${BBBId}
@@ -52,6 +54,15 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
+
+#############################################################################
+## Flash Flood Emergency Headline -- Coming soon to a warning near you! #
+#############################################################################
+###if(${list.contains(${bullets}, "ffwEmergency")} )
+###set($ctaSelected = "YES")
+##...FLASH FLOOD EMERGENCY FOR !** LOCATION **!...
+##
+###end
#headlineext(${officeLoc}, ${backupSite}, ${extend})
#################################
@@ -62,7 +73,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
FLASH FLOOD WARNING FOR...
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType}
#end
#firstBullet(${areas})
@@ -81,108 +92,108 @@ THIS IS A TEST MESSAGE. ##
#################################
######## THIRD BULLET ###########
#################################
-#set ($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
-#if(${list.contains($bullets, "flash")} )
- #set ($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
+#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
+#if(${list.contains(${bullets}, "flash")} )
+ #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
#else
- #set ($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
+ #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
#end
-#if(${list.contains($bullets, "burnScar")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
-#elseif(${list.contains($bullets, "mudSlide")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
+#if(${list.contains(${bullets}, "burnScar")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
+#elseif(${list.contains(${bullets}, "mudSlide")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
#else
- #set ($burnScar = "")
- #set ($burnCTA = "")
+ #set($burnScar = "")
+ #set($burnCTA = "")
#end
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE FALLEN.")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN ACROSS THE WARNED AREA.")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN ACROSS THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN ACROSS THE WARNED AREA.")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN ACROSS THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA.")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE AREA.")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE AREA.")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED THUNDERSTORMS PRODUCING HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED THUNDERSTORMS PRODUCING HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "flash")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN FROM THUNDERSTORMS IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN FROM THUNDERSTORMS IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "flash")})
- #set ($report = "THE PUBLIC REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "THE PUBLIC REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE THUNDERSTORMS OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "flash")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IS OCCURRING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IS OCCURRING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "flash")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN.")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN.")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "satelliteGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS WERE PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS WERE PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
#end
* ##
@@ -191,23 +202,24 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${report} ${rainAmount} ${isExpected} ${snowMelt}
-${burnScar}
+#wrapText(${burnScar} 2 2)
##########################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet #
##########################################################################
-#if(${list.contains($bullets, "ffwEmergency")} )
- THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!.
+#if(${list.contains(${bullets}, "ffwEmergency")} )
+#set($ctaSelected = "YES")
+#wrapText("THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!. SEEK HIGHER GROUND NOW! THIS IS A POTENTIALLY LIFE THREATENING SITUATION!" 2 2)
#end
#############################################################
######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) #########
#############################################################
-#if(${list.contains($bullets, "listofcities")})
-#set ($phenomena = "FLASH FLOOD")
-#set ($floodType = "FLASH FLOODING")
-#set ($warningType = "WARNING")
+#if(${list.contains(${bullets}, "listofcities")})
+#set($phenomena = "FLASH FLOOD")
+#set($floodType = "FLASH FLOODING")
+#set($warningType = "WARNING")
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -224,15 +236,15 @@ THIS IS A TEST MESSAGE. ##
###### WHERE ADDITIONAL INFO GOES ####
######################################
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
-#if(${list.contains($bullets, "particularStream")})
+#if(${list.contains(${bullets}, "particularStream")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -245,9 +257,9 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
####### CALL TO ACTIONS ##############
######################################
##Check to see if we've selected any calls to action.
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -256,54 +268,87 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-${burnCTA}
+##${burnCTA}
-#if(${list.contains($bullets, "urbanFloodingCTA")})
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
+
+#end
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
+
+#end
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
+
+#end
+#if(${list.contains(${bullets}, "urbanFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralFloodingCTA")})
+#if(${list.contains(${bullets}, "ruralFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralUrbanCTA")})
+#if(${list.contains(${bullets}, "ruralUrbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
-BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLASH FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
#end
-#if(${list.contains($bullets, "dontDriveCTA")})
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
+
+#end
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
+
+#end
+#if(${list.contains(${bullets}, "dontDriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "turnAroundCTA")})
-MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
#end
-#if(${list.contains($bullets, "autoSafetyCTA")})
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperSafetyCTA")})
+#if(${list.contains(${bullets}, "camperSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowSpotsCTA")})
+#if(${list.contains(${bullets}, "lowSpotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ffwMeansCTA")})
+#if(${list.contains(${bullets}, "ffwMeansCTA")})
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
-TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE.
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT FLOODING TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
#end
#if(${ctaSelected} == "YES")
@@ -311,20 +356,16 @@ TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT T
#end
#################################### END OF CTA STUFF ###################################
-
##########################################
########BOTTOM OF THE PRODUCT#############
##########################################
-
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
-#printcoords(${areaPoly}, ${list})
-
+#set($COORDS = "#printcoords(${areaPoly}, ${list})")
+${COORDS}
$$
-!**NAME/INITIALS**!
-
-
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml
index a8072f70cc..037ac9c54e 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning.xml
@@ -5,9 +5,10 @@
Modified by Phil Kurimski 09-23-2011 for burn scars and mud slides
Modified by Mike Dangelo 01-25-2012 at CRH TIM
Modified by Mike Dangelo 02-23-2012
- Qinglu Lin 04-04-2012 DR 14691. Added tag.
- Qinglu Lin 10-03-2012 DR 15426. Added tag,
- inserted bulletGroup="ic" after bulletText="Also snow melt".
+ Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-12-2012 Added new areaSource objects
+ Evan Bookbinder 01-07-2013 LockedGroupsOnFollowup tag
+ Phil Kurimski 02-05-2013 revised CTA selections
-->
@@ -20,8 +21,10 @@
The various menu items are also the different maps
that can be loaded with each template. -->
-
- Major Rivers
+ County Names
+ County Warning Areas
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -138,35 +139,36 @@
-
-
-
+
+
+
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
@@ -186,57 +188,58 @@
-
-
-
+
+
+
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
@@ -247,6 +250,7 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
@@ -257,43 +261,55 @@
-
+
+
+
+
+ 1
NAME
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
50
10
- warngenlev
- population
+ distance
-
+
+
+
+
@@ -304,7 +320,7 @@ and place into this template -->
false
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.vm
index c769b1f4f6..305eac6082 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.vm
@@ -8,19 +8,28 @@
## Modified by MIKE DANGELO 2-23-2012
## Modified by EVAN BOOKBINDER 2-24-2012
## Modified by Phil Kurimski 2-29-2012
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
+## Phil Kurimski 2-08-2013 revised CTA statements
+## Evan Bookbinder 3-1-2013 missing $$ for Partial Cancellation
#################################### SET SOME VARs ###################################
-#set ($hycType = "")
-#set ($snowMelt = "")
-#set ($floodReason = "")
-#set ($floodType = "FLASH FLOODING")
-#set ($burnCTA = "")
+#set($hycType = "")
+#set($snowMelt = "")
+#set($floodReason = "")
+#set($floodType = "FLASH FLOODING")
+#set($burnCTA = "")
###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY
#if(${ic} == "RS")
- #set ($hycType = "RAIN AND SNOW MELT")
- #set ($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
+ #set($hycType = "RAIN AND SNOW MELT")
+ #set($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
#end
##
+#set($endwarning = "THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#if(${list.contains(${bullets}, "rainEnded")})
+ #set($endwarning = "THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.")
+#end
+#if(${list.contains(${bullets}, "recedingWater")})
+ #set($endwarning = "FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.")
+#end
######################################################################################
${WMOId} ${vtecOffice} 000000 ${BBBId}
FFS${siteId}
@@ -92,19 +101,17 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
##
#if(${action}=="EXP" || ${action}=="CAN")
...THE FLASH FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${areas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE FLASH FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${cancelareas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
#end
############################
## END CAN/EXP HEADLINE ####
@@ -114,22 +121,17 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#######################################
#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
-#if(${list.contains($bullets, "rainEnded")})
-THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
-#end
-#if(${list.contains($bullets, "recedingWater")})
-FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
-
-#end
+${endwarning}
#printcoords(${areaPoly}, ${list})
########### KEEP TWO BLANK LINES BELOW
+$$
#end
#################################### END OF CAN STUFF ###################################
-#### IF PARTIAL CANCELLATION, INSERT $$ AND 2ND UGC/MND SECTION PRIOR TO CON PORTION
+#### IF PARTIAL CANCELLATION, INSERT 2ND UGC/MND SECTION PRIOR TO CON PORTION
#########################################################################################
#if(${action}=="CANCON")
@@ -172,16 +174,16 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ##
-#if (${hycType} != "")
+#if(${hycType} != "")
FOR ${hycType} ##
#end
REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)...##
-
+#headlineLocList(${areas} true true true false)...
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+#set($ctaSelected = "YES")
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -191,122 +193,123 @@ REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimez
#################################
######## THIRD BULLET ###########
#################################
-#set ($reportType = "HEAVY RAIN")
-#set ($rainAmount = "")
-#set ($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
-#if(${list.contains($bullets, "flash")} )
- #set ($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
+#set($reportType = "HEAVY RAIN")
+#set($rainAmount = "")
+#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
+#if(${list.contains(${bullets}, "flash")} )
+ #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
#else
- #set ($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
+ #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
#end
-#if(${list.contains($bullets, "burnScar")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
-#elseif(${list.contains($bullets, "mudSlide")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
+#if(${list.contains(${bullets}, "burnScar")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
+#elseif(${list.contains(${bullets}, "mudSlide")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+## #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+## #set($ctaSelected = "YES")
#else
- #set ($burnScar = "")
- #set ($burnCTA = "")
+ #set($burnScar = "")
+ #set($burnCTA = "")
#end
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** AMOUNT **! INCHES OF RAIN HAVE FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** AMOUNT **! INCHES OF RAIN HAVE FALLEN.")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN ACROSS THE WARNED AREA.")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN ACROSS THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN ACROSS THE WARNED AREA.")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN ACROSS THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA.")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA.")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THUNDERSTORMS PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED THUNDERSTORMS PRODUCING HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED THUNDERSTORMS PRODUCING HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "flash")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "flash")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "flash")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN FROM THUNDERSTORMS IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN FROM THUNDERSTORMS IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "flash")})
- #set ($report = "THE PUBLIC REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "THE PUBLIC REPORTED FLASH FLOODING OCCURRING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN OVER THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS OVER THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE WARNED AREA.")
#end
-#if(${list.contains($bullets, "satelliteGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT THUNDERSTORMS WERE PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT THUNDERSTORMS WERE PRODUCING HEAVY RAIN OVER THE WARNED AREA.")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})}...${report} ${rainAmount} ${isExpected} ${snowMelt}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ${rainAmount} ${isExpected} ${snowMelt}
${burnScar}
############################################
######## (CITY LIST) #########
############################################
-#if(${list.contains($bullets, "listofcities")})
+#if(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -324,15 +327,15 @@ THIS IS A TEST MESSAGE. ##
######################################
###### WHERE ADDITIONAL INFO GOES ####
######################################
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "particularStream")})
+#if(${list.contains(${bullets}, "particularStream")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -345,9 +348,9 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
####### CALL TO ACTIONS ##############
######################################
##Check to see if we've selected any calls to action.
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -356,54 +359,87 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-${burnCTA}
+##${burnCTA}
-#if(${list.contains($bullets, "urbanFloodingCTA")})
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
+
+#end
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
+
+#end
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
+
+#end
+#if(${list.contains(${bullets}, "urbanFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralFloodingCTA")})
+#if(${list.contains(${bullets}, "ruralFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralUrbanCTA")})
+#if(${list.contains(${bullets}, "ruralUrbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
-BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLASH FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
#end
-#if(${list.contains($bullets, "dontDriveCTA")})
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
+
+#end
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
+
+#end
+#if(${list.contains(${bullets}, "dontDriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "turnAroundCTA")})
-MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
#end
-#if(${list.contains($bullets, "autoSafetyCTA")})
-FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
#end
-#if(${list.contains($bullets, "camperSafetyCTA")})
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
+FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
+
+#end
+#if(${list.contains(${bullets}, "camperSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowSpotsCTA")})
+#if(${list.contains(${bullets}, "lowSpotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ffwMeansCTA")})
+#if(${list.contains(${bullets}, "ffwMeansCTA")})
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
-TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE.
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT FLOODING TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
#end
#if(${ctaSelected} == "YES")
@@ -419,12 +455,10 @@ TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT T
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
-#printcoords(${areaPoly}, ${list})
-########### KEEP TWO BLANK LINES BELOW
+#set($COORDS = "#printcoords(${areaPoly}, ${list})")
+${COORDS}
-
-#end
$$
+#end
-!**NAME/INITIALS**!
-
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml
index f51059ec30..078b34d0da 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup.xml
@@ -2,10 +2,14 @@
@@ -51,7 +55,8 @@
30
-
+
+ic
@@ -93,30 +98,31 @@
-
-
-
+
+
+
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -142,59 +148,60 @@
-
-
-
-
+
+
+
+
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+ false
+
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
@@ -205,6 +212,7 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
@@ -217,29 +225,39 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
@@ -249,8 +267,11 @@
-
+
+
+
+
@@ -259,7 +280,7 @@ and place into this template -->
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm
index 31be6f95dc..7acabc6992 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm
@@ -6,17 +6,17 @@
## done in August.
## Edited by Mike Dangelo 01-26-2012 at CRH TIM
## Edited by Phil Kurimski 2-29-2012
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
#################################### SET SOME VARs ###################################
-#set ($hycType = "")
-#set ($snowMelt = "")
-#set ($floodReason = "")
-#set ($floodType = "FLASH FLOODING")
-#set ($burnCTA = "")
+#set($hycType = "")
+#set($snowMelt = "")
+#set($floodReason = "")
+#set($floodType = "FLASH FLOODING")
+#set($burnCTA = "")
###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY
-#if(${list.contains($bullets, "icrs")})
- #set ($hycType = "RAIN AND SNOW MELT")
- #set ($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
+#if(${list.contains(${bullets}, "icrs")})
+ #set($hycType = "RAIN AND SNOW MELT")
+ #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.")
#end
##
######################################################################################
@@ -41,25 +41,31 @@ ${ugclinecan}
################### VTEC/COUNTY LINE ##################
/${productClass}.CAN.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#set($zoneList = "")
#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
#elseif(${CORCAN}=="true")
${ugclinecan}
################### VTEC/COUNTY LINE ##################
/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
+#set($zoneList = "")
#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
#else
${ugcline}
################### VTEC/COUNTY LINE ##################
/${productClass}.${action}.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
#end
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -90,18 +96,26 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
##
#if(${action}=="EXP" || ${action}=="CAN")
...THE FLASH FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${areas} true true true false true)
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###headlineLocList(${areas} true true true false)
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${affectedCounties} true true true false)
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
${expcanHLTag}...
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE FLASH FLOOD WARNING FOR ##
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType} IN ##
#end
-#headlineLocList(${cancelareas} true true true false true)
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###headlineLocList(${cancelareas} true true true false)
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${cancelaffectedCounties} true true true false)
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
${expcanHLTag}...
#end
############################
@@ -112,9 +126,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#######################################
#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
-#if(${list.contains($bullets, "recedingWater")})
+#if(${list.contains(${bullets}, "recedingWater")})
FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES.
-#elseif(${list.contains($bullets, "rainEnded")})
+#elseif(${list.contains(${bullets}, "rainEnded")})
THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
#else
!** THE HEAVY RAIN HAS ENDED. !** OR **! THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **!"
@@ -126,7 +140,7 @@ THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT.
$$
#end
#################################### END OF CAN STUFF ###################################
-#### IF PARTIAL CANCELLATION, INSERT $$ AND 2ND UGC/MND SECTION PRIOR TO CON PORTION
+#### IF PARTIAL CANCELLATION, INSERT 2ND UGC/MND SECTION PRIOR TO CON PORTION
#########################################################################################
#if(${action}=="CANCON")
@@ -134,9 +148,11 @@ $$
${ugcline}
/${productClass}.CON.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -150,9 +166,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugcline}
/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/
/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -169,16 +187,20 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ##
-#if (${hycType} != "")
+#if(${hycType} != "")
FOR ${hycType} ##
#end
REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)...##
+##REMMED OUT FOR Alaska. This would output the headline in zone format
+###headlineLocList(${cancelareas} true true true false)...
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###headlineLocList(${cancelaffectedCounties} true true true false)...
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!...
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -188,127 +210,128 @@ REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimez
#################################
######## THIRD BULLET ###########
#################################
-#set ($reportType = "HEAVY RAIN")
-#set ($rainAmount = "")
-#set ($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
-#if(${list.contains($bullets, "flash")} )
- #set ($isExpected = "FLASH FLOODING IS ALREADY OCCURRING")
+#set($reportType = "HEAVY RAIN")
+#set($rainAmount = "")
+#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
+#if(${list.contains(${bullets}, "flash")} )
+ #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING")
#else
- #set ($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY")
+ #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY")
#end
-#if(${list.contains($bullets, "burnScar")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
-#elseif(${list.contains($bullets, "mudSlide")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
+#if(${list.contains(${bullets}, "burnScar")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+ #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+ #set($ctaSelected = "YES")
+#elseif(${list.contains(${bullets}, "mudSlide")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+ #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+ #set($ctaSelected = "YES")
#else
- #set ($burnScar = "")
- #set ($burnCTA = "")
+ #set($burnScar = "")
+ #set($burnCTA = "")
#end
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "flash")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "flash")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "flash")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "HEAVY RAIN FROM THUNDERSTORMS HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "HEAVY RAIN FROM THUNDERSTORMS HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "flash")})
- #set ($report = "FLASH FLOODING HAS BEEN REPORTED IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "FLASH FLOODING HAS BEEN REPORTED IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satelliteGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satelliteGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})}...${report}. ${snowMelt}
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}. ${snowMelt}
${burnScar}
@@ -329,11 +352,11 @@ THIS IS A TEST MESSAGE. ##
###### WHERE ADDITIONAL INFO GOES ####
######################################
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -346,9 +369,9 @@ ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AR
####### CALL TO ACTIONS ##############
######################################
##Check to see if we've selected any calls to action.
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -359,55 +382,55 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${burnCTA}
-#if(${list.contains($bullets, "urbanFloodingCTA")})
+#if(${list.contains(${bullets}, "urbanFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralFloodingCTA")})
+#if(${list.contains(${bullets}, "ruralFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralUrbanCTA")})
+#if(${list.contains(${bullets}, "ruralUrbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "particularStreamCTA")})
+#if(${list.contains(${bullets}, "particularStreamCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLASH FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "dontDriveCTA")})
+#if(${list.contains(${bullets}, "dontDriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "turnAroundCTA")})
+#if(${list.contains(${bullets}, "turnAroundCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "autoSafetyCTA")})
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperSafetyCTA")})
+#if(${list.contains(${bullets}, "camperSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowSpotsCTA")})
+#if(${list.contains(${bullets}, "lowSpotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ffwMeansCTA")})
+#if(${list.contains(${bullets}, "ffwMeansCTA")})
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE.
#end
@@ -430,13 +453,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
#end
-!**NAME/INITIALS**!
-
-## example of a for-each loop which will include interstate/mile marker information
-## #foreach (${local} in ${alpha})
-## spot is ${local.name}...
-## #end
-
-########### EXAMPLES OF PARSE OR INCLUDE STATEMENTS ################################
-## #parse ("test.vm")
-## #include ("username.txt")
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml
index 3d6a93f1c0..bd603b5472 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml
@@ -4,6 +4,11 @@
@@ -92,9 +97,9 @@
-
-
-
+
+
+
@@ -139,9 +144,9 @@
-
-
-
+
+
+
@@ -165,42 +170,67 @@
+false
-
-
-
+
+
+
-
-
-
- 0.00
- AND
- 0
-
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
-
- STATE_ZONE
- NAME
-
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
-
- false
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
@@ -211,6 +241,7 @@
4
8
Name
+ AREA
NAME
STATE
@@ -223,29 +254,39 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
POINTS
true
10
@@ -255,8 +296,11 @@
-
+
+
+
+
@@ -265,7 +309,7 @@ and place into this template -->
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.vm
index f51686c423..2ed327655a 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.vm
@@ -6,9 +6,9 @@
## EDITED BY MIKE DANGELO 9-21-2011 at Alaska TIM ##
## EDITED BY PHIL KURIMSKI 9-23-2011 at Alaska TIM for burn scars and mud slides ##
## EDITED BY PHIL KURIMSKI 2-29-2012
-
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
#################################### SET SOME VARIABLES ###################################
-#set ($hycType = "")
+#set($hycType = "")
##
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
@@ -18,13 +18,13 @@
#set($extend = false)
#end
##
-#if(${list.contains($bullets, "icrs")})
+#if(${list.contains(${bullets}, "icrs")})
#set($ic = "RS")
- #set ($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE FLOODING.")
- #set ($hycType = "RAIN AND SNOW MELT IN...")
+ #set($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE FLOODING.")
+ #set($hycType = "RAIN AND SNOW MELT IN...")
#else
#set($ic = "ER")
- #set ($snowMelt = "")
+ #set($snowMelt = "")
#end
##
${WMOId} ${vtecOffice} 000000 ${BBBId}
@@ -49,6 +49,14 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
+
+#############################################################################
+## Flash Flood Emergency Headline -- Coming soon to a warning near you! #
+#############################################################################
+###if(${list.contains(${bullets}, "ffwEmergency")} )
+##...FLASH FLOOD EMERGENCY FOR !** LOCATION **!...
+##
+###end
#headlineext(${officeLoc}, ${backupSite}, ${extend})
#################################
@@ -59,10 +67,14 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
FLASH FLOOD WARNING FOR...
-#if (${hycType} != "")
+#if(${hycType} != "")
${hycType}
#end
-#firstBullet(${areas})
+##REMMED OUT FOR ALASKA
+###firstBullet(${areas})
+##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES
+###firstBullet(${affectedCounties})
+!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!
#################################
####### SECOND BULLET ###########
@@ -78,120 +90,120 @@ THIS IS A TEST MESSAGE. ##
#################################
######## THIRD BULLET ###########
#################################
-#set ($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
-#if(${list.contains($bullets, "flash")} )
- #set ($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
+#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!")
+#if(${list.contains(${bullets}, "flash")} )
+ #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.")
#else
- #set ($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
+ #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.")
#end
-#if(${list.contains($bullets, "burnScar")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
-#elseif(${list.contains($bullets, "mudSlide")} )
- #set ($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
- #set ($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
- #set ($ctaSelected = "YES")
+#if(${list.contains(${bullets}, "burnScar")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+ #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+ #set($ctaSelected = "YES")
+#elseif(${list.contains(${bullets}, "mudSlide")} )
+ #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.")
+ #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.")
+ #set($ctaSelected = "YES")
#else
- #set ($burnScar = "")
- #set ($burnCTA = "")
+ #set($burnScar = "")
+ #set($burnCTA = "")
#end
-#set ($rainAmount = "")
-#if(${list.contains($bullets, "rain1")} )
- #set ($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
+#set($rainAmount = "")
+#if(${list.contains(${bullets}, "rain1")} )
+ #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain2")} )
- #set ($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain2")} )
+ #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rain3")} )
- #set ($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rain3")} )
+ #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "rainEdit")} )
- #set ($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE ALREADY FALLEN.")
+#if(${list.contains(${bullets}, "rainEdit")} )
+ #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE ALREADY FALLEN.")
#end
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "dopplerGauge")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "dopplerGauge")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "dopplerGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "thunder")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "flash")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
#end
-#if(${list.contains($bullets, "trainedSpotters")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "flash")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}")
#end
-#if(${list.contains($bullets, "lawEnforcement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "thunder")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "flash")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "emergencyManagement")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "thunder")})
- #set ($report = "HEAVY RAIN FROM THUNDERSTORMS HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "HEAVY RAIN FROM THUNDERSTORMS HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "flash")})
- #set ($report = "FLASH FLOODING HAS BEEN REPORTED IN !** LOCATION **!.")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")})
+ #set($report = "FLASH FLOODING HAS BEEN REPORTED IN !** LOCATION **!.")
#end
-#if(${list.contains($bullets, "public")} && ${list.contains($bullets, "plainRain")})
- #set ($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")})
+ #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satelliteGauge")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satelliteGauge")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satelliteGauge")} && ${list.contains($bullets, "thunder")})
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")})
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
-#if(${list.contains($bullets, "satelliteGauge")} && ${list.contains($bullets, "thunder")} && ${stormType} == "line")
- #set ($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
+#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line")
+ #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}")
#end
* ##
@@ -200,22 +212,22 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${report} ${snowMelt}
-${burnScar}
+#wrapText("${burnScar} 2 2)
##########################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet #
##########################################################################
-#if(${list.contains($bullets, "ffwEmergency")} )
- THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!.
+#if(${list.contains(${bullets}, "ffwEmergency")} )
+#wrapText("THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!. 2 2)
#end
#############################################################
######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) #########
#############################################################
-#set ($phenomena = "FLASH FLOOD")
-#set ($floodType = "FLASH FLOODING")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($floodType = "FLASH FLOODING")
+#set($warningType = "WARNING")
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -231,11 +243,11 @@ THIS IS A TEST MESSAGE. ##
###### WHERE ADDITIONAL INFO GOES ####
######################################
-#if(${list.contains($bullets, "addRainfall")})
+#if(${list.contains(${bullets}, "addRainfall")})
ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA.
#end
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -248,9 +260,9 @@ ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AR
####### CALL TO ACTIONS ##############
######################################
##Check to see if we've selected any calls to action.
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -261,55 +273,55 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${burnCTA}
-#if(${list.contains($bullets, "urbanFloodingCTA")})
+#if(${list.contains(${bullets}, "urbanFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralFloodingCTA")})
+#if(${list.contains(${bullets}, "ruralFloodingCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS.
#end
-#if(${list.contains($bullets, "ruralUrbanCTA")})
+#if(${list.contains(${bullets}, "ruralUrbanCTA")})
EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING.
#end
-#if(${list.contains($bullets, "particularStreamCTA")})
+#if(${list.contains(${bullets}, "particularStreamCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLASH FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "dontDriveCTA")})
+#if(${list.contains(${bullets}, "dontDriveCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "turnAroundCTA")})
+#if(${list.contains(${bullets}, "turnAroundCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "autoSafetyCTA")})
+#if(${list.contains(${bullets}, "autoSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND.
#end
-#if(${list.contains($bullets, "camperSafetyCTA")})
+#if(${list.contains(${bullets}, "camperSafetyCTA")})
FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS.
#end
-#if(${list.contains($bullets, "lowSpotsCTA")})
+#if(${list.contains(${bullets}, "lowSpotsCTA")})
IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY.
#end
-#if(${list.contains($bullets, "ffwMeansCTA")})
+#if(${list.contains(${bullets}, "ffwMeansCTA")})
A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportFloodingCTA")})
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE.
#end
@@ -332,5 +344,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
-
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml
index a47c03c630..472f4dfcdc 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/flashFloodWarning_Zones.xml
@@ -6,6 +6,11 @@
@@ -63,6 +68,7 @@
480
+ic
@@ -85,9 +91,9 @@
-
-
-
+
+
+
@@ -129,9 +135,9 @@
-
-
-
+
+
+
@@ -173,9 +179,9 @@
-
-
-
+
+
+
@@ -198,39 +204,67 @@
+false
+
-
-
+
+
-
-
-
-
- 0.00
- AND
- 0
-
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
-
- STATE_ZONE
- NAME
-
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
+
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
@@ -241,6 +275,7 @@
4
8
Name
+ AREA
NAME
STATE
@@ -253,11 +288,16 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
@@ -266,35 +306,48 @@
+
+
+
warngenlev
population
+ distance
NAME
+ AREA
TRACK
true
50
10
+
+
+
+
+
+
+
+
- warngenlev
- population
+ distance
-
-
- false
+
+
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.vm
index cbd5151b14..2747fc4bb3 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.vm
@@ -5,298 +5,295 @@
## VERSION AWIPS II 1.0 -- 2-21-2012 OB12.1.1-1 ##
## VERSION AWIPS II 1.1 -- 2-29-2012 OB12.2.1-4 ##
## VERSION AWIPS II 1.2 -- 4-20-2012 ##
-## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
## QINGLU LIN 8-14-2012 DR 14493 use TMLtime ##
+## VERSION AWIPS II 1.3 -- 2-04-2012 OB13.2.1-5 impact stmts ##
+## VERSION AWIPS II 1.4 -- 5-20-2012 Addl IBW Changes ##
+################################################################
+## Commented out Impact statements Feb 2013 and created file to
+## be parsed into the template called impactStatements.vm
+## Changes to the impact statements can be made to this file
+## instead of the template
################################################################
##
##SET SOME INITIAL VARIABLES
-#set ($hazard = "")
-#set ($source = "")
-#set ($impact = "")
-#set ($torTag = "")
-#set ($pdssvr = "")
-#set ($extrasource = "")
-#set ($extraReport = "")
+#set($hazard = "")
+#set($source = "")
+#set($torTag = "")
+#set($pdssvr = "")
+#set($extraSource = "")
#if(${stormType} == "line")
- #set ($report = "A LINE OF SEVERE THUNDERSTORMS WAS REPORTED")
- #set($reportType1 = "LINE OF SEVERE THUNDERSTORMS")
+ #set($report = "SEVERE THUNDERSTORMS WERE REPORTED")
+ #set($reportType1 = "SEVERE THUNDERSTORMS")
#set($reportType2 = "THESE STORMS WERE")
- #set($reportType3 = "A LINE OF SEVERE THUNDERSTORMS WAS LOCATED")
+ #set($reportType3 = "SEVERE THUNDERSTORMS WERE LOCATED")
#else
- #set ($report = "A SEVERE THUNDERSTORM WAS REPORTED")
- #set($reportType1 = "SEVERE THUNDERSTORM")
+ #set($report = "A SEVERE THUNDERSTORM WAS REPORTED")
+ #set($reportType1 = "A SEVERE THUNDERSTORM")
#set($reportType2 = "THIS STORM WAS")
#set($reportType3 = "A SEVERE THUNDERSTORM WAS LOCATED")
#end
######################################################
## Check to see if the SVR Tornado Tag was selected ##
######################################################
-#if(${list.contains($bullets, "svrTorTag")})
- #set ($torTag = "TORNADO...POSSIBLE ")
+#if(${list.contains(${bullets}, "svrTorTag")})
+ #set($torTag = "TORNADO...POSSIBLE ")
#end
#############################################################
#### CREATE BASIS WORDING ###################################
#############################################################
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED A ${reportType1}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED ${reportType1}")
#set($reportAuthSVR = "CAPABLE OF PRODUCING")
- #set ($source = "RADAR INDICATED.")
+ #set($source = "RADAR INDICATED.")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "TRAINED WEATHER SPOTTERS.")
+ #set($source = "TRAINED WEATHER SPOTTERS.")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LAW ENFORCEMENT REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LAW ENFORCEMENT REPORTED ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "LAW ENFORCEMENT.")
+ #set($source = "LAW ENFORCEMENT.")
#end
-#if(${list.contains($bullets, "emergencyMgmt")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "emergencyMgmt")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "EMERGENCY MANAGEMENT.")
+ #set($source = "EMERGENCY MANAGEMENT.")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "PUBLIC.")
+ #set($source = "PUBLIC.")
#end
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
-#set ($windSpeed = 0)
-#set ($windImpact = "")
-#set ($extensive = "")
-#set ($windTag = "<50MPH")
-#if(${list.contains($bullets, "60mphWind")})
- #set ($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
- #set ($windHazard = "60 MPH WIND GUSTS")
- #set ($windSpeed = 60)
- #set ($windTag = "60MPH")
- #set ($windImpact = "MINOR TREE DAMAGE...WITH LIMBS UP TO ONE INCH IN DIAMETER BROKEN.")
+#set($windSpeed = 0)
+#set($extensive = "")
+#set($windTag = "<50MPH")
+#if(${list.contains(${bullets}, "60mphWind")})
+ #set($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
+ #set($windHazard = "60 MPH WIND GUSTS")
+ #set($windSpeed = 60)
+ #set($windTag = "60MPH")
#end
-#if(${list.contains($bullets, "70mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
- #set ($windHazard = "70 MPH WIND GUSTS")
- #set ($windSpeed = 70)
- #set ($windTag = "70MPH")
- #set ($windImpact = "TREE BRANCHES UP TO THREE INCHES IN DIAMETER BROKEN. POSSIBLE MINOR DAMAGE TO SHINGLE ROOFS AND METAL OUTBUILDINGS.")
+#if(${list.contains(${bullets}, "70mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
+ #set($windHazard = "70 MPH WIND GUSTS")
+ #set($windSpeed = 70)
+ #set($windTag = "70MPH")
#end
-#if(${list.contains($bullets, "80mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
- #set ($windHazard = "80 MPH WIND GUSTS")
- #set ($windSpeed = 80)
- #set ($windTag = "80MPH")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($windImpact = "LARGE TREE BRANCHES MAY BE BROKEN...POSSIBLY BLOCKING ROADS AND DOWNING POWER LINES. SUBSTANTIAL ROOF COVERING DAMAGE LIKELY. METAL OUTBUILDINGS DAMAGED. SIGNIFICANT FLYING DEBRIS WILL BE DANGEROUS FOR ANYONE EXPOSED TO THE ELEMENTS.")
+#if(${list.contains(${bullets}, "80mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
+ #set($windHazard = "80 MPH WIND GUSTS")
+ #set($windSpeed = 80)
+ #set($windTag = "80MPH")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "90mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
- #set ($windHazard = "90 MPH WIND GUSTS")
- #set ($windSpeed = 90)
- #set ($windTag = "90MPH")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($windImpact ="MOBILE HOMES MAY SUFFER MAJOR ROOF FAILURE. SUBSTANTIAL ROOF AND WINDOW DAMAGE TO SINGLE FAMILY HOMES. SOME TREES UPROOTED POSSIBLY BLOCKING ROADS AND KNOCKING DOWN POWER LINES. SIGNIFICANT FLYING AND FALLING DEBRIS MAY PROVE DEADLY FOR ANYONE EXPOSED TO THE ELEMENTS.")
+#if(${list.contains(${bullets}, "90mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
+ #set($windHazard = "90 MPH WIND GUSTS")
+ #set($windSpeed = 90)
+ #set($windTag = "90MPH")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "100mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
- #set ($windHazard = "100 MPH WIND GUSTS")
- #set ($windSpeed = 100)
- #set ($windTag = "100MPH")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($windImpact ="SIGNIFICANT ROOF AND WINDOW LOSS OF SINGLE FAMILY HOMES. COMPLETE DESTRUCTION OF MOBILE HOMES AND METAL BARNS AND OUTBUILDINGS LIKELY. NUMEROUS TREES UPROOTED AND SOME TREE TRUNKS SNAPPED. SUBSTANTIAL POWER OUTAGES LIKELY. SIGNIFICANT FLYING AND FALLING DEBRIS WILL PROVE DEADLY TO THOSE WHO DO NOT SEEK SHELTER.")
+#if(${list.contains(${bullets}, "100mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
+ #set($windHazard = "100 MPH WIND GUSTS")
+ #set($windSpeed = 100)
+ #set($windTag = "100MPH")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
###################################################
## HANDLE HAIL POSSIBILITIES ######################
###################################################
-#set ($hailSize = 0)
-#set ($smallHail = "")
-#set ($hailImpact = "")
-#set ($hailTag = "<.75IN")
-#if(${list.contains($bullets, "pennyHail")})
- #set ($hailThreat = "PENNY SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "PENNY SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.75)
- #set ($hailTag = "0.75IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#set($hailSize = 0)
+#set($hailTag = "<.75IN")
+#if(${list.contains(${bullets}, "pennyHail")})
+ #set($hailThreat = "PENNY SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "PENNY SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.75)
+ #set($hailTag = "0.75IN")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailThreat = "NICKEL SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "NICKEL SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.88)
- #set ($hailTag = "0.88IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailThreat = "NICKEL SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "NICKEL SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.88)
+ #set($hailTag = "0.88IN")
#end
-#if(${list.contains($bullets, "quarterHail")})
- #set ($hailThreat = "QUARTER SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "QUARTER SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.00)
- #set ($hailTag = "1.00IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "quarterHail")})
+ #set($hailThreat = "QUARTER SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "QUARTER SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.00)
+ #set($hailTag = "1.00IN")
#end
-#if(${list.contains($bullets, "halfdollarHail")})
- #set ($hailThreat = "HALF DOLLAR SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "HALF DOLLAR SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.25)
- #set ($hailTag = "1.25IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "halfdollarHail")})
+ #set($hailThreat = "HALF DOLLAR SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "HALF DOLLAR SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.25)
+ #set($hailTag = "1.25IN")
#end
-#if(${list.contains($bullets, "pingpongHail")})
- #set ($hailThreat = "PING PONG BALL SIZE")
- #set ($hailLead = "LARGE HAIL UP TO ")
- #set ($hailHazard = "PING PONG SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 1.50)
- #set ($hailTag = "1.50IN")
- #set ($hailImpact = "DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "pingpongHail")})
+ #set($hailThreat = "PING PONG BALL SIZE")
+ #set($hailLead = "LARGE HAIL UP TO ")
+ #set($hailHazard = "PING PONG SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 1.50)
+ #set($hailTag = "1.50IN")
#end
-#if(${list.contains($bullets, "golfballHail")})
- #set ($hailThreat = "GOLF BALL SIZE")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailHazard = "GOLF BALL SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 1.75)
- #set ($hailTag = "1.75IN")
- #set ($hailImpact = "DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "golfballHail")})
+ #set($hailThreat = "GOLF BALL SIZE")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailHazard = "GOLF BALL SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 1.75)
+ #set($hailTag = "1.75IN")
#end
-#if(${list.contains($bullets, "twoinchHail")})
- #set ($hailThreat = "TWO INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailHazard = "TWO INCH HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 2.00)
- #set ($hailTag = "2.00IN")
- #set ($hailImpact = "DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "twoinchHail")})
+ #set($hailThreat = "TWO INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailHazard = "TWO INCH HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 2.00)
+ #set($hailTag = "2.00IN")
#end
-#if(${list.contains($bullets, "tennisBallHail")})
- #set ($hailThreat = "TENNIS BALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailHazard = "TENNIS BALL SIZE HAIL")
- #set ($hailSize = 2.50)
- #set ($hailTag = "2.50IN")
- #set ($hailImpact = "DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "tennisBallHail")})
+ #set($hailThreat = "TENNIS BALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailHazard = "TENNIS BALL SIZE HAIL")
+ #set($hailSize = 2.50)
+ #set($hailTag = "2.50IN")
#end
-#if(${list.contains($bullets, "baseballHail")})
- #set ($hailThreat = "BASEBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "BASEBALL SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 2.75)
- #set ($hailTag = "2.75IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "baseballHail")})
+ #set($hailThreat = "BASEBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "BASEBALL SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 2.75)
+ #set($hailTag = "2.75IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "threeinchHail")})
- #set ($hailThreat = "THREE INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "THREE INCH HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 3.00)
- #set ($hailTag = "3.00IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "threeinchHail")})
+ #set($hailThreat = "THREE INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "THREE INCH HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 3.00)
+ #set($hailTag = "3.00IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "grapefruitHail")})
- #set ($hailThreat = "GRAPEFRUIT SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "GRAPEFRUIT SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 4.00)
- #set ($hailTag = "4.00IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "grapefruitHail")})
+ #set($hailThreat = "GRAPEFRUIT SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "GRAPEFRUIT SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 4.00)
+ #set($hailTag = "4.00IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "softballHail")})
- #set ($hailThreat = "SOFTBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "SOFTBALL SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 4.25)
- #set ($hailTag = "4.25IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "softballHail")})
+ #set($hailThreat = "SOFTBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "SOFTBALL SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 4.25)
+ #set($hailTag = "4.25IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
###################################################################
### CHANGE MND EAS INSTRUCTIONS FOR REALLY SEVERE STORMS ##########
###################################################################
-#if (${hailSize} >=2 || ${windSpeed} >= 80)
- #set ($easActivation = "EAS ACTIVATION REQUESTED")
+#if(${hailSize} >=2 || ${windSpeed} >= 80)
+ #set($easActivation = "EAS ACTIVATION REQUESTED")
#else
- #set ($easActivation = "IMMEDIATE BROADCAST REQUESTED")
+ #set($easActivation = "IMMEDIATE BROADCAST REQUESTED")
#end
-##################################################################
-######### CREATE A WIND AND HAIL SENTENCE ########################
-##################################################################
-#if (${hailSize} < 1 && ${windSpeed} < 58)
- #set ($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #set ($windhailTag = "WIND...HAIL <50MPH <.75IN")
- #set ($impact = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #set ($hazard = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+####################################################################################
+######### CREATE A WIND AND HAIL SENTENCE ##########################################
+######### TORNADO POSSIBLE TAG NOT BEING PLACED IN HAZARD LINE AT THIS TIME ########
+####################################################################################
+#if(${hailSize} < 1 && ${windSpeed} < 58)
+ #set($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+ #set($windhailTag = "WIND...HAIL <50MPH <.75IN")
+ #set($impact = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+ #set($hazard = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
#elseif(${hailSize} > 0 && ${windSpeed} > 0)
- #if (${hailSize} < 1)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
- #set ($smallHail = "${hailThreat}${hailTrail} MAY ALSO ACCOMPANY THE DAMAGING WINDS.")
-## #set ($impact = "${hailImpact} ${windImpact}")
- #set ($hazard = "${windHazard} AND ${hailHazard}.")
+ #if(${hailSize} < 1)
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #set($hazard = "${windHazard} AND ${hailHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#else
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
-## #set ($impact = "${hailImpact} ${windImpact}")
- #set ($hazard = "${hailHazard} AND ${windHazard}.")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
+ #set($hazard = "${hailHazard} AND ${windHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${hailHazard}...${windHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${hailHazard}...${windHazard} AND POSSIBLE TORNADO.")
#end
*#
#end
- #set ($windhailTag = "WIND...HAIL ${windTag} ${hailTag}")
+ #set($windhailTag = "WIND...HAIL ${windTag} ${hailTag}")
#elseif(${hailSize} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
- #set ($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
-## #set ($impact = "${hailImpact}")
- #set ($hazard = "${hailHazard}.")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
+ #set($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
+ #set($hazard = "${hailHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${hailHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#elseif(${windSpeed} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
- #set ($windhailTag = "WIND...HAIL ${windTag} <.75IN")
-## #set ($impact = "${hailImpact} ${windImpact}")
- #set ($hazard = "${windHazard}.")
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #set($windhailTag = "WIND...HAIL ${windTag} <.75IN")
+ #set($hazard = "${windHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${windHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${windHazard} AND POSSIBLE TORNADO.")
#end
*#
#end
-######################################################################
-## Setup wind/hail impact statement based on wind speed and hail size
-######################################################################
-#if (${hailSize} < 1 && ${windSpeed} < 58)
- #set ($impact = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
-#elseif(${hailSize} > 0 && ${windSpeed} < 80 && ${hailSize} < 2.75)
- #set ($impact = "${hailImpact} ${windImpact}")
-#elseif(${hailSize} > 2.50 && ${windSpeed} < 80)
- #set ($impact = "${hailImpact}")
-#elseif(${windSpeed} >= 80)
- #set ($impact = "${windImpact}")
-#end
+
################################################################
######### ~*~*~*~*~*~* BEGIN OUTPUT ~*~*~*~*~*~*~ ##############
################################################################
@@ -347,15 +344,8 @@ THIS IS A TEST MESSAGE. ##
#############################################
######## GENERATE ADDITIONAL REPORTS #######
#############################################
-#if(${list.contains($bullets, "addlHailRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, hail**! WAS REPORTED !**enter location**!.")
- #set ($extrasource = " !**enter type of damage**! WAS REPORTED !**enter location**!. ")
-#elseif(${list.contains($bullets, "addlWindRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, wind**! WAS REPORTED !**enter location**!.")
- #set ($extrasource = " !**enter type of damage**! WAS REPORTED !**enter location**!. ")
-#elseif(${list.contains($bullets, "addlHailWindRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, hail and wind**! WAS REPORTED !**enter location**!.")
- #set ($extrasource = " !**enter type of damage**! WAS REPORTED !**enter location**!. ")
+#if(${list.contains(${bullets}, "addlHailWindRpt")})
+ #set($extraSource = " AT !**enter time...enter hail/wind**! WAS REPORTED !**enter location**!. ")
#end
* ##
@@ -364,60 +354,56 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
...${reportType3} ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", false)
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
#if(${stormType} == "line")
...AND ARE NEARLY STATIONARY.
- #else
+#else
...AND IS NEARLY STATIONARY.
- #end
+#end
#else
...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
#end
-#*
-#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
-...${report}${hailwind}. ${reportType2} LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", false)
-#if($movementSpeed < 3 || ${stationary})
-. ${reportType2} NEARLY STATIONARY. ${smallHail}
-#else
-...AND MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH. ${smallHail}
-#end
-*#
+##########################################################################
+## Command to parse the impact statements into the template
+##########################################################################
+#parse("impactStatements.vm")
##########################################################################
## Section to include the dangerous storm wording as well as the hazard ##
##########################################################################
-${pdssvr}
-HAZARD...${hazard}
+#wrapText("${pdssvr}" 2 2)
-SOURCE...${source}${extrasource}
+#wrapText("HAZARD...${hazard}" 2 11)
-IMPACT...${impact}
+#wrapText("SOURCE...${source}${extraSource}" 2 11)
-##
+#wrapText("IMPACT...${svrimpact}" 2 11)
-${extraReport}
###################################################
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
#if(${stormType} == "line")
-#set ($pathcastLead = "SEVERE THUNDERSTORMS")
-#set ($otherLead = "THESE SEVERE THUNDERSTORMS")
+#set($pathcastLead = "SEVERE THUNDERSTORMS")
+#set($otherLead = "THESE SEVERE THUNDERSTORMS")
#else
-#set ($pathcastLead = "THIS SEVERE THUNDERSTORM")
-#set ($otherLead = "THIS SEVERE THUNDERSTORM")
+#set($pathcastLead = "THIS SEVERE THUNDERSTORM")
+#set($otherLead = "THIS SEVERE THUNDERSTORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -436,7 +422,7 @@ THIS IS A TEST MESSAGE. ##
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
@@ -446,17 +432,19 @@ EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF THIS STORM AND
#end
#end
+## parse file command here is to pull in extra points (venues) info
+## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
##################################
######### CALLS TO ACTION ########
##################################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -465,37 +453,37 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "torWatchRemainsInEffectCTA")})
-#if(${list.contains($bullets, "svrTorTag")})
+#if(${list.contains(${bullets}, "torWatchRemainsInEffectCTA")})
+#if(${list.contains(${bullets}, "svrTorTag")})
REMAIN ALERT FOR A POSSIBLE TORNADO! TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. IF YOU SPOT A TORNADO GO AT ONCE INTO THE BASEMENT OR SMALL CENTRAL ROOM IN A STURDY STRUCTURE.
#else
-A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. ALTHOUGH ONE IS NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY INSIDE A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
+A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY INSIDE A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
#end
#end
##
-#if(${list.contains($bullets, "torPossibleTagCTA")})
+#if(${list.contains(${bullets}, "torPossibleTagCTA")})
REMAIN ALERT FOR A POSSIBLE TORNADO! TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. IF YOU SPOT A TORNADO GO AT ONCE INTO THE BASEMENT OR SMALL CENTRAL ROOM IN A STURDY STRUCTURE.
#end
##
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING.
#end
##
-#if(${list.contains($bullets, "largeHailCTA")})
+#if(${list.contains(${bullets}, "largeHailCTA")})
PREPARE IMMEDIATELY FOR LARGE HAIL AND DEADLY CLOUD TO GROUND LIGHTNING. SEEK SHELTER INSIDE A WELL-BUILT STRUCTURE. STAY AWAY FROM WINDOWS.
#end
##
-#if(${list.contains($bullets, "largeHailWindCTA")})
+#if(${list.contains(${bullets}, "largeHailWindCTA")})
PREPARE IMMEDIATELY FOR LARGE HAIL AND DAMAGING WINDS. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
#end
##
-#if(${list.contains($bullets, "historyHailCTA")})
+#if(${list.contains(${bullets}, "historyHailCTA")})
#if(${stormType} == "line")
THESE STORMS ARE PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -505,7 +493,7 @@ THIS STORM IS PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE A
#end
#end
##
-#if(${list.contains($bullets, "historyWindCTA")})
+#if(${list.contains(${bullets}, "historyWindCTA")})
#if(${stormType} == "line")
THIS IS A DANGEROUS SITUATION. THESE STORMS ARE PRODUCING WIDESPREAD WIND DAMAGE ACROSS !** ENTER LOCATION **!. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -515,7 +503,7 @@ THIS IS A DANGEROUS SITUATION. THIS STORM IS PRODUCING WIDESPREAD WIND DAMAGE AC
#end
#end
##
-#if(${list.contains($bullets, "veryLargeHailCTA")})
+#if(${list.contains(${bullets}, "veryLargeHailCTA")})
#if(${stormType} == "line")
THESE ARE DANGEROUS STORMS. PREPARE IMMEDIATELY FOR LARGE DESTRUCTIVE HAIL CAPABLE OF PRODUCING SIGNIFICANT DAMAGE. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -525,7 +513,7 @@ THIS IS A DANGEROUS STORM. PREPARE IMMEDIATELY FOR LARGE DESTRUCTIVE HAIL CAPABL
#end
#end
##
-#if(${list.contains($bullets, "extremeWindsCTA")})
+#if(${list.contains(${bullets}, "extremeWindsCTA")})
#if(${stormType} == "line")
THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED. MOBILE HOMES AND HIGH PROFILE VEHICLES ARE ESPECIALLY SUSCEPTIBLE TO WINDS OF THIS MAGNITUDE AND MAY BE OVERTURNED. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
@@ -535,7 +523,7 @@ THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED.
#end
#end
##
-#if(${list.contains($bullets, "deadlyStormCTA")})
+#if(${list.contains(${bullets}, "deadlyStormCTA")})
#if(${stormType} == "line")
THESE ARE POTENTIALLY DEADLY STORMS. SEEK SHELTER IN AN INTERIOR ROOM ON THE LOWEST FLOOR OF A WELL-BUILT STRUCTURE. ABANDON VEHICLES IN SEARCH OF A MORE SUBSTANTIAL PERMANENT STRUCTURE. STAY AWAY FROM WINDOWS.
@@ -545,7 +533,7 @@ THIS IS A POTENTIALLY DEADLY STORM. SEEK SHELTER IN AN INTERIOR ROOM ON THE LOWE
#end
#end
##
-#if(${list.contains($bullets, "widespreadWindCTA")})
+#if(${list.contains(${bullets}, "widespreadWindCTA")})
#if(${stormType} == "line")
THIS IS AN EXTREMELY DANGEROUS SITUATION. THESE STORMS ARE PRODUCING WIDESPREAD WIND DAMAGE ACROSS !** ENTER LOCATION **!. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -555,7 +543,7 @@ THIS IS AN EXTREMELY DANGEROUS SITUATION. THIS STORM IS PRODUCING WIDESPREAD WIN
#end
#end
##
-#if(${list.contains($bullets, "historyWindHailCTA")})
+#if(${list.contains(${bullets}, "historyWindHailCTA")})
#if(${stormType} == "line")
THESE STORMS ARE PRODUCING DESTRUCTIVE WINDS AND LARGE DAMAGING HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -565,14 +553,14 @@ THIS STORM IS PRODUCING DESTRUCTIVE WINDS AND LARGE DAMAGING HAIL. SEEK SHELTER
#end
#end
##
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL SEND YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
################################
## SPECIAL CASE CALLS TO ACTION
################################
-#if(${list.contains($bullets, "gustFrontOutflowCTA")})
+#if(${list.contains(${bullets}, "gustFrontOutflowCTA")})
#if(${stormType} == "line")
WIND DAMAGE WITH THESE STORMS WILL OCCUR BEFORE ANY RAIN OR LIGHTNING. DO NOT WAIT FOR THE SOUND OF THUNDER BEFORE TAKING COVER. SEEK SHELTER IMMEDIATELY INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -582,17 +570,17 @@ WIND DAMAGE WITH THIS STORM WILL OCCUR BEFORE ANY RAIN OR LIGHTNING. DO NOT WAIT
#end
#end
##
-#if(${list.contains($bullets, "squallLineCTA")})
+#if(${list.contains(${bullets}, "squallLineCTA")})
#if(${stormType} == "line")
-INTENSE SQUALL LINES CAN SOMETIMES PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THESE STORMS MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
+INTENSE THUNDERSTORM LINES CAN PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THESE STORMS MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
#else
-INTENSE SQUALL LINES CAN SOMETIMES PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THIS STORM MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
+INTENSE THUNDERSTORM LINES CAN PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THIS STORM MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
#end
#end
##
-#if(${list.contains($bullets, "superCellsCTA")})
+#if(${list.contains(${bullets}, "superCellsCTA")})
#if(${stormType} == "line")
THESE THUNDERSTORMS ARE CAPABLE OF PRODUCING ALL TYPES OF SEVERE WEATHER...INCLUDING EXTREMELY LARGE HAIL...DESTRUCTIVE STRAIGHT LINE WINDS...AND TORNADOES. MOVE QUICKLY TO A SAFE SHELTER...SUCH AS AN INTERIOR ROOM...A BATHROOM OR CLOSET OR BASEMENT.
@@ -605,7 +593,7 @@ THIS THUNDERSTORM IS CAPABLE OF PRODUCING ALL TYPES OF SEVERE WEATHER...INCLUDIN
## MISCELLANEOUS CALLS TO ACTION
################################
##
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
#if(${stormType} == "line")
LARGE HAIL AND DAMAGING WINDS AND CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THESE STORMS. MOVE INDOORS IMMEDIATELY. LIGHTNING IS ONE OF NATURES LEADING KILLERS. REMEMBER...IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING.
@@ -615,12 +603,12 @@ LARGE HAIL AND DAMAGING WINDS AND CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURR
#end
#end
##
-#if(${list.contains($bullets, "boatersCTA")})
+#if(${list.contains(${bullets}, "boatersCTA")})
IF ON OR NEAR !**Name Of Lake**!...GET AWAY FROM THE WATER AND MOVE INDOORS OR INSIDE A VEHICLE. REMEMBER...LIGHTNING CAN STRIKE OUT TO 15 MILES FROM THE PARENT THUNDERSTORM. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. MOVE TO SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
##
-#if(${list.contains($bullets, "torrentialRainfallCTA")})
+#if(${list.contains(${bullets}, "torrentialRainfallCTA")})
#if(${stormType} == "line")
TORRENTIAL RAINFALL IS OCCURRING WITH THESE STORMS...AND MAY LEAD TO FLASH FLOODING. DO NOT DRIVE YOUR VEHICLE THROUGH FLOODED ROADWAYS.
@@ -639,12 +627,12 @@ TORRENTIAL RAINFALL IS OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FLOODIN
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#* NO NEED TO INCLUDE SVR T-STM WATCHES IN A SVR WARNING!!!!
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#
#end
@@ -656,16 +644,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${TMLtime}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
-## UNCOMMENT 2 LINES BELOW IF PARTICIPATING IN THE WIND/HAIL TAG EXPERIMENT
-##
-##${windhailTag}
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
###########################################################
## CODE FOR TORNADO/HAIL/WIND TAGS USED BY CR
@@ -679,12 +658,4 @@ ${torTag}
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-##################################################################
-## If you decide to pull the user name from a file use this coding
-##################################################################
-##parse("name.vm")
-!**NAME/INITIALS**!
\ No newline at end of file
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.xml
index 9337f2c19f..b620ec3999 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereThunderstormWarning.xml
@@ -1,10 +1,12 @@
-
+
@@ -84,30 +86,28 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
+
@@ -127,7 +127,7 @@
-
+
@@ -150,30 +150,30 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
+
+
+
@@ -193,7 +193,7 @@
-
+
@@ -203,47 +203,45 @@
-
-
-
-
-
-
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
- name
-
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
25
-
+
NAME
POINTS
+ AREA
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -254,10 +252,14 @@
NAME
POINTS
+ AREA
+
+
+
5
100
@@ -267,6 +269,7 @@
+ 1
true
8.0
5
@@ -274,40 +277,54 @@
10
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
- population
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -317,18 +334,22 @@
-
+
+
+
+
+
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.vm
index 6baa30e64d..1896e8cb3f 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.vm
@@ -5,28 +5,35 @@
## VERSION AWIPS II 1.0 -- 2-21-2012 OB12.1.1-1 ##
## VERSION AWIPS II 1.1 -- 2-29-2012 OB12.2.1-4 ##
## VERSION AWIPS II 1.2 -- 4-20-2012 ##
-## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## VERSION AWIPS II 1.3 -- 9-13-2012 OB12.9.1-12 ##
+## VERSION AWIPS II 1.4 -- 2-04-2012 OB13.2.1-5 impact stmts ##
+## VERSION AWIPS II 1.5 -- Bookbinder 2-22-13 2013 IBW Changes##
+## VERSION AWIPS II 1.6 -- Kurimski 5-20-13 2013 IBW Changes ##
+################################################################
+## Commented out Impact statements Feb 2013 and created file to
+## be parsed into the template called impactStatements.vm
+## Changes to the impact statements can be made to this file
+## instead of the template
################################################################
##
###################################################################
## Set null variables for wind/hail tags used in the template ##
###################################################################
-#set ($windhailTag = "")
-#set ($hailTag = "")
-#set ($windTag = "")
-#set ($hazard = "")
-#set ($source = "")
-#set ($impact = "")
-#set ($torTag = "")
-#set ($svrTorTag = "")
-#set ($pdssvr = "")
-#set ($pdstor = "")
-#set ($extrasource = "")
-#set ($torimpact = "")
-#set ($svrimpact = "")
-#set ($confirmed = "")
-#set ($preAmbleTOR = "")
+#set($windhailTag = "")
+#set($hailTag = "")
+#set($windTag = "")
+#set($hazard = "")
+#set($source = "")
+#set($impact = "")
+#set($torTag = "")
+#set($svrTorTag = "")
+#set($pdssvr = "")
+#set($pdstor = "")
+#set($extraSource = "")
+#set($torimpact = "")
+#set($svrimpact = "")
+#set($confirmed = "")
+#set($preAmbleTOR = "")
############################################
## CREATE INITIAL SET OF VARIABLES ##
############################################
@@ -34,26 +41,25 @@
#if(${phenomena}=="SV")
#set($eventType = "SEVERE THUNDERSTORM")
#if(${stormType} == "line")
- #set($reportType1 = "LINE OF SEVERE THUNDERSTORMS")
+ #set($reportType1 = "SEVERE THUNDERSTORMS WERE")
#set($reportType2 = "THESE STORMS WERE")
- #set($reportType = "A LINE OF SEVERE THUNDERSTORMS ARE")
+ #set($reportType = "SEVERE THUNDERSTORMS ARE")
#set($pathcastLead = "THESE SEVERE STORMS")
#else
- #set($reportType1 = "SEVERE THUNDERSTORM")
+ #set($reportType1 = "A SEVERE THUNDERSTORM WAS")
#set($reportType2 = "THIS STORM WAS")
#set($reportType = "A SEVERE THUNDERSTORM IS")
#set($pathcastLead = "THIS SEVERE STORM")
#end
#elseif(${phenomena}=="TO")
#set($eventType = "TORNADO")
- #set ($torTag = "RADAR INDICATED")
- #set ($torThreat = "")
- #set ($torHazard = "POTENTIAL TORNADO")
- #set ($torGround = "ON THE GROUND")
- #set ($source = "RADAR INDICATED ROTATION.")
- #set ($torimpact = "SIGNIFICANT HOUSE AND BUILDING DAMAGE POSSIBLE. MOBILE HOMES COMPLETELY DESTROYED IF HIT. SOME TREES UPROOTED OR SNAPPED. VEHICLES WILL LIKELY BE THROWN BY TORNADIC WINDS.")
+ #set($torTag = "RADAR INDICATED")
+ #set($torThreat = "")
+ #set($torHazard = "TORNADO")
+ #set($torGround = "ON THE GROUND")
+ #set($source = "RADAR INDICATED ROTATION.")
#if(${stormType} == "line")
- #set ($reportType = "A TORNADO WAS REPORTED")
+ #set($reportType = "A TORNADO WAS REPORTED")
#set($reportType1 = "LINE OF TORNADO PRODUCING STORMS")
#set($reportType2 = "THESE TORNADO PRODUCING STORMS WERE")
#set($pathcastLead = "THESE TORNADIC STORMS")
@@ -67,8 +73,8 @@
######################################################
## Check to see if the SVR Tornado Tag was selected ##
######################################################
-#if(${list.contains($bullets, "svrTorTag")})
- #set ($svrTorTag = "TORNADO...POSSIBLE ")
+#if(${list.contains(${bullets}, "svrTorTag")})
+ #set($svrTorTag = "TORNADO...POSSIBLE ")
#end
######################################
### CREATE WMO/MND HEADER ############
@@ -143,13 +149,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
##
#if(${action}=="EXP" || ${action}=="CAN")
...THE ${eventType} WARNING FOR ##
-#headlineLocList(${areas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE ${eventType} WARNING FOR ##
-#headlineLocList(${cancelareas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
#end
############################
## END CAN/EXP HEADLINE ####
@@ -170,7 +174,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#end
#### WEAKENED BELOW SEVERE LIMITS
-#if(${list.contains($bullets, "weakened")})
+#if(${list.contains(${bullets}, "weakened")})
#if(${stormType} == "line")
#if(${phenomena}=="SV")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSE AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
@@ -186,7 +190,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#end
#### MOVED OUT OF THE WARNED AREA
-#if(${list.contains($bullets, "movedout")})
+#if(${list.contains(${bullets}, "movedout")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
@@ -194,7 +198,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#end
#### WEAKENED AND MOVED OUT OF THE AREA
-#if(${list.contains($bullets, "wkndandmoved")})
+#if(${list.contains(${bullets}, "wkndandmoved")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
@@ -202,19 +206,19 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#end
#### SVR UPGRADED TO TOR
-#if(${list.contains($bullets, "torupgrade")})
+#if(${list.contains(${bullets}, "torupgrade")})
#set($expcanPhrase = "THE SEVERE THUNDERSTORM WARNING THAT WAS PREVIOUSLY IN EFFECT HAS BEEN UPGRADED TO A TORNADO WARNING. PLEASE REFER TO THAT BULLETIN FOR THE LATEST INFORMATION ON THIS DANGEROUS WEATHER SITUATION.")
#end
#### SVR REISSUE
-#if(${list.contains($bullets, "svrreissue")})
+#if(${list.contains(${bullets}, "svrreissue")})
#set($expcanPhrase = "THE SEVERE THUNDERSTORM WARNING THAT WAS PREVIOUSLY IN EFFECT HAS BEEN REISSUED FOR !** INSERT COUNTY(IES)**! AND IS IN EFFECT UNTIL !**NEW WARNING TIME**!. PLEASE REFER TO THAT BULLETIN FOR THE LATEST SEVERE WEATHER INFORMATION.")
#end
#### TORNADO WARNING CANCEL -- SEVERE STILL IN EFFECT
-#if(${list.contains($bullets, "tordowngrade")})
+#if(${list.contains(${bullets}, "tordowngrade")})
#set($expcanPhrase = "THE TORNADO THREAT HAS DIMINISHED...THEREFORE THE TORNADO WARNING HAS BEEN CANCELLED. HOWEVER...LARGE HAIL AND DAMAGING WINDS REMAIN LIKELY AND A SEVERE THUNDERSTORM WARNING REMAINS IN EFFECT FOR THE AREA.")
#end
#### TORNADO WARNING EXPIRED - REISSUE
-#if(${list.contains($bullets, "torreissue")})
+#if(${list.contains(${bullets}, "torreissue")})
#set($expcanPhrase = "THE TORNADO WARNING THAT WAS PREVIOUSLY IN EFFECT HAS BEEN REISSUED FOR !** INSERT COUNTY(IES)**! AND IS IN EFFECT UNTIL !**NEW WARNING TIME**!. PLEASE REFER TO THAT BULLETIN FOR THE LATEST SEVERE WEATHER INFORMATION.")
#end
########################################
@@ -231,19 +235,19 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#set($addraincheck = 0)
#set($watchlead = "ADDITIONAL SEVERE THUNDERSTORM DEVELOPMENT REMAINS POSSIBLE")
##Hail still a threat
-#if(${list.contains($bullets, "stillhail")})
+#if(${list.contains(${bullets}, "stillhail")})
#set($addhail = "SMALL HAIL")
#set($addhailcheck = 1)
#set($watchlead = "IN ADDITION...SEVERE THUNDERSTORM REDEVELOPMENT REMAINS POSSIBLE")
#end
##Wind still a threat
-#if(${list.contains($bullets, "stillwind")})
+#if(${list.contains(${bullets}, "stillwind")})
#set($addwind = "GUSTY WINDS")
#set($addwindcheck = 1)
#set($watchlead = "IN ADDITION...SEVERE THUNDERSTORM REDEVELOPMENT REMAINS POSSIBLE")
#end
##Hvy rain still a threat
-#if(${list.contains($bullets, "stillrain")})
+#if(${list.contains(${bullets}, "stillrain")})
#set($addrain = "HEAVY RAIN")
#set($addraincheck = 1)
#set($watchlead = "IN ADDITION...SEVERE THUNDERSTORM REDEVELOPMENT REMAINS POSSIBLE")
@@ -252,63 +256,57 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#set($addthreat = "")
#if(${addhailcheck} == "1" && ${addwindcheck} == "0" && ${addraincheck} == "0" )
#set($addthreat = " HOWEVER ${addhail} IS STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
+#elseif(${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
#set($addthreat = " HOWEVER ${addwind} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "0" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
+#elseif(${addhailcheck} == "0" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
#set($addthreat = " HOWEVER ${addrain} IS STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
+#elseif(${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
#set($addthreat = " HOWEVER ${addhail} AND ${addwind} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "1" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
+#elseif(${addhailcheck} == "1" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
#set($addthreat = " HOWEVER ${addhail} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
+#elseif(${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
#set($addthreat = " HOWEVER ${addwind} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
+#elseif(${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
#set($addthreat = " HOWEVER ${addhail}....${addwind} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
#end
${expcanPhrase} ${addthreat}
###########################################
-##OTHER EXP/CAN STATEMENT INFO
+## OTHER EXP/CAN STATEMENT INFO ###########
###########################################
## WATCHES ##
#############
-###if(${list.contains($includedWatches, "torWatches")})
-###inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
-###end
-###if(${list.contains($includedWatches, "svrWatches")})
-###insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
-###end
-###end
-#if(${list.contains($bullets, "svrboxactive")})
+#if(${list.contains(${includedWatches}, "torWatches")})
+#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
+#end
+#if(${list.contains(${includedWatches}, "svrWatches")})
+#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
+#end
+
+#if(${list.contains(${bullets}, "svrboxactive")})
${watchlead}...AND A SEVERE THUNDERSTORM WATCH REMAINS IN EFFECT UNTIL !** enter time here **!
#end
-#if (${list.contains($bullets, "torboxactive")})
+#if(${list.contains(${bullets}, "torboxactive")})
${watchlead}...AND A TORNADO WATCH REMAINS IN EFFECT UNTIL !** enter time here **!
#end
-#if(${list.contains($bullets, "reporttolaw")})
+#if(${list.contains(${bullets}, "reporttolaw")})
TO REPORT SEVERE WEATHER...CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE ${officeLoc}.
#end
-#if(${list.contains($bullets, "svrwrngactive")})
+#if(${list.contains(${bullets}, "svrwrngactive")})
REMEMBER...A SEVERE THUNDERSTORM WARNING STILL REMAINS IN EFFECT FOR !** PORTION AND COUNTY NAMES UNTIL TIME **!
#end
-#if(${list.contains($bullets, "torwrngactive")})
+#if(${list.contains(${bullets}, "torwrngactive")})
REMEMBER...A TORNADO WARNING STILL REMAINS IN EFFECT FOR !** PORTION AND COUNTY NAMES UNTIL TIME **!
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${now}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
@@ -361,14 +359,12 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#if(${action}=="CANCON" || ${action}=="CON" || ${action}=="COR" || ${CORCAN}=="true")
...A ${eventType} WARNING REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
-...##
+#headlineLocList(${areas} true true true false)...
########### END NEW HEADLINE CODE ####################
#####################################################################
### TORNADO EMERGENCY PER NWS 10-511 DIRECTIVE #
#####################################################################
-
-#if(${list.contains($bullets, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergency")})
...THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...
@@ -376,429 +372,429 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#set($reportType = "!** BASIS FOR WARNING **!")
#set($reportAuthSVR = "")
############### BASIS SECTION ####################
-#if(${list.contains($bullets, "dopplerTOR")})
-#set ($torGround = "DEVELOPING")
+#if(${list.contains(${bullets}, "dopplerTOR")})
+#set($torGround = "DEVELOPING")
#if(${stormType} == "line")
- #set($reportType = "A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING TORNADOES")
+ #set($reportType = "SEVERE THUNDERSTORMS CAPABLE OF PRODUCING TORNADOES WERE")
#set($reportType2 = "THESE DANGEROUS STORMS WERE")
#set($pathcastLead = "THESE DANGEROUS STORMS")
#else
- #set($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO")
+ #set($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO WAS")
#set($reportType2 = "THIS DANGEROUS STORM WAS")
#set($pathcastLead = "THIS DANGEROUS STORM")
#end
-#elseif(${list.contains($bullets, "dopplerSquallTOR")})
- #set ($reportType = "A SEVERE SQUALL LINE CAPABLE OF PRODUCING BOTH TORNADOES AND EXTENSIVE STRAIGHT LINE WIND DAMAGE")
+#elseif(${list.contains(${bullets}, "dopplerSquallTOR")})
+ #set($reportType = "A SEVERE SQUALL LINE CAPABLE OF PRODUCING BOTH TORNADOES AND EXTENSIVE STRAIGHT LINE WIND DAMAGE WAS")
#set($reportType2 = "THESE DANGEROUS STORMS WERE")
#set($pathcastLead = "THESE DANGEROUS STORMS")
-#elseif(${list.contains($bullets, "confirmedDopplerTOR")})
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "RADAR CONFIRMED TORNADO.")
+#elseif(${list.contains(${bullets}, "confirmedDopplerTOR")})
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "RADAR CONFIRMED TORNADO.")
#if(${stormType} == "line")
#set($reportType2 = "THESE TORNADIC STORMS WERE")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS LOCATED")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE")
#else
#set($reportType2 = "THIS TORNADO")
- #set ($reportType = "A CONFIRMED TORNADO WAS LOCATED")
+ #set($reportType = "A CONFIRMED TORNADO WAS")
#end
#set($preAmbleTOR = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
-#elseif(${list.contains($bullets, "confirmedLargeTOR")})
- #set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
+#elseif(${list.contains(${bullets}, "confirmedLargeTOR")})
+ #set($reportType = "DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
#set($preAmbleTOR = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "spotterTOR")})
+#elseif(${list.contains(${bullets}, "spotterTOR")})
#set($preAmbleTOR = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE")
#else
- #set ($reportType = "A CONFIRMED TORNADO")
+ #set($reportType = "A CONFIRMED TORNADO WAS")
#end
-#elseif(${list.contains($bullets, "lawEnforcementTOR")})
+#elseif(${list.contains(${bullets}, "lawEnforcementTOR")})
#set($preAmbleTOR = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "LAW ENFORCEMENT CONFIRMED TORNADO.")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "LAW ENFORCEMENT CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE")
#else
- #set ($reportType = "A CONFIRMED TORNADO WAS LOCATED")
+ #set($reportType = "A CONFIRMED TORNADO WAS")
#end
-#elseif(${list.contains($bullets, "emergencyManagementTOR")})
+#elseif(${list.contains(${bullets}, "emergencyManagementTOR")})
#set($reportType = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
#set($preAmbleTOR = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "EMERGENCY MANAGEMENT CONFIRMED TORNADO.")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "EMERGENCY MANAGEMENT CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE")
#else
- #set ($reportType = "A CONFIRMED TORNADO")
+ #set($reportType = "A CONFIRMED TORNADO WAS")
#end
-#elseif(${list.contains($bullets, "publicTOR")})
+#elseif(${list.contains(${bullets}, "publicTOR")})
#set($preAmbleTOR = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "PUBLIC CONFIRMED TORNADO.")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "PUBLIC CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE")
#else
- #set ($reportType = "A CONFIRMED TORNADO")
+ #set($reportType = "A CONFIRMED TORNADO WAS")
#end
-#elseif(${list.contains($bullets, "spotterFunnelCloud")})
- #set ($source = "WEATHER SPOTTERS REPORTED FUNNEL CLOUD.")
- #set ($torGround = "DEVELOPING")
+#elseif(${list.contains(${bullets}, "spotterFunnelCloud")})
+ #set($source = "WEATHER SPOTTERS REPORTED A FUNNEL CLOUD.")
+ #set($torGround = "DEVELOPING")
#if(${stormType} == "line")
- #set($reportType = "A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO")
+ #set($reportType = "SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO WERE")
#set($reportType2 = "A TORNADO MAY DEVELOP AT ANY TIME. THESE DANGEROUS STORMS WERE")
#set($pathcastLead = "THESE DANGEROUS STORMS")
#else
- #set($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO")
+ #set($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO WAS")
#set($reportType2 = "A TORNADO MAY DEVELOP AT ANY TIME. THIS DANGEROUS STORM WAS")
#set($pathcastLead = "THIS DANGEROUS STORM")
#end
-#elseif(${list.contains($bullets, "dopplerSVR")})
- #set($reportType = "A ${reportType1}")
+#elseif(${list.contains(${bullets}, "dopplerSVR")})
+ #set($reportType = "${reportType1}")
#set($reportAuthSVR = "CAPABLE OF PRODUCING")
- #set ($source = "RADAR INDICATED.")
-#elseif(${list.contains($bullets, "trainedSpottersSVR")})
- #set($reportType = "A ${reportType1}")
+ #set($source = "RADAR INDICATED.")
+#elseif(${list.contains(${bullets}, "trainedSpottersSVR")})
+ #set($reportType = "${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "TRAINED WEATHER SPOTTERS.")
-#elseif(${list.contains($bullets, "lawEnforcementSVR")})
- #set($reportType = "A ${reportType1}")
+ #set($source = "TRAINED WEATHER SPOTTERS.")
+#elseif(${list.contains(${bullets}, "lawEnforcementSVR")})
+ #set($reportType = "${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "LAW ENFORCEMENT.")
-#elseif(${list.contains($bullets, "emergencyManagementSVR")})
- #set($reportType = "A ${reportType1}")
+ #set($source = "LAW ENFORCEMENT.")
+#elseif(${list.contains(${bullets}, "emergencyManagementSVR")})
+ #set($reportType = "${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "EMERGENCY MANAGEMENT.")
-#elseif(${list.contains($bullets, "publicSVR")})
- #set($reportType = "A ${reportType1}")
+ #set($source = "EMERGENCY MANAGEMENT.")
+#elseif(${list.contains(${bullets}, "publicSVR")})
+ #set($reportType = "${reportType1}")
#set($reportAuthSVR = "PRODUCING")
- #set ($source = "PUBLIC.")
+ #set($source = "PUBLIC.")
#end
############################################################################
-## IF A SIGNIFICANT TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN
-## VARIABLES TO HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION
+## IF A LANDSPOUT TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE THE
+## TORNADO HAZARD VARIABLE
############################################################################
-#if(${list.contains($bullets, "significantTornado")})
- #set ($reportType = "A ${confirmed}LARGE AND EXTREMELY DANGEROUS TORNADO")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($torThreat = "TORNADO DAMAGE THREAT...SIGNIFICANT ")
- #set ($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
- #set ($torimpact = "MAJOR HOUSE AND BUILDING DAMAGE LIKELY AND COMPLETE DESTRUCTION POSSIBLE. NUMEROUS TREES SNAPPED. MAJOR POWER OUTAGES IN PATH OF TORNADO HIGHLY LIKELY. SOME ROADS POSSIBLY BLOCKED BY TORNADO DEBRIS. COMPLETE DESTRUCTION OF VEHICLES LIKELY.")
+#if(${list.contains(${bullets}, "landspoutTornado")})
+ #set($torHazard = "TORNADO")
+#end
+###############################################################################
+## IF A CONSIDERABLE TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN ##
+## VARIABLES TO HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION ##
+###############################################################################
+#if(${list.contains(${bullets}, "considerableTornado")})
+ #set($reportType = "A ${confirmed}LARGE AND EXTREMELY DANGEROUS TORNADO WAS")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($torThreat = "TORNADO DAMAGE THREAT...CONSIDERABLE ")
+ #set($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmbleTOR = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ${torGround}. TO PROTECT YOUR LIFE...")
+ #set($preAmbleTOR = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ${torGround}. TO PROTECT YOUR LIFE...")
#end
############################################################################
-## IF A TORNADO EMERGENCY IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN
-## VARIABLES TO HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION
+## IF A TORNADO EMERGENCY IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN ##
+## VARIABLES TO HEIGHTEN AWARENESS OF THIS DANGEROUS SITUATION ##
############################################################################
-#if(${list.contains($bullets, "torEmergency")})
- #set ($reportType = "TORNADO EMERGENCY FOR !** LOCATION **!. A CONFIRMED LARGE AND DESTRUCTIVE TORNADO")
- #set ($ctaSelected = "YES")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DEADLY TORNADO")
- #set ($torThreat = "TORNADO DAMAGE THREAT...CATASTROPHIC ")
- #set ($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
- #set ($torimpact = "THIS IS A LIFE THREATENING SITUATION. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. COMPLETE DESTRUCTION OF ENTIRE NEIGHBORHOODS IS LIKELY. MANY WELL BUILT HOMES AND BUSINESSES WILL BE COMPLETELY SWEPT FROM THEIR FOUNDATIONS. DEBRIS WILL BLOCK MOST ROADWAYS. MASS DEVASTATION IS HIGHLY LIKELY MAKING THE AREA UNRECOGNIZABLE TO SURVIVORS.")
+#if(${list.contains(${bullets}, "torEmergency")})
+ #set($reportType = "TORNADO EMERGENCY FOR !** LOCATION **!. A CONFIRMED LARGE AND DESTRUCTIVE TORNADO WAS")
+ #set($ctaSelected = "YES")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DEADLY TORNADO")
+ #set($torThreat = "TORNADO DAMAGE THREAT...CATASTROPHIC ")
+ #set($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #if(${list.contains($bullets, "dopplerTOR")})
- #set ($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
+ #if(${list.contains(${bullets}, "dopplerTOR")})
+ #set($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
#end
- #set ($preAmbleTOR = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
+ #set($preAmbleTOR = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
#end
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
-#set ($windSpeed = 0)
-#set ($windImpact = "")
-#set ($extensive = "")
-#set ($windTag = "<50MPH")
-#if(${list.contains($bullets, "60mphWind")})
- #set ($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
- #set ($windHazard = "60 MPH WIND GUSTS")
- #set ($windSpeed = 60)
- #set ($windTag = "60MPH")
- #set ($windImpact = "MINOR TREE DAMAGE...WITH LIMBS UP TO ONE INCH IN DIAMETER BROKEN.")
+#set($windSpeed = 0)
+#set($windImpact = "")
+#set($extensive = "")
+#set($windTag = "<50MPH")
+#if(${list.contains(${bullets}, "60mphWind")})
+ #set($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
+ #set($windHazard = "60 MPH WIND GUSTS")
+ #set($windSpeed = 60)
+ #set($windTag = "60MPH")
#end
-#if(${list.contains($bullets, "70mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
- #set ($windHazard = "70 MPH WIND GUSTS")
- #set ($windSpeed = 70)
- #set ($windTag = "70MPH")
- #set ($windImpact = "TREE BRANCHES UP TO THREE INCHES IN DIAMETER BROKEN. POSSIBLE MINOR DAMAGE TO SHINGLE ROOFS AND METAL OUTBUILDINGS.")
+#if(${list.contains(${bullets}, "70mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
+ #set($windHazard = "70 MPH WIND GUSTS")
+ #set($windSpeed = 70)
+ #set($windTag = "70MPH")
#end
-#if(${list.contains($bullets, "80mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
- #set ($windHazard = "80 MPH WIND GUSTS")
- #set ($windSpeed = 80)
- #set ($windTag = "80MPH")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($windImpact = "LARGE TREE BRANCHES MAY BE BROKEN...POSSIBLY BLOCKING ROADS AND DOWNING POWER LINES. SUBSTANTIAL ROOF COVERING DAMAGE LIKELY. METAL OUTBUILDINGS DAMAGED. SIGNIFICANT FLYING DEBRIS WILL BE DANGEROUS FOR ANYONE EXPOSED TO THE ELEMENTS.")
+#if(${list.contains(${bullets}, "80mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
+ #set($windHazard = "80 MPH WIND GUSTS")
+ #set($windSpeed = 80)
+ #set($windTag = "80MPH")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "90mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
- #set ($windHazard = "90 MPH WIND GUSTS")
- #set ($windSpeed = 90)
- #set ($windTag = "90MPH")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($windImpact ="MOBILE HOMES MAY SUFFER MAJOR ROOF FAILURE. SUBSTANTIAL ROOF AND WINDOW DAMAGE TO SINGLE FAMILY HOMES. SOME TREES UPROOTED POSSIBLY BLOCKING ROADS AND KNOCKING DOWN POWER LINES. SIGNIFICANT FLYING AND FALLING DEBRIS MAY PROVE DEADLY FOR ANYONE EXPOSED TO THE ELEMENTS.")
+#if(${list.contains(${bullets}, "90mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
+ #set($windHazard = "90 MPH WIND GUSTS")
+ #set($windSpeed = 90)
+ #set($windTag = "90MPH")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "100mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
- #set ($windHazard = "100 MPH WIND GUSTS")
- #set ($windSpeed = 100)
- #set ($windTag = "100MPH")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($windImpact ="SIGNIFICANT ROOF AND WINDOW LOSS OF SINGLE FAMILY HOMES. COMPLETE DESTRUCTION OF MOBILE HOMES AND METAL BARNS AND OUTBUILDINGS LIKELY. NUMEROUS TREES UPROOTED AND SOME TREE TRUNKS SNAPPED. SUBSTANTIAL POWER OUTAGES LIKELY. SIGNIFICANT FLYING AND FALLING DEBRIS WILL PROVE DEADLY TO THOSE WHO DO NOT SEEK SHELTER.")
+#if(${list.contains(${bullets}, "100mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
+ #set($windHazard = "100 MPH WIND GUSTS")
+ #set($windSpeed = 100)
+ #set($windTag = "100MPH")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
###################################################
## HANDLE HAIL POSSIBILITIES ######################
###################################################
-#set ($hailSize = 0)
-#set ($smallHail = "")
-#set ($hailImpact = "")
-#set ($hailTag = "<.75IN")
-#if(${list.contains($bullets, "pennyHail")})
- #set ($hailThreat = "PENNY SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "PENNY SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.75)
- #set ($hailTag = "0.75IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#set($hailSize = 0)
+#set($hailImpact = "")
+#set($hailTag = "<.75IN")
+#if(${list.contains(${bullets}, "noHail")})
+ #set($hailTag = "0.00IN")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailThreat = "NICKEL SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "NICKEL SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.88)
- #set ($hailTag = "0.88IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "pennyHail")})
+ #set($hailThreat = "PENNY SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "PENNY SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.75)
+ #set($hailTag = "0.75IN")
#end
-#if(${list.contains($bullets, "quarterHail")})
- #set ($hailThreat = "QUARTER SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "QUARTER SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.00)
- #set ($hailTag = "1.00IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailThreat = "NICKEL SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "NICKEL SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.88)
+ #set($hailTag = "0.88IN")
#end
-#if(${list.contains($bullets, "halfdollarHail")})
- #set ($hailThreat = "HALF DOLLAR SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailHazard = "HALF DOLLAR SIZE HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.25)
- #set ($hailTag = "1.25IN")
- #set ($hailImpact = "MINOR DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "quarterHail")})
+ #set($hailThreat = "QUARTER SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "QUARTER SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.00)
+ #set($hailTag = "1.00IN")
#end
-#if(${list.contains($bullets, "pingpongHail")})
- #set ($hailThreat = "PING PONG BALL SIZE")
- #set ($hailLead = "LARGE HAIL UP TO ")
- #set ($hailHazard = "PING PONG SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 1.50)
- #set ($hailTag = "1.50IN")
- #set ($hailImpact = "DAMAGE TO VEHICLES...ROOFS AND WINDOWS.")
+#if(${list.contains(${bullets}, "halfdollarHail")})
+ #set($hailThreat = "HALF DOLLAR SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailHazard = "HALF DOLLAR SIZE HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.25)
+ #set($hailTag = "1.25IN")
#end
-#if(${list.contains($bullets, "golfballHail")})
- #set ($hailThreat = "GOLF BALL SIZE")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailHazard = "GOLF BALL SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 1.75)
- #set ($hailTag = "1.75IN")
- #set ($hailImpact = "DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "pingpongHail")})
+ #set($hailThreat = "PING PONG BALL SIZE")
+ #set($hailLead = "LARGE HAIL UP TO ")
+ #set($hailHazard = "PING PONG SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 1.50)
+ #set($hailTag = "1.50IN")
#end
-#if(${list.contains($bullets, "twoinchHail")})
- #set ($hailThreat = "TWO INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailHazard = "TWO INCH HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 2.00)
- #set ($hailTag = "2.00IN")
- #set ($hailImpact = "DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "golfballHail")})
+ #set($hailThreat = "GOLF BALL SIZE")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailHazard = "GOLF BALL SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 1.75)
+ #set($hailTag = "1.75IN")
#end
-#if(${list.contains($bullets, "tennisBallHail")})
- #set ($hailThreat = "TENNIS BALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailHazard = "TENNIS BALL SIZE HAIL")
- #set ($hailSize = 2.50)
- #set ($hailTag = "2.50IN")
- #set ($hailImpact = "DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "twoinchHail")})
+ #set($hailThreat = "TWO INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailHazard = "TWO INCH HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 2.00)
+ #set($hailTag = "2.00IN")
#end
-#if(${list.contains($bullets, "baseballHail")})
- #set ($hailThreat = "BASEBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "BASEBALL SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 2.75)
- #set ($hailTag = "2.75IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "tennisBallHail")})
+ #set($hailThreat = "TENNIS BALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailHazard = "TENNIS BALL SIZE HAIL")
+ #set($hailSize = 2.50)
+ #set($hailTag = "2.50IN")
#end
-#if(${list.contains($bullets, "threeinchHail")})
- #set ($hailThreat = "THREE INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "THREE INCH HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 3.00)
- #set ($hailTag = "3.00IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "baseballHail")})
+ #set($hailThreat = "BASEBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "BASEBALL SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 2.75)
+ #set($hailTag = "2.75IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "grapefruitHail")})
- #set ($hailThreat = "GRAPEFRUIT SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "GRAPEFRUIT SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 4.00)
- #set ($hailTag = "4.00IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "threeinchHail")})
+ #set($hailThreat = "THREE INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "THREE INCH HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 3.00)
+ #set($hailTag = "3.00IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
-#if(${list.contains($bullets, "softballHail")})
- #set ($hailThreat = "SOFTBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailHazard = "SOFTBALL SIZE HAIL")
- #set ($hailTrail = "")
- #set ($hailSize = 4.25)
- #set ($hailTag = "4.25IN")
- #set ($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
- #set ($hailImpact = "EXTENSIVE DAMAGE TO ROOFS...WINDOWS AND VEHICLES.")
+#if(${list.contains(${bullets}, "grapefruitHail")})
+ #set($hailThreat = "GRAPEFRUIT SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "GRAPEFRUIT SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 4.00)
+ #set($hailTag = "4.00IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
+#end
+#if(${list.contains(${bullets}, "softballHail")})
+ #set($hailThreat = "SOFTBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailHazard = "SOFTBALL SIZE HAIL")
+ #set($hailTrail = "")
+ #set($hailSize = 4.25)
+ #set($hailTag = "4.25IN")
+ #if(${stormType} == "line")
+ #set($pdssvr = "THESE ARE VERY DANGEROUS STORMS.")
+ #else
+ #set($pdssvr = "THIS IS A VERY DANGEROUS STORM.")
+ #end
#end
##################################################################
######### CREATE SVR TSTM WIND AND HAIL SENTENCE/TAG##############
+###### NOTE IMPACTS ARE SOURCED FROM A SEPARATE FILE ############
##################################################################
-#set ($hailwind = "")
-#if (${hailSize} < 1 && ${windSpeed} < 58)
- #if (${phenomena}=="SV")
- #set ($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #set ($windhailTag = "WIND...HAIL <50MPH <.75IN")
-## #set ($svrimpact = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #set ($hazard = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+#set($hailwind = "")
+#if(${hailSize} < 1 && ${windSpeed} < 58)
+ #if(${phenomena}=="SV")
+ #set($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+ #set($windhailTag = "WIND...HAIL <50MPH <.75IN")
+ #set($hazard = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
#else
- #set ($hailTag = "HAIL...<.75IN")
+ #set($hailTag = "HAIL...<.75IN")
#end
#elseif(${hailSize} > 0 && ${windSpeed} > 0)
- #if (${hailSize} < 1)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #if(${hailSize} < 1)
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
#if(${phenomena}=="SV")
- #set ($smallHail = "${hailThreat}${hailTrail} MAY ALSO ACCOMPANY THE DAMAGING WINDS.")
-## #set ($svrimpact = "${extensive}${hailImpact} ${windImpact}")
- #set ($hazard = "${windHazard} AND ${hailHazard}.")
+ #set($hazard = "${windHazard} AND ${hailHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${windHazard}...${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#end
#else
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
-## #set ($svrimpact = "${extensive}${hailImpact} ${windImpact}")
- #set ($hazard = "${hailHazard} AND ${windHazard}.")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
+ #set($hazard = "${hailHazard} AND ${windHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${hailHazard}...${windHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${hailHazard}...${windHazard} AND POSSIBLE TORNADO.")
#end
*#
#end
- #set ($windTag = "WIND...${windTag}")
- #set ($hailTag = "HAIL...${hailTag}")
+ #set($windTag = "WIND...${windTag}")
+ #set($hailTag = "HAIL...${hailTag}")
#elseif(${hailSize} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
- #set ($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
- #set ($windTag = "WIND...${windTag}")
- #set ($hailTag = "HAIL...${hailTag}")
- #set ($hazard = "${hailHazard}.")
-## #set ($svrimpact = "${extensive}${hailImpact} ${windImpact}")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
+ #set($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
+ #set($windTag = "WIND...${windTag}")
+ #set($hailTag = "HAIL...${hailTag}")
+ #set($hazard = "${hailHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${hailHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${hailHazard} AND POSSIBLE TORNADO.")
#end
*#
#elseif(${windSpeed} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
- #set ($windhailTag = "WIND...HAIL ${windTag} <.75IN")
- #set ($windTag = "WIND...${windTag}")
- #set ($hailTag = "HAIL...<.75IN")
- #set ($hazard = "${windHazard}.")
-## #set ($svrimpact = "${extensive}${hailImpact} ${windImpact}")
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #set($windhailTag = "WIND...HAIL ${windTag} <.75IN")
+ #set($windTag = "WIND...${windTag}")
+ #set($hailTag = "HAIL...<.75IN")
+ #set($hazard = "${windHazard}.")
#*
- #if(${list.contains($bullets, "svrTorTag")})
- #set ($hazard = "${windHazard} AND POSSIBLE TORNADO.")
+ #if(${list.contains(${bullets}, "svrTorTag")})
+ #set($hazard = "${windHazard} AND POSSIBLE TORNADO.")
#end
*#
#end
-######################################################################
-## Setup wind/hail impact statement based on wind speed and hail size
-######################################################################
-#if (${phenomena}=="SV")
- #if (${hailSize} < 1 && ${windSpeed} < 58)
- #set ($svrimpact = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #elseif(${hailSize} > 0 && ${windSpeed} < 80 && ${hailSize} < 2.75)
- #set ($svrimpact = "${hailImpact} ${windImpact}")
- #elseif(${hailSize} > 2.50 && ${windSpeed} < 80)
- #set ($svrimpact = "${hailImpact}")
- #elseif(${windSpeed} >= 80)
- #set ($svrimpact = "${windImpact}")
- #end
-#end
##########################################################
## Set the hazard for a tornado warning follow-up ##
##########################################################
#if(${phenomena}=="TO")
- #set ($pdssvr = "")
- #set ($svrimpact = "")
- #if (${windSpeed} >= 60 && ${hailSize} >= 1)
- #set ($hazard = "${torHazard}...${hailHazard} AND ${windHazard}.")
- #elseif (${windSpeed} >= 60 && ${hailSize} < 1)
- #set ($hazard = "${torHazard} AND ${windHazard}.")
- #elseif (${windSpeed} < 60 && ${hailSize} >= 1)
- #set ($hazard = "${torHazard} AND ${hailHazard}.")
+ #set($pdssvr = "")
+ #set($svrimpact = "")
+ #if(${windSpeed} >= 58 && ${hailSize} >= 1)
+ #set($hazard = "${torHazard}...${hailHazard} AND ${windHazard}.")
+ #elseif(${windSpeed} >= 58 && ${hailSize} < 1)
+ #set($hazard = "${torHazard} AND ${windHazard}.")
+ #elseif(${windSpeed} < 58 && ${hailSize} >= 1)
+ #set($hazard = "${torHazard} AND ${hailHazard}.")
#else
- #set ($hazard = "${torHazard}.")
+ #set($hazard = "${torHazard}.")
#end
-#########################################################
-## If a significant or catastrophic tornado are selected
-## do not include any wind or hail informadion
-#########################################################
-#if(${list.contains($bullets, "significantTornado")} || ${list.contains($bullets, "torEmergency")})
- #set ($hazard = "${torHazard}.")
+############################################################
+## If a considerable or catastrophic tornado are selected ##
+## do not include any wind or hail information ##
+############################################################
+#if(${list.contains(${bullets}, "considerableTornado")} || ${list.contains(${bullets}, "torEmergency")})
+ #set($hazard = "${torHazard}.")
#end
#end
########################################################
######### CREATE TORNADO HAIL SENTENCE/TAG##############
+######### CURRENTLY NOT USED ###########################
########################################################
#set($TORHailThreat = "")
-#if (${hailSize} >= 1.5 && ${phenomena}=="TO")
+#if(${hailSize} >= 1.5 && ${phenomena}=="TO")
#if(${stormType} == "line")
#set($TORHailThreat = "IN ADDITION TO TORNADOES...${hailLead}${hailThreat}${hailTrail} IS EXPECTED WITH THESE STORMS.")
#else
@@ -809,16 +805,22 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
###### Storm current location description ##########
######################################################
######################################################
-###### Add damage information to the source section
-###### If Additional Information is selected
+###### Add damage information to the source section ##
+###### If Additional Information is selected ##
######################################################
-#foreach ($bullet in $bullets)
-#if($bullet.startsWith("addl"))
- #set ($extrasource = " !**ENTER TYPE OF DAMAGE**! WAS REPORTED !** ENTER LOCATION **!.")
+
+#############################################
+######## GENERATE ADDITIONAL REPORTS #######
+#############################################
+#if(${list.contains(${bullets}, "addlTorInfo")})
+ #set($extraSource = " AT !**enter time...enter tornado report/damage**! WAS REPORTED !** ENTER LOCATION **!.")
#end
-#end
-#if(${list.contains($bullets, "addlTorInfo")})
- #set ($extrasource = " !**ENTER TYPE OF TORNADO DAMAGE**! WAS REPORTED !** ENTER LOCATION **!.")
+#if(${list.contains(${bullets}, "addlHailRpt")})
+ #set($extraSource = "${extraSource} AT !**enter time...enter hail**! WAS REPORTED !**enter location**!.")
+#elseif(${list.contains(${bullets}, "addlWindRpt")})
+ #set($extraSource = "${extraSource} AT !**enter time...enter wind/damage**! WAS REPORTED !**enter locaton**!.")
+#elseif(${list.contains(${bullets}, "addlHailWindRpt")})
+ #set($extraSource = "${extraSource} AT !**enter time...enter hail/wind**! WAS REPORTED !**enter location**!.")
#end
######################################################
###### CREATE TIME/STORM/MOVEMENT REFERENCE ######
@@ -827,9 +829,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...##
-${reportType} WAS LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES",false)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
+${reportType} LOCATED ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
#if(${stormType} == "line")
...AND ARE NEARLY STATIONARY.
@@ -840,54 +846,42 @@ ${reportType} WAS LOCATED ##
...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
#end
+##########################################################################
+## Command to parse the impact statements into the template
+##########################################################################
+#parse("impactStatements.vm")
##########################################################################
## Section to include the dangerous storm wording as well as the hazard ##
##########################################################################
+
${pdstor}${pdssvr}
-HAZARD...${hazard}
+#wrapText("HAZARD...${hazard}" 0 9)
-SOURCE...${source}${extrasource}
+#wrapText("SOURCE...${source}${extraSource}" 0 9)
-IMPACT...${svrimpact}${torimpact}
+#wrapText("IMPACT...${svrimpact}${torimpact}" 0 9)
-#############################################
-######## GENERATE ADDITIONAL REPORTS #######
-#############################################
-#set ($extraReportTor = "")
-#set ($extraReport = "")
-#if(${list.contains($bullets, "addlTorInfo")})
- #set ($extraReportTor = "AT !**enter time, tornado/damage**! WAS REPORTED !**enter location**!. ")
-#end
-#if(${list.contains($bullets, "addlHailRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, hail**! WAS REPORTED !**enter location**!.")
-#elseif(${list.contains($bullets, "addlWindRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, wind**! WAS REPORTED !**enter location**!.")
-#elseif(${list.contains($bullets, "addlHailWindRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, hail and wind**! WAS REPORTED !**enter location**!.")
-#end
-
-${extraReportTor}${extraReport}
##################################################
######## GENERATE PATHCAST OR CITIES LIST ########
##################################################
#if(${phenomena}=="SV" && ${stormType} == "line")
-#set ($otherLead = "THESE SEVERE THUNDERSTORMS")
+#set($otherLead = "THESE SEVERE THUNDERSTORMS")
#elseif(${phenomena}=="SV")
-#set ($otherLead = "THIS SEVERE THUNDERSTORM")
+#set($otherLead = "THIS SEVERE THUNDERSTORM")
#elseif(${phenomena}=="TO" && ${stormType} == "line")
-#set ($otherLead = "THESE TORNADIC STORMS")
+#set($otherLead = "THESE TORNADIC STORMS")
#elseif(${phenomena}=="TO")
-#set ($otherLead = "THIS TORNADIC THUNDERSTORM")
+#set($otherLead = "THIS TORNADIC THUNDERSTORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -905,7 +899,7 @@ LOCATIONS IMPACTED INCLUDE...
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW!
@@ -915,17 +909,19 @@ THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THIS STO
#end
#end
+## parse file command here is to pull in extra locations (venues) info
+## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
##################################
######### CALLS TO ACTION ########
##################################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -934,8 +930,8 @@ THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THIS STO
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "torEmergencyCTA")} || ${list.contains($bullets, "torEmergency")})
-#if(${list.contains($bullets, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergency")})
THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. DO NOT DELAY...SEEK SHELTER NOW! IF NO UNDERGROUND SHELTER IS AVAILABLE SEEK SHELTER IN AN INTERIOR ROOM OF THE LOWEST LEVEL OF A STRUCTURE...OR IF TIME ALLOWS...CONSIDER MOVING TO AN UNDERGROUND SHELTER ELSEWHERE. MOBILE HOMES AND OUTBUILDINGS WILL OFFER NO SHELTER FROM THIS TORNADO.
#else
@@ -943,79 +939,79 @@ THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COU
#end
#end
-#if(${list.contains($bullets, "defaultMobileCTA")})
+#if(${list.contains(${bullets}, "defaultMobileCTA")})
${preAmbleTOR}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "defaultUrbanCTA")})
+#if(${list.contains(${bullets}, "defaultUrbanCTA")})
${preAmbleTOR}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "motoristsCTA")})
+#if(${list.contains(${bullets}, "motoristsCTA")})
MOTORISTS SHOULD NOT TAKE SHELTER UNDER HIGHWAY OVERPASSES. IF YOU CANNOT SAFELY DRIVE AWAY FROM THE TORNADO...AS A LAST RESORT...EITHER PARK YOUR VEHICLE AND STAY PUT...OR ABANDON YOUR VEHICLE AND LIE DOWN IN A LOW LYING AREA AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "rainWrappedCTA")})
+#if(${list.contains(${bullets}, "rainWrappedCTA")})
HEAVY RAINFALL MAY HIDE THIS TORNADO. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
-#if(${list.contains($bullets, "largeTORCTA")})
+#if(${list.contains(${bullets}, "largeTORCTA")})
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
#end
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL AUTHORITY WHO WILL SEND YOUR REPORT. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
-#if(${list.contains($bullets, "squallCTA")} && ${stormType} == "line")
+#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")
THIS LINE OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING.
-#elseif(${list.contains($bullets, "squallCTA")})
+#elseif(${list.contains(${bullets}, "squallCTA")})
THIS CLUSTER OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING.
#end
-#if(${list.contains($bullets, "waterCTA")})
+#if(${list.contains(${bullets}, "waterCTA")})
IF ON OR NEAR !**NAME OF WATER BODY **!...GET AWAY FROM THE WATER AND MOVE TO SAFE SHELTER IMMEDIATELY. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. SEVERE THUNDERSTORMS CAN PRODUCE LARGE CAPSIZING WAVES...EVEN ON SMALL BODIES OF WATER. MOVE INTO DOCK AND SEEK SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
##
-#if(${list.contains($bullets, "torWatchRemainsInEffectCTA")})
-#if(${list.contains($bullets, "svrTorTag")})
+#if(${list.contains(${bullets}, "torWatchRemainsInEffectCTA")})
+#if(${list.contains(${bullets}, "svrTorTag")})
REMAIN ALERT FOR A POSSIBLE TORNADO! TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. IF YOU SPOT A TORNADO GO AT ONCE INTO THE BASEMENT OR SMALL CENTRAL ROOM IN A STURDY STRUCTURE.
#else
-A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. ALTHOUGH ONE IS NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY INSIDE A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
+A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY INSIDE A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
#end
#end
##
-#if(${list.contains($bullets, "torPossibleTagCTA")})
+#if(${list.contains(${bullets}, "torPossibleTagCTA")})
REMAIN ALERT FOR A POSSIBLE TORNADO! TORNADOES CAN DEVELOP QUICKLY FROM SEVERE THUNDERSTORMS. IF YOU SPOT A TORNADO GO AT ONCE INTO THE BASEMENT OR SMALL CENTRAL ROOM IN A STURDY STRUCTURE.
#end
##
##
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING.
#end
##
##
-#if(${list.contains($bullets, "largeHailCTA")})
+#if(${list.contains(${bullets}, "largeHailCTA")})
PREPARE IMMEDIATELY FOR LARGE HAIL AND DEADLY CLOUD TO GROUND LIGHTNING. SEEK SHELTER INSIDE A WELL-BUILT STRUCTURE. STAY AWAY FROM WINDOWS.
#end
##
-#if(${list.contains($bullets, "largeHailWindCTA")})
+#if(${list.contains(${bullets}, "largeHailWindCTA")})
PREPARE IMMEDIATELY FOR LARGE HAIL AND DAMAGING WINDS. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
#end
##
-#if(${list.contains($bullets, "historyHailCTA")})
+#if(${list.contains(${bullets}, "historyHailCTA")})
#if(${stormType} == "line")
THESE STORMS ARE PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -1025,7 +1021,7 @@ THIS STORM IS PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE A
#end
#end
##
-#if(${list.contains($bullets, "historyWindCTA")})
+#if(${list.contains(${bullets}, "historyWindCTA")})
#if(${stormType} == "line")
THIS IS A DANGEROUS SITUATION. THESE STORMS ARE PRODUCING WIDESPREAD WIND DAMAGE ACROSS !** ENTER LOCATION **!. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -1035,7 +1031,7 @@ THIS IS A DANGEROUS SITUATION. THIS STORM IS PRODUCING WIDESPREAD WIND DAMAGE AC
#end
#end
##
-#if(${list.contains($bullets, "veryLargeHailCTA")})
+#if(${list.contains(${bullets}, "veryLargeHailCTA")})
#if(${stormType} == "line")
THESE ARE DANGEROUS STORMS. PREPARE IMMEDIATELY FOR LARGE DESTRUCTIVE HAIL CAPABLE OF PRODUCING SIGNIFICANT DAMAGE. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -1045,7 +1041,7 @@ THIS IS A DANGEROUS STORM. PREPARE IMMEDIATELY FOR LARGE DESTRUCTIVE HAIL CAPABL
#end
#end
##
-#if(${list.contains($bullets, "extremeWindsCTA")})
+#if(${list.contains(${bullets}, "extremeWindsCTA")})
#if(${stormType} == "line")
THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED. MOBILE HOMES AND HIGH PROFILE VEHICLES ARE ESPECIALLY SUSCEPTIBLE TO WINDS OF THIS MAGNITUDE AND MAY BE OVERTURNED. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
@@ -1055,7 +1051,7 @@ THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED.
#end
#end
##
-#if(${list.contains($bullets, "deadlyStormCTA")})
+#if(${list.contains(${bullets}, "deadlyStormCTA")})
#if(${stormType} == "line")
THESE ARE POTENTIALLY DEADLY STORMS. SEEK SHELTER IN AN INTERIOR ROOM ON THE LOWEST FLOOR OF A WELL-BUILT STRUCTURE. ABANDON VEHICLES IN SEARCH OF A MORE SUBSTANTIAL PERMANENT STRUCTURE. STAY AWAY FROM WINDOWS.
@@ -1065,7 +1061,7 @@ THIS IS A POTENTIALLY DEADLY STORM. SEEK SHELTER IN AN INTERIOR ROOM ON THE LOWE
#end
#end
##
-#if(${list.contains($bullets, "widespreadWindCTA")})
+#if(${list.contains(${bullets}, "widespreadWindCTA")})
#if(${stormType} == "line")
THIS IS AN EXTREMELY DANGEROUS SITUATION. THESE STORMS ARE PRODUCING WIDESPREAD WIND DAMAGE ACROSS !** ENTER LOCATION **!. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -1075,7 +1071,7 @@ THIS IS AN EXTREMELY DANGEROUS SITUATION. THIS STORM IS PRODUCING WIDESPREAD WIN
#end
#end
##
-#if(${list.contains($bullets, "historyWindHailCTA")})
+#if(${list.contains(${bullets}, "historyWindHailCTA")})
#if(${stormType} == "line")
THESE STORMS ARE PRODUCING DESTRUCTIVE WINDS AND LARGE DAMAGING HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -1085,14 +1081,14 @@ THIS STORM IS PRODUCING DESTRUCTIVE WINDS AND LARGE DAMAGING HAIL. SEEK SHELTER
#end
#end
##
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL SEND YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
-################################
-## SPECIAL CASE CALLS TO ACTION
-################################
-#if(${list.contains($bullets, "gustFrontOutflowCTA")})
+##################################
+## SPECIAL CASE CALLS TO ACTION ##
+##################################
+#if(${list.contains(${bullets}, "gustFrontOutflowCTA")})
#if(${stormType} == "line")
WIND DAMAGE WITH THESE STORMS WILL OCCUR BEFORE ANY RAIN OR LIGHTNING. DO NOT WAIT FOR THE SOUND OF THUNDER BEFORE TAKING COVER. SEEK SHELTER IMMEDIATELY INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -1102,17 +1098,17 @@ WIND DAMAGE WITH THIS STORM WILL OCCUR BEFORE ANY RAIN OR LIGHTNING. DO NOT WAIT
#end
#end
##
-#if(${list.contains($bullets, "squallLineCTA")})
+#if(${list.contains(${bullets}, "squallLineCTA")})
#if(${stormType} == "line")
-INTENSE SQUALL LINES CAN SOMETIMES PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THESE STORMS MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
+INTENSE THUNDERSTORM LINES CAN PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THESE STORMS MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
#else
-INTENSE SQUALL LINES CAN SOMETIMES PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THIS STORM MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
+INTENSE THUNDERSTORM LINES CAN PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IT IS BEST TO MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING. THIS STORM MAY CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
#end
#end
##
-#if(${list.contains($bullets, "superCellsCTA")})
+#if(${list.contains(${bullets}, "superCellsCTA")})
#if(${stormType} == "line")
THESE THUNDERSTORMS ARE CAPABLE OF PRODUCING ALL TYPES OF SEVERE WEATHER...INCLUDING EXTREMELY LARGE HAIL...DESTRUCTIVE STRAIGHT LINE WINDS...AND TORNADOES. MOVE QUICKLY TO A SAFE SHELTER...SUCH AS AN INTERIOR ROOM...A BATHROOM OR CLOSET OR BASEMENT.
@@ -1121,11 +1117,11 @@ THIS THUNDERSTORM IS CAPABLE OF PRODUCING ALL TYPES OF SEVERE WEATHER...INCLUDIN
#end
#end
-################################
-## MISCELLANEOUS CALLS TO ACTION
-################################
+###################################
+## MISCELLANEOUS CALLS TO ACTION ##
+###################################
##
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
#if(${stormType} == "line")
LARGE HAIL AND DAMAGING WINDS AND CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THESE STORMS. MOVE INDOORS IMMEDIATELY. LIGHTNING IS ONE OF NATURES LEADING KILLERS. REMEMBER...IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING.
@@ -1135,12 +1131,12 @@ LARGE HAIL AND DAMAGING WINDS AND CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURR
#end
#end
##
-#if(${list.contains($bullets, "boatersCTA")})
+#if(${list.contains(${bullets}, "boatersCTA")})
IF ON OR NEAR !**Name Of Lake**!...GET AWAY FROM THE WATER AND MOVE INDOORS OR INSIDE A VEHICLE. REMEMBER...LIGHTNING CAN STRIKE OUT TO 15 MILES FROM THE PARENT THUNDERSTORM. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. MOVE TO SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
##
-#if(${list.contains($bullets, "torrentialRainfallCTA")})
+#if(${list.contains(${bullets}, "torrentialRainfallCTA")})
#if(${stormType} == "line")
TORRENTIAL RAINFALL IS OCCURRING WITH THESE STORMS...AND MAY LEAD TO FLASH FLOODING. DO NOT DRIVE YOUR VEHICLE THROUGH FLOODED ROADWAYS.
@@ -1153,6 +1149,14 @@ TORRENTIAL RAINFALL IS OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FLOODIN
#if(${ctaSelected} == "YES")
&&
+#end
+#############
+## WATCHES ##
+#############
+
+#if(${list.contains(${includedWatches}, "torWatches")} && ${phenomena}=="SV")
+#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
+
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
@@ -1161,16 +1165,10 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
-##################################################################
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
+#################################################################################
## SVR Tornado/Wind/Hail Tags used by CR for the impact based Warning Experiment.
-##################################################################
+#################################################################################
#if(${phenomena}=="SV")
@@ -1178,9 +1176,9 @@ ${svrTorTag}
${hailTag}
${windTag}
#end
-###########################################################################
+#################################################################################
## TOR Tornado/Hail/Wind Tags used by CR for the impact based Warning Experiment.
-###########################################################################
+#################################################################################
#if(${phenomena}=="TO")
TORNADO...${torTag}
@@ -1192,21 +1190,9 @@ ${torThreat}
##${windTag}
#end
##
+
+$$
###########################################################################
#end
-
-$$
-##############################################
-#### END CONTINUATION SECTON #################
-##############################################
-
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-##################################################################
-## If you decide to pull the user name from a file use this coding
-##################################################################
-##parse("name.vm")
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.xml
index 0cafbb9edd..bcf1832654 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactSevereWeatherStatement.xml
@@ -9,6 +9,10 @@
PHIL KURIMSKI 04-20-2012
MIKE REGA 5-10-2012 DR 14525 added timeZoneField
DR 14691 added feAreaField
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Added new areaSource object
+ Phil Kurimski 02-04-2013 OB13.2.1-5 Changed Sig Tor to Considerable
+ Phil Kurimski 05-20-2013 Added selection for very weak tornadoes and landspouts
-->
-
-
+ torWatches
+ svrWatches
false
@@ -90,8 +93,10 @@
-
-
+
@@ -111,8 +116,10 @@
-
-
+
@@ -134,8 +141,11 @@
-
-
+
+
@@ -157,8 +167,11 @@
-
-
+
+
@@ -169,8 +182,12 @@
-
-
+
+
+
+
+
+
@@ -196,12 +213,8 @@
-->
-
-
-
+
+
@@ -214,21 +227,20 @@
-
-
-
-
+
-
-
+
+
+
+
-
-
+
+
@@ -236,7 +248,7 @@
-
+
@@ -273,13 +285,13 @@
-
-
-
+
-
+
+
+
@@ -299,7 +311,7 @@
-
+
@@ -309,13 +321,12 @@
+
+
+
+
+
-
-
-
-
-
-
@@ -341,12 +352,8 @@
-->
-
-
-
+
+
@@ -359,21 +366,20 @@
-
-
-
-
+
-
+
+
+
-
-
+
+
@@ -381,17 +387,12 @@
-
+
-
-
-
-
-
@@ -422,13 +423,13 @@
-
-
-
+
-
+
+
+
@@ -448,7 +449,7 @@
-
+
@@ -458,48 +459,45 @@
-
-
-
-
-
-
-
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
POINTS
+ AREA
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -510,10 +508,14 @@
NAME
POINTS
+ AREA
+
+
+
5
100
@@ -523,48 +525,62 @@
+ 1
true
8.0
5
5
- 4
+ 10
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
- distance
- population
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -574,8 +590,11 @@
-
+
+
+
+
@@ -585,7 +604,7 @@ and place into this template
- City
+ WarnGenLoc
States
County
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactStatements.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactStatements.vm
new file mode 100644
index 0000000000..47d0c6abcb
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactStatements.vm
@@ -0,0 +1,115 @@
+ ################################################################
+## IBW IMPACT STATEMENTS ##
+## FOR CR IMPACT BASED TOR/SVR INITIATIVE ##
+## CREATED BY PHIL KURIMSKI - WFO DTX ##
+## VERSION AWIPS II 1.0 -- 2-06-2013 OB13.2.1-5 ##
+## EDITED EVAN BOOKBINDER 2-25-13 FOR IBW 2013 ##
+## EDITED PHIL KURIMSKI 5-20-13 FOR UPDATED IMPACT STATEMENTS ##
+################################################################
+##
+################################################################
+## This file is meant to be parsed into the IBW templates
+## Changes to the IBW Impact Statements can be made to this
+## file without making changes to the main template
+################################################################
+##SET SOME INITIAL VARIABLES
+#set ($svrimpact = "")
+#set ($torimpact = "")
+################################################################
+## First create the Impact Statements for the SVR template
+################################################################
+###################################################
+## HANDLE WIND POSSIBILITIES ######################
+###################################################
+#set ($windImpact = "")
+#if(${windSpeed} == 60)
+#set ($windImpact = "EXPECT DAMAGE TO ROOFS...SIDING AND TREES.")
+#set ($windImpactComb = "EXPECT WIND DAMAGE TO ROOFS...SIDING AND TREES.")
+#end
+#if(${windSpeed} == 70)
+#set ($windImpact = "EXPECT CONSIDERABLE TREE DAMAGE. DAMAGE IS LIKELY TO MOBILE HOMES...ROOFS AND OUTBUILDINGS.")
+#set ($windImpactComb = "EXPECT CONSIDERABLE TREE DAMAGE. WIND DAMAGE IS ALSO LIKELY TO MOBILE HOMES...ROOFS AND OUTBUILDINGS.")
+#end
+#if(${windSpeed} == 80)
+#set ($windImpact = "MOBILE HOMES WILL BE HEAVILY DAMAGED. FLYING DEBRIS WILL BE DANGEROUS TO PEOPLE AND ANIMALS. EXPECT CONSIDERABLE DAMAGE TO ROOFS...WINDOWS AND VEHICLES. EXTENSIVE TREE DAMAGE AND POWER OUTAGES ARE LIKELY.")
+#end
+#if(${windSpeed} == 90)
+#set ($windImpact ="YOU ARE IN A LIFE-THREATENING SITUATION. MOBILE HOMES WILL BE HEAVILY DAMAGED OR DESTROYED. HOMES AND BUSINESSES WILL HAVE SUBSTANTIAL ROOF AND WINDOW DAMAGE. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. EXPECT EXTENSIVE TREE DAMAGE AND POWER OUTAGES.")
+#end
+#if(${windSpeed} == 100)
+#set ($windImpact ="YOU ARE IN A LIFE-THREATENING SITUATION. MOBILE HOMES WILL BE DESTROYED. EXPECT CONSIDERABLE DAMAGE TO HOMES AND BUSINESSES. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. EXPECT EXTENSIVE TREE DAMAGE AND POWER OUTAGES.")
+#end
+###################################################
+## HANDLE HAIL POSSIBILITIES ######################
+###################################################
+#set ($hailImpact = "")
+#if(${hailSize} < 1.50 && ${hailSize} >= 1)
+#set ($hailImpact = "DAMAGE TO VEHICLES IS EXPECTED.")
+#set ($hailImpactComb = "HAIL DAMAGE TO VEHICLES IS EXPECTED.")
+#end
+#if(${hailSize} >= 1.50 && ${hailSize} < 2.75)
+#set ($hailImpact = "PEOPLE AND ANIMALS OUTDOORS WILL BE INJURED. EXPECT DAMAGE TO ROOFS...SIDING...WINDOWS AND VEHICLES.")
+#set ($hailImpactComb = "PEOPLE AND ANIMALS OUTDOORS WILL BE INJURED. EXPECT HAIL DAMAGE TO ROOFS...SIDING...WINDOWS AND VEHICLES.")
+#end
+#if(${hailSize} >= 2.75)
+#set ($hailImpact = "PEOPLE AND ANIMALS OUTDOORS WILL BE SEVERELY INJURED. EXPECT SHATTERED WINDOWS...EXTENSIVE DAMAGE TO ROOFS...SIDING AND VEHICLES.")
+#end
+######################################################################
+## Setup wind/hail impact statement based on wind speed and hail size
+######################################################################
+#if (${hailSize} < 1 && ${windSpeed} < 58)
+#set ($svrimpact = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+#elseif(${hailSize} >= 1 && ${windSpeed} < 58)
+#set ($svrimpact = "${hailImpact}")
+#elseif(${hailSize} < 1 && ${windSpeed} >= 58)
+#set ($svrimpact = "${windImpact}")
+#elseif(${hailSize} >= 1 && ${windSpeed} < 80 && ${hailSize} < 2.75)
+#set ($svrimpact = "${hailImpactComb} ${windImpactComb}")
+#elseif(${hailSize} > 2.50 && ${windSpeed} < 80)
+#set ($svrimpact = "${hailImpact}")
+#elseif(${windSpeed} >= 80)
+#set ($svrimpact = "${windImpact}")
+#end
+################################################################
+## Now create the Impact Statements for the TOR template
+################################################################
+## The following is the base Tornado Impact Statement
+################################################################
+#set ($torimpact = "MOBILE HOMES WILL BE DAMAGED OR DESTROYED. DAMAGE TO ROOFS...WINDOWS AND VEHICLES WILL OCCUR. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. TREE DAMAGE IS LIKELY.")
+################################################################
+## IF A LANDSPOUT/VERY WEAK TORNADO IS SELECTED THE FOLLOWING
+## IMPACT STATEMENT WILL BE USED WITH TONED DOWN WORDING
+################################################################
+#if(${list.contains($bullets, "landspoutTornado")})
+#set ($torimpact = "SPORADIC DAMAGE TO MOBILE HOMES...ROOFS AND VEHICLES.")
+#end
+############################################################################
+## IF A SIGNIFICANT TORNADO IS SELECTED THE FOLLOWING IMPACT STATEMENT
+## WILL BE USED FOR HEIGHTENED AWARENESS OF THIS DANGEROUS SITUATION
+############################################################################
+#if(${list.contains($bullets, "significantTornado")})
+#set ($torimpact = "YOU ARE IN A LIFE THREATENING SITUATION. MOBILE HOMES WILL BE DESTROYED. CONSIDERABLE DAMAGE TO HOMES...BUSINESSES AND VEHICLES IS LIKELY AND COMPLETE DESTRUCTION IS POSSIBLE. FLYING DEBRIS WILL BE DEADLY TO PEOPLE AND ANIMALS. EXPECT TREES TO BE UPROOTED OR SNAPPED.")
+#end
+############################################################################
+## IF A TORNADO EMERGENCY IS SELECTED THE FOLLOWING IMPACT STATEMENT
+## WILL BE USED FOR HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION
+############################################################################
+#if(${list.contains($bullets, "torEmergency")})
+#set ($torimpact = "YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. COMPLETE DESTRUCTION OF NEIGHBORHOODS...BUSINESSES AND VEHICLES WILL OCCUR. FLYING DEBRIS WILL DEADLY TO PEOPLE AND ANIMALS.")
+#end
+############################################################################
+## Since the SVS template uses both the torimpact and svrimpact variables
+## we need to set the variable to null depending on which statement
+## you are updating determined by the phenomena variable
+############################################################################
+#if(${phenomena}=="SV")
+#set ($torimpact = "")
+#elseif(${phenomena}=="TO")
+#set ($svrimpact = "")
+#end
+############################################################################
+## End of File
+############################################################################
+## Make sure this file is parsed into the main IBW template in order to
+## generate the proper Impact Statements
+############################################################################
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.vm
index 4ca6ee4802..a62a306e89 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.vm
@@ -6,24 +6,32 @@
## VERSION AWIPS II 1.1 -- 2-29-2012 OB12.2.1-4 ##
## VERSION AWIPS II 1.2 -- 4-20-2012 ##
## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
+## VERSION AWIPS II 1.3 -- 2-04-2012 OB13.2.1-5 impact stmts ##
+## VERSION AWIPS II 1.4 -- Bookbinder 2/22/13 2013 IBW Changes##
+## VERSION AWIPS II 1.5 -- Kurimski 5/20/13 Addl IBW Changes ##
################################################################
-## ESTABLISH SOME INITIAL VARIABLES
-#set ($preAmble = "")
-#set ($hailSize = 0)
-#set ($reportType = "A TORNADO WAS REPORTED")
-#set ($pathcastLead = "THIS TORNADIC STORM")
-#set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
-#set ($torTag = "RADAR INDICATED")
-#set ($torThreat = "")
-#set ($pdstor = "")
-#set ($confirmed = "")
-#set ($torHazard = "POTENTIAL TORNADO")
-#set ($torGround = "ON THE GROUND")
-#set ($source = "RADAR INDICATED ROTATION.")
-#set ($extrasource = "")
-#set ($impact = "SIGNIFICANT HOUSE AND BUILDING DAMAGE POSSIBLE. MOBILE HOMES COMPLETELY DESTROYED IF HIT. SOME TREES UPROOTED OR SNAPPED. VEHICLES WILL LIKELY BE THROWN BY TORNADIC WINDS.")
+## Commented out Impact statements Feb 2013 and created file to
+## be parsed into the template called impactStatements.vm
+## Changes to the impact statements can be made to this file
+## instead of the template
+################################################################
+## ESTABLISH SOME INITIAL VARIABLES ############################
+################################################################
+#set($preAmble = "")
+#set($hailSize = 0)
+#set($reportType = "A TORNADO WAS REPORTED")
+#set($pathcastLead = "THIS TORNADIC STORM")
+#set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+#set($torTag = "RADAR INDICATED")
+#set($torThreat = "")
+#set($pdstor = "")
+#set($confirmed = "")
+#set($torHazard = "TORNADO")
+#set($torGround = "ON THE GROUND")
+#set($source = "RADAR INDICATED ROTATION.")
+#set($extraSource = "")
#if(${stormType} == "line")
- #set($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS REPORTED")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE REPORTED")
#set($pathcastLead = "THESE TORNADIC STORMS")
#set($moveLead = " DOPPLER RADAR SHOWED THESE STORMS MOVING")
#end
@@ -31,140 +39,146 @@
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
-#set ($windSpeed = 50)
-#set ($windImpact = "")
-#set ($extensive = "")
-#set ($windHazard = "")
-#set ($windTag = "<50MPH")
-#if(${list.contains($bullets, "60mphWind")})
- #set ($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
- #set ($windHazard = "60 MPH WIND GUSTS")
- #set ($windSpeed = 60)
- #set ($windTag = "60MPH")
- #set ($windImpact = "LARGE TREE LIMBS BROKEN OFF PARTIALLY BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
+#set($windSpeed = 50)
+#set($windImpact = "")
+#set($extensive = "")
+#set($windHazard = "")
+#set($windTag = "<50MPH")
+#if(${list.contains(${bullets}, "60mphWind")})
+ #set($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
+ #set($windHazard = "60 MPH WIND GUSTS")
+ #set($windSpeed = 60)
+ #set($windTag = "60MPH")
+## #set($windImpact = "LARGE TREE LIMBS BROKEN OFF PARTIALLY BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
#end
-#if(${list.contains($bullets, "70mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
- #set ($windHazard = "70 MPH WIND GUSTS")
- #set ($windSpeed = 70)
- #set ($windTag = "70MPH")
- #set ($windImpact = "TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
+#if(${list.contains(${bullets}, "70mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
+ #set($windHazard = "70 MPH WIND GUSTS")
+ #set($windSpeed = 70)
+ #set($windTag = "70MPH")
+## #set($windImpact = "TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
#end
-#if(${list.contains($bullets, "80mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
- #set ($windHazard = "80 MPH WIND GUSTS")
- #set ($windSpeed = 80)
- #set ($windTag = "80MPH")
- #set ($extensive = "EXTENSIVE ")
- #set ($windImpact = "TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
+#if(${list.contains(${bullets}, "80mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
+ #set($windHazard = "80 MPH WIND GUSTS")
+ #set($windSpeed = 80)
+ #set($windTag = "80MPH")
+ #set($extensive = "EXTENSIVE ")
+## #set($windImpact = "TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
#end
-#if(${list.contains($bullets, "90mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
- #set ($windHazard = "90 MPH WIND GUSTS")
- #set ($windSpeed = 90)
- #set ($windTag = "90MPH")
- #set ($extensive = "EXTENSIVE ")
- #set ($windImpact ="TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
+#if(${list.contains(${bullets}, "90mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
+ #set($windHazard = "90 MPH WIND GUSTS")
+ #set($windSpeed = 90)
+ #set($windTag = "90MPH")
+ #set($extensive = "EXTENSIVE ")
+## #set($windImpact ="TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
#end
-#if(${list.contains($bullets, "100mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
- #set ($windHazard = "100 MPH WIND GUSTS")
- #set ($windSpeed = 100)
- #set ($windTag = "100MPH")
- #set ($extensive = "EXTENSIVE ")
- #set ($windImpact ="TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
+#if(${list.contains(${bullets}, "100mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
+ #set($windHazard = "100 MPH WIND GUSTS")
+ #set($windSpeed = 100)
+ #set($windTag = "100MPH")
+ #set($extensive = "EXTENSIVE ")
+## #set($windImpact ="TREES TO BE UPROOTED BLOCKING ROADS...DAMAGING BUILDINGS...HOMES AND DOWNING POWER LINES.")
#end
#######################################
## HANDLE HAIL POSSIBILITIES ##########
#######################################
-#set ($hailTag = "1.75")
-#set ($hailHazard = "GOLF BALL SIZE HAIL")
-#if(${list.contains($bullets, "nosevereHail")})
- #set ($hailThreat = "")
- #set ($hailSize = 0.75)
- #set ($hailTag = "<.75IN")
- #set ($hailHazard = "SMALL HAIL")
+#set($hailTag = "<.75")
+#set($hailHazard = "SMALL HAIL")
+#if(${list.contains(${bullets}, "noHail")})
+ #set($hailThreat = "")
+ #set($hailSize = 0)
+ #set($hailTag = "0.00IN")
+ #set($hailHazard = "NO HAIL")
#end
-#if(${list.contains($bullets, "pennyHail")})
- #set ($hailThreat = "PENNY SIZE HAIL")
- #set ($hailSize = 0.75)
- #set ($hailTag = "0.75IN")
- #set ($hailHazard = "PENNY SIZE HAIL")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailThreat = "")
+ #set($hailSize = 0.75)
+ #set($hailTag = "<.75IN")
+ #set($hailHazard = "SMALL HAIL")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailThreat = "NICKEL SIZE HAIL")
- #set ($hailSize = 0.88)
- #set ($hailTag = "0.88IN")
- #set ($hailHazard = "NICKEL SIZE HAIL")
+#if(${list.contains(${bullets}, "pennyHail")})
+ #set($hailThreat = "PENNY SIZE HAIL")
+ #set($hailSize = 0.75)
+ #set($hailTag = "0.75IN")
+ #set($hailHazard = "PENNY SIZE HAIL")
#end
-#if(${list.contains($bullets, "quarterHail")})
- #set ($hailThreat = "QUARTER SIZE HAIL")
- #set ($hailSize = 1.00)
- #set ($hailTag = "1.00IN")
- #set ($hailHazard = "QUARTER SIZE HAIL")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailThreat = "NICKEL SIZE HAIL")
+ #set($hailSize = 0.88)
+ #set($hailTag = "0.88IN")
+ #set($hailHazard = "NICKEL SIZE HAIL")
#end
-#if(${list.contains($bullets, "halfdollarHail")})
- #set ($hailThreat = "HALF DOLLAR SIZE HAIL")
- #set ($hailSize = 1.25)
- #set ($hailTag = "1.25IN")
- #set ($hailHazard = "HALF DOLLAR SIZE HAIL")
+#if(${list.contains(${bullets}, "quarterHail")})
+ #set($hailThreat = "QUARTER SIZE HAIL")
+ #set($hailSize = 1.00)
+ #set($hailTag = "1.00IN")
+ #set($hailHazard = "QUARTER SIZE HAIL")
#end
-#if(${list.contains($bullets, "pingpongHail")})
- #set ($hailThreat = "PING PONG BALL SIZE")
- #set ($hailSize = 1.50)
- #set ($hailTag = "1.50IN")
- #set ($hailHazard = "PING PONG BALL SIZE HAIL")
+#if(${list.contains(${bullets}, "halfdollarHail")})
+ #set($hailThreat = "HALF DOLLAR SIZE HAIL")
+ #set($hailSize = 1.25)
+ #set($hailTag = "1.25IN")
+ #set($hailHazard = "HALF DOLLAR SIZE HAIL")
#end
-#if(${list.contains($bullets, "golfballHail")})
- #set ($hailThreat = "LARGE DAMAGING HAIL UP TO GOLF BALL SIZE")
- #set ($hailSize = 1.75)
- #set ($hailTag = "1.75IN")
- #set ($hailHazard = "GOLF BALL SIZE HAIL")
+#if(${list.contains(${bullets}, "pingpongHail")})
+ #set($hailThreat = "PING PONG BALL SIZE")
+ #set($hailSize = 1.50)
+ #set($hailTag = "1.50IN")
+ #set($hailHazard = "PING PONG BALL SIZE HAIL")
#end
-#if(${list.contains($bullets, "twoinchHail")})
- #set ($hailThreat = "LARGE DAMAGING HAIL UP TO TWO INCHES IN DIAMETER")
- #set ($hailSize = 2.00)
- #set ($hailTag = "2.00IN")
- #set ($hailHazard = "HAIL UP TO TWO INCHES IN DIAMETER")
+#if(${list.contains(${bullets}, "golfballHail")})
+ #set($hailThreat = "LARGE DAMAGING HAIL UP TO GOLF BALL SIZE")
+ #set($hailSize = 1.75)
+ #set($hailTag = "1.75IN")
+ #set($hailHazard = "GOLF BALL SIZE HAIL")
#end
-#if(${list.contains($bullets, "tennisBallHail")})
- #set ($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO TENNIS BALL SIZE")
- #set ($hailSize = 2.50)
- #set ($hailTag = "2.50IN")
- #set ($hailHazard = "TENNIS BALL SIZE HAIL")
+#if(${list.contains(${bullets}, "twoinchHail")})
+ #set($hailThreat = "LARGE DAMAGING HAIL UP TO TWO INCHES IN DIAMETER")
+ #set($hailSize = 2.00)
+ #set($hailTag = "2.00IN")
+ #set($hailHazard = "HAIL UP TO TWO INCHES IN DIAMETER")
#end
-#if(${list.contains($bullets, "baseballHail")})
- #set ($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO BASEBALL SIZE")
- #set ($hailSize = 2.75)
- #set ($hailTag = "2.75IN")
- #set ($hailHazard = "BASEBALL SIZE HAIL")
+#if(${list.contains(${bullets}, "tennisBallHail")})
+ #set($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO TENNIS BALL SIZE")
+ #set($hailSize = 2.50)
+ #set($hailTag = "2.50IN")
+ #set($hailHazard = "TENNIS BALL SIZE HAIL")
#end
-#if(${list.contains($bullets, "threeinchHail")})
- #set ($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO THREE INCHES IN DIAMETER")
- #set ($hailSize = 3.00)
- #set ($hailTag = "3.00IN")
- #set ($hailHazard = "HAIL UP TO THREE INCHES IN DIAMETER")
+#if(${list.contains(${bullets}, "baseballHail")})
+ #set($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO BASEBALL SIZE")
+ #set($hailSize = 2.75)
+ #set($hailTag = "2.75IN")
+ #set($hailHazard = "BASEBALL SIZE HAIL")
#end
-#if(${list.contains($bullets, "grapefruitHail")})
- #set ($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO GRAPEFRUIT SIZE")
- #set ($hailSize = 4.00)
- #set ($hailTag = "4.00IN")
- #set ($hailHazard = "GRAPEFRUIT SIZE HAIL")
+#if(${list.contains(${bullets}, "threeinchHail")})
+ #set($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO THREE INCHES IN DIAMETER")
+ #set($hailSize = 3.00)
+ #set($hailTag = "3.00IN")
+ #set($hailHazard = "HAIL UP TO THREE INCHES IN DIAMETER")
#end
-#if(${list.contains($bullets, "softballHail")})
- #set ($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO SOFTBALL SIZE")
- #set ($hailSize = 4.25)
- #set ($hailTag = "4.25IN")
- #set ($hailHazard = "SOFTBALL SIZE HAIL")
+#if(${list.contains(${bullets}, "grapefruitHail")})
+ #set($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO GRAPEFRUIT SIZE")
+ #set($hailSize = 4.00)
+ #set($hailTag = "4.00IN")
+ #set($hailHazard = "GRAPEFRUIT SIZE HAIL")
+#end
+#if(${list.contains(${bullets}, "softballHail")})
+ #set($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO SOFTBALL SIZE")
+ #set($hailSize = 4.25)
+ #set($hailTag = "4.25IN")
+ #set($hailHazard = "SOFTBALL SIZE HAIL")
#end
#if(${hailSize} >= 1.50)
#if(${stormType} == "line")
- #set ($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THESE STORMS.")
+ #set($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THESE STORMS.")
#else
- #set ($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THIS STORM.")
+ #set($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THIS STORM.")
#end
#else
- #set ($extraThreat = "")
+ #set($extraThreat = "")
#end
${WMOId} ${vtecOffice} 000000 ${BBBId}
TOR${siteId}
@@ -186,6 +200,15 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
+##########################################################################
+### TORNADO EMERGENCY as a Headline...can be implemented at a later date #
+##########################################################################
+#*
+#if(${list.contains(${bullets}, "torEmergency")})
+...TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...
+
+#end
+*#
#headline(${officeLoc}, ${backupSite})
##################
@@ -207,176 +230,181 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#if(${list.contains($bullets, "doppler")})
+#if(${list.contains(${bullets}, "doppler")})
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO WAS LOCATED")
- #set ($pathcastLead = "THESE DANGEROUS STORMS")
+ #set($reportType = "SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
#else
- #set ($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO WAS LOCATED")
- #set ($pathcastLead = "THIS DANGEROUS STORM")
+ #set($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO WAS LOCATED")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
#end
- #set ($moveLead = "..AND MOVING")
- #set ($torGround = "DEVELOPING")
+ #set($moveLead = "..AND MOVING")
+ #set($torGround = "DEVELOPING")
#end
-#if(${list.contains($bullets, "dopplerSquall")})
- #set ($reportType = "A SEVERE SQUALL LINE CAPABLE OF PRODUCING BOTH TORNADOES AND EXTENSIVE STRAIGHT LINE WIND DAMAGE WAS LOCATED")
- #set ($pathcastLead = "THESE DANGEROUS STORMS")
- #set ($moveLead = "..AND MOVING")
- #set ($torGround = "DEVELOPING")
+#if(${list.contains(${bullets}, "dopplerSquall")})
+ #set($reportType = "SEVERE THUNDERSTORMS CAPABLE OF PRODUCING BOTH TORNADOES AND EXTENSIVE STRAIGHT LINE WIND DAMAGE WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #set($moveLead = "..AND MOVING")
+ #set($torGround = "DEVELOPING")
#end
-#if(${list.contains($bullets, "confirmedDoppler")})
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "RADAR CONFIRMED TORNADO.")
- #set ($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
+#if(${list.contains(${bullets}, "confirmedDoppler")})
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "RADAR CONFIRMED TORNADO.")
+ #set($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS LOCATED")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($reportType = "A TORNADO PRODUCING STORM WAS LOCATED")
- #set ($pathcastLead = "THIS TORNADIC STORM")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($reportType = "A TORNADO PRODUCING STORM WAS LOCATED")
+ #set($pathcastLead = "THIS TORNADIC STORM")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
#end
#*
-#if(${list.contains($bullets, "confirmedLarge")})
- #set ($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
+#if(${list.contains(${bullets}, "confirmedLarge")})
+ #set($reportType = "DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
+ #set($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
#end
*#
-#if(${list.contains($bullets, "spotter")})
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
+#if(${list.contains(${bullets}, "spotter")})
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS LOCATED")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($reportType = "A CONFIRMED TORNADO WAS LOCATED")
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($reportType = "A CONFIRMED TORNADO WAS LOCATED")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
+ #set($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "LAW ENFORCEMENT CONFIRMED TORNADO.")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "LAW ENFORCEMENT CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS LOCATED")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($reportType = "A CONFIRMED TORNADO WAS LOCATED")
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($reportType = "A CONFIRMED TORNADO WAS LOCATED")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
+ #set($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "EMERGENCY MANAGEMENT CONFIRMED TORNADO.")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "EMERGENCY MANAGEMENT CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS LOCATED")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($reportType = "A CONFIRMED TORNADO WAS LOCATED")
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($reportType = "A CONFIRMED TORNADO WAS LOCATED")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
+ #set($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
#end
-#if(${list.contains($bullets, "public")})
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($confirmed = "CONFIRMED ")
- #set ($source = "PUBLIC CONFIRMED TORNADO.")
+#if(${list.contains(${bullets}, "public")})
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($confirmed = "CONFIRMED ")
+ #set($source = "PUBLIC CONFIRMED TORNADO.")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF TORNADO PRODUCING STORMS WAS LOCATED")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($reportType = "TORNADO PRODUCING STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($reportType = "A CONFIRMED TORNADO WAS LOCATED")
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($reportType = "A CONFIRMED TORNADO WAS LOCATED")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
+ #set($preAmble = "TO REPEAT...A TORNADO IS ON THE GROUND. ")
#end
-#if(${list.contains($bullets, "spotterFunnelCloud")})
- ##set ($reportType = "TRAINED WEATHER SPOTTERS REPORTED A FUNNEL CLOUD")
- #set ($source = "WEATHER SPOTTERS REPORTED FUNNEL CLOUD.")
- #set ($torGround = "DEVELOPING")
+#if(${list.contains(${bullets}, "spotterFunnelCloud")})
+ ##set($reportType = "TRAINED WEATHER SPOTTERS REPORTED A FUNNEL CLOUD")
+ #set($source = "WEATHER SPOTTERS REPORTED FUNNEL CLOUD.")
+ #set($torGround = "DEVELOPING")
#if(${stormType} == "line")
- #set ($reportType = "A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO WAS LOCATED")
- #set ($pathcastLead = "THESE DANGEROUS STORMS")
- #set ($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THESE DANGEROUS STORMS MOVING")
+ #set($reportType = "SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #set($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THESE DANGEROUS STORMS MOVING")
#else
- #set ($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO WAS LOCATED")
- #set ($pathcastLead = "THIS DANGEROUS STORM")
- #set ($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THIS DANGEROUS STORM MOVING")
+ #set($reportType = "A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO WAS LOCATED")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
+ #set($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THIS DANGEROUS STORM MOVING")
#end
#end
############################################################################
-## IF A SIGNIFICANT TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN
+## IF A LANDSPOUT TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE THE
+## TORNADO HAZARD VARIABLE
+############################################################################
+#if(${list.contains(${bullets}, "landspoutTornado")})
+ #set($torHazard = "TORNADO")
+#end
+############################################################################
+## IF A CONSIDERABLE TORNADO IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN
## VARIABLES TO HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION
############################################################################
-#if(${list.contains($bullets, "significantTornado")})
- #set ($reportType = "A ${confirmed}LARGE AND EXTREMELY DANGEROUS TORNADO")
- #set ($torHazard = "DAMAGING TORNADO")
- #set ($torThreat = "TORNADO DAMAGE THREAT...SIGNIFICANT ")
- #set ($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
- #set ($impact = "MAJOR HOUSE AND BUILDING DAMAGE LIKELY AND COMPLETE DESTRUCTION POSSIBLE. NUMEROUS TREES SNAPPED. MAJOR POWER OUTAGES IN PATH OF TORNADO HIGHLY LIKELY. SOME ROADS POSSIBLY BLOCKED BY TORNADO DEBRIS. COMPLETE DESTRUCTION OF VEHICLES LIKELY.")
+#if(${list.contains(${bullets}, "considerableTornado")})
+ #set($reportType = "A ${confirmed}LARGE AND EXTREMELY DANGEROUS TORNADO WAS LOCATED")
+ #set($torHazard = "DAMAGING TORNADO")
+ #set($torThreat = "TORNADO DAMAGE THREAT...CONSIDERABLE ")
+ #set($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ${torGround}. TO PROTECT YOUR LIFE...")
+ #set($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ${torGround}. TO PROTECT YOUR LIFE...")
#end
############################################################################
## IF A TORNADO EMERGENCY IS SELECTED THE FOLLOWING WILL OVERRIDE CERTAIN
## VARIABLES TO HEIGHTED AWARENESS OF THIS DANGEROUS SITUATION
############################################################################
-#if(${list.contains($bullets, "torEmergency")})
- #set ($reportType = "TORNADO EMERGENCY FOR !** LOCATION **!. A CONFIRMED LARGE AND DESTRUCTIVE TORNADO")
- #set ($ctaSelected = "YES")
- #set ($torTag = "OBSERVED")
- #set ($torHazard = "DEADLY TORNADO")
- #set ($torThreat = "TORNADO DAMAGE THREAT...CATASTROPHIC ")
- #set ($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
- #set ($impact = "THIS IS A LIFE THREATENING SITUATION. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. COMPLETE DESTRUCTION OF ENTIRE NEIGHBORHOODS IS LIKELY. MANY WELL BUILT HOMES AND BUSINESSES WILL BE COMPLETELY SWEPT FROM THEIR FOUNDATIONS. DEBRIS WILL BLOCK MOST ROADWAYS. MASS DEVASTATION IS HIGHLY LIKELY MAKING THE AREA UNRECOGNIZABLE TO SURVIVORS.")
+#if(${list.contains(${bullets}, "torEmergency")})
+ #set($reportType = "TORNADO EMERGENCY FOR !** LOCATION **!. A CONFIRMED LARGE AND DESTRUCTIVE TORNADO WAS OBSERVED")
+ #set($ctaSelected = "YES")
+ #set($torTag = "OBSERVED")
+ #set($torHazard = "DEADLY TORNADO")
+ #set($torThreat = "TORNADO DAMAGE THREAT...CATASTROPHIC ")
+ #set($pdstor = "THIS IS A PARTICULARLY DANGEROUS SITUATION.")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #if(${list.contains($bullets, "doppler")}||${list.contains($bullets, "dopplerSquall")})
- #set ($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
+ #if(${list.contains(${bullets}, "doppler")}||${list.contains(${bullets}, "dopplerSquall")})
+ #set($source = "WEATHER SPOTTERS CONFIRMED TORNADO.")
#end
- #set ($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
+ #set($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
#end
####################################################
@@ -386,33 +414,28 @@ THIS IS A TEST MESSAGE. ##
###### Add damage information to the source section
###### If Additional Information is selected
######################################################
-#foreach ($bullet in $bullets)
-#if($bullet.startsWith("extraReport"))
- #set ($extrasource = " !**ENTER TYPE OF DAMAGE**! WAS REPORTED !** ENTER LOCATION **!.")
-#end
-#end
-#if(${list.contains($bullets, "extraReportTornado")})
- #set ($extrasource = " !**ENTER TYPE OF TORNADO DAMAGE**! WAS REPORTED !** ENTER LOCATION **!.")
+#if(${list.contains(${bullets}, "extraReportTornado")})
+ #set($extraSource = " AT !**enter time...enter tornado/report damage**! WAS REPORTED !**enter location**!.")
#end
##########################################################
## Check to see if wind is selected for the hazard phrase
## and make sure hail is at least 1 inch
##########################################################
-#if (${windSpeed} >= 60 && ${hailSize} >= 1)
- #set ($hazard = "${torHazard}...${hailHazard} AND ${windHazard}")
-#elseif (${windSpeed} >= 60 && ${hailSize} < 1)
- #set ($hazard = "${torHazard} AND ${windHazard}")
-#elseif (${windSpeed} < 60 && ${hailSize} >= 1)
- #set ($hazard = "${torHazard} AND ${hailHazard}")
+#if(${windSpeed} >= 58 && ${hailSize} >= 1)
+ #set($hazard = "${torHazard}...${hailHazard} AND ${windHazard}.")
+#elseif(${windSpeed} >= 58 && ${hailSize} < 1)
+ #set($hazard = "${torHazard} AND ${windHazard}.")
+#elseif(${windSpeed} < 58 && ${hailSize} >= 1)
+ #set($hazard = "${torHazard} AND ${hailHazard}.")
#else
- #set ($hazard = "${torHazard}")
+ #set($hazard = "${torHazard}.")
#end
#########################################################
-## If a significant or catastrophic tornado are selected
+## If a considerable or catastrophic tornado are selected
## do not include any wind or hail informadion
#########################################################
-#if(${list.contains($bullets, "significantTornado")} || ${list.contains($bullets, "torEmergency")})
- #set ($hazard = "${torHazard}")
+#if(${list.contains(${bullets}, "considerableTornado")} || ${list.contains(${bullets}, "torEmergency")})
+ #set($hazard = "${torHazard}.")
#end
######################################################
###### Storm current location description ##########
@@ -423,7 +446,11 @@ THIS IS A TEST MESSAGE. ##
THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${reportType} ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", false)
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#end
#if($movementSpeed < 3 || ${stationary})
#if(${stormType} == "line")
...AND ARE NEARLY STATIONARY.
@@ -434,85 +461,46 @@ THIS IS A TEST MESSAGE. ##
...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
#end
+##########################################################################
+## Command to parse the impact statements into the template
+##########################################################################
+#parse("impactStatements.vm")
##########################################################################
## Section to include the dangerous storm wording as well as the hazard ##
##########################################################################
-${pdstor}
-HAZARD...${hazard}.
+#wrapText("${pdstor}" 2 2)
-SOURCE...${source}${extrasource}
+#wrapText("HAZARD...${hazard}" 2 11)
+
+#wrapText("SOURCE...${source}${extraSource}" 2 11)
+
+#wrapText("IMPACT...${torimpact}" 2 11)
-IMPACT...${impact}
#####################################################################
### TORNADO EMERGENCY PER NWS 10-511 DIRECTIVE GOES WITH 3RD BULLET #
#####################################################################
-#*
-#if(${list.contains($bullets, "torEmergency")})
-THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...TAKE IMMEDIATE TORNADO PRECAUTIONS NOW.
-
-#end
-*#
-############################
-### HAIL THREAT AS WELL? ###
-############################
-#*
-#if (${extraThreat} != "")
-${extraThreat}
-
-#end
-*#
-############################
-### ADDITIONAL REPORTS ####
-############################
-#if(${list.contains($bullets, "extraReportTornado")})
-AT !**ENTER TIME, TORNADO/DAMAGE INFO**! WAS REPORTED !** ENTER LOCATION **!.
-
-#end
-#if(${list.contains($bullets, "extraReportHail")})
-#if(${stormType} == "line")
-IN ADDITION...AT !**ENTER TIME, HAIL SIZE**! WAS REPORTED !** ENTER LOCATION **! WITH THESE STORMS.
-
-#else
-IN ADDITION...AT !**ENTER TIME, HAIL SIZE**! WAS REPORTED !** ENTER LOCATION **! WITH THIS STORM.
-
-#end
-#end
-#if(${list.contains($bullets, "extraReportWind")})
-#if(${stormType} == "line")
-IN ADDITION...AT !**ENTER TIME, WIND INFO**! WAS REPORTED !** ENTER LOCATION **! WITH THESE STORMS.
-
-#else
-IN ADDITION...AT !**ENTER TIME, WIND INFO**! WAS REPORTED !** ENTER LOCATION **! WITH THIS STORM.
-
-#end
-#end
-#if(${list.contains($bullets, "extraReportHailWind")})
-#if(${stormType} == "line")
-IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATION **! WITH THESE STORMS.
-
-#else
-IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATION **! WITH THIS STORM.
-
-#end
-#end
+###if(${list.contains(${bullets}, "torEmergency")})
+###wrapText("THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...TAKE IMMEDIATE TORNADO PRECAUTIONS NOW." 2 2)
+##
+###end
###################################################
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
#if(${stormType} == "line")
-#set ($otherLead = "THESE TORNADIC STORMS")
+#set($otherLead = "THESE TORNADIC STORMS")
#else
-#set ($otherLead = "THIS TORNADIC THUNDERSTORM")
+#set($otherLead = "THIS TORNADIC THUNDERSTORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -531,7 +519,7 @@ THIS IS A TEST MESSAGE. ##
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS AND POTENTIALLY LIFE THREATENING WEATHER CONDITIONS. SEEK SHELTER NOW.
@@ -541,17 +529,19 @@ EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF THIS STORM AND
#end
#end
+## parse file command here is to pull in mile marker info
+## #parse("pointMarkers.vm")
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
#####################
## CALL TO ACTIONS ##
#####################
-###Check to see if we've selected any calls to action. In our .cfg file
+###Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -560,8 +550,8 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "torEmergencyCTA")} || ${list.contains($bullets, "torEmergency")})
-#if(${list.contains($bullets, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergency")})
THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. DO NOT DELAY...SEEK SHELTER NOW! IF NO UNDERGROUND SHELTER IS AVAILABLE SEEK SHELTER IN AN INTERIOR ROOM OF THE LOWEST LEVEL OF A STRUCTURE...OR IF TIME ALLOWS...CONSIDER MOVING TO AN UNDERGROUND SHELTER ELSEWHERE. MOBILE HOMES AND OUTBUILDINGS WILL OFFER NO SHELTER FROM THIS TORNADO.
#else
@@ -569,47 +559,47 @@ THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COU
#end
#end
-#if(${list.contains($bullets, "replacesSVRCTA")})
+#if(${list.contains(${bullets}, "replacesSVRCTA")})
THIS TORNADO WARNING REPLACES THE SEVERE THUNDERSTORM WARNING ISSUED FOR THE SAME AREA.
#end
-#if(${list.contains($bullets, "defaultMobileCTA")})
+#if(${list.contains(${bullets}, "defaultMobileCTA")})
${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME...A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "defaultUrbanCTA")})
+#if(${list.contains(${bullets}, "defaultUrbanCTA")})
${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "motoristsCTA")})
+#if(${list.contains(${bullets}, "motoristsCTA")})
MOTORISTS SHOULD NOT TAKE SHELTER UNDER HIGHWAY OVERPASSES. IF YOU CANNOT SAFELY DRIVE AWAY FROM THE TORNADO...AS A LAST RESORT...EITHER PARK YOUR VEHICLE AND STAY PUT...OR ABANDON YOUR VEHICLE AND LIE DOWN IN A LOW LYING AREA AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "rainWrappedCTA")})
+#if(${list.contains(${bullets}, "rainWrappedCTA")})
HEAVY RAINFALL MAY HIDE THIS TORNADO. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
-#if(${list.contains($bullets, "largeTORCTA")})
+#if(${list.contains(${bullets}, "largeTORCTA")})
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
#end
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL SEND YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
##
-#if(${list.contains($bullets, "squallCTA")} && ${stormType} == "line")
+#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")
THIS LINE OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING.
-#elseif(${list.contains($bullets, "squallCTA")})
+#elseif(${list.contains(${bullets}, "squallCTA")})
THIS CLUSTER OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF A BUILDING.
#end
-#if(${list.contains($bullets, "waterCTA")})
+#if(${list.contains(${bullets}, "waterCTA")})
IF ON OR NEAR !**NAME OF WATER BODY **!...GET AWAY FROM THE WATER AND MOVE TO SAFE SHELTER IMMEDIATELY. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. SEVERE THUNDERSTORMS CAN PRODUCE LARGE CAPSIZING WAVES...EVEN ON SMALL BODIES OF WATER. MOVE INTO DOCK AND SEEK SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
@@ -626,20 +616,8 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
-###########################################################################
-## UNCOMMENT 2 LINES BELOW IF YOU ARE PARTICIPATING IN THE HAIL TAG TESTBED
-##
-##HAIL ${hailTag}
-###########################################################################
-###########################################################################
###########################################################################
## Tornado/Hail/Wind Tags used by CR for the impact based Warning Experiment.
###########################################################################
@@ -654,12 +632,4 @@ ${torThreat}
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-##################################################################
-## If you decide to pull the user name from a file use this coding
-##################################################################
-##parse("name.vm")
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.xml
index 6abcac7af5..b800109806 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/impactTornadoWarning.xml
@@ -5,6 +5,10 @@
PHIL KURIMSKI 4-06-2012
MIKE REGA 5-10-2012 DR 14525 added timeZoneField
DR 14691 added feAreaField
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Added new areaSource objects
+ Phil Kurimski 02-04-2013 OB13.2.1-5 Changed Sig Tor to Considerable
+ Phil Kurimski 05-20-2013 Added selection for very weak tornadoes and landspouts
-->
@@ -56,8 +60,12 @@
-
-
+
+
+
+
+
+
@@ -83,12 +91,8 @@
-->
-
-
-
+
+
@@ -101,22 +105,19 @@
-
-
-
-
+
-
+
-
-
+
+
@@ -130,13 +131,12 @@
+
+
+
+
+
-
-
-
-
-
-
@@ -161,12 +161,8 @@
-->
-
-
-
+
+
@@ -179,22 +175,21 @@
-
-
-
-
+
-
+
+
+
-
-
+
+
@@ -208,49 +203,45 @@
-
-
-
-
-
-
-
-
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -259,11 +250,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -273,47 +268,62 @@
+ 1
true
8.0
5
5
- 4
+ 10
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -323,8 +333,11 @@
-
+
+
+
+
@@ -334,7 +347,7 @@ and place into this template
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.vm
index cb271aa650..8d286c26ba 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.vm
@@ -9,18 +9,20 @@
## Added coding for no headline in Version 1.4 ##
## VERSION AWIPS II 1.5 -- MAR 2 2012 OB12.2.1-4 ##
## Added coding for dense fog in Version 1.5 ##
-## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
+## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND) ##
+## Phil Kurimski -- SEP 10 2012 OB12.9.1-12 ##
+## Phil Kurimski FEB 07 2013 OB13.2.1-5 ##
#####################################################
## Set the visibility variable to be used for dense fog
## This variable can be changed by the local office and will
## set the visibility in the 3rd bullet and dense fog CTA
#####################################################
-#set ($visibility = "1 MILE")
+#set($visibility = "1 MILE")
#####################################################
## Set null variables used in the template
#####################################################
-#set ($capable = "")
-#set ($hailType = "")
+#set($capable = "")
+#set($hailType = "")
#if(${productClass}=="O")
#set($productClass = "X")
#end
@@ -55,38 +57,38 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## Removed line selections and determined line based on Track Type in GUI.
#######################################################################
## Assume head1 is selected.
-#set ($headerType = "STRONG THUNDERSTORM")
-#set ($eventType = "THUNDERSTORM")
-#set ($reportLocation = "THIS THUNDERSTORM WAS LOCATED")
+#set($headerType = "STRONG THUNDERSTORM")
+#set($eventType = "THUNDERSTORM")
+#set($reportLocation = "THIS THUNDERSTORM WAS LOCATED")
## Do not add any spaces or tabs to the next line
## Otherwise the headline in the product will have extra spaces
#if(${stormType} == "line")
- #set ($reportLocation = "THESE THUNDERSTORMS WERE LOCATED")
+ #set($reportLocation = "THESE THUNDERSTORMS WERE LOCATED")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($headerType = "SHOWER")
- #set ($eventType = "SHOWER")
- #set ($reportLocation = "THIS SHOWER WAS LOCATED")
+#if(${list.contains(${bullets}, "shower")})
+ #set($headerType = "SHOWER")
+ #set($eventType = "SHOWER")
+ #set($reportLocation = "THIS SHOWER WAS LOCATED")
## Do not add any spaces or tabs to the next line
## Otherwise the headline in the product will have extra spaces
#if(${stormType} == "line")
- #set ($reportLocation = "THESE SHOWERS WERE LOCATED")
+ #set($reportLocation = "THESE SHOWERS WERE LOCATED")
#end
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($headerType = "CLOUD")
- #set ($eventType = "CLOUD")
- #set ($reportLocation = "THIS CLOUD FEATURE WAS LOCATED")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($headerType = "CLOUD")
+ #set($eventType = "CLOUD")
+ #set($reportLocation = "THIS CLOUD FEATURE WAS LOCATED")
#end
-#if(${list.contains($bullets, "front")})
- #set ($headerType = "FRONT")
- #set ($eventType = "FRONT")
- #set ($reportLocation = "THIS FRONT WAS LOCATED")
+#if(${list.contains(${bullets}, "front")})
+ #set($headerType = "FRONT")
+ #set($eventType = "FRONT")
+ #set($reportLocation = "THIS FRONT WAS LOCATED")
#end
-#if(${list.contains($bullets, "fog")})
- #set ($headerType = "DENSE FOG")
- #set ($eventType = "DENSE FOG")
- #set ($reportLocation = "THE DENSE FOG WAS LOCATED")
+#if(${list.contains(${bullets}, "fog")})
+ #set($headerType = "DENSE FOG")
+ #set($eventType = "DENSE FOG")
+ #set($reportLocation = "THE DENSE FOG WAS LOCATED")
#end
#######################################################################
## Section to create line wording based on track type.
@@ -123,9 +125,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${eventType} == "CLOUD")
#set($pathheader = "THE STRONG WINDS")
#end
-#set ($threatType = "WINDS UP TO 33 KNOTS")
- #set ($headerType1 = "...STRONG WINDS EXPECTED...")
-#if(${list.contains($bullets, "approachHead")})
+#set($threatType = "WINDS UP TO 33 KNOTS")
+ #set($headerType1 = "...STRONG WINDS EXPECTED...")
+#if(${list.contains(${bullets}, "approachHead")})
#set($headerType1 = "...${stormline} APPROACHING THE WATERS...")
#*
#if(${eventType} == "THUNDERSTORM")
@@ -135,10 +137,10 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
*#
#end
-#if(${list.contains($bullets, "overHead")})
+#if(${list.contains(${bullets}, "overHead")})
#set($headerType1 = "...${stormline} OVER THE WATERS...")
#*
-#if (${eventType} == "THUNDERSTORM")
+#if(${eventType} == "THUNDERSTORM")
#set($headerType1 = "...${stormline} OVER THE WATERS...")
#else
#set($headerType1 = "...STRONG WINDS EXPECTED...")
@@ -148,13 +150,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#######################################################################
## Added Hail Section
#######################################################################
-#if(${list.contains($bullets, "smallHail")})
- #set ($hailType = " AND SMALL HAIL")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailType = " AND SMALL HAIL")
#end
#######################################################################
## Section to produce areas affected by statement
#######################################################################
-#if(${list.contains($bullets, "noHead")})
+#if(${list.contains(${bullets}, "noHead")})
A MARINE WEATHER STATEMENT HAS BEEN ISSUED FOR THE FOLLOWING AREAS...
#else
${headerType1}
@@ -162,18 +164,34 @@ ${headerType1}
THE AREAS AFFECTED INCLUDE...
#end
#######################################################################
-## Set the fipsstring variable to null for marine zone combinations
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
#######################################################################
-##set ($fipsstring = "")
#foreach (${area} in ${areas})
- ${area.name}...
+#wrapText("${area.name}..." 2 2)
+#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
#######################################################################
## The following code will create a string of marine zone fips codes
## which will be important in combining marine zones
#######################################################################
-##set ($fipsstring = $fipsstring + $area.fips + "-")
+#######################################################################
+## Set the fipsstring variable to null for marine zone combinations
+#######################################################################
+#set($fipsstring = "")
+#foreach (${area} in ${areas})
+#set($fipsstring = $fipsstring + $area.fips + "-")
#end
-
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+## Uncomment the parse command if you are combining your marine zones
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
#*
###################################################################################################
## The following code is an example of how to combine marine zones for 3 continuous marine zones
@@ -182,19 +200,19 @@ THE AREAS AFFECTED INCLUDE...
## Make sure you comment out the ${area.name}... line above to use the marine zone combination
## If you have any questions contact: Phil Kurimski - WFO DTX
###################################################################################################
-#set ($zonecombo = "")
+#set($zonecombo = "")
#if(($fipsstring.contains("AMZ154")) && ($fipsstring.contains("AMZ156")) && ($fipsstring.contains("AMZ152")))
- #set ($zonecombo = "COASTAL WATERS FROM OREGON INLET TO CAPE LOOKOUT NC OUT 20 NM...")
+ #set($zonecombo = "COASTAL WATERS FROM OREGON INLET TO CAPE LOOKOUT NC OUT 20 NM...")
#elseif(($fipsstring.contains("AMZ154")) && ($fipsstring.contains("AMZ156")))
- #set ($zonecombo = "COASTAL WATERS FROM CAPE HATTERAS TO CAPE LOOKOUT NC OUT 20 NM...")
+ #set($zonecombo = "COASTAL WATERS FROM CAPE HATTERAS TO CAPE LOOKOUT NC OUT 20 NM...")
#elseif(($fipsstring.contains("AMZ152")) && ($fipsstring.contains("AMZ154")))
- #set ($zonecombo = "COASTAL WATERS FROM OREGON INLET TO OCRACOKE INLET NC OUT 20 NM...")
+ #set($zonecombo = "COASTAL WATERS FROM OREGON INLET TO OCRACOKE INLET NC OUT 20 NM...")
#elseif($fipsstring.contains("AMZ154"))
- #set ($zonecombo = "COASTAL WATERS FROM CAPE HATTERAS TO OCRACOKE INLET NC OUT 20 NM...")
+ #set($zonecombo = "COASTAL WATERS FROM CAPE HATTERAS TO OCRACOKE INLET NC OUT 20 NM...")
#elseif($fipsstring.contains("AMZ156"))
- #set ($zonecombo = "COASTAL WATERS FROM OCRACOKE INLET TO CAPE LOOKOUT NC OUT 20 NM...")
+ #set($zonecombo = "COASTAL WATERS FROM OCRACOKE INLET TO CAPE LOOKOUT NC OUT 20 NM...")
#elseif($fipsstring.contains("AMZ152"))
- #set ($zonecombo = "COASTAL WATERS FROM OREGON INLET TO CAPE HATTERAS NC OUT 20 NM...")
+ #set($zonecombo = "COASTAL WATERS FROM OREGON INLET TO CAPE HATTERAS NC OUT 20 NM...")
#end
$zonecombo
@@ -204,67 +222,72 @@ $zonecombo
## Basis section that incorporates line phenomena...capable vs producing
## and threat based on selections above. Added Satellite Imagery to basis.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A REPORTER **! ${threatType}")
-#if(${list.contains($bullets, "doppler")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "DOPPLER RADAR INDICATED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
-#if(${list.contains($bullets, "fog")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "DOPPLER RADAR INDICATED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
+#set($report = "!** YOU DIDN'T SELECT A REPORTER **! ${threatType}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "DOPPLER RADAR INDICATED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
+#if(${list.contains(${bullets}, "fog")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "DOPPLER RADAR INDICATED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
#end
#end
-#if(${list.contains($bullets, "marineSpotter")})
- #set ($report = "MARINE WEATHER SPOTTERS REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
-#if(${list.contains($bullets, "fog")})
- #set ($report = "MARINE WEATHER SPOTTERS REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
+#if(${list.contains(${bullets}, "marineSpotter")})
+ #set($report = "MARINE WEATHER SPOTTERS REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
+#if(${list.contains(${bullets}, "fog")})
+ #set($report = "MARINE WEATHER SPOTTERS REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
#end
#end
-#if(${list.contains($bullets, "mariner")})
- #set ($report = "A MARINER REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
-#if(${list.contains($bullets, "fog")})
- #set ($report = "A MARINER REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
+#if(${list.contains(${bullets}, "mariner")})
+ #set($report = "A MARINER REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
+#if(${list.contains(${bullets}, "fog")})
+ #set($report = "A MARINER REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
#end
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
-#if(${list.contains($bullets, "fog")})
- #set ($report = "THE PUBLIC REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
+#if(${list.contains(${bullets}, "fog")})
+ #set($report = "THE PUBLIC REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
#end
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "SATELLITE IMAGERY INDICATED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
-#if(${list.contains($bullets, "fog")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "SATELLITE IMAGERY INDICATED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "SATELLITE IMAGERY INDICATED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
+#if(${list.contains(${bullets}, "fog")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "SATELLITE IMAGERY INDICATED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
#end
#end
-#if(${list.contains($bullets, "pilot")})
- #set ($report = "A PILOT REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
-#if(${list.contains($bullets, "fog")})
- #set ($report = "A PILOT REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
+#if(${list.contains(${bullets}, "pilot")})
+ #set($report = "A PILOT REPORTED A ${stormline}...${capable}PRODUCING ${threatType}${hailType}.")
+#if(${list.contains(${bullets}, "fog")})
+ #set($report = "A PILOT REPORTED AN AREA OF ${stormline}...${capable}REDUCING VISIBILITIES TO BELOW ${visibility}.")
#end
#end
## Storm current location description
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ##
-${reportLocation} #handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "OVER", 4, "NM", true)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ${reportLocation} ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
. ${reportType2} NEARLY STATIONARY.
#else
...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} KNOTS.
#end
-#set ($warningType = "STATEMENT")
-#if(${list.contains($bullets, "pathcast")})
+#set($warningType = "STATEMENT")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathheader} WILL BE NEAR..." ${pathheader} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 1)
-#elseif(${list.contains($bullets, "listoflocations")})
+#elseif(${list.contains(${bullets}, "listoflocations")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -280,7 +303,7 @@ THIS IS A TEST MESSAGE. ##
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent} AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
#end
@@ -288,50 +311,50 @@ EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
## Added CTA statements for the possibility of future SMW.
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
MARINERS CAN EXPECT GUSTY WINDS UP TO 33 KNOTS...LOCALLY HIGHER WAVES...AND LIGHTNING STRIKES. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY UNTIL THIS STORM PASSES.
#end
-#if(${list.contains($bullets, "heavyRainCTA")})
+#if(${list.contains(${bullets}, "heavyRainCTA")})
MARINERS CAN EXPECT GUSTY WINDS UP TO 33 KNOTS...LOCALLY HIGHER WAVES...LIGHTNING STRIKES...AND HEAVY DOWNPOURS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY UNTIL THIS STORM PASSES.
#end
-#if(${list.contains($bullets, "possibleSmwCTA")})
+#if(${list.contains(${bullets}, "possibleSmwCTA")})
THIS ${stormline} WILL LIKELY PRODUCE WINDS UP TO 33 KNOTS...AND COULD POSE A SERIOUS HAZARD FOR BOATERS. A SPECIAL MARINE WARNING MAY EVENTUALLY BE REQUIRED WHEN THIS STORM REACHES THE NEARSHORE WATERS. BOATERS SHOULD CONSIDER HEADING FOR SHORE BEFORE THE STORM ARRIVES.
#end
-#if(${list.contains($bullets, "likelySmwCTA")})
+#if(${list.contains(${bullets}, "likelySmwCTA")})
THIS ${stormline} WILL LIKELY PRODUCE WINDS IN EXCESS OF 34 KNOTS...AND IS LIKELY TO POSE A SERIOUS HAZARD FOR BOATERS. A SPECIAL MARINE WARNING WILL LIKELY BE REQUIRED WHEN THIS STORM REACHES THE NEARSHORE WATERS. BOATERS SHOULD CONSIDER HEADING FOR SHORE BEFORE THE STORM ARRIVES.
#end
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
INTENSE LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if(${list.contains($bullets, "fogCTA")})
+#if(${list.contains(${bullets}, "fogCTA")})
DENSE FOG WAS REDUCING VISIBILITIES TO BELOW ${visibility}. REDUCE YOUR SPEED...AND KEEP A LOOKOUT FOR OTHER VESSELS...BUOYS...AND BREAKWATERS. KEEP YOUR NAVIGATION LIGHTS ON. IF NOT EQUIPPED WITH RADAR...YOU SHOULD CONSIDER SEEKING SAFE HARBOR.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
@@ -345,12 +368,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-##################################################################
-## If you decide to pull the user name from a file use this coding
-##################################################################
-##parse("name.vm")
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.xml
index fcc0142a30..672c287c51 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatement.xml
@@ -1,7 +1,11 @@
+
-
-
+
nmi
@@ -95,8 +99,8 @@
-
-
+
+
@@ -134,8 +138,10 @@
-
-
+
+
+
+
@@ -150,34 +156,40 @@
-
- 0.00
- AND
- 0
- NAME
- NAME
- NAME
- countyTypes.txt
- ID
- NAME
-
- Name
-
-
+
+
+ MarineZones
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ NAME
+ countyTypes.txt
+ ID
+ NAME
+
+ parent
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
100
@@ -189,11 +201,15 @@
NAME
+ AREA
POINTS
-
+
+
+
+
5
100
@@ -204,17 +220,30 @@
- true
- 20.0
+
+ 1
+ false
+ 10.0
5
5
4
8
Name
+ AREA
Name
Name
Name
countyTypes.txt
+
+
+
+
+
+
+
+
distance
@@ -222,6 +251,8 @@
NAME
+ 1
+ AREA
TRACK
true
20
@@ -229,10 +260,20 @@
distance
+
+
+
+
+
+
+
+
NAME
+ 1
+ AREA
TRACK
true
10
@@ -242,14 +283,17 @@
-
+
+
+
+
- MarineSites
+ WarnGenLoc
MarineZones
MarineZones
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.vm
index ae45868f24..aefb1522dc 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.vm
@@ -1,15 +1,16 @@
-#################################################
-## MARINE WEATHER STATEMENT ASHFALL STANDALONE ##
-## ORIGINAL MWS CREATED BY PHIL KURIMSKI - WFO DTX
-## AND MODIFIED BY TOM BIRCHARD - WFO HFO
-## 9/22/11 ALASKA TIM FOR ASHFALL PURPOSES
-## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
-##
-#################################################
+######################################################
+## MARINE WEATHER STATEMENT ASHFALL STANDALONE ##
+## ORIGINAL MWS CREATED BY PHIL KURIMSKI - WFO DTX ##
+## AND MODIFIED BY TOM BIRCHARD - WFO HFO ##
+## 9/22/11 ALASKA TIM FOR ASHFALL PURPOSES ##
+## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND) ##
+## Phil Kurimski SEP 10 2012 OB12.9.1-12 ##
+## Phil Kurimski FEB 07 2013 OB13.2.1-5 ##
+######################################################
## Set null variables used in the template
#########################################
-#set ($capable = "")
-#set ($hailType = "")
+#set($capable = "")
+#set($hailType = "")
#if(${productClass}=="O")
#set($productClass = "X")
#end
@@ -44,21 +45,21 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## Removed line selections and determined line based on Track Type in GUI.
#######################################################################
## Assume head1 is selected.
-#set ($headerType = "VOLCANIC ASH")
-#set ($eventType = "VOLCANIC ASH")
-#if(${list.contains($bullets, "lightva")})
- #set ($headerType = "LIGHT VOLCANIC ASHFALL")
- #set ($eventType = "LIGHT VOLCANIC ASHFALL")
+#set($headerType = "VOLCANIC ASH")
+#set($eventType = "VOLCANIC ASH")
+#if(${list.contains(${bullets}, "lightva")})
+ #set($headerType = "LIGHT VOLCANIC ASHFALL")
+ #set($eventType = "LIGHT VOLCANIC ASHFALL")
#end
-#if(${list.contains($bullets, "verylightva")})
- #set ($headerType = "VERY LIGHT VOLCANIC ASHFALL")
- #set ($eventType = "VERY LIGHT VOLCANIC ASHFALL")
+#if(${list.contains(${bullets}, "verylightva")})
+ #set($headerType = "VERY LIGHT VOLCANIC ASHFALL")
+ #set($eventType = "VERY LIGHT VOLCANIC ASHFALL")
#end
#######################################################################
## Section to create line wording based on track type.
#######################################################################
-#set ($stormline = "${headerType}")
-#set ($pathheader = "THE ${headerType}")
+#set($stormline = "${headerType}")
+#set($pathheader = "THE ${headerType}")
#if(${stormType} == "line")
#set($stormline = "LINE OF ${headerType}S")
#set($pathheader = "${headerType}S")
@@ -69,35 +70,35 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## "Line of Fronts" in the Product
## and this segment was added to allow for visibility reduction
#######################################################################
-#set ($threatType = "REDUCING VISIBILITY TO LESS THAN 2 NM")
+#set($threatType = "REDUCING VISIBILITY TO LESS THAN 2 NM")
-#if(${list.contains($bullets, "vis2nm")})
- #set ($threatType = "REDUCING VISIBILITY TO LESS THAN 2 NM")
+#if(${list.contains(${bullets}, "vis2nm")})
+ #set($threatType = "REDUCING VISIBILITY TO LESS THAN 2 NM")
#end
-#if(${list.contains($bullets, "vis3nm")})
- #set ($threatType = "REDUCING VISIBILITY TO LESS THAN 3 NM")
+#if(${list.contains(${bullets}, "vis3nm")})
+ #set($threatType = "REDUCING VISIBILITY TO LESS THAN 3 NM")
#end
-#if(${list.contains($bullets, "visnear5nm")})
- #set ($threatType = "REDUCING VISIBILITY TO NEAR 5 NM")
+#if(${list.contains(${bullets}, "visnear5nm")})
+ #set($threatType = "REDUCING VISIBILITY TO NEAR 5 NM")
#end
########################################################
-#set ($headerType1 = "...${headerType} EXPECTED OVER THE COASTAL WATERS...")
-#if(${list.contains($bullets, "ashadv")})
-# #set ($headerType1 = "...ASHFALL ADVISORY IN EFFECT FOR ${headerType}...")
+#set($headerType1 = "...${headerType} EXPECTED OVER THE COASTAL WATERS...")
+#if(${list.contains(${bullets}, "ashadv")})
+# #set($headerType1 = "...ASHFALL ADVISORY IN EFFECT FOR ${headerType}...")
#end
-#if(${list.contains($bullets, "approachHead")})
-# #set ($headerType1 = "...${headerType} APPROACHING THE COASTAL WATERS...")
+#if(${list.contains(${bullets}, "approachHead")})
+# #set($headerType1 = "...${headerType} APPROACHING THE COASTAL WATERS...")
#end
-#if(${list.contains($bullets, "overHead")})
-# #set ($headerType1 = "...${headerType} OVER THE COASTAL WATERS...")
+#if(${list.contains(${bullets}, "overHead")})
+# #set($headerType1 = "...${headerType} OVER THE COASTAL WATERS...")
#end
#######################################################################
## Added Hail Section
#######################################################################
-#if(${list.contains($bullets, "smallHail")})
- #set ($hailType = " AND SMALL HAIL")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailType = " AND SMALL HAIL")
#end
${headerType1}
@@ -106,76 +107,72 @@ ${headerType1}
#######################################################################
THE AREAS AFFECTED INCLUDE...
#######################################################################
-## Set the fipsstring variable to null for marine zone combinations
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
#######################################################################
-##set ($fipsstring = "")
#foreach (${area} in ${areas})
- ${area.name}...
+#wrapText("${area.name}..." 2 2)
+#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
#######################################################################
## The following code will create a string of marine zone fips codes
## which will be important in combining marine zones
#######################################################################
-##set ($fipsstring = $fipsstring + $area.fips + "-")
+#######################################################################
+## Set the fipsstring variable to null for marine zone combinations
+#######################################################################
+#set($fipsstring = "")
+#foreach (${area} in ${areas})
+#set($fipsstring = $fipsstring + $area.fips + "-")
#end
-
-#*
-###################################################################################################
-## The following code is an example of how to combine marine zones for 3 continuous marine zones
-## Note you start out with the largest combination first then whittle it down until you only have
-## one zone left. You can do this as many times as you wish for as many combinations as you have.
-## Make sure you comment out the ${area.name}... line above to use the marine zone combination
-## If you have any questions contact: Phil Kurimski - WFO DTX
-###################################################################################################
-#set ($zonecombo = "")
-#if(($fipsstring.contains("AMZ154")) && ($fipsstring.contains("AMZ156")) && ($fipsstring.contains("AMZ152")))
- #set ($zonecombo = "COASTAL WATERS FROM OREGON INLET TO CAPE LOOKOUT NC OUT 20 NM...")
-#elseif(($fipsstring.contains("AMZ154")) && ($fipsstring.contains("AMZ156")))
- #set ($zonecombo = "COASTAL WATERS FROM CAPE HATTERAS TO CAPE LOOKOUT NC OUT 20 NM...")
-#elseif(($fipsstring.contains("AMZ152")) && ($fipsstring.contains("AMZ154")))
- #set ($zonecombo = "COASTAL WATERS FROM OREGON INLET TO OCRACOKE INLET NC OUT 20 NM...")
-#elseif($fipsstring.contains("AMZ154"))
- #set ($zonecombo = "COASTAL WATERS FROM CAPE HATTERAS TO OCRACOKE INLET NC OUT 20 NM...")
-#elseif($fipsstring.contains("AMZ156"))
- #set ($zonecombo = "COASTAL WATERS FROM OCRACOKE INLET TO CAPE LOOKOUT NC OUT 20 NM...")
-#elseif($fipsstring.contains("AMZ152"))
- #set ($zonecombo = "COASTAL WATERS FROM OREGON INLET TO CAPE HATTERAS NC OUT 20 NM...")
-#end
-
-$zonecombo
-*#
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+## Uncomment the parse command if you are combining your marine zones
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
#######################################################################
## Basis section that incorporates line phenomena...capable vs producing
## and threat based on selections above. Added Satellite Imagery to basis.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A REPORTER **! ${threatType}")
-#if(${list.contains($bullets, "seismic")})
- #set ($report = "SEISMIC ACTIVITY AND SATELLITE IMAGERY INDICATED THAT !** ENTER VOLCANO NAME HERE **! WAS ERUPTING...WITH ${stormline}...${threatType}...")
+#set($report = "!** YOU DIDN'T SELECT A REPORTER **! ${threatType}")
+#if(${list.contains(${bullets}, "seismic")})
+ #set($report = "SEISMIC ACTIVITY AND SATELLITE IMAGERY INDICATED THAT !** ENTER VOLCANO NAME HERE **! WAS ERUPTING...WITH ${stormline}...${threatType}...")
#end
-#if(${list.contains($bullets, "reports")})
- #set ($report = "REPORTS INDICATED THAT !** ENTER VOLCANO NAME HERE **! HAD ERUPTED...WITH ${stormline}...${threatType}...")
+#if(${list.contains(${bullets}, "reports")})
+ #set($report = "REPORTS INDICATED THAT !** ENTER VOLCANO NAME HERE **! HAD ERUPTED...WITH ${stormline}...${threatType}...")
#end
## Storm current location description
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "OVER", 4, "NM", true)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
. NEARLY STATIONARY.
#else
MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} KNOTS.
#end
-#set ($phenomena = "${pathheader}")
-#set ($warningType = "STATEMENT")
-#if(${list.contains($bullets, "pathcast")})
+#set($phenomena = "${pathheader}")
+#set($warningType = "STATEMENT")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${phenomena} WILL BE NEAR..." ${phenomena} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 1)
-#elseif(${list.contains($bullets, "listoflocations")})
+#elseif(${list.contains(${bullets}, "listoflocations")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -190,7 +187,7 @@ THIS IS A TEST MESSAGE. ##
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
#else
@@ -204,30 +201,30 @@ AN ASHFALL ADVISORY MEANS THAT THE VOLCANO IS UNDERGOING A MINOR ERUPTION AND TH
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
## Added CTA statements for the possibility of future SMW.
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "ashCTA")})
+#if(${list.contains(${bullets}, "ashCTA")})
ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE IN ${officeLoc}.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
@@ -241,4 +238,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.xml
index dc77ca6629..f40e6cea45 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/marineWeatherStatementAshfall.xml
@@ -1,7 +1,10 @@
-
-
+
nmi
@@ -90,7 +93,7 @@
-
+
@@ -120,8 +123,10 @@
-
-
+
+
+
+
@@ -131,34 +136,40 @@
-
- 0.00
- AND
- 0
- NAME
- NAME
- NAME
- countyTypes.txt
- ID
- NAME
-
- Name
-
-
+
+
+ MarineZones
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ NAME
+ countyTypes.txt
+ ID
+ NAME
+
+ parent
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
100
@@ -170,11 +181,15 @@
NAME
+ AREA
POINTS
-
+
+
+
+
5
100
@@ -185,13 +200,18 @@
- true
- 20.0
+
+ false
+ 1
+ 10.0
5
5
4
8
Name
+ AREA
Name
Name
Name
@@ -200,6 +220,9 @@
+
+
+
distance
@@ -208,14 +231,19 @@
NAME
+ 1
+ AREA
TRACK
true
20
20
-
+
+
+
+
distance
@@ -224,6 +252,8 @@
NAME
+ 1
+ AREA
TRACK
true
10
@@ -233,14 +263,17 @@
-
+
+
+
+
- MarineSites
+ WarnGenLoc
MarineZones
MarineZones
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.vm
index 6280b8650b..a850bd864e 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.vm
@@ -1,11 +1,17 @@
-#################################################
-## DAM BREAK FFW TEMPLATE ##
-## CREATED BY PHIL KURIMSKI - WFO DTX ##
-## VERSION AWIPS II 1.0 - APR 13 2011 OB11.4 ##
-## VERSION AWIPS II 1.1 - JUL 14 2011 OB11.7 ##
-## VERSION AWIPS II 1.2 - AUG 18 2011 OB11.8 ##
-## VERSION AWIPS II 1.3 - SEP 23 2011 OB11.8 ##
-#################################################
+######################################################
+## DAM BREAK FFW TEMPLATE ##
+## CREATED BY PHIL KURIMSKI - WFO DTX ##
+## VERSION AWIPS II 1.0 - APR 13 2011 OB11.4 ##
+## VERSION AWIPS II 1.1 - JUL 14 2011 OB11.7 ##
+## VERSION AWIPS II 1.2 - AUG 18 2011 OB11.8 ##
+## VERSION AWIPS II 1.3 - SEP 23 2011 OB11.8 ##
+## VERSION AWIPS II 1.4 - SEP 13 2012 OB12.9.1-12 ##
+## to add Flash Flood Emergency Headline ##
+## VERSION AWIPS II 1.5 - FEB 08 2013 OB13.2.1-5 ##
+## to update CTA statements ##
+## VERSION AWIPS II 1.6 - JUN 26 2013 OB13.4.1 ##
+## to add "U" Unknown servity ##
+######################################################
##
#if(${action} == "EXT")
#set($starttime = "000000T0000Z")
@@ -14,12 +20,14 @@
#set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})})
#set($extend = false)
#end
-#if(${list.contains($bullets, "sev1")})
+#if(${list.contains(${bullets}, "sev1")})
#set($sev = "1")
-#elseif(${list.contains($bullets, "sev2")})
+#elseif(${list.contains(${bullets}, "sev2")})
#set($sev = "2")
-#elseif(${list.contains($bullets, "sev3")})
+#elseif(${list.contains(${bullets}, "sev3")})
#set($sev = "3")
+#elseif(${list.contains(${bullets}, "sevUnk")})
+ #set($sev = "U")
#else
#set($sev = "0")
#end
@@ -34,48 +42,48 @@
#set($ruleofthumb = "")
#set($sitespecCTA = "")
#set($volcanoCTA = "")
-#if(${list.contains($bullets, "levee")})
+#if(${list.contains(${bullets}, "levee")})
#set($ic = "DM")
#set($hycType = "A LEVEE FAILURE")
#set($reportType1 = "A LEVEE ON THE !** **! RIVER AT !** **! FAILED CAUSING FLASH FLOODING OF IMMEDIATELY SURROUNDING AREAS")
-#elseif(${list.contains($bullets, "floodgate")})
+#elseif(${list.contains(${bullets}, "floodgate")})
#set($ic = "DR")
#set($hycType = "A DAM FLOODGATE RELEASE")
#set($reportType1 = "THE FLOODGATES ON THE !** **! DAM WERE OPENED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
-#elseif(${list.contains($bullets, "glacier")})
+#elseif(${list.contains(${bullets}, "glacier")})
#set($ic = "GO")
#set($hycType = "A GLACIAL-DAMMED LAKE OUTBURST FLOODING")
#set($reportType1 = "A GLACIER AT !** **! HAS MELTED...RELEASING LARGE QUANTITIES OF IMPOUNDED WATER AND CAUSING FLASH FLOODING !** **!")
-#elseif(${list.contains($bullets, "icejam")})
+#elseif(${list.contains(${bullets}, "icejam")})
#set($ic = "IJ")
#set($hycType = "ICE JAM FLOODING")
#set($reportType1 = "AN ICE JAM ON THE !** **! RIVER AT !** **! BROKE CAUSING FLASH FLOODING DOWNSTREAM")
-#elseif(${list.contains($bullets, "rain")})
+#elseif(${list.contains(${bullets}, "rain")})
#set($ic = "RS")
#set($hycType = "EXTREMELY RAPID RAIN SNOW MELT")
#set($reportType1 = "RAIN FALLING ON EXISTING SNOWPACK WAS GENERATING FLASH FLOODING FROM EXCESSIVE RUNOFF")
-#elseif(${list.contains($bullets, "volcano")})
+#elseif(${list.contains(${bullets}, "volcano")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID SNOWMELT ON ITS SLOPES AND GENERATING FLASH FLOODING")
-#elseif(${list.contains($bullets, "volcanoLahar")})
+#elseif(${list.contains(${bullets}, "volcanoLahar")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($ctaSelected = "YES")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK AND HOT WATER TO FLOW DOWN THE MOUNTAIN THROUGH !** DRAINAGE **! AND GENERATE FLASH FLOODING")
#set($volcanoCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD HEAD TO HIGHER GROUND IMMEDIATELY.")
-#elseif(${list.contains($bullets, "dam")})
+#elseif(${list.contains(${bullets}, "dam")})
#set($ic = "DM")
#set($hycType = "A DAM FAILURE")
#set($reportType1 = "THE !** **! DAM FAILED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
#set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY")
-#elseif(${list.contains($bullets, "siteimminent")})
+#elseif(${list.contains(${bullets}, "siteimminent")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($reportType1 = "THE IMMINENT FAILURE OF !** **! DAM")
#set($reportType2 = "THE IMMINENT FAILURE OF")
#set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY")
-#elseif(${list.contains($bullets, "sitefailed")})
+#elseif(${list.contains(${bullets}, "sitefailed")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($reportType1 = "THE FAILURE OF !** **! DAM")
@@ -99,44 +107,44 @@
## from the LLL-damInfo.txt file in AWIPS 1. If you have any questions
## please contact Phil Kurimski - WFO DTX
#########################################################################
-#if(${list.contains($bullets, "BigRockDam")})
+#if(${list.contains(${bullets}, "BigRockDam")})
#set($riverName = "PHIL RIVER")
#set($damName = "BIG ROCK DAM")
#set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES")
#end
-#if(${list.contains($bullets, "BigRockhighfast")})
+#if(${list.contains(${bullets}, "BigRockhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockhighnormal")})
+#if(${list.contains(${bullets}, "BigRockhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumfast")})
+#if(${list.contains(${bullets}, "BigRockmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumnormal")})
+#if(${list.contains(${bullets}, "BigRockmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockruleofthumb")})
+#if(${list.contains(${bullets}, "BigRockruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
-#if(${list.contains($bullets, "BranchedOakDam")})
+#if(${list.contains(${bullets}, "BranchedOakDam")})
#set($riverName = "KELLS RIVER")
#set($damName = "BRANCHED OAK DAM")
#set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES")
#end
-#if(${list.contains($bullets, "BranchedOakhighfast")})
+#if(${list.contains(${bullets}, "BranchedOakhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakhighnormal")})
+#if(${list.contains(${bullets}, "BranchedOakhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumfast")})
+#if(${list.contains(${bullets}, "BranchedOakmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumnormal")})
+#if(${list.contains(${bullets}, "BranchedOakmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakruleofthumb")})
+#if(${list.contains(${bullets}, "BranchedOakruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
#######################################################################
@@ -146,8 +154,8 @@
## the word "Dam". If you end with a different word you will need
## to modify the loop below.
########################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("Dam"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("Dam")})
#set($ctaSelected = "YES")
#set($sitespecSelected = "YES")
#set($hycType = "THE ${riverName} BELOW ${damName}")
@@ -181,6 +189,15 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
+#############################################################################
+## Flash Flood Emergency Headline...can be implemented at a later date #
+#############################################################################
+#*
+#if(${list.contains(${bullets}, "ffwEmergency")} )
+...FLASH FLOOD EMERGENCY FOR !** LOCATION **!...
+
+#end
+*#
#headlineext(${officeLoc}, ${backupSite}, ${extend})
* ##
@@ -201,24 +218,24 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
* ##
@@ -230,19 +247,19 @@ THIS IS A TEST MESSAGE. ##
##########################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet #
##########################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
- THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!.
+#if(${list.contains(${bullets}, "ffwEmergency")})
+#wrapText("THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!. SEEK HIGHER GROUND NOW! THIS IS A POTENTIALLY LIFE THREATENING SITUATION!" 2 2)
#end
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if not needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
* ##
${addInfo}
@@ -253,14 +270,14 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -273,7 +290,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -281,7 +298,7 @@ THIS IS A TEST MESSAGE. ##
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
-#if(${list.contains($bullets, "floodMoving")})
+#if(${list.contains(${bullets}, "floodMoving")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -290,16 +307,16 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -308,31 +325,52 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "taddCTA")})
-MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
-BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
-DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
-A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
-DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
#end
-#if(${list.contains($bullets, "reportCTA")})
-TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
#end
-#if (${ctaSelected} == "YES")
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
+
+#end
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
+
+#end
+#if(${ctaSelected} == "YES")
&&
#end
@@ -345,4 +383,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml
index eff5324af0..6edf1e7b75 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning.xml
@@ -5,8 +5,15 @@
Modified Phil Kurimski 09-23-2011 OB 11.0.8-8
Modified Phil Kurimski 01-26-2012 OB 12.1.1-1
Modified Qinglu Lin 04-04-2012 DR 14691. Added tag.
- Modified Phil Kurimski 04-27-2012
- Modified Qinglu Lin 10-03-2012 DR 15426. Added damic to tag.
+ Modified Phil Kurimski 04-27-2012
+ Modified Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Modified Phil Kurimski 09-13-2012 Modified bulletGroup for Primary Cause in
+ NEW/COR
+ Modified Evan Bookbinder 01-07-2013 LockedGroupsOnFollowup tag
+ Modified Phil Kurimski 02-05-2013 Reordered GUI selections to make more sense
+ Added additional valid duration times
+ Modified Evan Bookbinder 06-26-2013 Added "U" Unknown severity
+
-->
@@ -48,69 +55,76 @@
180
- 30
- 40
- 45
- 50
60
90
120
- 150
180
- 210
- 240
- 270
- 300
360
+ 540
+ 720
+ 1440
+ 2160
+ 2880
+ 3600
+ 4320
+ 5760
+ 7200
+ 10080
-dam,ic,damic
+dam,ic
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+false
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
@@ -305,6 +330,7 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
@@ -314,6 +340,9 @@
+
+
+
distance
@@ -322,6 +351,8 @@
NAME
+ 1
+ AREA
POINTS
true
30
@@ -329,28 +360,36 @@
warngenlev
population
+ distance
-
+
+
+
+
NAME
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
@@ -360,10 +399,9 @@ and place into this template
-
- City
+
+ WarnGenLoc
County
-
States
TIMEZONES
TIME_ZONE
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.vm
index 179426de76..0fc9fa4781 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.vm
@@ -7,7 +7,7 @@
## Evan Bookbinder -- SEP 16 2011 OB11.0.8-8 ##
## Phil Kurimski -- SEP 23 2011 OB11.0.8-8 ##
## Mike Rega -- MAY 03 2012 DR 14885 MND ##
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Phil Kurimski -- FEB 08 2013 CTA stmnts ##
#####################################################
##
#set($headline = "")
@@ -22,51 +22,51 @@
#set($sitespecCTA = "")
#set($addInfo = "")
#set($volcanoCTA = "")
-#if(${list.contains($bullets, "levee")})
+#if(${list.contains(${bullets}, "levee")})
#set($ic = "DM")
#set($hycType = "A LEVEE FAILURE")
#set($headline = "FOR A LEVEE FAILURE ")
#set($reportType1 = "A LEVEE ON THE !** **! RIVER AT !** **! FAILED CAUSING FLASH FLOODING OF IMMEDIATELY SURROUNDING AREAS")
-#elseif(${list.contains($bullets, "floodgate")})
+#elseif(${list.contains(${bullets}, "floodgate")})
#set($ic = "DR")
#set($hycType = "A DAM FLOODGATE RELEASE")
#set($headline = "FOR A DAM FLOODGATE RELEASE ")
#set($reportType1 = "THE FLOODGATES ON THE !** **! DAM WERE OPENED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
-#elseif(${list.contains($bullets, "glacier")})
+#elseif(${list.contains(${bullets}, "glacier")})
#set($ic = "GO")
#set($hycType = "A GLACIAL-DAMMED LAKE OUTBURST FLOODING")
#set($headline = "FOR A GLACIAL-DAMMED LAKE OUTBURST FLOODING ")
#set($reportType1 = "A GLACIER AT !** **! HAS MELTED...RELEASING LARGE QUANTITIES OF IMPOUNDED WATER AND CAUSING FLASH FLOODING !** **!")
-#elseif(${list.contains($bullets, "icejam")})
+#elseif(${list.contains(${bullets}, "icejam")})
#set($ic = "IJ")
#set($hycType = "ICE JAM FLOODING")
#set($headline = "FOR ICE JAM FLOODING ")
#set($reportType1 = "AN ICE JAM ON THE !** **! RIVER AT !** **! BROKE CAUSING FLASH FLOODING DOWNSTREAM")
-#elseif(${list.contains($bullets, "rain")})
+#elseif(${list.contains(${bullets}, "rain")})
#set($ic = "RS")
#set($hycType = "EXTREMELY RAPID RAIN SNOW MELT")
#set($headline = "FOR EXTREMELY RAPID RAIN SNOW MELT ")
#set($reportType1 = "RAIN FALLING ON EXISTING SNOWPACK WAS GENERATING FLASH FLOODING FROM EXCESSIVE RUNOFF")
-#elseif(${list.contains($bullets, "volcano")})
+#elseif(${list.contains(${bullets}, "volcano")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($headline = "FOR VOLCANIC SNOW MELT ")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID SNOWMELT ON ITS SLOPES AND GENERATING FLASH FLOODING")
-#elseif(${list.contains($bullets, "volcanoLahar")})
+#elseif(${list.contains(${bullets}, "volcanoLahar")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($headline = "FOR VOLCANIC SNOW MELT ")
#set($ctaSelected = "YES")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK AND HOT WATER TO FLOW DOWN THE MOUNTAIN THROUGH !** DRAINAGE **! AND GENERATE FLASH FLOODING")
#set($volcanoCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD HEAD TO HIGHER GROUND IMMEDIATELY.")
-#elseif(${list.contains($bullets, "dam")})
+#elseif(${list.contains(${bullets}, "dam")})
#set($ic = "DM")
#set($hycType = "A DAM FAILURE")
#set($headline = "FOR A DAM FAILURE ")
## The next line should be the headline but will not currently work
##set($headline = "FOR THE FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ")
#set($reportType1 = "THE !** **! DAM FAILED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
-#elseif(${list.contains($bullets, "siteimminent")})
+#elseif(${list.contains(${bullets}, "siteimminent")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($headline = "FOR A DAM BREAK ")
@@ -74,7 +74,7 @@
##set($headline = "FOR THE IMMINENT FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ")
#set($reportType1 = "THE IMMINENT FAILURE OF !** **! DAM")
#set($reportType2 = "THE IMMINENT FAILURE OF")
-#elseif(${list.contains($bullets, "sitefailed")})
+#elseif(${list.contains(${bullets}, "sitefailed")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($headline = "FOR A DAM BREAK ")
@@ -87,12 +87,12 @@
#set($hycType = "EXCESSIVE RAIN")
#set($reportType1 = "EXCESSIVE RAIN CAUSING FLASH FLOODING WAS OCCURING OVER THE WARNED AREA")
#end
-#set ($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
-#if(${list.contains($bullets, "warnend1")})
- #set ($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#set($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#if(${list.contains(${bullets}, "warnend1")})
+ #set($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
#end
-#if(${list.contains($bullets, "warnend2")})
- #set ($endwarning = "FLOODING ON THE !** **! RIVER HAS RECEDED AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#if(${list.contains(${bullets}, "warnend2")})
+ #set($endwarning = "FLOODING ON THE !** **! RIVER HAS RECEDED AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
#end
#if(${floodic})
#set($ic = ${floodic})
@@ -110,44 +110,44 @@
## from the LLL-damInfo.txt file in AWIPS 1. If you have any questions
## please contact Phil Kurimski - WFO DTX
#########################################################################
-#if(${list.contains($bullets, "BigRockDam")})
+#if(${list.contains(${bullets}, "BigRockDam")})
#set($riverName = "PHIL RIVER")
#set($damName = "BIG ROCK DAM")
#set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES")
#end
-#if(${list.contains($bullets, "BigRockhighfast")})
+#if(${list.contains(${bullets}, "BigRockhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockhighnormal")})
+#if(${list.contains(${bullets}, "BigRockhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumfast")})
+#if(${list.contains(${bullets}, "BigRockmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumnormal")})
+#if(${list.contains(${bullets}, "BigRockmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockruleofthumb")})
+#if(${list.contains(${bullets}, "BigRockruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
-#if(${list.contains($bullets, "BranchedOakDam")})
+#if(${list.contains(${bullets}, "BranchedOakDam")})
#set($riverName = "KELLS RIVER")
#set($damName = "BRANCHED OAK DAM")
#set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES")
#end
-#if(${list.contains($bullets, "BranchedOakhighfast")})
+#if(${list.contains(${bullets}, "BranchedOakhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakhighnormal")})
+#if(${list.contains(${bullets}, "BranchedOakhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumfast")})
+#if(${list.contains(${bullets}, "BranchedOakmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumnormal")})
+#if(${list.contains(${bullets}, "BranchedOakmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakruleofthumb")})
+#if(${list.contains(${bullets}, "BranchedOakruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
#######################################################################
@@ -157,8 +157,8 @@
## the word "Dam". If you end with a different word you will need
## to modify the loop below.
########################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("Dam"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("Dam")})
#set($ctaSelected = "YES")
#set($sitespecSelected = "YES")
#set($hycType = "THE ${riverName} BELOW ${damName}")
@@ -211,7 +211,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${areas} true true true false true)
+#headlineLocList(${areas} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -228,7 +228,7 @@ ${endwarning}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
+#headlineLocList(${areas} true true true false)
...##
@@ -236,7 +236,7 @@ THIS IS A TEST MESSAGE.##
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -245,24 +245,24 @@ THIS IS A TEST MESSAGE.##
#####################################################
## Changed report to match selections in template
#####################################################
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
#if(${productClass}=="T")
@@ -271,15 +271,15 @@ THIS IS A TEST MESSAGE. ##
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}.
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
${addInfo}
${scenario}
@@ -289,13 +289,13 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -307,7 +307,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -315,7 +315,7 @@ THIS IS A TEST MESSAGE. ##
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
-#if(${list.contains($bullets, "floodMoving")})
+#if(${list.contains(${bullets}, "floodMoving")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -327,13 +327,13 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -342,33 +342,55 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "taddCTA")})
-MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
-BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
-DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
-A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
-DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
#end
-#if(${list.contains($bullets, "reportCTA")})
-TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
#end
-#if (${ctaSelected} == "YES")
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
+
+#end
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
+
+#end
+#if(${ctaSelected} == "YES")
&&
#end
+
#end
###########################
## DAM BREAK FFW CAN/CON ##
@@ -399,7 +421,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)
+#headlineLocList(${cancelareas} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -425,7 +447,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
+#headlineLocList(${areas} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -433,7 +455,7 @@ THIS IS A TEST MESSAGE.##
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -441,24 +463,24 @@ THIS IS A TEST MESSAGE.##
#####################################################
## Changed report to match selections in template
#####################################################
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
## Storm current location description
@@ -467,15 +489,15 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}.
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
${addInfo}
${scenario}
@@ -485,13 +507,13 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat})
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -503,7 +525,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -515,13 +537,13 @@ THIS IS A TEST MESSAGE. ##
## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -530,35 +552,52 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "floodMovingCTA")})
-FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
#end
-#if(${list.contains($bullets, "taddCTA")})
-MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
-BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
-DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
-A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
-DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
#end
-#if(${list.contains($bullets, "reportCTA")})
-TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
#end
-#if (${ctaSelected} == "YES")
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
+
+#end
+#if(${ctaSelected} == "YES")
&&
#end
@@ -588,7 +627,8 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)
+###headlineLocList(${cancelareas} true true true false)
+#headlineLocList(${cancelaffectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -614,7 +654,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
+#headlineLocList(${areas} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -622,7 +662,7 @@ THIS IS A TEST MESSAGE.##
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -630,24 +670,24 @@ THIS IS A TEST MESSAGE.##
#####################################################
## Changed report to match selections in template
#####################################################
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
## Storm current location description
@@ -656,15 +696,15 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}.
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
${addInfo}
${scenario}
@@ -674,13 +714,13 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat})
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -692,7 +732,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -704,13 +744,13 @@ THIS IS A TEST MESSAGE. ##
## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -719,35 +759,52 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "floodMovingCTA")})
-FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
+#if(${list.contains(${bullets}, "ffwEmergencyCTA")} || ${list.contains(${bullets}, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
+MOVE TO HIGHER GROUND NOW. THIS IS AN EXTREMELY DANGEROUS AND LIFE THREATENING SITUATION. DO NOT ATTEMPT TO TRAVEL UNLESS YOU ARE FLEEING AN AREA SUBJECT TO FLOODING OR UNDER AN EVACUATION ORDER.
+
+#else
+!** YOU SELECTED THE FLASH FLOOD EMERGENCY CTA WITHOUT SELECTING THE FLASH FLOOD EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
#end
-#if(${list.contains($bullets, "taddCTA")})
-MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
+#end
+#if(${list.contains(${bullets}, "actQuicklyCTA")})
+MOVE TO HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
-BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
+#if(${list.contains(${bullets}, "childSafetyCTA")})
+KEEP CHILDREN AWAY FROM STORM DRAINS...CULVERTS...CREEKS AND STREAMS. WATER LEVELS CAN RISE RAPIDLY AND SWEEP CHILDREN AWAY.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
-DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "nighttimeCTA")})
+BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
-A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
+#if(${list.contains(${bullets}, "safetyCTA")})
+DO NOT ENTER OR CROSS FLOWING WATER OR WATER OF UNKNOWN DEPTH.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
-DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
+#if(${list.contains(${bullets}, "stayAwayCTA")})
+STAY AWAY OR BE SWEPT AWAY. RIVER BANKS AND CULVERTS CAN BECOME UNSTABLE AND UNSAFE.
#end
-#if(${list.contains($bullets, "reportCTA")})
-TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
+#if(${list.contains(${bullets}, "turnAroundCTA")})
+TURN AROUND...DONT DROWN WHEN ENCOUNTERING FLOODED ROADS. MOST FLOOD DEATHS OCCUR IN VEHICLES.
#end
-#if (${ctaSelected} == "YES")
+#if(${list.contains(${bullets}, "arroyosCTA")})
+REMAIN ALERT FOR FLOODING EVEN IN LOCATIONS NOT RECEIVING RAIN. ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS IN A MATTER OF MINUTES...EVEN FROM DISTANT RAINFALL.
+
+#end
+#if(${list.contains(${bullets}, "burnAreasCTA")})
+MOVE AWAY FROM RECENTLY BURNED AREAS. LIFE THREATENING FLOODING OF CREEKS...ROADS AND NORMALLY DRY ARROYOS IS LIKELY. THE HEAVY RAINS WILL LIKELY TRIGGER ROCKSLIDES...MUDSLIDES AND DEBRIS FLOWS IN STEEP TERRAIN...ESPECIALLY IN AND AROUND THESE AREAS.
+
+#end
+#if(${list.contains(${bullets}, "reportFloodingCTA")})
+PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN DO SO SAFELY.
+
+#end
+#if(${ctaSelected} == "YES")
&&
#end
@@ -765,7 +822,7 @@ EXPIRED AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone
#else
WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
#end
-#headlineLocList(${areas} true true true false true)
+#headlineLocList(${areas} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -787,4 +844,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml
index a08a802782..c71e43b29c 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup.xml
@@ -4,8 +4,10 @@
Modified Phil Kurimski 09-23-2011 OB 11.0.8-8
Modified Phil Kurimski 01-26-2012 OB 12.1.1-1
Modified Qinglu Lin 04-04-2012 DR 14691. Added tag.
- Modified Phil Kurimski 04-27-2012
- Modified Qinglu Lin 10-04-2012 DR 15426. Added damic to tag.
+ Modified Phil Kurimski 04-27-2012
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Added areaSource object
+ Modified Phil Kurimski 02-05-2013 Reordered GUI selections to make more sense
-->
@@ -59,7 +61,7 @@
Added Flash Flood Emergency Headline
Changed the CTA Bullet names for easier parsing in the vm file
Added the Primary Cause to CAN and EXP sections for correct headlines -->
-dam,ic,damic
+dam,ic
@@ -70,8 +72,8 @@
-
-
+
+
@@ -115,8 +117,8 @@
-
-
+
+
@@ -160,42 +162,50 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -227,42 +237,50 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
+
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -290,94 +308,104 @@
-
-
-
-
-
+false
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
-
- false
+
-
-
+
+ 1
true
8.0
5
5
- 4
+ 10
8
- Name
- COUNTYNAME
+ Name
+ AREA
+ COUNTYNAME
STATE
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
+
+
+
-
+
NAME
- POINTS
+ 1
+ AREA
+ TRACK
true
- 30
- 200
+ 20
+ 10
+
+
+
+
+
+
+
+
warngenlev
population
+ distance
-
-
-
-
-
-
NAME
- POINTS
+ 1
+ AREA
+ TRACK
true
10
- 200
+ 10
- name
+ distance
-
+
+
+
+
@@ -387,8 +415,8 @@ and place into this template
-
- City
+
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm
index 6b5323f317..1be5bdc593 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm
@@ -7,7 +7,6 @@
## Evan Bookbinder -- SEP 16 2011 OB11.0.8-8 ##
## Phil Kurimski -- SEP 23 2011 OB11.0.8-8 ##
## Mike Rega -- MAY 03 2012 DR 14885 MND ##
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
#####################################################
##
#set($headline = "")
@@ -22,51 +21,51 @@
#set($sitespecCTA = "")
#set($addInfo = "")
#set($volcanoCTA = "")
-#if(${list.contains($bullets, "levee")})
+#if(${list.contains(${bullets}, "levee")})
#set($ic = "DM")
#set($hycType = "A LEVEE FAILURE")
#set($headline = "FOR A LEVEE FAILURE ")
#set($reportType1 = "A LEVEE ON THE !** **! RIVER AT !** **! FAILED CAUSING FLASH FLOODING OF IMMEDIATELY SURROUNDING AREAS")
-#elseif(${list.contains($bullets, "floodgate")})
+#elseif(${list.contains(${bullets}, "floodgate")})
#set($ic = "DR")
#set($hycType = "A DAM FLOODGATE RELEASE")
#set($headline = "FOR A DAM FLOODGATE RELEASE ")
#set($reportType1 = "THE FLOODGATES ON THE !** **! DAM WERE OPENED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
-#elseif(${list.contains($bullets, "glacier")})
+#elseif(${list.contains(${bullets}, "glacier")})
#set($ic = "GO")
#set($hycType = "A GLACIAL-DAMMED LAKE OUTBURST FLOODING")
#set($headline = "FOR A GLACIAL-DAMMED LAKE OUTBURST FLOODING ")
#set($reportType1 = "A GLACIER AT !** **! HAS MELTED...RELEASING LARGE QUANTITIES OF IMPOUNDED WATER AND CAUSING FLASH FLOODING !** **!")
-#elseif(${list.contains($bullets, "icejam")})
+#elseif(${list.contains(${bullets}, "icejam")})
#set($ic = "IJ")
#set($hycType = "ICE JAM FLOODING")
#set($headline = "FOR ICE JAM FLOODING ")
#set($reportType1 = "AN ICE JAM ON THE !** **! RIVER AT !** **! BROKE CAUSING FLASH FLOODING DOWNSTREAM")
-#elseif(${list.contains($bullets, "rain")})
+#elseif(${list.contains(${bullets}, "rain")})
#set($ic = "RS")
#set($hycType = "EXTREMELY RAPID RAIN SNOW MELT")
#set($headline = "FOR EXTREMELY RAPID RAIN SNOW MELT ")
#set($reportType1 = "RAIN FALLING ON EXISTING SNOWPACK WAS GENERATING FLASH FLOODING FROM EXCESSIVE RUNOFF")
-#elseif(${list.contains($bullets, "volcano")})
+#elseif(${list.contains(${bullets}, "volcano")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($headline = "FOR VOLCANIC SNOW MELT ")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID SNOWMELT ON ITS SLOPES AND GENERATING FLASH FLOODING")
-#elseif(${list.contains($bullets, "volcanoLahar")})
+#elseif(${list.contains(${bullets}, "volcanoLahar")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($headline = "FOR VOLCANIC SNOW MELT ")
#set($ctaSelected = "YES")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK AND HOT WATER TO FLOW DOWN THE MOUNTAIN THROUGH !** DRAINAGE **! AND GENERATE FLASH FLOODING")
#set($volcanoCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD HEAD TO HIGHER GROUND IMMEDIATELY.")
-#elseif(${list.contains($bullets, "dam")})
+#elseif(${list.contains(${bullets}, "dam")})
#set($ic = "DM")
#set($hycType = "A DAM FAILURE")
#set($headline = "FOR A DAM FAILURE ")
## The next line should be the headline but will not currently work
##set($headline = "FOR THE FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ")
#set($reportType1 = "THE !** **! DAM FAILED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
-#elseif(${list.contains($bullets, "siteimminent")})
+#elseif(${list.contains(${bullets}, "siteimminent")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($headline = "FOR A DAM BREAK ")
@@ -74,7 +73,7 @@
##set($headline = "FOR THE IMMINENT FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ")
#set($reportType1 = "THE IMMINENT FAILURE OF !** **! DAM")
#set($reportType2 = "THE IMMINENT FAILURE OF")
-#elseif(${list.contains($bullets, "sitefailed")})
+#elseif(${list.contains(${bullets}, "sitefailed")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($headline = "FOR A DAM BREAK ")
@@ -87,12 +86,12 @@
#set($hycType = "EXCESSIVE RAIN")
#set($reportType1 = "EXCESSIVE RAIN CAUSING FLASH FLOODING WAS OCCURING OVER THE WARNED AREA")
#end
-#set ($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
-#if(${list.contains($bullets, "warnend1")})
- #set ($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#set($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#if(${list.contains(${bullets}, "warnend1")})
+ #set($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
#end
-#if(${list.contains($bullets, "warnend2")})
- #set ($endwarning = "FLOODING ON THE !** **! RIVER HAS RECEDED AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
+#if(${list.contains(${bullets}, "warnend2")})
+ #set($endwarning = "FLOODING ON THE !** **! RIVER HAS RECEDED AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.")
#end
#if(${floodic})
#set($ic = ${floodic})
@@ -110,44 +109,44 @@
## from the LLL-damInfo.txt file in AWIPS 1. If you have any questions
## please contact Phil Kurimski - WFO DTX
#########################################################################
-#if(${list.contains($bullets, "BigRockDam")})
+#if(${list.contains(${bullets}, "BigRockDam")})
#set($riverName = "PHIL RIVER")
#set($damName = "BIG ROCK DAM")
#set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES")
#end
-#if(${list.contains($bullets, "BigRockhighfast")})
+#if(${list.contains(${bullets}, "BigRockhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockhighnormal")})
+#if(${list.contains(${bullets}, "BigRockhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumfast")})
+#if(${list.contains(${bullets}, "BigRockmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumnormal")})
+#if(${list.contains(${bullets}, "BigRockmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockruleofthumb")})
+#if(${list.contains(${bullets}, "BigRockruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
-#if(${list.contains($bullets, "BranchedOakDam")})
+#if(${list.contains(${bullets}, "BranchedOakDam")})
#set($riverName = "KELLS RIVER")
#set($damName = "BRANCHED OAK DAM")
#set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES")
#end
-#if(${list.contains($bullets, "BranchedOakhighfast")})
+#if(${list.contains(${bullets}, "BranchedOakhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakhighnormal")})
+#if(${list.contains(${bullets}, "BranchedOakhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumfast")})
+#if(${list.contains(${bullets}, "BranchedOakmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumnormal")})
+#if(${list.contains(${bullets}, "BranchedOakmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakruleofthumb")})
+#if(${list.contains(${bullets}, "BranchedOakruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
#######################################################################
@@ -157,8 +156,8 @@
## the word "Dam". If you end with a different word you will need
## to modify the loop below.
########################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("Dam"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("Dam")})
#set($ctaSelected = "YES")
#set($sitespecSelected = "YES")
#set($hycType = "THE ${riverName} BELOW ${damName}")
@@ -196,9 +195,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugcline}
/${productClass}.${action}.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -211,7 +212,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${areas} true true true false true)
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${affectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -228,7 +231,9 @@ ${endwarning}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${affectedCounties} true true true false)
...##
@@ -236,7 +241,7 @@ THIS IS A TEST MESSAGE.##
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -245,41 +250,40 @@ THIS IS A TEST MESSAGE.##
#####################################################
## Changed report to match selections in template
#####################################################
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}.
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
${addInfo}
${scenario}
@@ -289,13 +293,13 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -307,7 +311,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -318,13 +322,13 @@ THIS IS A TEST MESSAGE. ##
## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -333,35 +337,35 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "floodMovingCTA")})
+#if(${list.contains(${bullets}, "floodMovingCTA")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
-#if(${list.contains($bullets, "taddCTA")})
+#if(${list.contains(${bullets}, "taddCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
+#if(${list.contains(${bullets}, "vehicleCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
#end
@@ -384,9 +388,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugclinecan}
/${productClass}.CAN.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${cancelareas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -394,7 +400,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)
+###zoneHeadlineLocList(${cancelareas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${cancelaffectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -410,9 +418,11 @@ $$
${ugcline}
/${productClass}.CON.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -420,7 +430,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${affectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -428,7 +440,7 @@ THIS IS A TEST MESSAGE.##
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -436,24 +448,24 @@ THIS IS A TEST MESSAGE.##
#####################################################
## Changed report to match selections in template
#####################################################
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
## Storm current location description
@@ -462,15 +474,15 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}.
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
${addInfo}
${scenario}
@@ -480,13 +492,13 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat})
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -498,7 +510,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -506,7 +518,7 @@ THIS IS A TEST MESSAGE. ##
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
-#if(${list.contains($bullets, "floodMoving")})
+#if(${list.contains(${bullets}, "floodMoving")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -518,13 +530,13 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -533,31 +545,31 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "taddCTA")})
+#if(${list.contains(${bullets}, "taddCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
+#if(${list.contains(${bullets}, "vehicleCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
@@ -577,9 +589,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
${ugclinecan}
/${productClass}.COR.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${cancelareas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${cancelareas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -587,7 +601,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ##
-#headlineLocList(${cancelareas} true true true false true)
+###zoneHeadlineLocList(${cancelareas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${cancelaffectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -603,9 +619,11 @@ $$
${ugcline}
/${productClass}.COR.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/
/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/
-#foreach (${area} in ${areas})
-${area.name} ${area.stateabbr}-##
+#set($zoneList = "")
+#foreach (${area} in ${areas})
+#set($zoneList = "${zoneList}${area.name}-")
#end
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -613,7 +631,9 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE.##
#end
...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ##
-#headlineLocList(${areas} true true true false true)
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${affectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -621,7 +641,7 @@ THIS IS A TEST MESSAGE.##
###############################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline #
###############################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!...
@@ -629,24 +649,24 @@ THIS IS A TEST MESSAGE.##
#####################################################
## Changed report to match selections in template
#####################################################
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
## Storm current location description
@@ -655,15 +675,15 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}.
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
${addInfo}
${scenario}
@@ -673,13 +693,13 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat})
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -691,7 +711,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -699,7 +719,7 @@ THIS IS A TEST MESSAGE. ##
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
-#if(${list.contains($bullets, "floodMoving")})
+#if(${list.contains(${bullets}, "floodMoving")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -711,13 +731,13 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -726,31 +746,31 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "taddCTA")})
+#if(${list.contains(${bullets}, "taddCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
+#if(${list.contains(${bullets}, "vehicleCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
@@ -768,7 +788,9 @@ EXPIRED AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone
#else
WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ##
#end
-#headlineLocList(${areas} true true true false true)
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#headlineLocList(${affectedCounties} true true true false)
...##
########### END NEW HEADLINE CODE ####################
@@ -790,4 +812,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml
index 486c36b5fd..cd164beda3 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml
@@ -6,7 +6,11 @@
Modified Phil Kurimski 02-29-2012 OB 12.2.1-3
Modified Qinglu Lin 04-04-2012 DR 14691. Added tag.
Modified Phil Kurimski 04-27-2012
- Modified Qinglu Lin 10-04-2012 DR 15426. Added damic to tag.
+ Evan Bookbinder 09-10-2012 DR15179 Added areaSource object to allow for
+ county-based headlines in zone based products.
+ Added settings for locations shapefile
+ Added new areaSource object
+ Evan Bookbinder 5-5-2013 fixed variable under areaSource objects
-->
@@ -24,6 +28,7 @@
+
-dam,ic,damic
+dam,ic
@@ -71,8 +76,8 @@
-
-
+
+
@@ -116,8 +121,8 @@
-
-
+
+
@@ -177,19 +182,23 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
-
+
+
@@ -244,19 +253,23 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
+
+
-
+
+
@@ -291,41 +304,70 @@
-
-
-
-
-
+false
-
- 0.00
- AND
- 0
-
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
-
- STATE_ZONE
- NAME
-
+
+
+
+
+
+
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
+
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
- false
-
-
+ 1
true
8.0
5
@@ -333,6 +375,7 @@
4
8
Name
+ AREA
NAME
STATE
@@ -345,11 +388,16 @@
+
+
+
-
+
NAME
+ 1
+ AREA
POINTS
true
30
@@ -357,17 +405,22 @@
warngenlev
population
+ distance
-
+
+
+
+
-
-
+
NAME
+ AREA
+ 1
POINTS
true
10
@@ -377,8 +430,11 @@
-
+
+
+
+
@@ -389,7 +445,7 @@ and place into this template
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm
index 6280b8650b..1edd427b5b 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm
@@ -5,6 +5,8 @@
## VERSION AWIPS II 1.1 - JUL 14 2011 OB11.7 ##
## VERSION AWIPS II 1.2 - AUG 18 2011 OB11.8 ##
## VERSION AWIPS II 1.3 - SEP 23 2011 OB11.8 ##
+## VERSION AWIPS II 1.4 - JUN 26 2013 OB13.4.1 ##
+## to add "U" Unknown servity ##
#################################################
##
#if(${action} == "EXT")
@@ -14,11 +16,11 @@
#set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})})
#set($extend = false)
#end
-#if(${list.contains($bullets, "sev1")})
+#if(${list.contains(${bullets}, "sev1")})
#set($sev = "1")
-#elseif(${list.contains($bullets, "sev2")})
+#elseif(${list.contains(${bullets}, "sev2")})
#set($sev = "2")
-#elseif(${list.contains($bullets, "sev3")})
+#elseif(${list.contains(${bullets}, "sev3")})
#set($sev = "3")
#else
#set($sev = "0")
@@ -34,48 +36,48 @@
#set($ruleofthumb = "")
#set($sitespecCTA = "")
#set($volcanoCTA = "")
-#if(${list.contains($bullets, "levee")})
+#if(${list.contains(${bullets}, "levee")})
#set($ic = "DM")
#set($hycType = "A LEVEE FAILURE")
#set($reportType1 = "A LEVEE ON THE !** **! RIVER AT !** **! FAILED CAUSING FLASH FLOODING OF IMMEDIATELY SURROUNDING AREAS")
-#elseif(${list.contains($bullets, "floodgate")})
+#elseif(${list.contains(${bullets}, "floodgate")})
#set($ic = "DR")
#set($hycType = "A DAM FLOODGATE RELEASE")
#set($reportType1 = "THE FLOODGATES ON THE !** **! DAM WERE OPENED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
-#elseif(${list.contains($bullets, "glacier")})
+#elseif(${list.contains(${bullets}, "glacier")})
#set($ic = "GO")
#set($hycType = "A GLACIAL-DAMMED LAKE OUTBURST FLOODING")
#set($reportType1 = "A GLACIER AT !** **! HAS MELTED...RELEASING LARGE QUANTITIES OF IMPOUNDED WATER AND CAUSING FLASH FLOODING !** **!")
-#elseif(${list.contains($bullets, "icejam")})
+#elseif(${list.contains(${bullets}, "icejam")})
#set($ic = "IJ")
#set($hycType = "ICE JAM FLOODING")
#set($reportType1 = "AN ICE JAM ON THE !** **! RIVER AT !** **! BROKE CAUSING FLASH FLOODING DOWNSTREAM")
-#elseif(${list.contains($bullets, "rain")})
+#elseif(${list.contains(${bullets}, "rain")})
#set($ic = "RS")
#set($hycType = "EXTREMELY RAPID RAIN SNOW MELT")
#set($reportType1 = "RAIN FALLING ON EXISTING SNOWPACK WAS GENERATING FLASH FLOODING FROM EXCESSIVE RUNOFF")
-#elseif(${list.contains($bullets, "volcano")})
+#elseif(${list.contains(${bullets}, "volcano")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID SNOWMELT ON ITS SLOPES AND GENERATING FLASH FLOODING")
-#elseif(${list.contains($bullets, "volcanoLahar")})
+#elseif(${list.contains(${bullets}, "volcanoLahar")})
#set($ic = "SM")
#set($hycType = "VOLCANIC SNOW MELT")
#set($ctaSelected = "YES")
#set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK AND HOT WATER TO FLOW DOWN THE MOUNTAIN THROUGH !** DRAINAGE **! AND GENERATE FLASH FLOODING")
#set($volcanoCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD HEAD TO HIGHER GROUND IMMEDIATELY.")
-#elseif(${list.contains($bullets, "dam")})
+#elseif(${list.contains(${bullets}, "dam")})
#set($ic = "DM")
#set($hycType = "A DAM FAILURE")
#set($reportType1 = "THE !** **! DAM FAILED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER")
#set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY")
-#elseif(${list.contains($bullets, "siteimminent")})
+#elseif(${list.contains(${bullets}, "siteimminent")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($reportType1 = "THE IMMINENT FAILURE OF !** **! DAM")
#set($reportType2 = "THE IMMINENT FAILURE OF")
#set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY")
-#elseif(${list.contains($bullets, "sitefailed")})
+#elseif(${list.contains(${bullets}, "sitefailed")})
#set($ic = "DM")
#set($hycType = "A DAM BREAK")
#set($reportType1 = "THE FAILURE OF !** **! DAM")
@@ -99,44 +101,44 @@
## from the LLL-damInfo.txt file in AWIPS 1. If you have any questions
## please contact Phil Kurimski - WFO DTX
#########################################################################
-#if(${list.contains($bullets, "BigRockDam")})
+#if(${list.contains(${bullets}, "BigRockDam")})
#set($riverName = "PHIL RIVER")
#set($damName = "BIG ROCK DAM")
#set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES")
#end
-#if(${list.contains($bullets, "BigRockhighfast")})
+#if(${list.contains(${bullets}, "BigRockhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockhighnormal")})
+#if(${list.contains(${bullets}, "BigRockhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumfast")})
+#if(${list.contains(${bullets}, "BigRockmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockmediumnormal")})
+#if(${list.contains(${bullets}, "BigRockmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BigRockruleofthumb")})
+#if(${list.contains(${bullets}, "BigRockruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
-#if(${list.contains($bullets, "BranchedOakDam")})
+#if(${list.contains(${bullets}, "BranchedOakDam")})
#set($riverName = "KELLS RIVER")
#set($damName = "BRANCHED OAK DAM")
#set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES")
#end
-#if(${list.contains($bullets, "BranchedOakhighfast")})
+#if(${list.contains(${bullets}, "BranchedOakhighfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakhighnormal")})
+#if(${list.contains(${bullets}, "BranchedOakhighnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumfast")})
+#if(${list.contains(${bullets}, "BranchedOakmediumfast")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakmediumnormal")})
+#if(${list.contains(${bullets}, "BranchedOakmediumnormal")})
#set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.")
#end
-#if(${list.contains($bullets, "BranchedOakruleofthumb")})
+#if(${list.contains(${bullets}, "BranchedOakruleofthumb")})
#set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.")
#end
#######################################################################
@@ -146,8 +148,8 @@
## the word "Dam". If you end with a different word you will need
## to modify the loop below.
########################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("Dam"))
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("Dam")})
#set($ctaSelected = "YES")
#set($sitespecSelected = "YES")
#set($hycType = "THE ${riverName} BELOW ${damName}")
@@ -193,7 +195,9 @@ THIS IS A TEST MESSAGE. ##
#######################################################################
FLASH FLOOD WARNING FOR...
${hycType} IN...
-#firstBullet(${areas})
+###firstBullet(${areas})
+##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT
+#firstBullet(${affectedCounties})
* ##
#if(${productClass}=="T")
@@ -201,24 +205,24 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#set ($report = "${reportType1}")
-#if(${list.contains($bullets, "county")})
- #set ($report = "COUNTY DISPATCH REPORTED ${reportType1}")
+#set($report = "${reportType1}")
+#if(${list.contains(${bullets}, "county")})
+ #set($report = "COUNTY DISPATCH REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "corps")})
- #set ($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "corps")})
+ #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "damop")})
- #set ($report = "DAM OPERATORS REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "damop")})
+ #set($report = "DAM OPERATORS REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "bureau")})
- #set ($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "bureau")})
+ #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${reportType1}")
#end
* ##
@@ -230,19 +234,19 @@ THIS IS A TEST MESSAGE. ##
##########################################################################
## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet #
##########################################################################
-#if(${list.contains($bullets, "ffwEmergency")})
+#if(${list.contains(${bullets}, "ffwEmergency")})
THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!.
#end
-#set ($phenomena = "FLASH FLOOD")
-#set ($warningType = "WARNING")
+#set($phenomena = "FLASH FLOOD")
+#set($warningType = "WARNING")
##########################################################################
## Optional 4th bullet...comment out if not needed.
##########################################################################
## This first if loop will override the locations impacted statement
## with the site specific information in the 4th bullet.
##########################################################################
-#if (${sitespecSelected} == "YES")
+#if(${sitespecSelected} == "YES")
* ##
${addInfo}
@@ -253,14 +257,14 @@ ${ruleofthumb}
##########################################################################
## Continue with the regular 4th bullet information
##########################################################################
-#elseif(${list.contains($bullets, "pathcast")})
+#elseif(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -273,7 +277,7 @@ THIS IS A TEST MESSAGE. ##
#end
############################ End of Optional 4th Bullet ###########################
-#if(${list.contains($bullets, "drainages")})
+#if(${list.contains(${bullets}, "drainages")})
#drainages(${riverdrainages})
#end
@@ -281,7 +285,7 @@ THIS IS A TEST MESSAGE. ##
## parse file command here is to pull in mile marker info
## #parse("mileMarkers.vm")
-#if(${list.contains($bullets, "floodMoving")})
+#if(${list.contains(${bullets}, "floodMoving")})
FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!.
#end
@@ -290,16 +294,16 @@ FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**loc
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
@@ -308,31 +312,31 @@ ${sitespecCTA}
${volcanoCTA}
-#if(${list.contains($bullets, "taddCTA")})
+#if(${list.contains(${bullets}, "taddCTA")})
MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING.
#end
-#if(${list.contains($bullets, "vehicleCTA")})
+#if(${list.contains(${bullets}, "vehicleCTA")})
DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "warningMeansCTA")})
+#if(${list.contains(${bullets}, "warningMeansCTA")})
A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND.
#end
-#if(${list.contains($bullets, "powerFloodCTA")})
+#if(${list.contains(${bullets}, "powerFloodCTA")})
DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
@@ -345,4 +349,4 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml
index 5903f679cc..44d87c07d0 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml
@@ -6,9 +6,12 @@
Modified Phil Kurimski 01-26-2012 OB 12.1.1-1
Modified Phil Kurimski 02-29-2012 OB 12.2.1-3
Modified Qinglu Lin 04-04-2012 DR 14691. Added tag.
- Modified Phil Kurimski 04-27-2012
- Modified Qinglu Lin 10-04-2012 DR 15426. Added damic to tag.
--->
+ Modified Phil Kurimski 04-27-2012
+ Modified Evan Bookbinder 09-12-2012 DR15179 Added areaSource object to
+ allow for county-based headlines in zone based products.
+ Modified Evan Bookbinder 05-05-2013 fixed variable under areaSource objects
+ Modified Evan Bookbinder 06-26-2013 Added "U" Unknown severity
+-->
mi
@@ -68,12 +71,13 @@
-dam,ic,damic
+dam,ic
+
@@ -93,15 +97,15 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
@@ -139,6 +143,7 @@
+
@@ -158,19 +163,23 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
@@ -202,6 +211,7 @@
+
@@ -221,19 +231,23 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
@@ -263,41 +277,72 @@
+false
+
-
-
-
+
+
+
-
- 0.00
- AND
- 0
-
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
-
- STATE_ZONE
- NAME
-
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
+
+
+
+ COUNTY
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
- false
-
+ 1
+ AREA
true
8.0
5
@@ -317,40 +362,53 @@
+
+
+
NAME
+ 1
+ AREA
POINTS
true
30
200
-
+
+
+
+
warngenlev
population
+ distance
-
NAME
+ 1
+ AREA
POINTS
true
10
200
- name
+ distance
-
+
+
+
+
@@ -360,8 +418,8 @@ and place into this template
- City
-
+ WarnGenLoc
+
Zone
States
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/pointMarkers.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/pointMarkers.vm
new file mode 100644
index 0000000000..8d38cd80ea
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/pointMarkers.vm
@@ -0,0 +1,91 @@
+#*
+pointMarkers.vm
+CODE FROM mileMarkers 2-6-2013 BY MIKE DANGELO, EVAN BOOKBINDER AND DAVE TOMALAK.
+
+To get point locations output: Use this call to #pmarkers() from any vm template/file.
+ (The macro #pmarkers resides in VM_global_library.vm).
+
+#pmarkers($markers, $id, $preamble, $type, $column)
+
+Arguments passed to #pmarkers:
+$markers = a string, and must be the exact set in the XML for this road
+ example: ${stadiumName} corresponds to a in XML
+$id = the sequential-numeric IDs from the database used to determine if/where there are any logical
+ breaks in the mile markers. This field is also set in the XML
+ example: ${stadiumGid} corresponds to a in XML
+$preamble = a string "OUTPUT TEXT" which is a lead in to the list $type ("THE FOLLOWING")
+$type = a string "OUTPUT TEXT" describing the place(s) in the database(s) - do not make plural (pmarkers macro will append an "S" to this field)
+ examples: "STADIUM" or "VENUE" (may be left blank "")
+$column = a boolean expression (true or false)
+ - true makes output in one column,
+ - false makes output a sentence ("COORS FIELD...BIG CHURCH...AND BLANK STADIUM.")
+
+EXAMPLE OF OUTPUT FOR ONE DATABASE ONLY:
+
+ where your warning box covers 3 points in the databaseName "stadiumName"
+ yields:
+THIS INCLUDES THE FOLLOWING VENUES COORS FIELD...BIG CHURCH...AND BLANK STADIUM."
+#pmarkers(${universitiesName},${universitiesGid}, "", "", true)
+ where your warning box covers 3 points in the databaseName "universitiesName"
+ yields:
+THIS INCLUDES...
+PENN STATE UNIVERSITY...
+THE UNIVERSITY OF COLORADO...
+MICHIGAN TECH UNIVERSITY...
+UNIVERSITY OF WISCONSIN...
+AND THE COLLEGE OF CHARLESTON.
+
+**************************************************************************
+YOU MAY CALL A LARGE NUMBER OF DATABASES (LISTS OF LOCATIONS) ALL AT ONCE.
+To use/call this (suggested) method, you need to fill in 3 arrays
+of the info from your
+corresponding XML file (usually pointMarkers.xml).
+The 3 arrays are:
+
+$databaseName -- array of pointSource objects containing the location names. ($markers)
+ Substitute all your NAMES
+ example: #set($databaseName = [${stadiumNames},${universitiesNames},${eventsNames}])
+
+$databaseId -- array of plain numbers which are used to order the output. ($id)
+ Substitute all your GID's
+ example: #set($databaseId = [${stadiumId},${universitiesId},${eventsId}])
+
+$pointspecificName -- array of descriptions/plain English names for whatever the locations are. ($preamble)
+ This can be as generic as 'LOCATIONS' or even blank ''.
+ example: #set($pointspecificName = ['STADIUMS','UNIVERSITIES','EVENT LOCATIONS'])
+
+*#
+
+#set($hits = 0)
+#set($pointbigList = '')
+######### EXAMPLES
+## #set($databaseName = [${stadiumNames},${universitiesNames},${eventsNames}])
+## #set($databaseId = [${stadiumId},${universitiesId},${eventsId}])
+## #set($pointspecificName = ['STADIUMS','UNIVERSITIES','EVENT LOCATIONS'])
+###########################################################################
+#set($itemCount = 0)
+#foreach($specName in ${pointspecificName})
+#set($itemCount = ${itemCount} + 1)
+#set($itemCount2 = 0)
+#foreach($dbName in ${databaseName})
+#set($itemCount2 = ${itemCount2} + 1)
+#set($itemCount3 = 0)
+#foreach($dbId in ${databaseId})
+#set($itemCount3 = ${itemCount3} + 1)
+#if($itemCount3 == ${itemCount2} && ${itemCount2} == ${itemCount})
+#set($checker = "#pmarkers(${dbName},${dbId},${specName},'LOCATION',false)")
+#if($checker.length() > 0)
+#set($hits = ${hits} + 1)
+#set($pointbigList = "${pointbigList} ${checker}")
+#end
+#end
+#end
+#end
+#end
+#if($hits == 1)
+THIS INCLUDES${pointbigList}
+#end
+#if($hits > 1)
+THIS INCLUDES...
+${pointbigList}
+#end
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/pointMarkers.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/pointMarkers.xml
new file mode 100644
index 0000000000..880f9f5f96
--- /dev/null
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/pointMarkers.xml
@@ -0,0 +1,36 @@
+
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.vm
index 6baef876b6..dba2ab4ab9 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.vm
@@ -8,189 +8,194 @@
## 11-04-2011 OB11.9-3 (DRs) ##
## 2-24-2012 OB12.2.1 CLEANUP ##
## BY QINGLU LIN 6-18-2012 DR 15043 use duration ##
-## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
## BY QINGLU LIN 8-14-2012 DR 14493 use TMLtime ##
+## Mike Dangelo 9-13-2012 minor tweaks to some ${variables}##
+## Mike Dangelo 2-4-2013 NWS Mets detected a svr ##
################################################################
##
##SET SOME INITIAL VARIABLES
#if(${stormType} == "line")
- #set ($report = "A LINE OF SEVERE THUNDERSTORMS WAS REPORTED")
+ #set($report = "A LINE OF SEVERE THUNDERSTORMS WAS REPORTED")
#set($reportType1 = "LINE OF SEVERE THUNDERSTORMS")
#set($reportType2 = "THESE STORMS WERE")
#else
- #set ($report = "A SEVERE THUNDERSTORM WAS REPORTED")
+ #set($report = "A SEVERE THUNDERSTORM WAS REPORTED")
#set($reportType1 = "SEVERE THUNDERSTORM")
#set($reportType2 = "THIS STORM WAS")
#end
#############################################################
#### CREATE BASIS WORDING ###################################
#############################################################
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "DOPPLER RADAR INDICATED A ${reportType1}")
+#if(${list.contains(${bullets}, "meteorologists")})
+ #set($report = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A ${reportType1}")
#set($reportAuthSVR = "CAPABLE OF PRODUCING")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "DOPPLER RADAR INDICATED A ${reportType1}")
+ #set($reportAuthSVR = "CAPABLE OF PRODUCING")
+#end
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "emergencyMgmt")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "emergencyMgmt")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
-#set ($windSpeed = 0)
-#if(${list.contains($bullets, "60mphWind")})
- #set ($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
- #set ($windSpeed = 60)
- #set ($windTag = "60MPH")
+#set($windSpeed = 0)
+#if(${list.contains(${bullets}, "60mphWind")})
+ #set($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
+ #set($windSpeed = 60)
+ #set($windTag = "60MPH")
#end
-#if(${list.contains($bullets, "70mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
- #set ($windSpeed = 70)
- #set ($windTag = "70MPH")
+#if(${list.contains(${bullets}, "70mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
+ #set($windSpeed = 70)
+ #set($windTag = "70MPH")
#end
-#if(${list.contains($bullets, "80mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
- #set ($windSpeed = 80)
- #set ($windTag = "80MPH")
+#if(${list.contains(${bullets}, "80mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
+ #set($windSpeed = 80)
+ #set($windTag = "80MPH")
#end
-#if(${list.contains($bullets, "90mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
- #set ($windSpeed = 90)
- #set ($windTag = "90MPH")
+#if(${list.contains(${bullets}, "90mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
+ #set($windSpeed = 90)
+ #set($windTag = "90MPH")
#end
-#if(${list.contains($bullets, "100mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
- #set ($windSpeed = 100)
- #set ($windTag = "100MPH")
+#if(${list.contains(${bullets}, "100mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
+ #set($windSpeed = 100)
+ #set($windTag = "100MPH")
#end
###################################################
## HANDLE HAIL POSSIBILITIES ######################
###################################################
-#set ($hailSize = 0)
-#set ($smallHail = "")
-#if(${list.contains($bullets, "pennyHail")})
- #set ($hailThreat = "PENNY SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.75)
- #set ($hailTag = "0.75IN")
+#set($hailSize = 0)
+#set($smallHail = "")
+#if(${list.contains(${bullets}, "pennyHail")})
+ #set($hailThreat = "PENNY SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.75)
+ #set($hailTag = "0.75IN")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailThreat = "NICKEL SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.88)
- #set ($hailTag = "0.88IN")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailThreat = "NICKEL SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.88)
+ #set($hailTag = "0.88IN")
#end
-#if(${list.contains($bullets, "quarterHail")})
- #set ($hailThreat = "QUARTER SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.00)
- #set ($hailTag = "1.00IN")
+#if(${list.contains(${bullets}, "quarterHail")})
+ #set($hailThreat = "QUARTER SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.00)
+ #set($hailTag = "1.00IN")
#end
-#if(${list.contains($bullets, "halfdollarHail")})
- #set ($hailThreat = "HALF DOLLAR SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.25)
- #set ($hailTag = "1.25IN")
+#if(${list.contains(${bullets}, "halfdollarHail")})
+ #set($hailThreat = "HALF DOLLAR SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.25)
+ #set($hailTag = "1.25IN")
#end
-#if(${list.contains($bullets, "pingpongHail")})
- #set ($hailThreat = "PING PONG BALL SIZE")
- #set ($hailLead = "LARGE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 1.50)
- #set ($hailTag = "1.50IN")
+#if(${list.contains(${bullets}, "pingpongHail")})
+ #set($hailThreat = "PING PONG BALL SIZE")
+ #set($hailLead = "LARGE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 1.50)
+ #set($hailTag = "1.50IN")
#end
-#if(${list.contains($bullets, "golfballHail")})
- #set ($hailThreat = "GOLF BALL SIZE")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 1.75)
- #set ($hailTag = "1.75IN")
+#if(${list.contains(${bullets}, "golfballHail")})
+ #set($hailThreat = "GOLF BALL SIZE")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 1.75)
+ #set($hailTag = "1.75IN")
#end
-#if(${list.contains($bullets, "twoinchHail")})
- #set ($hailThreat = "TWO INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 2.00)
- #set ($hailTag = "2.00IN")
+#if(${list.contains(${bullets}, "twoinchHail")})
+ #set($hailThreat = "TWO INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 2.00)
+ #set($hailTag = "2.00IN")
#end
-#if(${list.contains($bullets, "tennisBallHail")})
- #set ($hailThreat = "TENNIS BALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 2.50)
- #set ($hailTag = "2.50IN")
+#if(${list.contains(${bullets}, "tennisBallHail")})
+ #set($hailThreat = "TENNIS BALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 2.50)
+ #set($hailTag = "2.50IN")
#end
-#if(${list.contains($bullets, "baseballHail")})
- #set ($hailThreat = "BASEBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 2.75)
- #set ($hailTag = "2.75IN")
+#if(${list.contains(${bullets}, "baseballHail")})
+ #set($hailThreat = "BASEBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 2.75)
+ #set($hailTag = "2.75IN")
#end
-#if(${list.contains($bullets, "threeinchHail")})
- #set ($hailThreat = "THREE INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 3.00)
- #set ($hailTag = "3.00IN")
+#if(${list.contains(${bullets}, "threeinchHail")})
+ #set($hailThreat = "THREE INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 3.00)
+ #set($hailTag = "3.00IN")
#end
-#if(${list.contains($bullets, "softballHail")})
- #set ($hailThreat = "SOFTBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 4.25)
- #set ($hailTag = "4.25IN")
+#if(${list.contains(${bullets}, "softballHail")})
+ #set($hailThreat = "SOFTBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 4.25)
+ #set($hailTag = "4.25IN")
#end
-#if(${list.contains($bullets, "grapefruitHail")})
- #set ($hailThreat = "GRAPEFRUIT SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 4.00)
- #set ($hailTag = "4.00IN")
+#if(${list.contains(${bullets}, "grapefruitHail")})
+ #set($hailThreat = "GRAPEFRUIT SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 4.00)
+ #set($hailTag = "4.00IN")
#end
###################################################################
### CHANGE MND EAS INSTRUCTIONS FOR REALLY SEVERE STORMS ##########
###################################################################
-#if (${hailSize} >=2 || ${windSpeed} >= 80)
- #set ($easActivation = "EAS ACTIVATION REQUESTED")
+#if(${hailSize} >=2 || ${windSpeed} >= 80)
+ #set($easActivation = "EAS ACTIVATION REQUESTED")
#else
- #set ($easActivation = "IMMEDIATE BROADCAST REQUESTED")
+ #set($easActivation = "IMMEDIATE BROADCAST REQUESTED")
#end
##################################################################
######### CREATE A WIND AND HAIL SENTENCE ########################
##################################################################
-#if (${hailSize} < 1 && ${windSpeed} < 58)
- #set ($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #set ($windhailTag = "WIND...HAIL <50MPH <.75IN")
+#if(${hailSize} < 1 && ${windSpeed} < 58)
+ #set($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+ #set($windhailTag = "WIND...HAIL <50MPH <.75IN")
#elseif(${hailSize} > 0 && ${windSpeed} > 0)
- #if (${hailSize} < 1)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
- #set ($smallHail = "${hailThreat}${hailTrail} MAY ALSO ACCOMPANY THE DAMAGING WINDS.")
+ #if(${hailSize} < 1)
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #set($smallHail = "${hailThreat}${hailTrail} MAY ALSO ACCOMPANY THE DAMAGING WINDS.")
#else
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
#end
- #set ($windhailTag = "WIND...HAIL ${windTag} ${hailTag}")
+ #set($windhailTag = "WIND...HAIL ${windTag} ${hailTag}")
#elseif(${hailSize} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
- #set ($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
+ #set($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
#elseif(${windSpeed} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
- #set ($windhailTag = "WIND...HAIL ${windTag} <.75IN")
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #set($windhailTag = "WIND...HAIL ${windTag} <.75IN")
#end
################################################################
######### ~*~*~*~*~*~* BEGIN OUTPUT ~*~*~*~*~*~*~ ##############
@@ -242,7 +247,11 @@ THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
...${report}${hailwind}. ${reportType2} LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", true)
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
. ${reportType2} NEARLY STATIONARY. ${smallHail}
#else
@@ -254,20 +263,20 @@ THIS IS A TEST MESSAGE. ##
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
#if(${stormType} == "line")
-#set ($pathcastLead = "SEVERE THUNDERSTORMS")
-#set ($otherLead = "THESE SEVERE THUNDERSTORMS")
+#set($pathcastLead = "SEVERE THUNDERSTORMS")
+#set($otherLead = "THESE SEVERE THUNDERSTORMS")
#else
-#set ($pathcastLead = "THIS SEVERE THUNDERSTORM")
-#set ($otherLead = "THIS SEVERE THUNDERSTORM")
+#set($pathcastLead = "THIS SEVERE THUNDERSTORM")
+#set($otherLead = "THIS SEVERE THUNDERSTORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -280,16 +289,22 @@ THIS IS A TEST MESSAGE. ##
#else
* LOCATIONS IMPACTED INCLUDE...
- !** YOU DID NOT SELECT A PATHCAST OR LIST OF CITIES BULLET. PLEASE ENTER LOCATIONS IMPACTED OR REGENERATE THE WARNING WITH THE CORRECT LOCATIONS BULLET SELECTED **!.
+!** YOU DID NOT SELECT PATHCAST OR LIST OF CITIES BULLET.
+PLEASE ENTER LOCATIONS IMPACTED OR REGENERATE THE WARNING WITH
+THE CORRECT LOCATIONS BULLET SELECTED **!.
#end
## Uncomment below pull in mile marker info
-## #parse("mileMarkers.vm")
+##parse("mileMarkers.vm")
+## Uncomment below pull in point marker info
+##parse("pointMarkers.vm")
+## #pmarkers(${locpointsName},${locpointsGid}, "THE FOLLOWING", "VENUE", false)
+
##
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
@@ -302,11 +317,11 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
##################################
######### CALLS TO ACTION ########
##################################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -315,27 +330,27 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "torWatchRemainsInEffectCTA")})
-A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. ALTHOUGH NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
+#if(${list.contains(${bullets}, "torWatchCTA")})
+A TORNADO WATCH REMAINS IN EFFECT FOR THE AREA. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
#end
##
-#if(${list.contains($bullets, "genericCTA")})
-SEVERE THUNDERSTORMS PRODUCE DAMAGING WINDS IN EXCESS OF 60 MPH...DESTRUCTIVE HAIL...DEADLY LIGHTNING AND VERY HEAVY RAIN. FOR YOUR PROTECTION...MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. HEAVY RAINS FLOOD ROADS QUICKLY SO DO NOT DRIVE INTO AREAS WHERE WATER COVERS THE ROAD.
+#if(${list.contains(${bullets}, "genericCTA")})
+SEVERE THUNDERSTORMS PRODUCE DAMAGING WINDS...DESTRUCTIVE HAIL...DEADLY LIGHTNING AND VERY HEAVY RAIN. FOR YOUR PROTECTION...MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. HEAVY RAINS FLOOD ROADS QUICKLY SO DO NOT DRIVE INTO AREAS WHERE WATER COVERS THE ROAD.
#end
##
-#if(${list.contains($bullets, "canProduceTornadoesCTA")})
+#if(${list.contains(${bullets}, "canProduceTornadoesCTA")})
#if(${stormType} == "line")
-DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THESE STORMS. WHILE NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR
+DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THESE STORMS. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR
#else
-DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THIS STORM. WHILE NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
+DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THIS STORM. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
#end
#end
##
-#if(${list.contains($bullets, "largeHailCTA")})
+#if(${list.contains(${bullets}, "largeHailCTA")})
#if(${stormType} == "line")
IF YOU ARE IN THE PATH OF THESE STORMS...PREPARE IMMEDIATELY FOR LARGE HAIL AND DEADLY CLOUD TO GROUND LIGHTNING. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...PREFERABLY INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -345,7 +360,7 @@ IF YOU ARE IN THE PATH OF THIS STORM...PREPARE IMMEDIATELY FOR LARGE HAIL AND DE
#end
#end
##
-#if(${list.contains($bullets, "veryLargeHailCTA")})
+#if(${list.contains(${bullets}, "veryLargeHailCTA")})
#if(${stormType} == "line")
THESE ARE DANGEROUS STORMS. IF YOU ARE IN THEIR PATH...PREPARE IMMEDIATELY FOR LARGE DESTRUCTIVE HAIL CAPABLE OF PRODUCING SIGNIFICANT DAMAGE. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...PREFERABLE INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -355,7 +370,7 @@ THIS IS A DANGEROUS STORM. IF YOU ARE IN ITS PATH...PREPARE IMMEDIATELY FOR LARG
#end
#end
##
-#if(${list.contains($bullets, "largeHailWindCTA")})
+#if(${list.contains(${bullets}, "largeHailWindCTA")})
#if(${stormType} == "line")
IF YOU ARE IN THE PATH OF THESE STORMS...PREPARE IMMEDIATELY FOR LARGE HAIL AND DAMAGING WINDS. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...PREFERABLY INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -365,7 +380,7 @@ IF YOU ARE IN THE PATH OF THIS STORM...PREPARE IMMEDIATELY FOR LARGE HAIL AND DA
#end
#end
##
-#if(${list.contains($bullets, "historyHailCTA")})
+#if(${list.contains(${bullets}, "historyHailCTA")})
#if(${stormType} == "line")
THESE STORMS HAVE A HISTORY OF PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -375,7 +390,7 @@ THIS STORM HAS A HISTORY OF PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STUR
#end
#end
##
-#if(${list.contains($bullets, "historyWindCTA")})
+#if(${list.contains(${bullets}, "historyWindCTA")})
#if(${stormType} == "line")
THESE STORMS HAVE A HISTORY OF PRODUCING WIND DAMAGE. THIS IS A VERY DANGEROUS SITUATION. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -385,7 +400,7 @@ THIS STORM HAS A HISTORY OF PRODUCING WIND DAMAGE. THIS IS A VERY DANGEROUS SITU
#end
#end
##
-#if(${list.contains($bullets, "historyWindHailCTA")})
+#if(${list.contains(${bullets}, "historyWindHailCTA")})
#if(${stormType} == "line")
THESE STORMS HAVE A HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL. THIS IS A VERY DANGEROUS SITUATION. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -395,32 +410,32 @@ THIS STORM HAS A HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL. THIS IS
#end
#end
##
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER...CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
##
-#if(${list.contains($bullets, "squallLineCTA")})
+#if(${list.contains(${bullets}, "squallLineCTA")})
#if(${stormType} == "line")
-INTENSE SQUALL LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES IN ADDITION TO WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
+INTENSE THUNDERSTORM LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
#else
-INTENSE SQUALL LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES IN ADDITION TO WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THIS STORM HAS THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
+INTENSE THUNDERSTORM LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THIS STORM HAS THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
#end
#end
##
-#if(${list.contains($bullets, "superCellsCTA")})
+#if(${list.contains(${bullets}, "superCellsCTA")})
THIS IS A SUPERCELL THUNDERSTORM. DUE TO THE ROTATING NATURE OF THESE STORMS...THEY ARE CAPABLE OF PRODUCING ALL TYPES OF SEVERE WEATHER...INCLUDING EXTREMELY LARGE HAIL...DESTRUCTIVE STRAIGHT LINE WINDS...AND POSSIBLY TORNADOES. MOVE QUICKLY TO A SAFE SHELTER...PREFERABLY INTO A BASEMENT...OR AN INTERIOR ROOM SUCH AS A BATHROOM OR CLOSET.
#end
##
-#if(${list.contains($bullets, "gustFrontOutflowCTA")})
+#if(${list.contains(${bullets}, "gustFrontOutflowCTA")})
WIND DAMAGE WITH THIS STORM WILL OCCUR WELL AHEAD OF ANY RAIN OR LIGHTNING. DO NOT WAIT FOR THE SOUND OF THUNDER BEFORE TAKING COVER. SEEK SHELTER IMMEDIATELY INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
#end
##
-#if(${list.contains($bullets, "extremeWindsCTA")})
+#if(${list.contains(${bullets}, "extremeWindsCTA")})
#if(${stormType} == "line")
THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED. MOBILE HOMES AND HIGH PROFILE VEHICLES ARE ESPECIALLY SUSCEPTIBLE TO WINDS OF THIS MAGNITUDE AND MAY BE OVERTURNED. FOR YOUR PROTECTION MOVE IMMEDIATELY TO A SAFE SHELTER OR TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
@@ -430,17 +445,17 @@ THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED.
#end
#end
##
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
IN ADDITION TO LARGE HAIL AND DAMAGING WINDS...CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THIS STORM. MOVE INDOORS IMMEDIATELY. LIGHTNING IS ONE OF NATURES LEADING KILLERS. REMEMBER...IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING.
#end
##
-#if(${list.contains($bullets, "boatersCTA")})
+#if(${list.contains(${bullets}, "boatersCTA")})
IF ON OR NEAR !**Name Of Lake**!...GET OUT OF THE WATER AND MOVE INDOORS OR INSIDE A VEHICLE. REMEMBER...LIGHTNING CAN STRIKE OUT TO 15 MILES FROM THE PARENT THUNDERSTORM. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. MOVE TO SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
##
-#if(${list.contains($bullets, "torrentialRainfallCTA")})
+#if(${list.contains(${bullets}, "torrentialRainfallCTA")})
#if(${stormType} == "line")
TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THESE STORMS...AND MAY LEAD TO FLASH FLOODING. DO NOT DRIVE YOUR VEHICLE THROUGH FLOODED ROADWAYS.
@@ -454,43 +469,28 @@ TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FL
&&
#end
-##
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#* NO NEED TO INCLUDE SVR T-STM WATCHES IN A SVR WARNING!!!!
-#if(${list.contains($includedWatches, "svrWatches")})
-#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
-#
-#end
-*#
##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
+
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${TMLtime}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
## UNCOMMENT 2 LINES BELOW IF PARTICIPATING IN THE WIND/HAIL TAG EXPERIMENT
##
##${windhailTag}
-
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-!**NAME/INITIALS**!
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml
index c3f3400904..d1f760aa59 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeThunderstormWarning.xml
@@ -7,6 +7,9 @@
Mike Dangelo WFO CTP 9-22-2011 to add in remarks and lines which will allow Zone-based products (Alaska TIM)
Phil Kurimski WFO DTX 2-28-2012 to fix parse string issues
Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Create new areaSource objects
+ Mike Dangelo 2-4-2013 Added commented bullet for METS DETECTED
-->
@@ -20,8 +23,8 @@
County Names
County Warning Areas
-
-
+
+
NEW
@@ -74,40 +77,41 @@
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
@@ -117,7 +121,7 @@
-
+
@@ -129,40 +133,45 @@
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
-
+
-
+
@@ -172,7 +181,7 @@
-
+
@@ -183,53 +192,45 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
- name
-
-
+
+
+ County
+ 0.00
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -239,11 +240,15 @@
NAME
+ AREA
POINTS
-
+
+
+
+
5
100
@@ -253,6 +258,7 @@
+ 1
true
8.0
5
@@ -260,40 +266,54 @@
10
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
- population
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -303,21 +323,25 @@
-
+
+
+
+
+
-
+
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.vm
index 82294739e7..1130d2d0a1 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.vm
@@ -10,14 +10,24 @@
## BY MIKE REGA 5-3-2012 DR 14885 MND blank line ##
## BY QINGLU LIN 6-18-2012 DR 15043 use duration ##
## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad##
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
+## Mike Dangelo 2-5-2013 NWS Mets Detected options ##
+## PHIL KURIMSKI 2-6-2013 Tor emergency preamble ##
#################################################################
##
###################################################################
## Set null variables for wind/hail tags used in the template ##
###################################################################
-#set ($windhailTag = "")
-#set ($TORhailTag = "")
+#set($windhailTag = "")
+#set($TORhailTag = "")
+###############################################################################
+## Establish the preamble for the default CTA if a Tor Emergency is selected
+###############################################################################
+#if(${list.contains($bullets, "torEmergency")})
+ #set($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
+#else
+ #set($preAmble = "")
+#end
############################################
## CREATE INITIAL SET OF VARIABLES ##
############################################
@@ -118,13 +128,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
##
#if(${action}=="EXP" || ${action}=="CAN")
...THE ${eventType} WARNING FOR ##
-#headlineLocList(${areas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${areas} true true true false) ${expcanHLTag}...
## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE
#elseif(${action}=="CANCON" || ${CORCAN}=="true")
...THE ${eventType} WARNING FOR ##
-#headlineLocList(${cancelareas} true true true false true)
- ${expcanHLTag}...
+#headlineLocList(${cancelareas} true true true false) ${expcanHLTag}...
#end
############################
## END CAN/EXP HEADLINE ####
@@ -136,32 +144,32 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${action}=="EXP" || ${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true")
#### SET A DEFAULT STATEMENT IN CASE NO BULLET WAS SELECTED OR AVAILABLE
#if(${stormType} == "line")
- #set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE !** WEAKENED/MOVED OUT OF THE WARNED AREA **!. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE !** WEAKENED. **OR** MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
#else
#if(${phenomena}=="SV")
- #set($expcanPhrase = "THE SEVERE THUNDERSTORM WHICH PROMPTED THE WARNING HAS !** WEAKENED/MOVED OUT OF THE WARNED AREA **!. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE SEVERE THUNDERSTORM WHICH PROMPTED THE WARNING HAS !** WEAKENED. **OR** MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
#else
- #set($expcanPhrase = "THE TORNADIC THUNDERSTORM WHICH PROMPTED THE WARNING HAS !** WEAKENED/MOVED OUT OF THE WARNED AREA **!. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE TORNADIC THUNDERSTORM WHICH PROMPTED THE WARNING HAS !** WEAKENED. **OR** MOVED OUT OF THE WARNED AREA. **! THEREFORE THE WARNING ${expcanBODYTag}.")
#end
#end
#### WEAKENED BELOW SEVERE LIMITS
-#if(${list.contains($bullets, "weakened")})
+#if(${list.contains(${bullets}, "weakened")})
#if(${stormType} == "line")
#if(${phenomena}=="SV")
- #set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSE AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSES AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
- #set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEAR CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEAR TO BE CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
#else
#if(${phenomena}=="SV")
- #set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSE AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS WEAKENED BELOW SEVERE LIMITS...AND NO LONGER POSES AN IMMEDIATE THREAT TO LIFE OR PROPERTY. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
- #set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEARS CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
+ #set($expcanPhrase = "THE STORM WHICH PROMPTED THE WARNING HAS WEAKENED BELOW SEVERE LIMITS...AND NO LONGER APPEARS TO BE CAPABLE OF PRODUCING A TORNADO. THEREFORE THE WARNING ${expcanBODYTag}.")
#end
#end
#end
#### MOVED OUT OF THE WARNED AREA
-#if(${list.contains($bullets, "movedout")})
+#if(${list.contains(${bullets}, "movedout")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE MOVED OUT OF THE AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
@@ -169,7 +177,7 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#end
#### WEAKENED AND MOVED OUT OF THE AREA
-#if(${list.contains($bullets, "wkndandmoved")})
+#if(${list.contains(${bullets}, "wkndandmoved")})
#if(${stormType} == "line")
#set($expcanPhrase = "THE LINE OF STORMS WHICH PROMPTED THE WARNING HAVE WEAKENED BELOW SEVERE LIMITS...AND EXITED THE WARNED AREA. THEREFORE THE WARNING ${expcanBODYTag}.")
#else
@@ -177,19 +185,19 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#end
#### SVR UPGRADED TO TOR
-#if(${list.contains($bullets, "torupgrade")})
+#if(${list.contains(${bullets}, "torupgrade")})
#set($expcanPhrase = "THE SEVERE THUNDERSTORM WARNING THAT WAS PREVIOUSLY IN EFFECT HAS BEEN UPGRADED TO A TORNADO WARNING. PLEASE REFER TO THAT BULLETIN FOR THE LATEST INFORMATION ON THIS DANGEROUS WEATHER SITUATION.")
#end
#### SVR REISSUE
-#if(${list.contains($bullets, "svrreissue")})
+#if(${list.contains(${bullets}, "svrreissue")})
#set($expcanPhrase = "THE SEVERE THUNDERSTORM WARNING THAT WAS PREVIOUSLY IN EFFECT HAS BEEN REISSUED FOR !** INSERT COUNTY(IES)**! AND IS IN EFFECT UNTIL !**NEW WARNING TIME**!. PLEASE REFER TO THAT BULLETIN FOR THE LATEST SEVERE WEATHER INFORMATION.")
#end
#### TORNADO WARNING CANCEL -- SEVERE STILL IN EFFECT
-#if(${list.contains($bullets, "tordowngrade")})
+#if(${list.contains(${bullets}, "tordowngrade")})
#set($expcanPhrase = "THE TORNADO THREAT HAS DIMINISHED...THEREFORE THE TORNADO WARNING HAS BEEN CANCELLED. HOWEVER...LARGE HAIL AND DAMAGING WINDS REMAIN LIKELY AND A SEVERE THUNDERSTORM WARNING REMAINS IN EFFECT FOR THE AREA.")
#end
#### TORNADO WARNING EXPIRED - REISSUE
-#if(${list.contains($bullets, "torreissue")})
+#if(${list.contains(${bullets}, "torreissue")})
#set($expcanPhrase = "THE TORNADO WARNING THAT WAS PREVIOUSLY IN EFFECT HAS BEEN REISSUED FOR !** INSERT COUNTY(IES)**! AND IS IN EFFECT UNTIL !**NEW WARNING TIME**!. PLEASE REFER TO THAT BULLETIN FOR THE LATEST SEVERE WEATHER INFORMATION.")
#end
########################################
@@ -206,19 +214,19 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#set($addraincheck = 0)
#set($watchlead = "ADDITIONAL SEVERE THUNDERSTORM DEVELOPMENT REMAINS POSSIBLE")
##Hail still a threat
-#if(${list.contains($bullets, "stillhail")})
+#if(${list.contains(${bullets}, "stillhail")})
#set($addhail = "SMALL HAIL")
#set($addhailcheck = 1)
#set($watchlead = "IN ADDITION...SEVERE THUNDERSTORM REDEVELOPMENT REMAINS POSSIBLE")
#end
##Wind still a threat
-#if(${list.contains($bullets, "stillwind")})
+#if(${list.contains(${bullets}, "stillwind")})
#set($addwind = "GUSTY WINDS")
#set($addwindcheck = 1)
#set($watchlead = "IN ADDITION...SEVERE THUNDERSTORM REDEVELOPMENT REMAINS POSSIBLE")
#end
##Hvy rain still a threat
-#if(${list.contains($bullets, "stillrain")})
+#if(${list.contains(${bullets}, "stillrain")})
#set($addrain = "HEAVY RAIN")
#set($addraincheck = 1)
#set($watchlead = "IN ADDITION...SEVERE THUNDERSTORM REDEVELOPMENT REMAINS POSSIBLE")
@@ -226,19 +234,19 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## FORMULATE PHRASEOLOGY
#set($addthreat = "")
#if(${addhailcheck} == "1" && ${addwindcheck} == "0" && ${addraincheck} == "0" )
- #set($addthreat = " HOWEVER ${addhail} IS STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
- #set($addthreat = " HOWEVER ${addwind} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "0" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
- #set($addthreat = " HOWEVER ${addrain} IS STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
- #set($addthreat = " HOWEVER ${addhail} AND ${addwind} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "1" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
- #set($addthreat = " HOWEVER ${addhail} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
- #set($addthreat = " HOWEVER ${addwind} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
-#elseif (${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
- #set($addthreat = " HOWEVER ${addhail}....${addwind} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
+ #set($addthreat = "HOWEVER ${addhail} IS STILL POSSIBLE WITH ${stormTypePhrase}.")
+#elseif(${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
+ #set($addthreat = "HOWEVER ${addwind} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
+#elseif(${addhailcheck} == "0" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
+ #set($addthreat = "HOWEVER ${addrain} IS STILL POSSIBLE WITH ${stormTypePhrase}.")
+#elseif(${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "0" )
+ #set($addthreat = "HOWEVER ${addhail} AND ${addwind} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
+#elseif(${addhailcheck} == "1" && ${addwindcheck} == "0" && ${addraincheck} == "1" )
+ #set($addthreat = "HOWEVER ${addhail} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
+#elseif(${addhailcheck} == "0" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
+ #set($addthreat = "HOWEVER ${addwind} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
+#elseif(${addhailcheck} == "1" && ${addwindcheck} == "1" && ${addraincheck} == "1" )
+ #set($addthreat = "HOWEVER ${addhail}...${addwind} AND ${addrain} ARE STILL POSSIBLE WITH ${stormTypePhrase}.")
#end
${expcanPhrase} ${addthreat}
@@ -248,42 +256,35 @@ ${expcanPhrase} ${addthreat}
###########################################
## WATCHES ##
#############
-###if(${list.contains($includedWatches, "torWatches")})
+###if(${list.contains(${includedWatches}, "torWatches")})
###inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
###end
-###if(${list.contains($includedWatches, "svrWatches")})
+###if(${list.contains(${includedWatches}, "svrWatches")})
###insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
###end
-###end
-#if(${list.contains($bullets, "svrboxactive")})
+#if(${list.contains(${bullets}, "svrboxactive")})
${watchlead}...AND A SEVERE THUNDERSTORM WATCH REMAINS IN EFFECT UNTIL !** enter time here **!
#end
-#if (${list.contains($bullets, "torboxactive")})
+#if(${list.contains(${bullets}, "torboxactive")})
${watchlead}...AND A TORNADO WATCH REMAINS IN EFFECT UNTIL !** enter time here **!
#end
-#if(${list.contains($bullets, "reporttolaw")})
+#if(${list.contains(${bullets}, "reporttolaw")})
TO REPORT SEVERE WEATHER...CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE ${officeLoc}.
#end
-#if(${list.contains($bullets, "svrwrngactive")})
+#if(${list.contains(${bullets}, "svrwrngactive")})
REMEMBER...A SEVERE THUNDERSTORM WARNING STILL REMAINS IN EFFECT FOR !** PORTION AND COUNTY NAMES UNTIL TIME **!
#end
-#if(${list.contains($bullets, "torwrngactive")})
+#if(${list.contains(${bullets}, "torwrngactive")})
REMEMBER...A TORNADO WARNING STILL REMAINS IN EFFECT FOR !** PORTION AND COUNTY NAMES UNTIL TIME **!
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${now}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
@@ -336,21 +337,46 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
#if(${action}=="CANCON" || ${action}=="CON" || ${action}=="COR" || ${CORCAN}=="true")
...A ${eventType} WARNING REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone},${duration}) FOR ##
-#headlineLocList(${areas} true true true false true)
-...##
+#headlineLocList(${areas} true true true false)...
########### END NEW HEADLINE CODE ####################
#####################################################################
### TORNADO EMERGENCY PER NWS 10-511 DIRECTIVE #
#####################################################################
-
-#if(${list.contains($bullets, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergency")})
...THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...
#end
#set($reportType = "!** BASIS FOR WARNING **!")
#set($reportAuthSVR = "")
############### BASIS SECTION ####################
-#if(${list.contains($bullets, "dopplerTOR")})
+####### new mets detected code
+#if(${list.contains(${bullets}, "meteorologistsTOR")})
+ #if(${stormType} == "line")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO")
+ #set($reportType2 = "THESE DANGEROUS STORMS WERE")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #else
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO")
+ #set($reportType2 = "THIS DANGEROUS STORM WAS")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
+ #end
+#elseif(${list.contains(${bullets}, "meteorologistsSquallTOR")})
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE SQUALL LINE CAPABLE OF PRODUCING A TORNADO AS WELL AS DAMAGING STRAIGHT LINE WINDS")
+ #set($reportType2 = "THESE DANGEROUS STORMS WERE")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+#elseif(${list.contains(${bullets}, "meteorologistsLargeTOR")})
+ #if(${stormType} == "line")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A LARGE AND EXTREMELY DANGEROUS TORNADO")
+ #set($reportType2 = "THESE DANGEROUS STORMS WERE")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #else
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A LARGE AND EXTREMELY DANGEROUS TORNADO")
+ #set($reportType2 = "THIS DANGEROUS STORM WAS")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
+ #end
+#end
+####### end of new mets detected code
+#if(${list.contains(${bullets}, "dopplerTOR")})
#if(${stormType} == "line")
#set($reportType = "DOPPLER RADAR INDICATED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING TORNADOES")
#set($reportType2 = "THESE DANGEROUS STORMS WERE")
@@ -360,34 +386,34 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#set($reportType2 = "THIS DANGEROUS STORM WAS")
#set($pathcastLead = "THIS DANGEROUS STORM")
#end
-#elseif(${list.contains($bullets, "dopplerSquallTOR")})
+#elseif(${list.contains(${bullets}, "dopplerSquallTOR")})
#set($reportType = "DOPPLER RADAR INDICATED A SEVERE SQUALL LINE CAPABLE OF PRODUCING BOTH TORNADOES AND EXTENSIVE STRAIGHT LINE WIND DAMAGE")
#set($reportType2 = "THESE DANGEROUS STORMS WERE")
#set($pathcastLead = "THESE DANGEROUS STORMS")
-#elseif(${list.contains($bullets, "confirmedDopplerTOR")})
- #set($reportType = "DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A TORNADO")
+#elseif(${list.contains(${bullets}, "confirmedDopplerTOR")})
+ #set($reportType = "DOPPLER RADAR WAS TRACKING A CONFIRMED TORNADO")
#if(${stormType} == "line")
#set($reportType2 = "THESE TORNADIC STORMS WERE")
#else
#set($reportType2 = "THIS TORNADO")
#end
- #set($preAmbleTOR = "TO REPEAT...A TORNADO HAS BEEN SIGHTED! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "confirmedLargeTOR")})
+ #set($preAmbleTOR = "TO REPEAT...A TORNADO HAS BEEN OBSERVED! TO PROTECT YOUR LIFE...")
+#elseif(${list.contains(${bullets}, "confirmedLargeTOR")})
#set($reportType = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
#set($preAmbleTOR = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "spotterTOR")})
+#elseif(${list.contains(${bullets}, "spotterTOR")})
#set($reportType = "TRAINED WEATHER SPOTTERS REPORTED A ${reportType1}")
#set($preAmbleTOR = "TO REPEAT...A TORNADO HAS BEEN SIGHTED! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "lawEnforcementTOR")})
+#elseif(${list.contains(${bullets}, "lawEnforcementTOR")})
#set($reportType = "LOCAL LAW ENFORCEMENT REPORTED A ${reportType1}")
#set($preAmbleTOR = "TO REPEAT...A TORNADO HAS BEEN SIGHTED! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "emergencyManagementTOR")})
+#elseif(${list.contains(${bullets}, "emergencyManagementTOR")})
#set($reportType = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
#set($preAmbleTOR = "TO REPEAT...A TORNADO HAS BEEN SIGHTED! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "publicTOR")})
+#elseif(${list.contains(${bullets}, "publicTOR")})
#set($reportType = "THE PUBLIC REPORTED A ${reportType1}")
#set($preAmbleTOR = "TO REPEAT...A TORNADO HAS BEEN SIGHTED! TO PROTECT YOUR LIFE...")
-#elseif(${list.contains($bullets, "spotterFunnelCloud")})
+#elseif(${list.contains(${bullets}, "spotterFunnelCloud")})
#set($reportType = "TRAINED WEATHER SPOTTERS REPORTED A FUNNEL CLOUD")
#if(${stormType} == "line")
#set($reportType2 = "A TORNADO MAY DEVELOP AT ANY TIME. THESE DANGEROUS STORMS WERE")
@@ -396,176 +422,179 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#set($reportType2 = "A TORNADO MAY DEVELOP AT ANY TIME. THIS DANGEROUS STORM WAS")
#set($pathcastLead = "THIS DANGEROUS STORM")
#end
-#elseif(${list.contains($bullets, "dopplerSVR")})
+#elseif(${list.contains(${bullets}, "meteorologistsSVR")})
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS WERE TRACKING A ${reportType1}")
+ #set($reportAuthSVR = "PRODUCING")
+#elseif(${list.contains(${bullets}, "dopplerSVR")})
#set($reportType = "DOPPLER RADAR INDICATED A ${reportType1}")
#set($reportAuthSVR = "CAPABLE OF PRODUCING")
-#elseif(${list.contains($bullets, "trainedSpottersSVR")})
+#elseif(${list.contains(${bullets}, "trainedSpottersSVR")})
#set($reportType = "TRAINED WEATHER SPOTTERS REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
-#elseif(${list.contains($bullets, "lawEnforcementSVR")})
+#elseif(${list.contains(${bullets}, "lawEnforcementSVR")})
#set($reportType = "LOCAL LAW ENFORCEMENT REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
-#elseif(${list.contains($bullets, "emergencyManagementSVR")})
+#elseif(${list.contains(${bullets}, "emergencyManagementSVR")})
#set($reportType = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
-#elseif(${list.contains($bullets, "publicSVR")})
+#elseif(${list.contains(${bullets}, "publicSVR")})
#set($reportType = "THE PUBLIC REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
-#set ($windSpeed = 0)
-#if(${list.contains($bullets, "60mphWind")})
- #set ($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
- #set ($windSpeed = 60)
- #set ($windTag = "60MPH")
+#set($windSpeed = 0)
+#if(${list.contains(${bullets}, "60mphWind")})
+ #set($windThreat = "DAMAGING WINDS IN EXCESS OF 60 MPH")
+ #set($windSpeed = 60)
+ #set($windTag = "60MPH")
#end
-#if(${list.contains($bullets, "70mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
- #set ($windSpeed = 70)
- #set ($windTag = "70MPH")
+#if(${list.contains(${bullets}, "70mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 70 MPH")
+ #set($windSpeed = 70)
+ #set($windTag = "70MPH")
#end
-#if(${list.contains($bullets, "80mphWind")})
- #set ($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
- #set ($windSpeed = 80)
- #set ($windTag = "80MPH")
+#if(${list.contains(${bullets}, "80mphWind")})
+ #set($windThreat = "DESTRUCTIVE WINDS IN EXCESS OF 80 MPH")
+ #set($windSpeed = 80)
+ #set($windTag = "80MPH")
#end
-#if(${list.contains($bullets, "90mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
- #set ($windSpeed = 90)
- #set ($windTag = "90MPH")
+#if(${list.contains(${bullets}, "90mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 90 MPH")
+ #set($windSpeed = 90)
+ #set($windTag = "90MPH")
#end
-#if(${list.contains($bullets, "100mphWind")})
- #set ($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
- #set ($windSpeed = 100)
- #set ($windTag = "100MPH")
+#if(${list.contains(${bullets}, "100mphWind")})
+ #set($windThreat = "EXTREME DAMAGING WINDS IN EXCESS OF 100 MPH")
+ #set($windSpeed = 100)
+ #set($windTag = "100MPH")
#end
###################################################
## HANDLE HAIL POSSIBILITIES ######################
###################################################
-#set ($hailSize = 0)
-#set ($smallHail = "")
-#if(${list.contains($bullets, "pennyHail")})
- #set ($hailThreat = "PENNY SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.75)
- #set ($hailTag = "0.75IN")
+#set($hailSize = 0)
+#set($smallHail = "")
+#if(${list.contains(${bullets}, "pennyHail")})
+ #set($hailThreat = "PENNY SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.75)
+ #set($hailTag = "0.75IN")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailThreat = "NICKEL SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 0.88)
- #set ($hailTag = "0.88IN")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailThreat = "NICKEL SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 0.88)
+ #set($hailTag = "0.88IN")
#end
-#if(${list.contains($bullets, "quarterHail")})
- #set ($hailThreat = "QUARTER SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.00)
- #set ($hailTag = "1.00IN")
+#if(${list.contains(${bullets}, "quarterHail")})
+ #set($hailThreat = "QUARTER SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.00)
+ #set($hailTag = "1.00IN")
#end
-#if(${list.contains($bullets, "halfdollarHail")})
- #set ($hailThreat = "HALF DOLLAR SIZE")
- #set ($hailTrail = " HAIL")
- #set ($hailLead = "")
- #set ($hailSize = 1.25)
- #set ($hailTag = "1.25IN")
+#if(${list.contains(${bullets}, "halfdollarHail")})
+ #set($hailThreat = "HALF DOLLAR SIZE")
+ #set($hailTrail = " HAIL")
+ #set($hailLead = "")
+ #set($hailSize = 1.25)
+ #set($hailTag = "1.25IN")
#end
-#if(${list.contains($bullets, "pingpongHail")})
- #set ($hailThreat = "PING PONG BALL SIZE")
- #set ($hailLead = "LARGE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 1.50)
- #set ($hailTag = "1.50IN")
+#if(${list.contains(${bullets}, "pingpongHail")})
+ #set($hailThreat = "PING PONG BALL SIZE")
+ #set($hailLead = "LARGE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 1.50)
+ #set($hailTag = "1.50IN")
#end
-#if(${list.contains($bullets, "golfballHail")})
- #set ($hailThreat = "GOLF BALL SIZE")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 1.75)
- #set ($hailTag = "1.75IN")
+#if(${list.contains(${bullets}, "golfballHail")})
+ #set($hailThreat = "GOLF BALL SIZE")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 1.75)
+ #set($hailTag = "1.75IN")
#end
-#if(${list.contains($bullets, "twoinchHail")})
- #set ($hailThreat = "TWO INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DAMAGING HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 2.00)
- #set ($hailTag = "2.00IN")
+#if(${list.contains(${bullets}, "twoinchHail")})
+ #set($hailThreat = "TWO INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DAMAGING HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 2.00)
+ #set($hailTag = "2.00IN")
#end
-#if(${list.contains($bullets, "tennisBallHail")})
- #set ($hailThreat = "TENNIS BALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 2.50)
- #set ($hailTag = "2.50IN")
+#if(${list.contains(${bullets}, "tennisBallHail")})
+ #set($hailThreat = "TENNIS BALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 2.50)
+ #set($hailTag = "2.50IN")
#end
-#if(${list.contains($bullets, "baseballHail")})
- #set ($hailThreat = "BASEBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 2.75)
- #set ($hailTag = "2.75IN")
+#if(${list.contains(${bullets}, "baseballHail")})
+ #set($hailThreat = "BASEBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 2.75)
+ #set($hailTag = "2.75IN")
#end
-#if(${list.contains($bullets, "threeinchHail")})
- #set ($hailThreat = "THREE INCHES IN DIAMETER")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 3.00)
- #set ($hailTag = "3.00IN")
+#if(${list.contains(${bullets}, "threeinchHail")})
+ #set($hailThreat = "THREE INCHES IN DIAMETER")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 3.00)
+ #set($hailTag = "3.00IN")
#end
-#if(${list.contains($bullets, "softballHail")})
- #set ($hailThreat = "SOFTBALL SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 4.25)
- #set ($hailTag = "4.25IN")
+#if(${list.contains(${bullets}, "softballHail")})
+ #set($hailThreat = "SOFTBALL SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 4.25)
+ #set($hailTag = "4.25IN")
#end
-#if(${list.contains($bullets, "grapefruitHail")})
- #set ($hailThreat = "GRAPEFRUIT SIZE")
- #set ($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
- #set ($hailTrail = "")
- #set ($hailSize = 4.00)
- #set ($hailTag = "4.00IN")
+#if(${list.contains(${bullets}, "grapefruitHail")})
+ #set($hailThreat = "GRAPEFRUIT SIZE")
+ #set($hailLead = "LARGE DESTRUCTIVE HAIL UP TO ")
+ #set($hailTrail = "")
+ #set($hailSize = 4.00)
+ #set($hailTag = "4.00IN")
#end
##################################################################
######### CREATE SVR TSTM WIND AND HAIL SENTENCE/TAG##############
##################################################################
-#set ($hailwind = "")
-#if (${hailSize} < 1 && ${windSpeed} < 58)
-#if (${phenomena}=="SV")
- #set ($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
- #set ($windhailTag = "WIND...HAIL <50MPH <.75IN")
+#set($hailwind = "")
+#if(${hailSize} < 1 && ${windSpeed} < 58)
+#if(${phenomena}=="SV")
+ #set($hailwind = "!**YOU DID NOT SELECT ANY SEVERE WIND OR HAIL THREATS. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING!**!")
+ #set($windhailTag = "WIND...HAIL <50MPH <.75IN")
#else
- #set ($TORhailTag = "HAIL <.75IN")
+ #set($TORhailTag = "HAIL <.75IN")
#end
#elseif(${hailSize} > 0 && ${windSpeed} > 0)
-#if (${hailSize} < 1)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
+#if(${hailSize} < 1)
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
#if(${phenomena}=="SV")
- #set ($smallHail = "${hailThreat}${hailTrail} MAY ALSO ACCOMPANY THE DAMAGING WINDS.")
+ #set($smallHail = "${hailThreat}${hailTrail} MAY ALSO ACCOMPANY THE DAMAGING WINDS.")
#end
#else
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail} AND ${windThreat}")
#end
- #set ($windhailTag = "WIND...HAIL ${windTag} ${hailTag}")
- #set ($TORhailTag = "HAIL ${hailTag}")
+ #set($windhailTag = "WIND...HAIL ${windTag} ${hailTag}")
+ #set($TORhailTag = "HAIL ${hailTag}")
#elseif(${hailSize} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
- #set ($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
- #set ($TORhailTag = "HAIL ${hailTag}")
+ #set($hailwind = " ${reportAuthSVR} ${hailLead}${hailThreat}${hailTrail}")
+ #set($windhailTag = "WIND...HAIL <50MPH ${hailTag}")
+ #set($TORhailTag = "HAIL ${hailTag}")
#elseif(${windSpeed} > 0)
- #set ($hailwind = " ${reportAuthSVR} ${windThreat}")
- #set ($windhailTag = "WIND...HAIL ${windTag} <.75IN")
- #set ($TORhailTag = "HAIL <.75IN")
+ #set($hailwind = " ${reportAuthSVR} ${windThreat}")
+ #set($windhailTag = "WIND...HAIL ${windTag} <.75IN")
+ #set($TORhailTag = "HAIL <.75IN")
#end
########################################################
######### CREATE TORNADO HAIL SENTENCE/TAG##############
########################################################
#set($TORHailThreat = "")
-#if (${hailSize} >= 1.5 && ${phenomena}=="TO")
+#if(${hailSize} >= 1.5 && ${phenomena}=="TO")
#if(${stormType} == "line")
#set($TORHailThreat = "IN ADDITION TO TORNADOES...${hailLead}${hailThreat}${hailTrail} IS EXPECTED WITH THESE STORMS.")
#else
@@ -582,9 +611,14 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${reportType}${hailwind}. ##
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${reportType}${hailwind}. ##
${reportType2} LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", true)
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
. ${reportType2} NEARLY STATIONARY. ${smallHail}${TORHailThreat}
#else
@@ -593,17 +627,17 @@ ${reportType2} LOCATED ##
#############################################
######## GENERATE ADDITIONAL REPORTS #######
#############################################
-#set ($extraReportTor = "")
-#set ($extraReport = "")
-#if(${list.contains($bullets, "addlTorInfo")})
- #set ($extraReportTor = "AT !**enter time, tornado/damage**! WAS REPORTED !**enter location**!. ")
+#set($extraReportTor = "")
+#set($extraReport = "")
+#if(${list.contains(${bullets}, "addlTorInfo")})
+ #set($extraReportTor = "AT !**enter time, tornado/damage**! WAS REPORTED !**enter location**!. ")
#end
-#if(${list.contains($bullets, "addlHailRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, hail**! WAS REPORTED !**enter location**!.")
-#elseif(${list.contains($bullets, "addlWindRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, wind**! WAS REPORTED !**enter location**!.")
-#elseif(${list.contains($bullets, "addlHailWindRpt")})
- #set ($extraReport = "IN ADDITION...AT !**enter time, hail and wind**! WAS REPORTED !**enter location**!.")
+#if(${list.contains(${bullets}, "addlHailRpt")})
+ #set($extraReport = "IN ADDITION...AT !**enter time, hail**! WAS REPORTED !**enter location**!.")
+#elseif(${list.contains(${bullets}, "addlWindRpt")})
+ #set($extraReport = "IN ADDITION...AT !**enter time, wind**! WAS REPORTED !**enter location**!.")
+#elseif(${list.contains(${bullets}, "addlHailWindRpt")})
+ #set($extraReport = "IN ADDITION...AT !**enter time, hail and wind**! WAS REPORTED !**enter location**!.")
#end
${extraReportTor}${extraReport}
@@ -612,21 +646,21 @@ ${extraReportTor}${extraReport}
######## GENERATE PATHCAST OR CITIES LIST ########
##################################################
#if(${phenomena}=="SV" && ${stormType} == "line")
-#set ($otherLead = "THESE SEVERE THUNDERSTORMS")
+#set($otherLead = "THESE SEVERE THUNDERSTORMS")
#elseif(${phenomena}=="SV")
-#set ($otherLead = "THIS SEVERE THUNDERSTORM")
+#set($otherLead = "THIS SEVERE THUNDERSTORM")
#elseif(${phenomena}=="TO" && ${stormType} == "line")
-#set ($otherLead = "THESE TORNADIC STORMS")
+#set($otherLead = "THESE TORNADIC STORMS")
#elseif(${phenomena}=="TO")
-#set ($otherLead = "THIS TORNADIC THUNDERSTORM")
+#set($otherLead = "THIS TORNADIC THUNDERSTORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -644,7 +678,7 @@ LOCATIONS IMPACTED INCLUDE...
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW!
@@ -660,11 +694,11 @@ THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THIS STO
##################################
######### CALLS TO ACTION ########
##################################
-##Check to see if we've selected any calls to action. In our .cfg file
+##Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -673,67 +707,76 @@ THOSE ATTENDING THE !**now/venue name or location**! ARE IN THE PATH OF THIS STO
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-#if(${list.contains($bullets, "defaultMobileCTA")})
-TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
+#if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergency")})
+THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. DO NOT DELAY...SEEK SHELTER NOW! IF NO UNDERGROUND SHELTER IS AVAILABLE SEEK SHELTER IN AN INTERIOR ROOM OF THE LOWEST LEVEL OF A STRUCTURE...OR IF TIME ALLOWS...CONSIDER MOVING TO AN UNDERGROUND SHELTER ELSEWHERE. MOBILE HOMES AND OUTBUILDINGS WILL OFFER NO SHELTER FROM THIS TORNADO.
+
+#else
+!** YOU SELECTED THE TORNADO EMERGENCY CTA WITHOUT SELECTING THE TORNADO EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
#end
-#if(${list.contains($bullets, "defaultUrbanCTA")})
-TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
+#end
+#if(${list.contains(${bullets}, "defaultMobileCTA")})
+${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "motoristsCTA")})
+#if(${list.contains(${bullets}, "defaultUrbanCTA")})
+${preAmble}TAKE COVER NOW! MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
+
+#end
+#if(${list.contains(${bullets}, "motoristsCTA")})
MOTORISTS SHOULD NOT TAKE SHELTER UNDER HIGHWAY OVERPASSES. IF YOU CANNOT SAFELY DRIVE AWAY FROM THE TORNADO...AS A LAST RESORT...EITHER PARK YOUR VEHICLE AND STAY PUT...OR ABANDON YOUR VEHICLE AND LIE DOWN IN A LOW LYING AREA AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "rainWrappedCTA")})
+#if(${list.contains(${bullets}, "rainWrappedCTA")})
HEAVY RAINFALL MAY OBSCURE THIS TORNADO. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW!
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW!
#end
-#if(${list.contains($bullets, "largeTORCTA")})
+#if(${list.contains(${bullets}, "largeTORCTA")})
A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
#end
-#if(${list.contains($bullets, "lawEnforcementCTA")})
-IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL AUTHORITY WHO WILL RELAY YOUR REPORT. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
+IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL AUTHORITY WHO WILL RELAY YOUR REPORT. THIS ACT MAY SAVE THE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
-#if(${list.contains($bullets, "squallCTA")} && ${stormType} == "line")
+#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")
THIS LINE OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS.
-#elseif(${list.contains($bullets, "squallCTA")})
+#elseif(${list.contains(${bullets}, "squallCTA")})
THIS CLUSTER OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS.
#end
-#if(${list.contains($bullets, "waterCTA")})
+#if(${list.contains(${bullets}, "waterCTA")})
IF ON OR NEAR !**NAME OF WATER BODY **!...GET OUT OF THE WATER AND MOVE TO SAFE SHELTER IMMEDIATELY! IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. IN ADDITION...SEVERE THUNDERSTORMS CAN PRODUCE LARGE CAPSIZING WAVES...EVEN ON SMALL BODIES OF WATER. MOVE INTO DOCK AND SEEK SAFE SHELTER NOW. DON'T BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
##
-#if(${list.contains($bullets, "torWatchRemainsInEffectCTA")})
-A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. ALTHOUGH NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
+#if(${list.contains(${bullets}, "torWatchRemainsInEffectCTA")})
+A TORNADO WATCH REMAINS IN EFFECT FOR THE WARNED AREA. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
#end
##
-#if(${list.contains($bullets, "genericCTA")})
-SEVERE THUNDERSTORMS PRODUCE DAMAGING WINDS IN EXCESS OF 60 MILES PER HOUR...DESTRUCTIVE HAIL...DEADLY LIGHTNING AND VERY HEAVY RAIN. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. HEAVY RAINS FLOOD ROADS QUICKLY SO DO NOT DRIVE INTO AREAS WHERE WATER COVERS THE ROAD.
+#if(${list.contains(${bullets}, "genericCTA")})
+SEVERE THUNDERSTORMS PRODUCE DAMAGING WINDS...DESTRUCTIVE HAIL...DEADLY LIGHTNING AND VERY HEAVY RAIN. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. HEAVY RAINS FLOOD ROADS QUICKLY SO DO NOT DRIVE INTO AREAS WHERE WATER COVERS THE ROAD.
#end
##
-#if(${list.contains($bullets, "canProduceTornadoesCTA")})
+#if(${list.contains(${bullets}, "canProduceTornadoesCTA")})
#if(${stormType} == "line")
-DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THESE STORMS. WHILE NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR
+DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THESE STORMS. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR
#else
-DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THIS STORM. WHILE NOT IMMEDIATELY LIKELY...IF A TORNADO IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
+DOPPLER RADAR HAS INDICATED SOME WEAK ROTATION WITHIN THIS STORM. ALTHOUGH A TORNADO IS NOT IMMEDIATELY LIKELY...IF ONE IS SPOTTED...ACT QUICKLY AND MOVE TO A PLACE OF SAFETY IN A STURDY STRUCTURE...SUCH AS A BASEMENT OR SMALL INTERIOR ROOM.
#end
#end
##
-#if(${list.contains($bullets, "largeHailCTA")})
+#if(${list.contains(${bullets}, "largeHailCTA")})
#if(${stormType} == "line")
IF YOU ARE IN THE PATH OF THESE STORMS...PREPARE IMMEDIATELY FOR LARGE HAIL AND DEADLY CLOUD TO GROUND LIGHTNING. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...PREFERABLY INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -743,7 +786,7 @@ IF YOU ARE IN THE PATH OF THIS STORM...PREPARE IMMEDIATELY FOR LARGE HAIL AND DE
#end
#end
##
-#if(${list.contains($bullets, "veryLargeHailCTA")})
+#if(${list.contains(${bullets}, "veryLargeHailCTA")})
#if(${stormType} == "line")
THESE ARE DANGEROUS STORMS. IF YOU ARE IN THEIR PATH...PREPARE IMMEDIATELY FOR LARGE DESTRUCTIVE HAIL CAPABLE OF PRODUCING SIGNIFICANT DAMAGE. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...PREFERABLE INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -753,7 +796,7 @@ THIS IS A DANGEROUS STORM. IF YOU ARE IN ITS PATH...PREPARE IMMEDIATELY FOR LARG
#end
#end
##
-#if(${list.contains($bullets, "largeHailWindCTA")})
+#if(${list.contains(${bullets}, "largeHailWindCTA")})
#if(${stormType} == "line")
IF YOU ARE IN THE PATH OF THESE STORMS...PREPARE IMMEDIATELY FOR LARGE HAIL AND DAMAGING WINDS. PEOPLE OUTSIDE SHOULD MOVE TO A SHELTER...PREFERABLY INSIDE A STRONG BUILDING AND AWAY FROM WINDOWS.
@@ -763,7 +806,7 @@ IF YOU ARE IN THE PATH OF THIS STORM...PREPARE IMMEDIATELY FOR LARGE HAIL AND DA
#end
#end
##
-#if(${list.contains($bullets, "historyHailCTA")})
+#if(${list.contains(${bullets}, "historyHailCTA")})
#if(${stormType} == "line")
THESE STORMS HAVE A HISTORY OF PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -773,7 +816,7 @@ THIS STORM HAS A HISTORY OF PRODUCING LARGE HAIL. SEEK SHELTER NOW INSIDE A STUR
#end
#end
##
-#if(${list.contains($bullets, "historyWindCTA")})
+#if(${list.contains(${bullets}, "historyWindCTA")})
#if(${stormType} == "line")
THESE STORMS HAVE A HISTORY OF PRODUCING WIND DAMAGE. THIS IS A VERY DANGEROUS SITUATION. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -783,7 +826,7 @@ THIS STORM HAS A HISTORY OF PRODUCING WIND DAMAGE. THIS IS A VERY DANGEROUS SITU
#end
#end
##
-#if(${list.contains($bullets, "historyWindHailCTA")})
+#if(${list.contains(${bullets}, "historyWindHailCTA")})
#if(${stormType} == "line")
THESE STORMS HAVE A HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL. THIS IS A VERY DANGEROUS SITUATION. SEEK SHELTER NOW INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
@@ -793,32 +836,32 @@ THIS STORM HAS A HISTORY OF PRODUCING DESTRUCTIVE WINDS AND LARGE HAIL. THIS IS
#end
#end
##
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER...CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
##
-#if(${list.contains($bullets, "squallLineCTA")})
+#if(${list.contains(${bullets}, "squallLineCTA")})
#if(${stormType} == "line")
-INTENSE SQUALL LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES IN ADDITION TO WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
+INTENSE THUNDERSTORM LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
#else
-INTENSE SQUALL LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES IN ADDITION TO WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THIS STORM HAS THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
+INTENSE THUNDERSTORM LINES CAN OCCASIONALLY PRODUCE BRIEF TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. ALTHOUGH NOT IMMEDIATELY LIKELY...FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THIS STORM HAS THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT DAMAGE TO PROPERTY.
#end
#end
##
-#if(${list.contains($bullets, "superCellsCTA")})
+#if(${list.contains(${bullets}, "superCellsCTA")})
THIS IS A SUPERCELL THUNDERSTORM. DUE TO THE ROTATING NATURE OF THESE STORMS...THEY ARE CAPABLE OF PRODUCING ALL TYPES OF SEVERE WEATHER...INCLUDING EXTREMELY LARGE HAIL...DESTRUCTIVE STRAIGHT LINE WINDS...AND POSSIBLY TORNADOES. MOVE QUICKLY TO A SAFE SHELTER...PREFERABLY INTO A BASEMENT...OR AN INTERIOR ROOM SUCH AS A BATHROOM OR CLOSET.
#end
##
-#if(${list.contains($bullets, "gustFrontOutflowCTA")})
+#if(${list.contains(${bullets}, "gustFrontOutflowCTA")})
WIND DAMAGE WITH THIS STORM WILL OCCUR WELL AHEAD OF ANY RAIN OR LIGHTNING. DO NOT WAIT FOR THE SOUND OF THUNDER BEFORE TAKING COVER. SEEK SHELTER IMMEDIATELY INSIDE A STURDY STRUCTURE AND STAY AWAY FROM WINDOWS.
#end
##
-#if(${list.contains($bullets, "extremeWindsCTA")})
+#if(${list.contains(${bullets}, "extremeWindsCTA")})
#if(${stormType} == "line")
THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED. MOBILE HOMES AND HIGH PROFILE VEHICLES ARE ESPECIALLY SUSCEPTIBLE TO WINDS OF THIS MAGNITUDE AND MAY BE OVERTURNED. FOR YOUR PROTECTION MOVE IMMEDIATELY TO A SAFE SHELTER OR TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS. THESE STORMS HAVE THE POTENTIAL TO CAUSE SERIOUS INJURY AND SIGNIFICANT PROPERTY DAMAGE.
@@ -828,17 +871,17 @@ THIS IS AN EXTREMELY DANGEROUS SITUATION WITH TORNADO LIKE WIND SPEEDS EXPECTED.
#end
#end
##
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
IN ADDITION TO LARGE HAIL AND DAMAGING WINDS...CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THIS STORM. MOVE INDOORS IMMEDIATELY! LIGHTNING IS ONE OF NATURES LEADING KILLERS. REMEMBER...IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING.
#end
##
-#if(${list.contains($bullets, "boatersCTA")})
+#if(${list.contains(${bullets}, "boatersCTA")})
IF ON OR NEAR !**Name Of Lake**!...GET OUT OF THE WATER AND MOVE INDOORS OR INSIDE A VEHICLE. REMEMBER...LIGHTNING CAN STRIKE OUT TO 15 MILES FROM THE PARENT THUNDERSTORM. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. MOVE TO SAFE SHELTER NOW. DON'T BE CAUGHT ON THE WATER IN A THUNDERSTORM!
#end
##
-#if(${list.contains($bullets, "torrentialRainfallCTA")})
+#if(${list.contains(${bullets}, "torrentialRainfallCTA")})
#if(${stormType} == "line")
TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THESE STORMS...AND MAY LEAD TO FLASH FLOODING. DO NOT DRIVE YOUR VEHICLE THROUGH FLOODED ROADWAYS.
@@ -851,6 +894,13 @@ TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FL
#if(${ctaSelected} == "YES")
&&
+#end
+#############
+## WATCHES ##
+#############
+#if(${list.contains(${includedWatches}, "torWatches")} && ${phenomena}=="SV")
+#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
+
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
@@ -859,13 +909,8 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
+
##################################################################
## SVR Wind/Hail Tags used by CR. Activate by uncommenting out 4 lines below.
##################################################################
@@ -883,15 +928,7 @@ ${mathUtil.round(${movementInKnots})}KT ##
##
###########################################################################
-
$$
-##############################################
-#### END CONTINUATION SECTON #################
-##############################################
#end
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml
index 9955ea7cd4..e94414c988 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/severeWeatherStatement.xml
@@ -6,6 +6,8 @@
EVAN BOOKBINDER WFO EAX 11-4-2011 removed bulletDefaults that prevented auto selection
EVAN BOOKBINDER WFO EAX 2-24-2012 corrected parseString errors that prevented auto selection
Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Mike Dangelo 2-5-2013 NWS Mets Detected options (commented by default)
-->
-
-
+ torWatches
+ svrWatches
false
@@ -61,8 +62,8 @@
true
-
-
+
+
30
30
@@ -87,8 +88,11 @@
-
-
+
+
@@ -108,8 +112,10 @@
-
-
+
@@ -131,8 +137,10 @@
-
-
+
@@ -154,8 +162,10 @@
-
-
+
@@ -168,10 +178,15 @@
-
-
-
-
+
+
+
+
+
@@ -203,11 +218,14 @@
-
+
+
+
+
@@ -216,7 +234,7 @@
-
+
@@ -224,11 +242,14 @@
+
-
-
+
+
@@ -256,8 +277,9 @@
-
-
+
+
+
@@ -272,7 +294,7 @@
-
+
@@ -285,10 +307,15 @@
-
-
-
-
+
+
+
+
+
@@ -320,10 +347,12 @@
-
-
+
+
+
+
@@ -333,18 +362,21 @@
-
+
+
-
-
+
+
@@ -372,7 +404,9 @@
-
+
+
+
@@ -388,7 +422,7 @@
-
+
@@ -400,50 +434,45 @@
-
-
-
-
-
-
-
-
-
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -453,11 +482,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -467,6 +500,7 @@
+ 1
true
8.0
5
@@ -474,41 +508,54 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
+ warngenlev
+ population
distance
- population
+
+
+
+ 1
NAME
+ AREA
TRACK
true
20
10
-
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -518,8 +565,11 @@
-
+
+
+
+
@@ -527,9 +577,10 @@
and place into this template
-->
+
- City
+ WarnGenLoc
States
County
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.vm
index 622ca27f51..f954dae9d5 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.vm
@@ -5,6 +5,7 @@
## EDITED BY MIKE DANGELO 2-27-2012 ##
## EDITED BY Phil Kurimski 3-01-2012 OB12.2.1-4 ##
## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables}
##################################################
##
${WMOId} ${vtecOffice} 000000 ${BBBId}
@@ -24,11 +25,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
${ugcline}
-#set($countyStateabbr = "")
+#set($zoneList = "")
#foreach (${area} in ${areas})
- #set($countyStateabbr = "${countyStateabbr}${area.name} ${area.stateabbr}-")
+#set($zoneList = "${zoneList}${area.name}-")
#end
-${countyStateabbr}
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -38,129 +39,134 @@ THIS IS A TEST MESSAGE. ##
#######################################################################
## List of Event Types.
#######################################################################
-#set ($eventType = "A THUNDERSTORM")
-#set ($pathcastLead = "THIS STORM WILL BE NEAR...")
-#set ($otherLead = ${pathcastLead})
-#if(${list.contains($bullets, "thunderstorm")})
+#set($eventType = "A THUNDERSTORM")
+#set($pathcastLead = "THIS STORM WILL BE NEAR...")
+#set($otherLead = ${pathcastLead})
+#if(${list.contains(${bullets}, "thunderstorm")})
#if(${stormType} == "line")
- #set ($eventType = "A LINE OF THUNDERSTORMS")
- #set ($pathcastLead = "THESE STORMS WILL BE NEAR...")
- #set ($otherLead = "THESE STORMS")
- #set ($reportType2 = "${otherLead} WERE")
+ #set($eventType = "A LINE OF THUNDERSTORMS")
+ #set($pathcastLead = "THESE STORMS WILL BE NEAR...")
+ #set($otherLead = "THESE STORMS")
+ #set($reportType2 = "${otherLead} WERE")
#else
- #set ($eventType = "A THUNDERSTORM")
- #set ($pathcastLead = "THIS STORM WILL BE NEAR...")
- #set ($otherLead = "THIS STORM")
- #set ($reportType2 = "${otherLead} WAS")
+ #set($eventType = "A THUNDERSTORM")
+ #set($pathcastLead = "THIS STORM WILL BE NEAR...")
+ #set($otherLead = "THIS STORM")
+ #set($reportType2 = "${otherLead} WAS")
#end
#end
-#if(${list.contains($bullets, "rainShower")})
+#if(${list.contains(${bullets}, "rainShower")})
#if(${stormType} == "line")
- #set ($eventType = "A LINE OF SHOWERS")
- #set ($pathcastLead = "THESE SHOWERS WILL BE NEAR...")
- #set ($otherLead = "THESE SHOWERS")
- #set ($reportType2 = "${otherLead} WERE")
+ #set($eventType = "A LINE OF SHOWERS")
+ #set($pathcastLead = "THESE SHOWERS WILL BE NEAR...")
+ #set($otherLead = "THESE SHOWERS")
+ #set($reportType2 = "${otherLead} WERE")
#else
- #set ($eventType = "A SHOWER")
- #set ($pathcastLead = "THIS SHOWER WILL BE NEAR...")
- #set ($otherLead = "THIS SHOWER")
- #set ($reportType2 = "${otherLead} WAS")
+ #set($eventType = "A SHOWER")
+ #set($pathcastLead = "THIS SHOWER WILL BE NEAR...")
+ #set($otherLead = "THIS SHOWER")
+ #set($reportType2 = "${otherLead} WAS")
#end
#end
-#if(${list.contains($bullets, "snowShower")})
+#if(${list.contains(${bullets}, "snowShower")})
#if(${stormType} == "line")
- #set ($eventType = "A LINE OF SNOW SHOWERS")
- #set ($pathcastLead = "THESE SNOW SHOWERS WILL BE NEAR...")
- #set ($otherLead = "THESE SNOW SHOWERS")
- #set ($reportType2 = "${otherLead} WERE")
+ #set($eventType = "A LINE OF SNOW SHOWERS")
+ #set($pathcastLead = "THESE SNOW SHOWERS WILL BE NEAR...")
+ #set($otherLead = "THESE SNOW SHOWERS")
+ #set($reportType2 = "${otherLead} WERE")
#else
- #set ($eventType = "A SNOW SHOWER")
- #set ($pathcastLead = "THIS SNOW SHOWER WILL BE NEAR...")
- #set ($otherLead = "THIS SNOW SHOWER")
- #set ($reportType2 = "${otherLead} WAS")
+ #set($eventType = "A SNOW SHOWER")
+ #set($pathcastLead = "THIS SNOW SHOWER WILL BE NEAR...")
+ #set($otherLead = "THIS SNOW SHOWER")
+ #set($reportType2 = "${otherLead} WAS")
#end
#end
-#if(${list.contains($bullets, "snowSquall")})
- #set ($eventType = "A SNOW SQUALL")
- #set ($pathcastLead = "THE SNOW SQUALLS WILL BE NEAR...")
- #set ($otherLead = "THE SNOW SQUALLS")
- #set ($reportType2 = "${otherLead} WERE")
+#if(${list.contains(${bullets}, "snowSquall")})
+ #set($eventType = "A SNOW SQUALL")
+ #set($pathcastLead = "THE SNOW SQUALLS WILL BE NEAR...")
+ #set($otherLead = "THE SNOW SQUALLS")
+ #set($reportType2 = "${otherLead} WERE")
#end
-#if(${list.contains($bullets, "leadingRain")})
- #set ($eventType = "THE LEADING EDGE OF AN AREA OF RAIN")
- #set ($pathcastLead = "THE RAIN WILL BEGIN AT...")
- #set ($otherLead = "THE RAIN")
- #set ($reportType2 = "${otherLead} WAS")
+#if(${list.contains(${bullets}, "leadingRain")})
+ #set($eventType = "THE LEADING EDGE OF AN AREA OF RAIN")
+ #set($pathcastLead = "THE RAIN WILL BEGIN AT...")
+ #set($otherLead = "THE RAIN")
+ #set($reportType2 = "${otherLead} WAS")
#end
-#if(${list.contains($bullets, "leadingSnow")})
- #set ($eventType = "THE LEADING EDGE OF AN AREA OF SNOW")
- #set ($pathcastLead = "THE SNOW WILL BEGIN AT...")
- #set ($otherLead = "THE SNOW")
- #set ($reportType2 = "${otherLead} WAS")
+#if(${list.contains(${bullets}, "leadingSnow")})
+ #set($eventType = "THE LEADING EDGE OF AN AREA OF SNOW")
+ #set($pathcastLead = "THE SNOW WILL BEGIN AT...")
+ #set($otherLead = "THE SNOW")
+ #set($reportType2 = "${otherLead} WAS")
#end
-#if(${list.contains($bullets, "backedgeRain")})
- #set ($eventType = "THE BACK EDGE OF AN AREA OF RAIN")
- #set ($pathcastLead = "THE RAIN WILL END AT...")
- #set ($otherLead = "THE RAIN")
- #set ($reportType2 = "${otherLead} WAS")
+#if(${list.contains(${bullets}, "backedgeRain")})
+ #set($eventType = "THE BACK EDGE OF AN AREA OF RAIN")
+ #set($pathcastLead = "THE RAIN WILL END AT...")
+ #set($otherLead = "THE RAIN")
+ #set($reportType2 = "${otherLead} WAS")
#end
-#if(${list.contains($bullets, "backedgeSnow")})
- #set ($eventType = "THE BACK EDGE OF AN AREA OF SNOW")
- #set ($pathcastLead = "THE SNOW WILL END AT...")
- #set ($otherLead = "THE SNOW")
- #set ($reportType2 = "${otherLead} WAS")
+#if(${list.contains(${bullets}, "backedgeSnow")})
+ #set($eventType = "THE BACK EDGE OF AN AREA OF SNOW")
+ #set($pathcastLead = "THE SNOW WILL END AT...")
+ #set($otherLead = "THE SNOW")
+ #set($reportType2 = "${otherLead} WAS")
#end
-#if(${list.contains($bullets, "showerThunderstorm")})
+#if(${list.contains(${bullets}, "showerThunderstorm")})
#if(${stormType} == "line")
- #set ($eventType = "A LINE OF SHOWERS AND THUNDERSTORMS")
- #set ($pathcastLead = "THESE STORMS WILL BE NEAR...")
- #set ($otherLead = "THESE STORMS")
- #set ($reportType2 = "${otherLead} WERE")
+ #set($eventType = "A LINE OF SHOWERS AND THUNDERSTORMS")
+ #set($pathcastLead = "THESE STORMS WILL BE NEAR...")
+ #set($otherLead = "THESE STORMS")
+ #set($reportType2 = "${otherLead} WERE")
#else
- #set ($eventType = "SHOWERS AND THUNDERSTORMS")
- #set ($pathcastLead = "THIS STORM WILL BE NEAR...")
- #set ($otherLead = "THIS STORM")
- #set ($reportType2 = "${otherLead} WAS")
+ #set($eventType = "SHOWERS AND THUNDERSTORMS")
+ #set($pathcastLead = "THIS STORM WILL BE NEAR...")
+ #set($otherLead = "THIS STORM")
+ #set($reportType2 = "${otherLead} WAS")
#end
#end
-#if(${list.contains($bullets, "gFront")})
- #set ($eventType = "A GUST FRONT")
- #set ($pathcastLead = "THE GUST FRONT WILL BE NEAR...")
- #set ($otherLead = "THE GUST FRONT")
- #set ($reportType2 = "${otherLead} WAS")
+#if(${list.contains(${bullets}, "gFront")})
+ #set($eventType = "A GUST FRONT")
+ #set($pathcastLead = "THE GUST FRONT WILL BE NEAR...")
+ #set($otherLead = "THE GUST FRONT")
+ #set($reportType2 = "${otherLead} WAS")
#end
-#if(${list.contains($bullets, "cFront")})
- #set ($eventType = "A COLD FRONT")
- #set ($pathcastLead = "THE COLD FRONT WILL BE NEAR...")
- #set ($otherLead = "THE COLD FRONT")
- #set ($reportType2 = "${otherLead} WAS")
+#if(${list.contains(${bullets}, "cFront")})
+ #set($eventType = "A COLD FRONT")
+ #set($pathcastLead = "THE COLD FRONT WILL BE NEAR...")
+ #set($otherLead = "THE COLD FRONT")
+ #set($reportType2 = "${otherLead} WAS")
#end
#######################################################################
## Basis section that incorporates line phenomena...capable vs producing
## and based on selections above.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A BASIS **! ${eventType}")
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${eventType}...")
+#set($report = "!** YOU DIDN'T SELECT A BASIS **! ${eventType}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${eventType}...")
#end
-#if(${list.contains($bullets, "trainedSpotters")})
- #set ($report = "TRAINED WEATHER SPOTTERS REPORTED ${eventType}...")
+#if(${list.contains(${bullets}, "trainedSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${eventType}...")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED ${eventType}...")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${eventType}...")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${eventType}...")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${eventType}...")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($report = "SATELLITE IMAGERY INDICATED ${eventType}...")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($report = "SATELLITE IMAGERY INDICATED ${eventType}...")
#end
######################################################
###### Storm current location description ##########
######################################################
.NOW...
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 4, "MILES", true)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
. ${reportType2} NEARLY STATIONARY.
#else
@@ -174,15 +180,13 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#################################################
## Set Pathcast
#################################################
-#if(${list.contains($bullets, "pathcast")})
-* ##
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead}" ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
-* ##
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -193,45 +197,43 @@ THIS IS A TEST MESSAGE. ##
#locationsList("LOCATIONS IMPACTED INCLUDE..." ${otherLead} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
#else
-* LOCATIONS IMPACTED INCLUDE...
+LOCATIONS IMPACTED INCLUDE...
!** YOU DID NOT SELECT A PATHCAST OR LIST OF CITIES BULLET. PLEASE ENTER LOCATIONS IMPACTED OR REGENERATE THE WARNING WITH THE CORRECT LOCATIONS BULLET SELECTED **!.
#end
-#if(${list.contains($bullets, "gustFrontWinds")})
+#if(${list.contains(${bullets}, "gustFrontWinds")})
GUSTY WINDS TO !**WIND SPEED**! MPH WILL ACCOMPANY THE FRONT.
#end
-#if(${list.contains($bullets, "frontalPassage")})
+#if(${list.contains(${bullets}, "frontalPassage")})
WINDS BEHIND THE COLD FRONT WILL SUDDENLY SHIFT TO THE !** DIRECTION **! AND INCREASE TO !** SPEED **! MPH.
#end
-#if(${list.contains($bullets, "heavySnow")})
+#if(${list.contains(${bullets}, "heavySnow")})
HEAVY FALLING AND BLOWING SNOW WILL CREATE NEAR ZERO VISIBILITY.
#end
-#if(${list.contains($bullets, "snowAmt")})
+#if(${list.contains(${bullets}, "snowAmt")})
LOCATIONS CAN EXPECT !** EXPECTED SNOW **! INCHES OF SNOW.
#end
-## parse file command here is to pull in mile marker info
-## #parse("mileMarkers.vm")
+## parse file command to pull in mile marker info
+#parse("mileMarkers.vm")
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")} && ${list.contains($bullets, "includeTorWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")} && ${list.contains(${bullets}, "includeTorWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")} && ${list.contains($bullets, "includeSvrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")} && ${list.contains(${bullets}, "includeSvrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-###printcoords(${areaPoly}, ${list})
-
$$
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml
index f74f758e93..5a6c5bc016 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/shortTermForecast.xml
@@ -3,6 +3,11 @@
@@ -15,6 +20,8 @@
that can be loaded with each template. -->
Forecast Zones
+ County Names
+ County Warning Areas
@@ -79,8 +86,8 @@
-
-
+
+
@@ -93,11 +100,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -113,8 +120,10 @@
-
-
+
+
+
+
@@ -125,65 +134,80 @@
-
-
-
-
+
+
+
-
-
- 0.00
- AND
- 0
-
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
-
- STATE_ZONE
- NAME
-
+
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
-
- NAME
- TRACK
- true
- 10
- 10
-
- distance
-
-
+
+
+ County
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
-
+
-
-
-
+
+ 25
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -192,11 +216,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -206,29 +234,8 @@
-
- NAME
- TRACK
- true
- 20
- 10
-
-
-
-
-
-
- warngenlev
- population
-
-
-
-
-
-
-
+
+ 1
true
8.0
5
@@ -236,23 +243,78 @@ and place into this template
10
8
Name
+ AREA
NAME -->
STATE
STATE
countyTypes.txt
- population
+ warngenlev
+ population
+ distance
+
+
+
+
+
+ NAME
+ 1
+ AREA
+ TRACK
+ true
+ 20
+ 10
+
+
+
+
+
+
+
+
+
+ warngenlev
+ population
+ distance
+
+
+
+
+ NAME
+ 1
+ AREA
+ TRACK
+ true
+ 10
+ 10
+
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+
- City
+ WarnGenLoc
Zone
States
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.vm
index afb5392f3f..0864126461 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.vm
@@ -3,90 +3,84 @@
## WRITTEN BY: ##
## TOM BIRCHARD WFO HFO/EVAN BOOKBINDER WFO EAX ##
## VERSION 1.0 8-16-2011 ##
-## Edited by Mike Dangelo 02-27-2012 ##
-## Edited by Phil Kurimski 3-01-2012 OB12.2.1-4 ##
-## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND)
-## QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
-## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list.
-## D. Friemdan 13-03-2013 DR 15892. Do not lock locations in headline.
######################################################
##
##SET SOME INITIAL VARIABLES
#if(${stormType} == "line")
- #set ($report = "A LINE OF STRONG THUNDERSTORMS WERE REPORTED")
+ #set($report = "A LINE OF STRONG THUNDERSTORMS WERE REPORTED")
#set($reportType1 = "LINE OF STRONG THUNDERSTORMS")
#set($reportType2 = "THESE STORMS WERE")
#else
- #set ($report = "A STRONG THUNDERSTORM WAS REPORTED")
+ #set($report = "A STRONG THUNDERSTORM WAS REPORTED")
#set($reportType1 = "STRONG THUNDERSTORM")
#set($reportType2 = "THIS STORM WAS")
#end
#############################################################
#### CREATE BASIS WORDING ###################################
#############################################################
-#if(${list.contains($bullets, "doppler")})
- #set ($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR WAS TRACKING A ${reportType1}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR WAS TRACKING A ${reportType1}")
#set($reportAuthSVR = "CAPABLE OF PRODUCING")
#end
-#if(${list.contains($bullets, "stormSpotters")})
- #set ($report = "STORM WEATHER SPOTTERS REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "stormSpotters")})
+ #set($report = "TRAINED WEATHER SPOTTERS REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($report = "LOCAL LAW ENFORCEMENT REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($report = "LOCAL LAW ENFORCEMENT REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "emergencyMgmt")})
- #set ($report = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "emergencyMgmt")})
+ #set($report = "EMERGENCY MANAGEMENT REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
-#if(${list.contains($bullets, "amateurRadio")})
- #set ($report = "AMATEUR RADIO OPERATORS REPORTED A ${reportType1}")
+#if(${list.contains(${bullets}, "amateurRadio")})
+ #set($report = "AMATEUR RADIO OPERATORS REPORTED A ${reportType1}")
#set($reportAuthSVR = "PRODUCING")
#end
###################################################
## HANDLE WIND POSSIBILITIES ######################
###################################################
-#set ($windSpeed = 0)
-#if(${list.contains($bullets, "wind30")})
- #set ($windThreat = "WINDS IN EXCESS OF 30 MPH")
- #set ($windSpeed = 30)
- #set ($windTag = "30MPH")
+#set($windSpeed = 0)
+#if(${list.contains(${bullets}, "wind30")})
+ #set($windThreat = "WINDS IN EXCESS OF 30 MPH")
+ #set($windSpeed = 30)
+ #set($windTag = "30MPH")
#end
-#if(${list.contains($bullets, "wind40")})
- #set ($windThreat = "WINDS IN EXCESS OF 40 MPH")
- #set ($windSpeed = 40)
- #set ($windTag = "40MPH")
+#if(${list.contains(${bullets}, "wind40")})
+ #set($windThreat = "WINDS IN EXCESS OF 40 MPH")
+ #set($windSpeed = 40)
+ #set($windTag = "40MPH")
#end
-#if(${list.contains($bullets, "wind50")})
- #set ($windThreat = "WINDS IN EXCESS OF 50 MPH")
- #set ($windSpeed = 50)
- #set ($windTag = "50MPH")
+#if(${list.contains(${bullets}, "wind50")})
+ #set($windThreat = "WINDS IN EXCESS OF 50 MPH")
+ #set($windSpeed = 50)
+ #set($windTag = "50MPH")
#end
###################################################
## HANDLE HAIL POSSIBILITIES ######################
###################################################
-#set ($hailSize = 0)
-#set ($smallHail = "")
-#if(${list.contains($bullets, "peaHail")})
- #set ($hailSize = 0.50)
- #set ($hailThreat = "PEA SIZE")
- #set ($hailTrail = " HAIL")
+#set($hailSize = 0)
+#set($smallHail = "")
+#if(${list.contains(${bullets}, "peaHail")})
+ #set($hailSize = 0.50)
+ #set($hailThreat = "PEA SIZE")
+ #set($hailTrail = " HAIL")
#end
-#if(${list.contains($bullets, "dimeHail")})
- #set ($hailSize = 0.75)
- #set ($hailThreat = "DIME SIZE")
- #set ($hailTrail = " HAIL")
+#if(${list.contains(${bullets}, "dimeHail")})
+ #set($hailSize = 0.75)
+ #set($hailThreat = "DIME SIZE")
+ #set($hailTrail = " HAIL")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailSize = 0.88)
- #set ($hailThreat = "NICKEL SIZE")
- #set ($hailTrail = " HAIL")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailSize = 0.88)
+ #set($hailThreat = "NICKEL SIZE")
+ #set($hailTrail = " HAIL")
#end
################################################################
######### ~*~*~*~*~*~* BEGIN OUTPUT ~*~*~*~*~*~*~ ##############
@@ -94,12 +88,12 @@
${WMOId} ${vtecOffice} 000000 ${BBBId}
SPS${siteId}
-
#if(${productClass}=="T")
-TEST...SPECIAL WEATHER STATEMENT...TEST
+TEST...SPECIAL WEATHER STATEMENT...TEST##
#else
-SPECIAL WEATHER STATEMENT
+SPECIAL WEATHER STATEMENT##
#end
+
NATIONAL WEATHER SERVICE ${officeShort}
#backupText(${backupSite})
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
@@ -109,11 +103,11 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#end
${ugcline}
-#set($countyStateabbr = "")
+#set($zoneList = "")
#foreach (${area} in ${areas})
- #set($countyStateabbr = "${countyStateabbr}${area.name} ${area.stateabbr}-")
+#set($zoneList = "${zoneList}${area.name}-")
#end
-${countyStateabbr}
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${productClass}=="T")
@@ -121,7 +115,10 @@ THIS IS A TEST MESSAGE. ##
#end
#if(${windSpeed} >= 40 || ${hailSize} >= 0.70)
...SIGNIFICANT WEATHER ADVISORY FOR ##
-#headlineLocList(${areas} true false true false false) #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
+###zoneHeadlineLocList(${areas} true true true false)
+##REPLACE WITH THE LINE ABOVE WITH THE FOLLOWING IF YOU USE ZONE OUTPUT
+#headlineLocList(${affectedCounties} true true true false)
+ #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
...##
#elseif(${windSpeed} == 0 && ${hailSize} == 0)
!** YOU DID NOT SELECT ANY WIND OR HAIL THREATS. PLEASE RE-GENERATE THIS ADVISORY **!
@@ -136,8 +133,13 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", true)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report} ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
#if($movementSpeed < 3 || ${stationary})
. ${reportType2} NEARLY STATIONARY. ${smallHail}
#else
@@ -149,21 +151,21 @@ AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${repor
#direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH. ${smallHail}
#end
-#if(${list.contains($bullets, "peaHail")})
-#set ($hail = "Hail up to the size of peas")
-#elseif(${list.contains($bullets, "dimeHail")})
-#set ($hail = "Hail up to the size of dimes")
-#elseif(${list.contains($bullets, "nickelHail")})
-#set ($hail = "Hail up to the size of nickels")
+#if(${list.contains(${bullets}, "peaHail")})
+#set($hail = "Hail up to the size of peas")
+#elseif(${list.contains(${bullets}, "dimeHail")})
+#set($hail = "Hail up to the size of dimes")
+#elseif(${list.contains(${bullets}, "nickelHail")})
+#set($hail = "Hail up to the size of nickels")
#else
#set($hail="")
#end
-#if(${list.contains($bullets, "wind30")})
-#set ($wind = "Wind gusts up to 30 mph")
-#elseif(${list.contains($bullets, "wind40")})
-#set ($wind = "Wind gusts up to 40 mph")
-#elseif(${list.contains($bullets, "wind50")})
-#set ($wind = "Wind gusts up to 50 mph")
+#if(${list.contains(${bullets}, "wind30")})
+#set($wind = "Wind gusts up to 30 mph")
+#elseif(${list.contains(${bullets}, "wind40")})
+#set($wind = "Wind gusts up to 40 mph")
+#elseif(${list.contains(${bullets}, "wind50")})
+#set($wind = "Wind gusts up to 50 mph")
#else
#set($wind="")
#end
@@ -195,19 +197,19 @@ THIS IS A TEST MESSAGE. ##
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
#if(${stormType} == "line")
-#set ($pathcastLead = "STRONG THUNDERSTORMS")
-#set ($otherLead = "THESE STORMS")
+#set($pathcastLead = "STRONG THUNDERSTORMS")
+#set($otherLead = "THESE STORMS")
#else
-#set ($pathcastLead = "THIS STRONG THUNDERSTORM")
-#set ($otherLead = "THIS STORM")
+#set($pathcastLead = "THIS STRONG THUNDERSTORM")
+#set($otherLead = "THIS STORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
+#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${affectedCounties} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -215,14 +217,14 @@ THIS IS A TEST MESSAGE. ##
#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT
#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE
#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH!
-#locationsList("LOCATIONS IMPACTED INCLUDE..." ${otherLead} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
+#locationsList("LOCATIONS IMPACTED INCLUDE..." ${otherLead} 0 ${cityList} ${otherPoints} ${affectedCounties} ${dateUtil} ${timeFormat} 0)
#end
##############################################
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS.
@@ -242,22 +244,18 @@ THIS IS A TEST MESSAGE. ##
##################################
######### CALLS TO ACTION ########
##################################
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-
-
-
#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
-
-#if(${list.contains($bullets, "torrentialRainfallCTA")})
+#if(${list.contains(${bullets}, "torrentialRainfallCTA")})
#if(${stormType} == "line")
TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THESE STORMS...AND MAY LEAD TO FLASH FLOODING. DO NOT DRIVE YOUR VEHICLE THROUGH FLOODED ROADWAYS.
@@ -267,7 +265,7 @@ TORRENTIAL RAINFALL IS ALSO OCCURRING WITH THIS STORM...AND MAY LEAD TO FLASH FL
#end
#end
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
#if(${stormType} == "line")
FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THESE STORMS. LIGHTNING CAN STRIKE 15 MILES AWAY FROM A THUNDERSTORM. SEEK A SAFE SHELTER INSIDE A BUILDING OR VEHICLE.
@@ -278,7 +276,7 @@ FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THIS STORM. LIGHTNING CAN S
#end
##
-#if(${list.contains($bullets, "stormIntensifyCTA")})
+#if(${list.contains(${bullets}, "stormIntensify")})
#if(${stormType} == "line")
THESE STORMS MAY INTENSIFY...SO BE CERTAIN TO MONITOR LOCAL RADIO AND TV STATIONS...AS WELL AS LOCAL CABLE TV OUTLETS...FOR ADDITIONAL INFORMATION AND POSSIBLE WARNINGS FROM THE NATIONAL WEATHER SERVICE.
@@ -289,30 +287,30 @@ THIS STORM MAY INTENSIFY...SO BE CERTAIN TO MONITOR LOCAL RADIO AND TV STATIONS.
#end
##
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
TO REPORT SEVERE WEATHER...CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
#end
##
-#if(${list.contains($bullets, "boatersCTA")})
+#if(${list.contains(${bullets}, "boatersCTA")})
IF ON OR NEAR !**Name Of Lake**!...GET OUT OF THE WATER AND MOVE INDOORS OR INSIDE A VEHICLE. REMEMBER...LIGHTNING CAN STRIKE OUT TO 15 MILES FROM THE PARENT THUNDERSTORM. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. MOVE TO SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
+
##
#if(${ctaSelected} == "YES")
&&
#end
-## #headline(${officeLoc}, ${backupSite})
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
####################################
@@ -323,15 +321,10 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
-!**NAME/INITIALS**!
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml
index 36e9878d8f..6662cdb8ae 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/significantWeatherAdvisory.xml
@@ -3,9 +3,8 @@
EVAN BOOKBINDER WFO EAX 3-23-2011 Initial creation
4-13-2011 Merge in OB11.4 Coding Changes
9-15-2011 Merge in OB11.8.0-8 Coding Changes, Zone Codes
- Mike Dangelo 02-27-2012 minor tweaks
- Phil Kurimski 3-01-2012
- Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ 9-12-2012 Added in new areaSource object and recode
+ for new locations shapefile
-->
@@ -23,9 +22,7 @@
- NEW
- COR
-
+
@@ -63,61 +60,62 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
+
-
+
@@ -125,44 +123,85 @@
-
-->
-
- 0.00
- AND
- 0
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- STATE_ZONE
-
+
+
+
+
+
+
+
+
+
+ Zone
+ HATCHING
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
+
+
+
+ COUNTY
+ INTERSECT
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
+ parent
+
+
+
+
+
+
+ 25
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -172,11 +211,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -186,47 +229,62 @@
+ 1
+ AREA
true
8.0
5
5
4
8
- Name
-
+ Name
+
NAME
STATE
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
-
+
-
+
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
-
-
-
-
-
+
+
+
+
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -236,14 +294,18 @@
-
+
+
+
+
- City
- ZONE
+ WarnGenLoc
+
+ Zone
States
TIMEZONES
TIME_ZONE
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.vm
index 7642b1dcc5..9a20d47fd5 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.vm
@@ -9,8 +9,8 @@
## VERSION AWIPS II 1.4 -- JAN 26 2012 OB12.1.1-1 ##
## Cleaned up wind coding for version 1.4 ##
## VERSION AWIPS II 1.5 -- MAR 2 2012 OB12.2.1-4 ##
-## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
## BY QINGLU LIN 8-14-2012 DR 14493 use TMLtime ##
+## Phil Kurimski -- SEP 10 2012 OB12.9.1-12 ##
################################################################
## Added Volcano Information in version 1.3 for sites where
## Volcanoes affect their marine zones. If sites wish to hide
@@ -19,19 +19,19 @@
################################################
## Set null variables used in the template
################################################
-#set ($capable = "")
-#set ($ashfallPath = "")
-#set ($debrisflowPath = "")
-#set ($ashfallInfo = "")
-#set ($debrisflowInfo = "")
-#set ($ashfallCTA = "")
+#set($capable = "")
+#set($ashfallPath = "")
+#set($debrisflowPath = "")
+#set($ashfallInfo = "")
+#set($debrisflowInfo = "")
+#set($ashfallCTA = "")
################################################
## Set up override for ashfall warning
## This will change Special Marine Warning to
## Ashfall Warning Per the 10-313 Directive
################################################
-#if(${list.contains($bullets, "ashfall")})
- #set ($ashfallHeadline = "ASHFALL WARNING FOR VOLCANIC ASH AND OTHER HAZARDS FOR...")
+#if(${list.contains(${bullets}, "ashfall")})
+ #set($ashfallHeadline = "ASHFALL WARNING FOR VOLCANIC ASH AND OTHER HAZARDS FOR...")
#end
################################################
${WMOId} ${vtecOffice} 000000 ${BBBId}
@@ -67,12 +67,36 @@ ${ashfallHeadline}
#else
SPECIAL MARINE WARNING FOR...
#end
+#######################################################################
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
+#######################################################################
#foreach (${area} in ${areas})
##
${area.name}...
#end
-##
-##
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
+#######################################################################
+## The following code will create a string of marine zone fips codes
+## which will be important in combining marine zones
+#######################################################################
+#######################################################################
+## Set the fipsstring variable to null for marine zone combinations
+#######################################################################
+#set($fipsstring = "")
+#foreach (${area} in ${areas})
+#set($fipsstring = $fipsstring + $area.fips + "-")
+#end
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+## Uncomment the parse command if you are combining your marine zones
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
* ##
#if(${productClass}=="T")
@@ -85,127 +109,127 @@ THIS IS A TEST MESSAGE. ##
## Removed Strong and Severe Thunderstorm selections and placed logic in the
## wind and hail selections that will change wording for Severe Thunderstorms.
#######################################################################
-#set ($eventType = "THUNDERSTORM")
-#if(${list.contains($bullets, "thunderstorm")})
- #set ($eventType = "THUNDERSTORM")
- #set ($severeType = "STRONG")
+#set($eventType = "THUNDERSTORM")
+#if(${list.contains(${bullets}, "thunderstorm")})
+ #set($eventType = "THUNDERSTORM")
+ #set($severeType = "STRONG")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($eventType = "SHOWER")
+#if(${list.contains(${bullets}, "shower")})
+ #set($eventType = "SHOWER")
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($eventType = "CLOUD")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($eventType = "CLOUD")
#end
-#if(${list.contains($bullets, "front")})
- #set ($eventType = "FRONT")
+#if(${list.contains(${bullets}, "front")})
+ #set($eventType = "FRONT")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($eventType = "VOLCANO")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($eventType = "VOLCANO")
#end
#######################################################################
## Added a Threat Section to template that includes Wind...Hail and Waterspout selections.
## Strong Thunderstorm will change to Severe Thunderstorm automatically based on
## selections in Wind...Hail and Waterspout sections.
#######################################################################
-#set ($windTag = "<34")
-#if(${list.contains($bullets, "34ktWind")})
- #set ($windTag = ">34")
- #set ($windType = "WINDS 34 KNOTS OR GREATER")
+#set($windTag = "<34")
+#if(${list.contains(${bullets}, "34ktWind")})
+ #set($windTag = ">34")
+ #set($windType = "WINDS 34 KNOTS OR GREATER")
#end
-#if(${list.contains($bullets, "40ktWind")})
- #set ($windTag = "40")
- #set ($windType = "WINDS TO 40 KNOTS")
+#if(${list.contains(${bullets}, "40ktWind")})
+ #set($windTag = "40")
+ #set($windType = "WINDS TO 40 KNOTS")
#end
-#if(${list.contains($bullets, "40ktplusWind")})
- #set ($windTag = "40")
- #set ($windType = "WINDS TO NEARLY 50 KNOTS")
+#if(${list.contains(${bullets}, "40ktplusWind")})
+ #set($windTag = "40")
+ #set($windType = "WINDS TO NEARLY 50 KNOTS")
#end
-#if(${list.contains($bullets, "50ktWind")})
- #set ($windTag = "50")
- #set ($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "50ktWind")})
+ #set($windTag = "50")
+ #set($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "65ktWind")})
- #set ($windTag = "65")
- #set ($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "65ktWind")})
+ #set($windTag = "65")
+ #set($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#set ($hailTag = "0.00")
-#if(${list.contains($bullets, "smallHail")})
- #set ($hailTag = "<.75")
- #set ($hailType = "SMALL HAIL")
+#set($hailTag = "0.00")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailTag = "<.75")
+ #set($hailType = "SMALL HAIL")
#end
-#if(${list.contains($bullets, "largeHail")})
- #set ($hailTag = ">.75")
- #set ($hailType = "LARGE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "largeHail")})
+ #set($hailTag = ">.75")
+ #set($hailType = "LARGE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "destructiveHail")})
- #set ($hailTag = ">2.0")
- #set ($hailType = "LARGE DESTRUCTIVE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "destructiveHail")})
+ #set($hailTag = ">2.0")
+ #set($hailType = "LARGE DESTRUCTIVE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "sightedSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "sightedSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "possibleSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($capable = "CAPABLE OF ")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "possibleSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($capable = "CAPABLE OF ")
+ #set($severeType = "SEVERE")
#end
################################################
## Threat section for Volcanic Situations
################################################
-#if(${list.contains($bullets, "ashfall")})
- #set ($ashfallType = "ASHFALL")
- #set ($ashfallPath = "VOLCANIC ASH")
- #set ($ctaSelected = "YES")
- #set ($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
- #set ($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
+#if(${list.contains(${bullets}, "ashfall")})
+ #set($ashfallType = "ASHFALL")
+ #set($ashfallPath = "VOLCANIC ASH")
+ #set($ctaSelected = "YES")
+ #set($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
+ #set($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
#end
-#if(${list.contains($bullets, "debrisFlow")})
- #set ($debrisflowType = "DEBRIS FLOW")
- #set ($debrisflowPath = "DEBRIS FLOW")
- #set ($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
+#if(${list.contains(${bullets}, "debrisFlow")})
+ #set($debrisflowType = "DEBRIS FLOW")
+ #set($debrisflowPath = "DEBRIS FLOW")
+ #set($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
#end
#######################################################################
## Logic to create the Wind/Hail Tags used by CR.
#######################################################################
-#set ($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
+#set($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
#######################################################################
## Logic to put together the threats based on Wind...Hail and Waterspout sections.
#######################################################################
#if(${spoutType} && ${windType} && ${hailType})
- #set ($threat = "${spoutType}...${windType} AND ${hailType}")
+ #set($threat = "${spoutType}...${windType} AND ${hailType}")
#elseif(${spoutType} && ${hailType})
- #set ($threat = "${spoutType} AND ${hailType}")
+ #set($threat = "${spoutType} AND ${hailType}")
#elseif(${spoutType} && ${windType})
- #set ($threat = "${spoutType} AND ${windType}")
+ #set($threat = "${spoutType} AND ${windType}")
#elseif(${windType} && ${hailType})
- #set ($threat = "${windType} AND ${hailType}")
+ #set($threat = "${windType} AND ${hailType}")
#elseif(${spoutType})
- #set ($threat = "${spoutType}")
+ #set($threat = "${spoutType}")
#elseif(${windType})
- #set ($threat = "${windType}")
+ #set($threat = "${windType}")
#elseif(${hailType})
- #set ($threat = "${hailType}")
+ #set($threat = "${hailType}")
#else
- #set ($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
+ #set($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
#end
#######################################################################
## Logic for Volcanic Threats. If selected this will override any
## other selections for wind/hail/spouts.
#######################################################################
#if(${ashfallType} && ${debrisflowType})
- #set ($threat = "${ashfallType} AND ${debrisflowType}")
- #set ($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
+ #set($threat = "${ashfallType} AND ${debrisflowType}")
+ #set($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
#elseif(${ashfallType})
- #set ($threat = "${ashfallType}")
- #set ($volcanoPath = "${ashfallPath}")
+ #set($threat = "${ashfallType}")
+ #set($volcanoPath = "${ashfallPath}")
#elseif(${debrisflowType})
- #set ($threat = "${debrisflowType}")
- #set ($volcanoPath = "${debrisflowPath}")
+ #set($threat = "${debrisflowType}")
+ #set($volcanoPath = "${debrisflowPath}")
#else
#end
#######################################################################
@@ -254,32 +278,32 @@ THIS IS A TEST MESSAGE. ##
## Basis section that incorporates line phenomena...capable vs producing
## and threat based on selections above. Added Satellite Imagery to basis.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
-#if(${list.contains($bullets, "doppler")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#set($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "sightedSpout")})
- #set ($report = "DOPPLER RADAR INDICATED ${stormline}...PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "sightedSpout")})
+ #set($report = "DOPPLER RADAR INDICATED ${stormline}...PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "marineSpotter")})
- #set ($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "marineSpotter")})
+ #set($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "mariner")})
- #set ($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "mariner")})
+ #set($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "pilot")})
- #set ($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "pilot")})
+ #set($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "sightedSpout")})
- #set ($report = "SATELLITE IMAGERY INDICATED ${stormline}...PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "sightedSpout")})
+ #set($report = "SATELLITE IMAGERY INDICATED ${stormline}...PRODUCING ${threat}...")
#end
## Storm current location description
@@ -287,8 +311,13 @@ THIS IS A TEST MESSAGE. ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "OVER", 4, "NM", true)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}LOCATED ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", true)
+#end
#if(${eventType} == "VOLCANO")
.
#elseif($movementSpeed < 3 || ${stationary})
@@ -301,16 +330,16 @@ ${ashfallInfo}
${debrisflowInfo}
-#set ($eventType = "${pathheader}")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+#set($eventType = "${pathheader}")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${eventType} WILL BE NEAR..." ${eventType} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 1)
-#elseif(${list.contains($bullets, "listoflocations")})
+#elseif(${list.contains(${bullets}, "listoflocations")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -327,7 +356,7 @@ THIS IS A TEST MESSAGE. ##
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent} AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
#end
@@ -335,57 +364,57 @@ EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
${ashfallCTA}
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
-#if(${list.contains($bullets, "gustyWindsCTA")})
+#if(${list.contains(${bullets}, "gustyWindsCTA")})
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
-#if(${list.contains($bullets, "nonThunderstormCTA")})
+#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
#end
-#if(${list.contains($bullets, "waterspoutCTA")})
+#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")
@@ -394,13 +423,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${TMLtime}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
##################################################################
## Wind/Hail Tags used by CR. Activate by uncommenting out.
##################################################################
@@ -409,12 +432,4 @@ ${mathUtil.round(${movementInKnots})}KT ##
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-##################################################################
-## If you decide to pull the user name from a file use this coding
-##################################################################
-##parse("name.vm")
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.xml
index 146bd83ef5..bf5a1b3926 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarning.xml
@@ -4,6 +4,7 @@
Evan Bookbinder 09-16-2011 OB11.0.8-8
Added Volcano Information Phil Kurimski 23 Sept 2011
Phil Kurimski 1 Mar 2012
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
-->
@@ -75,136 +76,143 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
- 0.00
- AND
- 0
- NAME
- NAME
- NAME
- states.txt
- ID
- NAME
-
- Name
-
-
+
+
+ MarineZones
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ NAME
+ countyTypes.txt
+ ID
+ NAME
+
+ parent
+
+
25
-
-
+
NAME
+ AREA
POINTS
+ 1
+ 100
-
- 1
- 100
+
+
+
+
distance
WARNGENLEV
@@ -213,14 +221,18 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
NAME
+ AREA
POINTS
-
-
-
-
-
5
100
+
+
+
+
+
+
+
+
distance
WARNGENLEV
@@ -228,17 +240,30 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
- true
- 20.0
+
+ false
+ 1
+ 10.0
5
5
4
8
Name
+ AREA
Name
Name
Name
countyTypes.txt
+
+
+
+
+
+
+
+
distance
@@ -246,10 +271,20 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
NAME
+ 1
+ AREA
TRACK
true
20
20
+
+
+
+
+
+
+
+
distance
@@ -257,6 +292,8 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
NAME
+ 1
+ AREA
TRACK
true
10
@@ -266,13 +303,16 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
+
+
+
+
- MarineSites
+ WarnGenLoc
MarineZones
MarineZones
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.vm
index 0779831aa9..01dcd6d485 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.vm
@@ -10,7 +10,7 @@
## Cleaned up wind coding for version 1.4 ##
## VERSION AWIPS II 1.5 -- MAR 2 2012 OB12.2.1-4 ##
## BY MGAMAZAYCHIKOV -- JUL 20 2012 DR15006 ##
-## BY QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
+## Phil Kurimski -- SEP 10 2012 OB12.9.1-12 ##
#####################################################
## Added Volcano Information in version 1.3 for sites where
## Volcanoes affect their marine zones. If sites wish to hide
@@ -19,26 +19,40 @@
############################################
## Set null variables used in the template
############################################
-#set ($capable = "")
-#set ($windhailTag = "")
-#set ($ashfallPath = "")
-#set ($debrisflowPath = "")
-#set ($ashfallInfo = "")
-#set ($debrisflowInfo = "")
-#set ($ashfallCTA = "")
-#set ($ashCON = "")
+#set($capable = "")
+#set($windhailTag = "")
+#set($ashfallPath = "")
+#set($debrisflowPath = "")
+#set($ashfallInfo = "")
+#set($debrisflowInfo = "")
+#set($ashfallCTA = "")
+#set($ashCON = "")
################################################
## Set up override for ashfall warning
## This will change Special Marine Warning to
## Ashfall Warning Per the 10-313 Directive
################################################
-#set ($warningType = "SPECIAL MARINE WARNING")
-#if(${list.contains($bullets, "ashfall")})
- #set ($warningType = "ASHFALL WARNING FOR VOLCANIC ASH AND OTHER HAZARDS")
- #set ($ashCON = "N")
+#set($warningType = "SPECIAL MARINE WARNING")
+#if(${list.contains(${bullets}, "ashfall")})
+ #set($warningType = "ASHFALL WARNING FOR VOLCANIC ASH AND OTHER HAZARDS")
+ #set($ashCON = "N")
#end
################################################
#######################################################################
+## The following code will create a string of marine zone fips codes
+## which will be important in combining marine zones
+#######################################################################
+#######################################################################
+## Set the fipsstring variable to null for marine zone combinations
+## This will only work for single CON/CAN/EXP products
+## Combination CON/CAN will need additional code which will be
+## included in the template below.
+#######################################################################
+#set($fipsstring = "")
+#foreach (${area} in ${areas})
+#set($fipsstring = $fipsstring + $area.fips + "-")
+#end
+#######################################################################
## HEADER FOR NON-CAN/CON PRODUCTS
#######################################################################
##
@@ -86,9 +100,24 @@ THIS IS A TEST MESSAGE.##
...THE ${warningType} IS CANCELLED...
THE AFFECTED AREAS WERE...
+#######################################################################
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
+#######################################################################
#foreach (${area} in ${areas})
${area.name}...
#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+## Uncomment the parse command if you are combining your marine zones
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
######################################################################
## Setup eventType for wording in the End of Warning Statement
@@ -99,37 +128,37 @@ ${area.name}...
#set($stormline = "S HAVE")
#set($pose = "POSE")
#end
-#set ($eventType = "!**STORMS**! HAVE")
-#if(${list.contains($bullets, "thunderstorm")})
- #set ($eventType = "THUNDERSTORM${stormline}")
+#set($eventType = "!**STORMS**! HAVE")
+#if(${list.contains(${bullets}, "thunderstorm")})
+ #set($eventType = "THUNDERSTORM${stormline}")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($eventType = "SHOWER${stormline}")
+#if(${list.contains(${bullets}, "shower")})
+ #set($eventType = "SHOWER${stormline}")
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($eventType = "CLOUD${stormline}")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($eventType = "CLOUD${stormline}")
#end
-#if(${list.contains($bullets, "front")})
- #set ($eventType = "FRONT HAS")
- #set ($pose = "POSES")
+#if(${list.contains(${bullets}, "front")})
+ #set($eventType = "FRONT HAS")
+ #set($pose = "POSES")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($eventType = "VOLCANO HAS")
- #set ($pose = "POSES")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($eventType = "VOLCANO HAS")
+ #set($pose = "POSES")
#end
#######################################################################
## Section for end of warning statements. Replaced default wording with
## a better defined reason for the end to the warning.
#######################################################################
-#set ($canwarning = "THE ${eventType} !**WEAKENED/MOVED OUT OF THE AREA**! AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
-#if(${list.contains($bullets, "weakenedWarnEnd")})
- #set ($canwarning = "THE ${eventType} WEAKENED AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#set($canwarning = "THE ${eventType} !**WEAKENED/MOVED OUT OF THE AREA**! AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#if(${list.contains(${bullets}, "weakenedWarnEnd")})
+ #set($canwarning = "THE ${eventType} WEAKENED AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
#end
-#if(${list.contains($bullets, "movedWarnEnd")})
- #set ($canwarning = "THE ${eventType} MOVED OUT OF THE AREA AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#if(${list.contains(${bullets}, "movedWarnEnd")})
+ #set($canwarning = "THE ${eventType} MOVED OUT OF THE AREA AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($canwarning = "THE ${eventType} STOPPED ERUPTING AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($canwarning = "THE ${eventType} STOPPED ERUPTING AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
#end
${canwarning}
@@ -137,10 +166,10 @@ ${canwarning}
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -155,127 +184,127 @@ ${canwarning}
## wind and hail selections that will change wording for Severe Thunderstorms.
#######################################################################
#if(${action}=="CON" || (${action}=="COR" && ${CORCAN}=="false"))
-#set ($eventType = "THUNDERSTORM")
-#if(${list.contains($bullets, "thunderstorm")})
- #set ($eventType = "THUNDERSTORM")
- #set ($severeType = "STRONG")
+#set($eventType = "THUNDERSTORM")
+#if(${list.contains(${bullets}, "thunderstorm")})
+ #set($eventType = "THUNDERSTORM")
+ #set($severeType = "STRONG")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($eventType = "SHOWER")
+#if(${list.contains(${bullets}, "shower")})
+ #set($eventType = "SHOWER")
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($eventType = "CLOUD")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($eventType = "CLOUD")
#end
-#if(${list.contains($bullets, "front")})
- #set ($eventType = "FRONT")
+#if(${list.contains(${bullets}, "front")})
+ #set($eventType = "FRONT")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($eventType = "VOLCANO")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($eventType = "VOLCANO")
#end
#######################################################################
## Added a Threat Section to template that includes Wind...Hail and Waterspout selections.
## Strong Thunderstorm will change to Severe Thunderstorm automatically based on
## selections in Wind...Hail and Waterspout sections.
#######################################################################
-#set ($windTag = "<34")
-#if(${list.contains($bullets, "34ktWind")})
- #set ($windTag = ">34")
- #set ($windType = "WINDS 34 KNOTS OR GREATER")
+#set($windTag = "<34")
+#if(${list.contains(${bullets}, "34ktWind")})
+ #set($windTag = ">34")
+ #set($windType = "WINDS 34 KNOTS OR GREATER")
#end
-#if(${list.contains($bullets, "40ktWind")})
- #set ($windTag = "40")
- #set ($windType = "WINDS TO 40 KNOTS")
+#if(${list.contains(${bullets}, "40ktWind")})
+ #set($windTag = "40")
+ #set($windType = "WINDS TO 40 KNOTS")
#end
-#if(${list.contains($bullets, "40ktplusWind")})
- #set ($windTag = "40")
- #set ($windType = "WINDS TO NEARLY 50 KNOTS")
+#if(${list.contains(${bullets}, "40ktplusWind")})
+ #set($windTag = "40")
+ #set($windType = "WINDS TO NEARLY 50 KNOTS")
#end
-#if(${list.contains($bullets, "50ktWind")})
- #set ($windTag = "50")
- #set ($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "50ktWind")})
+ #set($windTag = "50")
+ #set($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "65ktWind")})
- #set ($windTag = "65")
- #set ($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "65ktWind")})
+ #set($windTag = "65")
+ #set($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#set ($hailTag = "0.00")
-#if(${list.contains($bullets, "smallHail")})
- #set ($hailTag = "<.75")
- #set ($hailType = "SMALL HAIL")
+#set($hailTag = "0.00")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailTag = "<.75")
+ #set($hailType = "SMALL HAIL")
#end
-#if(${list.contains($bullets, "largeHail")})
- #set ($hailTag = ">.75")
- #set ($hailType = "LARGE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "largeHail")})
+ #set($hailTag = ">.75")
+ #set($hailType = "LARGE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "destructiveHail")})
- #set ($hailTag = ">2.0")
- #set ($hailType = "LARGE DESTRUCTIVE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "destructiveHail")})
+ #set($hailTag = ">2.0")
+ #set($hailType = "LARGE DESTRUCTIVE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "sightedSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "sightedSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "possibleSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($capable = "CAPABLE OF ")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "possibleSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($capable = "CAPABLE OF ")
+ #set($severeType = "SEVERE")
#end
################################################
## Threat section for Volcanic Situations
################################################
-#if(${list.contains($bullets, "ashfall")})
- #set ($ashfallType = "ASHFALL")
- #set ($ashfallPath = "VOLCANIC ASH")
- #set ($ctaSelected = "YES")
- #set ($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
- #set ($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
+#if(${list.contains(${bullets}, "ashfall")})
+ #set($ashfallType = "ASHFALL")
+ #set($ashfallPath = "VOLCANIC ASH")
+ #set($ctaSelected = "YES")
+ #set($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
+ #set($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
#end
-#if(${list.contains($bullets, "debrisFlow")})
- #set ($debrisflowType = "DEBRIS FLOW")
- #set ($debrisflowPath = "DEBRIS FLOW")
- #set ($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
+#if(${list.contains(${bullets}, "debrisFlow")})
+ #set($debrisflowType = "DEBRIS FLOW")
+ #set($debrisflowPath = "DEBRIS FLOW")
+ #set($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
#end
#######################################################################
## Logic to create the Wind/Hail Tags used by CR.
#######################################################################
-#set ($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
+#set($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
#######################################################################
## Logic to put together the threats based on Wind...Hail and Waterspout sections.
#######################################################################
#if(${spoutType} && ${windType} && ${hailType})
- #set ($threat = "${spoutType}...${windType} AND ${hailType}")
+ #set($threat = "${spoutType}...${windType} AND ${hailType}")
#elseif(${spoutType} && ${hailType})
- #set ($threat = "${spoutType} AND ${hailType}")
+ #set($threat = "${spoutType} AND ${hailType}")
#elseif(${spoutType} && ${windlType})
- #set ($threat = "${spoutType} AND ${windType}")
+ #set($threat = "${spoutType} AND ${windType}")
#elseif(${windType} && ${hailType})
- #set ($threat = "${windType} AND ${hailType}")
+ #set($threat = "${windType} AND ${hailType}")
#elseif(${spoutType})
- #set ($threat = "${spoutType}")
+ #set($threat = "${spoutType}")
#elseif(${windType})
- #set ($threat = "${windType}")
+ #set($threat = "${windType}")
#elseif(${hailType})
- #set ($threat = "${hailType}")
+ #set($threat = "${hailType}")
#else
- #set ($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
+ #set($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
#end
#######################################################################
## Logic for Volcanic Threats. If selected this will override any
## other selections for wind/hail/spouts.
#######################################################################
#if(${ashfallType} && ${debrisflowType})
- #set ($threat = "${ashfallType} AND ${debrisflowType}")
- #set ($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
+ #set($threat = "${ashfallType} AND ${debrisflowType}")
+ #set($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
#elseif(${ashfallType})
- #set ($threat = "${ashfallType}")
- #set ($volcanoPath = "${ashfallPath}")
+ #set($threat = "${ashfallType}")
+ #set($volcanoPath = "${ashfallPath}")
#elseif(${debrisflowType})
- #set ($threat = "${debrisflowType}")
- #set ($volcanoPath = "${debrisflowPath}")
+ #set($threat = "${debrisflowType}")
+ #set($volcanoPath = "${debrisflowPath}")
#else
#end
#######################################################################
@@ -324,32 +353,32 @@ ${canwarning}
## Basis section that incorporates line phenomena...capable vs producing
## and threat based on selections above. Added Satellite Imagery to basis.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
-#if(${list.contains($bullets, "doppler")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#set($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "doppler")} && ${list.contains($bullets, "sightedSpout")})
- #set ($report = "DOPPLER RADAR INDICATED ${stormline}...PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "sightedSpout")})
+ #set($report = "DOPPLER RADAR INDICATED ${stormline}...PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "marineSpotter")})
- #set ($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "marineSpotter")})
+ #set($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "mariner")})
- #set ($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "mariner")})
+ #set($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "pilot")})
- #set ($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "pilot")})
+ #set($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "satellite")} && ${list.contains($bullets, "sightedSpout")})
- #set ($report = "SATELLITE IMAGERY INDICATED ${stormline}...PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "sightedSpout")})
+ #set($report = "SATELLITE IMAGERY INDICATED ${stormline}...PRODUCING ${threat}...")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE.##
@@ -360,16 +389,36 @@ THIS IS A TEST MESSAGE.##
...A${ashCON} ${warningType} REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})...
FOR THE FOLLOWING AREAS...
+#######################################################################
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
+#######################################################################
#foreach (${area} in ${areas})
${area.name}...
#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+## Uncomment the parse command if you are combining your marine zones
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
## Storm current location description
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report}LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "OVER", 4, "NM", true)
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})
+...${report}LOCATED ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", true)
+#end
#if(${eventType} == "VOLCANO")
.
#elseif($movementSpeed < 3 || ${stationary})
@@ -385,22 +434,22 @@ ${debrisflowInfo}
#############################################
######## GENERATE ADDITIONAL REPORTS #######
#############################################
-#if(${list.contains($bullets, "addlRpt")})
+#if(${list.contains(${bullets}, "addlRpt")})
IN ADDITION...AT !**enter time, phenomena**! WAS REPORTED !**enter location**!.
#end
###################################################
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
-#set ($eventType = "${pathheader}")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+#set($eventType = "${pathheader}")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${eventType} WILL BE NEAR..." ${eventType} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 1)
-#elseif(${list.contains($bullets, "listoflocations")})
+#elseif(${list.contains(${bullets}, "listoflocations")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -415,7 +464,7 @@ THIS IS A TEST MESSAGE. ##
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent} AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
#end
@@ -423,16 +472,16 @@ EVERYONE AT !**event/venue name or location**! ARE IN THE PATH OF ${specialEvent
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
@@ -440,40 +489,40 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WINDS AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
-#if(${list.contains($bullets, "gustyWindsCTA")})
+#if(${list.contains(${bullets}, "gustyWindsCTA")})
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
-#if(${list.contains($bullets, "nonThunderstormCTA")})
+#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
#end
-#if(${list.contains($bullets, "waterspoutCTA")})
+#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -514,9 +563,36 @@ THIS IS A TEST MESSAGE.##
...THE ${warningType} IS CANCELLED...
THE AFFECTED AREAS WERE...
+#######################################################################
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
+#######################################################################
#foreach (${area} in ${cancelareas})
${area.name}...
#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
+#######################################################################
+## The following code will create a string of marine zone fips codes
+## which will be important in combining marine zones
+## This has to be done again since the CAN/CON section uses cancelareas
+#######################################################################
+#######################################################################
+## Set the fipsstring variable to null for marine zone combinations
+#######################################################################
+#set($fipsstring = "")
+#foreach (${area} in ${cancelareas})
+#set($fipsstring = $fipsstring + $area.fips + "-")
+#end
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+## Uncomment the parse command if you are combining your marine zones
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
######################################################################
## Setup eventType for wording in the End of Warning Statement
@@ -527,19 +603,19 @@ ${area.name}...
#set($stormline = "S HAVE")
#set($pose = "POSE")
#end
-#set ($eventType = "!**STORMS**! HAVE")
-#if(${list.contains($bullets, "event1")})
- #set ($eventType = "THUNDERSTORM${stormline}")
+#set($eventType = "!**STORMS**! HAVE")
+#if(${list.contains(${bullets}, "event1")})
+ #set($eventType = "THUNDERSTORM${stormline}")
#end
-#if(${list.contains($bullets, "event3")})
- #set ($eventType = "SHOWER${stormline}")
+#if(${list.contains(${bullets}, "event3")})
+ #set($eventType = "SHOWER${stormline}")
#end
-#if(${list.contains($bullets, "event4")})
- #set ($eventType = "CLOUD${stormline}")
+#if(${list.contains(${bullets}, "event4")})
+ #set($eventType = "CLOUD${stormline}")
#end
-#if(${list.contains($bullets, "event5")})
- #set ($eventType = "FRONT HAS")
- #set ($pose = "POSES")
+#if(${list.contains(${bullets}, "event5")})
+ #set($eventType = "FRONT HAS")
+ #set($pose = "POSES")
#end
#######################################################################
## Replaced default end of warning wording.
@@ -550,10 +626,10 @@ THE ${eventType} !**WEAKENED/MOVED OUT OF THE AREA**! AND NO LONGER ${pose} A SI
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")
@@ -562,13 +638,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
@@ -586,126 +656,126 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## Removed Strong and Severe Thunderstorm selections and placed logic in the
## wind and hail selections that will change wording for Severe Thunderstorms.
#######################################################################
-#set ($eventType = "THUNDERSTORM")
-#if(${list.contains($bullets, "thunderstorm")})
- #set ($eventType = "THUNDERSTORM")
- #set ($severeType = "STRONG")
+#set($eventType = "THUNDERSTORM")
+#if(${list.contains(${bullets}, "thunderstorm")})
+ #set($eventType = "THUNDERSTORM")
+ #set($severeType = "STRONG")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($eventType = "SHOWER")
+#if(${list.contains(${bullets}, "shower")})
+ #set($eventType = "SHOWER")
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($eventType = "CLOUD")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($eventType = "CLOUD")
#end
-#if(${list.contains($bullets, "front")})
- #set ($eventType = "FRONT")
+#if(${list.contains(${bullets}, "front")})
+ #set($eventType = "FRONT")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($eventType = "VOLCANO")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($eventType = "VOLCANO")
#end
#######################################################################
## Added a Threat Section to template that includes Wind...Hail and Waterspout selections.
## Strong Thunderstorm will change to Severe Thunderstorm automatically based on
## selections in Wind...Hail and Waterspout sections.
#######################################################################
-#set ($windTag = "<34")
-#if(${list.contains($bullets, "34ktWind")})
- #set ($windTag = ">34")
- #set ($windType = "STRONG WINDS 34 KNOTS OR GREATER")
+#set($windTag = "<34")
+#if(${list.contains(${bullets}, "34ktWind")})
+ #set($windTag = ">34")
+ #set($windType = "STRONG WINDS 34 KNOTS OR GREATER")
#end
-#if(${list.contains($bullets, "40ktWind")})
- #set ($windTag = "40")
- #set ($windType = "STRONG WINDS TO 40 KNOTS")
+#if(${list.contains(${bullets}, "40ktWind")})
+ #set($windTag = "40")
+ #set($windType = "STRONG WINDS TO 40 KNOTS")
#end
-#if(${list.contains($bullets, "40ktplusWind")})
- #set ($windTag = "40")
- #set ($windType = "STRONG WINDS TO NEARLY 50 KNOTS")
+#if(${list.contains(${bullets}, "40ktplusWind")})
+ #set($windTag = "40")
+ #set($windType = "STRONG WINDS TO NEARLY 50 KNOTS")
#end
-#if(${list.contains($bullets, "50ktWind")})
- #set ($windTag = "50")
- #set ($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "50ktWind")})
+ #set($windTag = "50")
+ #set($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "65ktWind")})
- #set ($windTag = "65")
- #set ($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "65ktWind")})
+ #set($windTag = "65")
+ #set($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#set ($hailTag = "0.00")
-#if(${list.contains($bullets, "smallHail")})
- #set ($hailTag = "<.75")
- #set ($hailType = "SMALL HAIL")
+#set($hailTag = "0.00")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailTag = "<.75")
+ #set($hailType = "SMALL HAIL")
#end
-#if(${list.contains($bullets, "largeHail")})
- #set ($hailTag = ">.75")
- #set ($hailType = "LARGE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "largeHail")})
+ #set($hailTag = ">.75")
+ #set($hailType = "LARGE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "destructiveHail")})
- #set ($hailTag = ">2.0")
- #set ($hailType = "LARGE DESTRUCTIVE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "destructiveHail")})
+ #set($hailTag = ">2.0")
+ #set($hailType = "LARGE DESTRUCTIVE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "sightedSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "sightedSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "possibleSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($capable = "CAPABLE OF ")
+#if(${list.contains(${bullets}, "possibleSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($capable = "CAPABLE OF ")
#end
################################################
## Threat section for Volcanic Situations
################################################
-#if(${list.contains($bullets, "ashfall")})
- #set ($ashfallType = "ASHFALL")
- #set ($ashfallPath = "VOLCANIC ASH")
- #set ($ctaSelected = "YES")
- #set ($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
- #set ($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
+#if(${list.contains(${bullets}, "ashfall")})
+ #set($ashfallType = "ASHFALL")
+ #set($ashfallPath = "VOLCANIC ASH")
+ #set($ctaSelected = "YES")
+ #set($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
+ #set($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
#end
-#if(${list.contains($bullets, "debrisFlow")})
- #set ($debrisflowType = "DEBRIS FLOW")
- #set ($debrisflowPath = "DEBRIS FLOW")
- #set ($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
+#if(${list.contains(${bullets}, "debrisFlow")})
+ #set($debrisflowType = "DEBRIS FLOW")
+ #set($debrisflowPath = "DEBRIS FLOW")
+ #set($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
#end
#######################################################################
## Logic to create the Wind/Hail Tags used by CR.
#######################################################################
-#set ($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
+#set($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
#######################################################################
## Logic to put together the threats based on Wind...Hail and Waterspout sections.
#######################################################################
#if(${spoutType} && ${windType} && ${hailType})
- #set ($threat = "${spoutType}...${windType} AND ${hailType}")
+ #set($threat = "${spoutType}...${windType} AND ${hailType}")
#elseif(${spoutType} && ${hailType})
- #set ($threat = "${spoutType} AND ${hailType}")
+ #set($threat = "${spoutType} AND ${hailType}")
#elseif(${spoutType} && ${windType})
- #set ($threat = "${spoutType} AND ${windType}")
+ #set($threat = "${spoutType} AND ${windType}")
#elseif(${windType} && ${hailType})
- #set ($threat = "${windType} AND ${hailType}")
+ #set($threat = "${windType} AND ${hailType}")
#elseif(${spoutType})
- #set ($threat = "${spoutType}")
+ #set($threat = "${spoutType}")
#elseif(${windType})
- #set ($threat = "${windType}")
+ #set($threat = "${windType}")
#elseif(${hailType})
- #set ($threat = "${hailType}")
+ #set($threat = "${hailType}")
#else
- #set ($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
+ #set($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
#end
#######################################################################
## Logic for Volcanic Threats. If selected this will override any
## other selections for wind/hail/spouts.
#######################################################################
#if(${ashfallType} && ${debrisflowType})
- #set ($threat = "${ashfallType} AND ${debrisflowType}")
- #set ($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
+ #set($threat = "${ashfallType} AND ${debrisflowType}")
+ #set($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
#elseif(${ashfallType})
- #set ($threat = "${ashfallType}")
- #set ($volcanoPath = "${ashfallPath}")
+ #set($threat = "${ashfallType}")
+ #set($volcanoPath = "${ashfallPath}")
#elseif(${debrisflowType})
- #set ($threat = "${debrisflowType}")
- #set ($volcanoPath = "${debrisflowPath}")
+ #set($threat = "${debrisflowType}")
+ #set($volcanoPath = "${debrisflowPath}")
#else
#end
#######################################################################
@@ -746,26 +816,26 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## Basis section that incorporates line phenomena...capable vs producing
## and threat based on selections above. Added Satellite Imagery to basis.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
-#if(${list.contains($bullets, "doppler")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#set($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "marineSpotter")})
- #set ($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "marineSpotter")})
+ #set($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "mariner")})
- #set ($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "mariner")})
+ #set($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "pilot")})
- #set ($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "pilot")})
+ #set($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE.##
@@ -776,15 +846,45 @@ THIS IS A TEST MESSAGE.##
...A${ashCON} ${warningType} REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})...
FOR THE FOLLOWING AREAS...
+#######################################################################
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
+#######################################################################
#foreach (${area} in ${areas})
${area.name}...
#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
+#######################################################################
+## The following code will create a string of marine zone fips codes
+## which will be important in combining marine zones
+## This has to be done again since the CAN/CON section uses cancelareas
+#######################################################################
+#######################################################################
+## Set the fipsstring variable to null for marine zone combinations
+#######################################################################
+#set($fipsstring = "")
+#foreach (${area} in ${areas})
+#set($fipsstring = $fipsstring + $area.fips + "-")
+#end
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}... ${report} LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "OVER", 4, "NM", true)
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", true)
+#end
#if(${eventType} == "VOLCANO")
.
#elseif($movementSpeed < 3 || ${stationary})
@@ -800,22 +900,22 @@ ${debrisflowInfo}
#############################################
######## GENERATE ADDITIONAL REPORTS #######
#############################################
-#if(${list.contains($bullets, "addlRpt")})
+#if(${list.contains(${bullets}, "addlRpt")})
IN ADDITION...AT !**enter time, phenomena**! WAS REPORTED !**enter location**!.
#end
###################################################
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
-#set ($eventType = "${pathheader}")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+#set($eventType = "${pathheader}")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${eventType} WILL BE NEAR..." ${eventType} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 1)
-#elseif(${list.contains($bullets, "listoflocations")})
+#elseif(${list.contains(${bullets}, "listoflocations")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -831,7 +931,7 @@ THIS IS A TEST MESSAGE. ##
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
@@ -844,16 +944,16 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
@@ -861,40 +961,40 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WIND AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
-#if(${list.contains($bullets, "gustyWindsCTA")})
+#if(${list.contains(${bullets}, "gustyWindsCTA")})
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
-#if(${list.contains($bullets, "nonThunderstormCTA")})
+#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
#end
-#if(${list.contains($bullets, "waterspoutCTA")})
+#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#elseif(${CORCAN} == "true")
@@ -940,19 +1040,19 @@ ${area.name}...
#set($stormline = "S HAVE")
#set($pose = "POSE")
#end
-#set ($eventType = "!**STORMS**! HAVE")
-#if(${list.contains($bullets, "event1")})
- #set ($eventType = "THUNDERSTORM${stormline}")
+#set($eventType = "!**STORMS**! HAVE")
+#if(${list.contains(${bullets}, "event1")})
+ #set($eventType = "THUNDERSTORM${stormline}")
#end
-#if(${list.contains($bullets, "event3")})
- #set ($eventType = "SHOWER${stormline}")
+#if(${list.contains(${bullets}, "event3")})
+ #set($eventType = "SHOWER${stormline}")
#end
-#if(${list.contains($bullets, "event4")})
- #set ($eventType = "CLOUD${stormline}")
+#if(${list.contains(${bullets}, "event4")})
+ #set($eventType = "CLOUD${stormline}")
#end
-#if(${list.contains($bullets, "event5")})
- #set ($eventType = "FRONT HAS")
- #set ($pose = "POSES")
+#if(${list.contains(${bullets}, "event5")})
+ #set($eventType = "FRONT HAS")
+ #set($pose = "POSES")
#end
#######################################################################
## Replaced default end of warning wording.
@@ -963,10 +1063,10 @@ THE ${eventType} !**WEAKENED/MOVED OUT OF THE AREA**! AND NO LONGER ${pose} A SI
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#if(${productClass}=="T")
@@ -975,13 +1075,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#end
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${event}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
@@ -999,126 +1093,126 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## Removed Strong and Severe Thunderstorm selections and placed logic in the
## wind and hail selections that will change wording for Severe Thunderstorms.
#######################################################################
-#set ($eventType = "THUNDERSTORM")
-#if(${list.contains($bullets, "thunderstorm")})
- #set ($eventType = "THUNDERSTORM")
- #set ($severeType = "STRONG")
+#set($eventType = "THUNDERSTORM")
+#if(${list.contains(${bullets}, "thunderstorm")})
+ #set($eventType = "THUNDERSTORM")
+ #set($severeType = "STRONG")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($eventType = "SHOWER")
+#if(${list.contains(${bullets}, "shower")})
+ #set($eventType = "SHOWER")
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($eventType = "CLOUD")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($eventType = "CLOUD")
#end
-#if(${list.contains($bullets, "front")})
- #set ($eventType = "FRONT")
+#if(${list.contains(${bullets}, "front")})
+ #set($eventType = "FRONT")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($eventType = "VOLCANO")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($eventType = "VOLCANO")
#end
#######################################################################
## Added a Threat Section to template that includes Wind...Hail and Waterspout selections.
## Strong Thunderstorm will change to Severe Thunderstorm automatically based on
## selections in Wind...Hail and Waterspout sections.
#######################################################################
-#set ($windTag = "<34")
-#if(${list.contains($bullets, "34ktWind")})
- #set ($windTag = ">34")
- #set ($windType = "STRONG WINDS 34 KNOTS OR GREATER")
+#set($windTag = "<34")
+#if(${list.contains(${bullets}, "34ktWind")})
+ #set($windTag = ">34")
+ #set($windType = "STRONG WINDS 34 KNOTS OR GREATER")
#end
-#if(${list.contains($bullets, "40ktWind")})
- #set ($windTag = "40")
- #set ($windType = "STRONG WINDS TO 40 KNOTS")
+#if(${list.contains(${bullets}, "40ktWind")})
+ #set($windTag = "40")
+ #set($windType = "STRONG WINDS TO 40 KNOTS")
#end
-#if(${list.contains($bullets, "40ktplusWind")})
- #set ($windTag = "40")
- #set ($windType = "STRONG WINDS TO NEARLY 50 KNOTS")
+#if(${list.contains(${bullets}, "40ktplusWind")})
+ #set($windTag = "40")
+ #set($windType = "STRONG WINDS TO NEARLY 50 KNOTS")
#end
-#if(${list.contains($bullets, "50ktWind")})
- #set ($windTag = "50")
- #set ($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "50ktWind")})
+ #set($windTag = "50")
+ #set($windType = "DANGEROUS WINDS IN EXCESS OF 50 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "65ktWind")})
- #set ($windTag = "65")
- #set ($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "65ktWind")})
+ #set($windTag = "65")
+ #set($windType = "DANGEROUS CAPSIZING WINDS IN EXCESS OF 65 KNOTS")
+ #set($severeType = "SEVERE")
#end
-#set ($hailTag = "0.00")
-#if(${list.contains($bullets, "smallHail")})
- #set ($hailTag = "<.75")
- #set ($hailType = "SMALL HAIL")
+#set($hailTag = "0.00")
+#if(${list.contains(${bullets}, "smallHail")})
+ #set($hailTag = "<.75")
+ #set($hailType = "SMALL HAIL")
#end
-#if(${list.contains($bullets, "largeHail")})
- #set ($hailTag = ">.75")
- #set ($hailType = "LARGE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "largeHail")})
+ #set($hailTag = ">.75")
+ #set($hailType = "LARGE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "destructiveHail")})
- #set ($hailTag = ">2.0")
- #set ($hailType = "LARGE DESTRUCTIVE HAIL")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "destructiveHail")})
+ #set($hailTag = ">2.0")
+ #set($hailType = "LARGE DESTRUCTIVE HAIL")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "sightedSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($severeType = "SEVERE")
+#if(${list.contains(${bullets}, "sightedSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($severeType = "SEVERE")
#end
-#if(${list.contains($bullets, "possibleSpout")})
- #set ($spoutType = "WATERSPOUTS")
- #set ($capable = "CAPABLE OF ")
+#if(${list.contains(${bullets}, "possibleSpout")})
+ #set($spoutType = "WATERSPOUTS")
+ #set($capable = "CAPABLE OF ")
#end
################################################
## Threat section for Volcanic Situations
################################################
-#if(${list.contains($bullets, "ashfall")})
- #set ($ashfallType = "ASHFALL")
- #set ($ashfallPath = "VOLCANIC ASH")
- #set ($ctaSelected = "YES")
- #set ($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
- #set ($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
+#if(${list.contains(${bullets}, "ashfall")})
+ #set($ashfallType = "ASHFALL")
+ #set($ashfallPath = "VOLCANIC ASH")
+ #set($ctaSelected = "YES")
+ #set($ashfallCTA = "ASH IS AN EYE AND RESPIRATORY IRRITANT AND IS ABRASIVE. THOSE WITH RESPIRATORY SENSITIVITIES SHOULD TAKE EXTRA PRECAUTIONS TO MINIMIZE EXPOSURE. PROTECT ELECTRONICS AND COVER AIR INTAKES IF ASHFALL IS EXPECTED OR CONFIRMED. REMOVE ASH FROM SURFACES WITH WATER IF POSSIBLE TO PREVENT EXCESSIVE ACCUMULATION.")
+ #set($ashfallInfo = "AN ASHFALL WARNING MEANS THAT THE VOLCANO IS UNDERGOING A MAJOR ERUPTION. IT IS VERY LIKELY THAT MARINERS WILL BE AFFECTED BY VOLCANIC HAZARDS IN THE WARNING AREAS SUCH AS SIGNIFICANT DEBRIS...ASHFALL ONE QUARTER INCH OR GREATER...LAVA...OR LAHAR AND DEBRIS FLOWS.")
#end
-#if(${list.contains($bullets, "debrisFlow")})
- #set ($debrisflowType = "DEBRIS FLOW")
- #set ($debrisflowPath = "DEBRIS FLOW")
- #set ($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
+#if(${list.contains(${bullets}, "debrisFlow")})
+ #set($debrisflowType = "DEBRIS FLOW")
+ #set($debrisflowPath = "DEBRIS FLOW")
+ #set($debrisflowInfo = "THE ERUPTION OF THE VOLCANO CAN CAUSE A SUDDEN MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK...AND HOT WATER TO FLOW DOWN THE MOUNTAIN AND INTO THE NEARBY WATERS.")
#end
#######################################################################
## Logic to create the Wind/Hail Tags used by CR.
#######################################################################
-#set ($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
+#set($windhailTag = "WIND...HAIL ${windTag}KTS ${hailTag}IN")
#######################################################################
## Logic to put together the threats based on Wind...Hail and Waterspout sections.
#######################################################################
#if(${spoutType} && ${windType} && ${hailType})
- #set ($threat = "${spoutType}...${windType} AND ${hailType}")
+ #set($threat = "${spoutType}...${windType} AND ${hailType}")
#elseif(${spoutType} && ${hailType})
- #set ($threat = "${spoutType} AND ${hailType}")
+ #set($threat = "${spoutType} AND ${hailType}")
#elseif(${spoutType} && ${windType})
- #set ($threat = "${spoutType} AND ${windType}")
+ #set($threat = "${spoutType} AND ${windType}")
#elseif(${windType} && ${hailType})
- #set ($threat = "${windType} AND ${hailType}")
+ #set($threat = "${windType} AND ${hailType}")
#elseif(${spoutType})
- #set ($threat = "${spoutType}")
+ #set($threat = "${spoutType}")
#elseif(${windType})
- #set ($threat = "${windType}")
+ #set($threat = "${windType}")
#elseif(${hailType})
- #set ($threat = "${hailType}")
+ #set($threat = "${hailType}")
#else
- #set ($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
+ #set($threat = "!**YOU DID NOT SELECT ANY THREATS. PLEAST RE-GENERATE THIS WARNING!**!")
#end
#######################################################################
## Logic for Volcanic Threats. If selected this will override any
## other selections for wind/hail/spouts.
#######################################################################
#if(${ashfallType} && ${debrisflowType})
- #set ($threat = "${ashfallType} AND ${debrisflowType}")
- #set ($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
+ #set($threat = "${ashfallType} AND ${debrisflowType}")
+ #set($volcanoPath = "${ashfallPath} AND ${debrisflowPath}")
#elseif(${ashfallType})
- #set ($threat = "${ashfallType}")
- #set ($volcanoPath = "${ashfallPath}")
+ #set($threat = "${ashfallType}")
+ #set($volcanoPath = "${ashfallPath}")
#elseif(${debrisflowType})
- #set ($threat = "${debrisflowType}")
- #set ($volcanoPath = "${debrisflowPath}")
+ #set($threat = "${debrisflowType}")
+ #set($volcanoPath = "${debrisflowPath}")
#else
#end
#######################################################################
@@ -1159,26 +1253,26 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
## Basis section that incorporates line phenomena...capable vs producing
## and threat based on selections above. Added Satellite Imagery to basis.
#######################################################################
-#set ($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
-#if(${list.contains($bullets, "doppler")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#set($report = "!** YOU DIDN'T SELECT A REPORTER **! ${eventType}")
+#if(${list.contains(${bullets}, "doppler")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "marineSpotter")})
- #set ($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "marineSpotter")})
+ #set($report = "MARINE WEATHER SPOTTERS REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "mariner")})
- #set ($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "mariner")})
+ #set($report = "A MARINER REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "public")})
- #set ($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "public")})
+ #set($report = "THE PUBLIC REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "pilot")})
- #set ($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "pilot")})
+ #set($report = "A PILOT REPORTED ${stormline}...${capable}PRODUCING ${threat}...")
#end
-#if(${list.contains($bullets, "satellite")})
- #set ($capable = "CAPABLE OF ")
- #set ($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
+#if(${list.contains(${bullets}, "satellite")})
+ #set($capable = "CAPABLE OF ")
+ #set($report = "SATELLITE IMAGERY INDICATED ${stormline}...${capable}PRODUCING ${threat}...")
#end
#if(${productClass}=="T")
THIS IS A TEST MESSAGE.##
@@ -1189,15 +1283,33 @@ THIS IS A TEST MESSAGE.##
...A${ashCON} ${warningType} REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})...
FOR THE FOLLOWING AREAS...
+#######################################################################
+## Coding to use the raw marine zone output from the shapefiles
+## Comment this section out if you are combining your marine zones
+#######################################################################
#foreach (${area} in ${areas})
${area.name}...
#end
+#######################################################################
+## End of code for raw marine zone output from the shapefiles
+#######################################################################
+#######################################################################
+## Parse in the marineCombo.vm file which contains marine zone combinations
+#######################################################################
+##parse("marineCombo.vm")
+#######################################################################
+## End of the marine zone combination script
+#######################################################################
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}... ${report} LOCATED ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "OVER", 4, "NM", true)
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "NM", true)
+#end
#if(${eventType} == "VOLCANO")
.
#elseif($movementSpeed < 3 || ${stationary})
@@ -1213,22 +1325,22 @@ ${debrisflowInfo}
#############################################
######## GENERATE ADDITIONAL REPORTS #######
#############################################
-#if(${list.contains($bullets, "addlRpt")})
+#if(${list.contains(${bullets}, "addlRpt")})
IN ADDITION...AT !**enter time, phenomena**! WAS REPORTED !**enter location**!.
#end
###################################################
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
-#set ($eventType = "${pathheader}")
-#set ($warningType = "WARNING")
-#if(${list.contains($bullets, "pathcast")})
+#set($eventType = "${pathheader}")
+#set($warningType = "WARNING")
+#if(${list.contains(${bullets}, "pathcast")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${eventType} WILL BE NEAR..." ${eventType} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 1)
-#elseif(${list.contains($bullets, "listoflocations")})
+#elseif(${list.contains(${bullets}, "listoflocations")})
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
@@ -1244,7 +1356,7 @@ THIS IS A TEST MESSAGE. ##
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS WEATHER CONDITIONS. SEEK SHELTER NOW.
@@ -1257,16 +1369,16 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
## CALL TO ACTIONS ##
#####################
#######################################################################
-## Check to see if we've selected any calls to action. In our .cfg file
+## Check to see if we've selected any calls to action. In our .xml file
## we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
#######################################################################
-#foreach ($bullet in $bullets)
-#if ($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
@@ -1274,40 +1386,40 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
${ashfallCTA}
-#if(${list.contains($bullets, "genericCTA")})
+#if(${list.contains(${bullets}, "genericCTA")})
AS THUNDERSTORMS MOVE OVER THE WATER...BOATERS CAN EXPECT GUSTY WIND AND HIGH WAVES. MOVE TO SAFE HARBOR OR STAY CLOSE TO SHORE UNTIL THE STORM PASSES.
#end
-#if(${list.contains($bullets, "gustyWindsCTA")})
+#if(${list.contains(${bullets}, "gustyWindsCTA")})
MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES...DANGEROUS LIGHTNING...AND HEAVY RAINS. BOATERS SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THIS STORM PASSES.
#end
-#if(${list.contains($bullets, "nonThunderstormCTA")})
+#if(${list.contains(${bullets}, "nonThunderstormCTA")})
MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES. BOATERS...ESPECIALLY THOSE UNDER SAIL...SHOULD SEEK SAFE HARBOR IMMEDIATELY...UNTIL THE HIGH WINDS SUBSIDE.
#end
-#if(${list.contains($bullets, "waterspoutCTA")})
+#if(${list.contains(${bullets}, "waterspoutCTA")})
THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS. WATERSPOUTS CAN EASILY OVERTURN BOATS AND CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY.
#end
-#if(${list.contains($bullets, "lightningCTA")})
+#if(${list.contains(${bullets}, "lightningCTA")})
FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM. IF CAUGHT ON THE OPEN WATER STAY BELOW DECK IF POSSIBLE...KEEP AWAY FROM UNGROUNDED METAL OBJECTS.
#end
-#if(${list.contains($bullets, "reportCTA")})
+#if(${list.contains(${bullets}, "reportCTA")})
REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY. THEY WILL RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE.
#end
-#if (${ctaSelected} == "YES")
+#if(${ctaSelected} == "YES")
&&
#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -1342,38 +1454,38 @@ ${area.name}...
#set($stormline = "S HAVE")
#set($pose = "POSE")
#end
-#set ($eventType = "!**STORMS**! HAVE")
-#if(${list.contains($bullets, "thunderstorm")})
- #set ($eventType = "THUNDERSTORM${stormline}")
+#set($eventType = "!**STORMS**! HAVE")
+#if(${list.contains(${bullets}, "thunderstorm")})
+ #set($eventType = "THUNDERSTORM${stormline}")
#end
-#if(${list.contains($bullets, "shower")})
- #set ($eventType = "SHOWER${stormline}")
+#if(${list.contains(${bullets}, "shower")})
+ #set($eventType = "SHOWER${stormline}")
#end
-#if(${list.contains($bullets, "cloud")})
- #set ($eventType = "CLOUD${stormline}")
+#if(${list.contains(${bullets}, "cloud")})
+ #set($eventType = "CLOUD${stormline}")
#end
-#if(${list.contains($bullets, "front")})
- #set ($eventType = "FRONT HAS")
- #set ($pose = "POSES")
+#if(${list.contains(${bullets}, "front")})
+ #set($eventType = "FRONT HAS")
+ #set($pose = "POSES")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($eventType = "VOLCANO HAS")
- #set ($pose = "POSES")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($eventType = "VOLCANO HAS")
+ #set($pose = "POSES")
#end
#######################################################################
## Section for end of warning statements. Replaced default wording with
## a better defined reason for the end to the warning.
#######################################################################
-#set ($expwarning = "THE ${eventType} !**WEAKENED/MOVED OUT OF THE AREA**! AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
-#if(${list.contains($bullets, "weakenedWarnEnd")})
- #set ($expwarning = "THE ${eventType} WEAKENED AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#set($expwarning = "THE ${eventType} !**WEAKENED/MOVED OUT OF THE AREA**! AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#if(${list.contains(${bullets}, "weakenedWarnEnd")})
+ #set($expwarning = "THE ${eventType} WEAKENED AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
#end
-#if(${list.contains($bullets, "movedWarnEnd")})
- #set ($expwarning = "THE ${eventType} MOVED OUT OF THE AREA AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#if(${list.contains(${bullets}, "movedWarnEnd")})
+ #set($expwarning = "THE ${eventType} MOVED OUT OF THE AREA AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
#end
-#if(${list.contains($bullets, "volcano")})
- #set ($expwarning = "THE ${eventType} STOPPED ERUPTING AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
+#if(${list.contains(${bullets}, "volcano")})
+ #set($expwarning = "THE ${eventType} STOPPED ERUPTING AND NO LONGER ${pose} A SIGNIFICANT THREAT TO BOATERS.")
#end
${expwarning}
@@ -1381,10 +1493,10 @@ ${expwarning}
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains(${includedWatches}, "torWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-#if(${list.contains($includedWatches, "svrWatches")})
+#if(${list.contains(${includedWatches}, "svrWatches")})
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
#end
@@ -1401,13 +1513,7 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${now}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
##################################################################
## Wind/Hail Tags used by CR. Activate by uncommenting out.
##################################################################
@@ -1416,12 +1522,4 @@ ${mathUtil.round(${movementInKnots})}KT ##
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-##################################################################
-## If you decide to pull the user name from a file use this coding
-##################################################################
-##parse("name.vm")
-!**NAME/INITIALS**!
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.xml
index 3e77b0d98e..6833a65313 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialMarineWarningFollowup.xml
@@ -2,8 +2,10 @@
@@ -75,14 +77,16 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
@@ -93,14 +97,16 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
+
@@ -110,50 +116,52 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -161,82 +169,90 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
- 0.00
- AND
- 0
- NAME
- NAME
- NAME
- states.txt
- ID
- NAME
-
- Name
-
-
+
+
+ MarineZones
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ NAME
+ countyTypes.txt
+ ID
+ NAME
+
+ parent
+
+
25
-
-
+
+
NAME
+ AREA
POINTS
+
+
+
1
100
@@ -248,11 +264,15 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
NAME
+ AREA
POINTS
-
+
+
+
+
5
100
@@ -263,17 +283,30 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
- true
- 20.0
+
+ false
+ 1
+ 10.0
5
5
4
8
Name
+ AREA
Name
Name
Name
countyTypes.txt
+
+
+
+
+
+
+
+
distance
@@ -281,10 +314,20 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
NAME
+ 1
+ AREA
TRACK
true
20
20
+
+
+
+
+
+
+
+
distance
@@ -292,6 +335,8 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
NAME
+ 1
+ AREA
TRACK
true
10
@@ -301,13 +346,16 @@ Added Volcano Information Phil Kurimski 23 Sept 2011
-
+
+
+
+
- MarineSites
+ WarnGenLoc
MarineZones
MarineZones
TIMEZONES
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.vm
index 522c2dc071..b8e0e22155 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.vm
@@ -1,7 +1,160 @@
-#########
-## SPS ##
-#########
+#########################################################
+## SPS - SPECIAL WEATHER STATEMENT for various THREATS ##
+## WRITTEN BY: ##
+## Mike Dangelo WFO CTP 1.25.2013 (BUILD 12.12.1-12) ##
+## Phil Kurimski WFO DTX 2.05.2013 (BUILD 13.2.1-5) ##
+#########################################################
##
+## SET SOME INITIAL VARIABLES
+#set($SvsR = "RAIN")
+#foreach ($bullet in $bullets)
+#if($bullet.startsWith("snow"))
+ #set($SvsR = "SNOW")
+ #set($level = "")
+#end
+#end
+#if(${SvsR} == "SNOW")
+ #if(${list.contains($bullets, "snowSquallDangerous")})
+ #set($level = "DANGEROUS ")
+ #end
+ #if(${list.contains($bullets, "snowSquallSevere")})
+ #set($level = "SEVERE ")
+ #end
+ #if(${list.contains($bullets, "snowArea")})
+ #set($describeEvent = "AN AREA OF HEAVY SNOW")
+ #set($describeEventShort = "HEAVY SNOW")
+ #set($thisEvent = "THIS AREA OF HEAVY SNOW")
+ #set($eventWas = "THE HEAVY SNOW WAS")
+ #else
+ #set($describeEvent = "A ${level}SNOW SQUALL")
+ #set($describeEventShort = "${level}SNOW SQUALL")
+ #set($thisEvent = "THIS ${level}SQUALL")
+ #set($eventWas = "THE ${level}SQUALL WAS")
+ #end
+#else
+#if(${stormType} == "line")
+ #set($thisEvent = "THESE STORMS")
+ #set($eventWas = "THE STORMS WERE")
+ #set($describeEvent = "A LINE OF STRONG THUNDERSTORMS")
+ #set($describeEventShort = "LINE OF STRONG THUNDERSTORMS")
+ #if(${list.contains($bullets, "noThunder")})
+ #set($describeEvent = "A LINE OF SHOWERS")
+ #set($describeEventShort = "LINE OF SHOWERS")
+ #set($thisEvent = "THESE SHOWERS")
+ #set($eventWas = "THE SHOWERS WERE")
+ #end
+#else
+ #set($describeEvent = "A STRONG THUNDERSTORM")
+ #set($describeEventShort = "THUNDERSTORM")
+ #set($thisEvent = "THIS STORM")
+ #set($eventWas = "THE STORM WAS")
+ #if(${list.contains($bullets, "noThunder")})
+ #set($describeEvent = "A SHOWER")
+ #set($describeEventShort = "SHOWER")
+ #set($thisEvent = "THIS SHOWER")
+ #set($eventWas = "THE SHOWER WAS")
+ #end
+#if(${list.contains($bullets, "areaOfThunderstorms")})
+ #set($describeEvent = "AN AREA OF STRONG THUNDERSTORMS")
+ #set($describeEventShort = "THUNDERSTORMS")
+#end
+#end
+## above is the end of line vs point
+#end
+## above is the end of snow vs rain
+#######################################################################
+## Now account for wintry precipitation that is not exclusively snow
+#######################################################################
+## Since we want to use a different phrase in the headline versus the
+## AT... section of the template for wintry precipitation we will
+## set this new variable to be the same for the above section
+#######################################################################
+#set($describeMovement = $describeEvent)
+#######################################################################
+#if(${list.contains($bullets, "freezingRain")})
+ #set($describeEvent = "FREEZING RAIN")
+ #set($describeEventShort = "FREEZING RAIN")
+ #set($describeMovement = "AN AREA OF FREEZING RAIN")
+ #set($thisEvent = "THIS AREA OF FREEZING RAIN")
+ #set($eventWas = "THE FREEZING RAIN WAS")
+#end
+#if(${list.contains($bullets, "freezingDrizzle")})
+ #set($describeEvent = "FREEZING DRIZZLE")
+ #set($describeEventShort = "FREEZING DRIZZLE")
+ #set($describeMovement = "AN AREA OF FREEZING DRIZZLE")
+ #set($thisEvent = "THIS AREA OF FREEZING DRIZZLE")
+ #set($eventWas = "THE FREEZING DRIZZLE WAS")
+#end
+#if(${list.contains($bullets, "sleet")})
+ #set($describeEvent = "SLEET")
+ #set($describeEventShort = "SLEET")
+ #set($describeMovement = "AN AREA OF SLEET")
+ #set($thisEvent = "THIS AREA OF SLEET")
+ #set($eventWas = "THE SLEET WAS")
+#end
+#if(${list.contains($bullets, "wintryMix")})
+ #set($describeEvent = "A WINTRY MIX")
+ #set($describeEventShort = "WINTRY MIX")
+ #set($describeMovement = "AN AREA OF MIXED PRECIPITATION")
+ #set($thisEvent = "THIS WINTRY MIX")
+ #set($eventWas = "THE WINTRY MIX WAS")
+#end
+#if(${list.contains($bullets, "flashFreeze")})
+ #set($describeEvent = "BLACK ICE")
+ #set($describeEventShort = "A COLD FRONT")
+ #set($describeMovement = "A COLD FRONT")
+ #set($thisEvent = "THIS COLD FRONT")
+ #set($eventWas = "THE COLD FRONT WAS")
+#end
+###################################################
+## HANDLE WIND POSSIBILITIES ######################
+###################################################
+#set($windSpeed = 0)
+#if(${list.contains($bullets, "wind30")})
+ #set($windThreat = "WIND GUSTS UP TO 30 MPH")
+ #set($windSpeed = 30)
+ #set($windTag = "30MPH")
+#end
+#if(${list.contains($bullets, "wind40")})
+ #set($windThreat = "WINDS GUSTS UP TO 40 MPH")
+ #set($windSpeed = 40)
+ #set($windTag = "40MPH")
+#end
+#if(${list.contains($bullets, "wind50")})
+ #set($windThreat = "WINDS GUSTS UP TO 50 MPH")
+ #set($windSpeed = 50)
+ #set($windTag = "50MPH")
+#end
+
+###################################################
+## HANDLE HAIL POSSIBILITIES ######################
+###################################################
+#set($hailSize = 0)
+#set($smallHail = "")
+#if(${list.contains($bullets, "smallHail")})
+ #set($hailSize = 0.25)
+ #set($hailThreat = "SMALL")
+ #set($hailTrail = " HAIL")
+#end
+#if(${list.contains($bullets, "peaHail")})
+ #set($hailSize = 0.50)
+ #set($hailThreat = "PEA SIZE")
+ #set($hailTrail = " HAIL")
+#end
+#if(${list.contains($bullets, "dimeHail")})
+ #set($hailSize = 0.75)
+ #set($hailThreat = "DIME SIZE")
+ #set($hailTrail = " HAIL")
+#end
+#if(${list.contains($bullets, "nickelHail")})
+ #set($hailSize = 0.88)
+ #set($hailThreat = "NICKEL SIZE")
+ #set($hailTrail = " HAIL")
+#end
+################################################################
+######### ~*~*~*~*~*~* BEGIN OUTPUT ~*~*~*~*~*~*~ ##############
+################################################################
+
${WMOId} ${vtecOffice} 000000 ${BBBId}
SPS${siteId}
@@ -18,44 +171,176 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
-
${ugcline}
-#set($countyStateabbr = "")
+#set($zoneList = "")
#foreach (${area} in ${areas})
- #set($countyStateabbr = "${countyStateabbr}${area.name} ${area.stateabbr}-")
+#set($zoneList = "${zoneList}${area.name}-")
#end
-${countyStateabbr}
+${zoneList}
${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
-
-!** ENTER INFORMATION HERE **!
-
-## parse file command here is to pull in mile marker info
-## #parse("mileMarkers.vm")
-
-#if(${productClass}=="T")
-THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
-
+...${describeEvent} WILL AFFECT ##
+#set($full = '')
+#foreach (${area} in ${areas})
+#set($full = "${full}${area.name}...")
+#end
+#if(${full.length()} > 120)
+!** DESCRIBE AREA **! ...
+#else
+${full}
#end
-## #headline(${officeLoc}, ${backupSite})
+######################################################
+###### Storm current location description ##########
+######################################################
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...##
+${describeMovement} WAS ##
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
+#if($movementSpeed < 5 || ${stationary})
+. ${eventWas} NEARLY STATIONARY.
+#else
+#if(${stormType} == "line")
+...AND MOVING ##
+#else
+...MOVING ##
+#end
+#direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH.
+#end
+
+#if(${windSpeed} > 0 && ${hailSize} > 0 && ${SvsR} == "RAIN")
+${windThreat} AND ${hailThreat}${hailTrail} ARE POSSIBLE WITH ${thisEvent}.
+#else
+#if(${windSpeed} > 0)
+${windThreat} ARE POSSIBLE WITH ${thisEvent}.
+#end
+#if(${hailSize} > 0 && ${SvsR} == "RAIN")
+${hailThreat}${hailTrail} IS POSSIBLE WITH ${thisEvent}.
+#end
+#end
+
+###################################################
+######## GENERATE PATHCAST OR CITIES LIST #########
+###################################################
+#if(${list.contains($bullets, "pathcast")})
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#pathCast("${thisEvent} WILL BE NEAR..." ${thisEvent} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
+#elseif(${list.contains($bullets, "listofcities")})
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN
+#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT
+#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE
+#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH!
+#locationsList("LOCATIONS IMPACTED INCLUDE..." ${thisEvent} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
+
+#end
+##############################################
+##############################################
+###### SPECIAL VENUE/EVENT CASE ##############
+##############################################
+#if(${list.contains($bullets, "specialEvent")})
+THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF ${thisEvent} AND SHOULD PREPARE FOR THE EXPECTED WEATHER CONDITIONS.
+
+#end
+## parse file command here is to pull in mile marker info
+#parse("mileMarkers.vm")
+## parse file command here is to pull in important points/locations/venues
+#parse("pointMarkers.vm")
+
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. ##
+#end
+##################################
+######### CALLS TO ACTION ########
+##################################
+#if(${list.contains($bullets, "quarterMile")} && ${SvsR} == "SNOW")
+VISIBILITIES WILL DROP QUICKLY TO LESS THAN A QUARTER OF A MILE IN ${thisEvent}.
+
+#end
+#if(${list.contains($bullets, "zeroMile")} && ${SvsR} == "SNOW")
+VISIBILITIES WILL DROP QUICKLY TO NEAR ZERO IN ${thisEvent}.
+
+#end
+#if(${list.contains($bullets, "torrentialRainfallCTA")} && ${SvsR} == "RAIN")
+TORRENTIAL RAINFALL IS ALSO OCCURRING WITH ${thisEvent}...AND MAY CAUSE LOCALIZED FLOODING. DO NOT DRIVE YOUR VEHICLE THROUGH FLOODED ROADWAYS.
+
+#end
+#if(${list.contains($bullets, "lightningCTA")} && ${SvsR} == "RAIN")
+FREQUENT CLOUD TO GROUND LIGHTNING IS OCCURRING WITH THIS STORM. LIGHTNING CAN STRIKE 15 MILES AWAY FROM A THUNDERSTORM. SEEK A SAFE SHELTER INSIDE A BUILDING OR VEHICLE.
+
+#end
+#if(${list.contains($bullets, "stormIntensifyCTA")} && ${SvsR} == "RAIN")
+${thisEvent} MAY INTENSIFY...SO BE CERTAIN TO MONITOR LOCAL RADIO AND TV STATIONS...AS WELL AS LOCAL CABLE TV OUTLETS...FOR ADDITIONAL INFORMATION AND POSSIBLE WARNINGS FROM THE NATIONAL WEATHER SERVICE.
+
+#end
+#if(${list.contains($bullets, "lawEnforcementCTA")})
+TO REPORT SEVERE WEATHER...CONTACT YOUR NEAREST LAW ENFORCEMENT AGENCY. THEY CAN RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE OFFICE IN ${officeLoc}.
+
+#end
+#if(${list.contains($bullets, "boatersCTA")} && ${SvsR} == "RAIN")
+IF YOU ARE ON OR NEAR !**Name Of Lake**!...GET OUT OF THE WATER AND MOVE INDOORS OR INSIDE A VEHICLE. REMEMBER...LIGHTNING CAN STRIKE OUT TO 15 MILES FROM THE PARENT THUNDERSTORM. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. MOVE TO SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
+
+#end
+#if(${list.contains($bullets, "advisoryCTA")})
+ALTHOUGH THIS EVENT IS EXPECTED TO BE SHORT LIVED...IF CONDITIONS WORSEN...A WINTER WEATHER ADVISORY MAY BECOME NECESSARY. PLEASE MONITOR LOCAL MEDIA OUTLETS AND THE NATIONAL WEATHER SERVICE FOR FURTHER STATEMENTS.
+
+#end
+#if(${list.contains($bullets, "advisoryEffectCTA")})
+A WINTER WEATHER ADVISORY IS IN EFFECT FOR THE AREA. PLEASE MONITOR LOCAL MEDIA OUTLETS AND THE NATIONAL WEATHER SERVICE FOR FURTHER STATEMENTS.
+
+#end
+#if(${list.contains($bullets, "snowSquallCTA")})
+USE EXTRA CAUTION IF YOU MUST TRAVEL INTO OR THROUGH THIS DANGEROUS SNOW SQUALL. RAPID CHANGES IN VISIBILITY AND POTENTIALLY SLICK ROADS ARE LIKELY TO LEAD TO ACCIDENTS. CONSIDER DELAYING TRAVEL UNTIL THE SQUALL PASSES YOUR LOCATION.
+
+#end
+#if(${list.contains($bullets, "freezingDrizzleCTA")} && (${describeEventShort} == "FREEZING RAIN" || ${describeEventShort} == "FREEZING DRIZZLE"))
+THE ${describeEventShort} MAY QUICKLY COAT ROADWAYS WITH A THIN LAYER OF ICE THAT MAY BE UNDETECTABLE. PLEASE USE EXTREME CAUTION...ESPECIALLY ON BRIDGES...OVERPASSES AND AROUND CURVES. ALLOW PLENTY OF STOPPING DISTANCE AND AVOID BRAKING SUDDENLY.
+
+#end
+#if(${list.contains($bullets, "flashFreezeCTA")})
+A RAPID DROP IN TEMPERATURES WILL LEAD TO THE RAPID FORMATION OF BLACK ICE ON AREA ROADWAYS. BLACK ICE IS NEARLY IMPOSSIBLE TO SEE AND ROADWAYS MAY APPEAR WET. PLEASE USE EXTREME CAUTION...ESPECIALLY ON BRIDGES...OVERPASSES AND AROUND CURVES. ALLOW PLENTY OF STOPPING DISTANCE AND AVOID BRAKING SUDDENLY.
+
+#end
+#if(${list.contains($bullets, "icyRoads")} && ${SvsR} == "SNOW")
+ICY ROADS ARE POSSIBLE AS THE SNOW MELTS ON THE ROADS THEN QUICKLY REFREEZES.
+
+#end
+#if(${list.contains($bullets, "changingConditionsCTA")})
+CONDITIONS CAN DETERIORATE RAPIDLY IN WINTER WEATHER SITUATIONS. BE PREPARED FOR SNOW OR ICE COVERED ROADS. SLOW DOWN AND ALLOW EXTRA TIME WHEN TRAVELING.
+
+#end
#############
## WATCHES ##
#############
-#if(${list.contains($includedWatches, "torWatches")})
+#if(${list.contains($includedWatches, "includeSvrWatches")})
#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
-#end
-#if(${list.contains($includedWatches, "svrWatches")})
+
#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat})
#end
-
+####################################
+#if(${productClass}=="T")
+THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
+####################################
+#end
#printcoords(${areaPoly}, ${list})
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
$$
-!**NAME/INITIALS**!
\ No newline at end of file
+
+#parse("forecasterName.vm")
\ No newline at end of file
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml
index 0181b4915b..a52346b802 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/specialWeatherStatement.xml
@@ -1,8 +1,7 @@
-
-
+
@@ -19,7 +18,9 @@
-
+ NEW
+ COR
+
@@ -40,77 +41,261 @@
- 60
+ 30
- 10
15
+ 20
30
+ 40
45
+ 50
60
75
- 90
- 120
- 180
+ 90
+ 120
+ 180
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0.00
- AND
- 0
- NAME
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- STATE_ZONE
- NAME
-
+
+
+
+
+
+
+
+
+ Zone
+ 0
+ AND
+ 0
+ NAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+
+ STATE_ZONE
+ NAME
+
parent
-
-
+
+
25
-
+
-
+
NAME
- TRACK
- true
- 20
- 10
+ POINTS
+
+
+
+
+
+
+
+
+ 1
+ AREA
+ 100
+ distance
warngenlev
population
-
+
+ NAME
+ POINTS
+
+
+
+
+
+
+
+
+ AREA
+ 5
+ 100
+
+ distance
+
+
+
+
+ 1
+ true
+ 8.0
+ 5
+ 5
+ 4
+ 8
+ Name
+
+ NAME
+ AREA
+ STATE
+ STATE
+ countyTypes.txt
+
+ warngenlev
+ population
+ distance
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
NAME
TRACK
true
+ AREA
+ 20
+ 10
+
+
+
+
+
+
+
+
+
+ warngenlev
+ population
+ distance
+
+
+
+
+ NAME
+ 1
+ TRACK
+ true
+ AREA
10
10
@@ -118,44 +303,26 @@
-
+
+
+
+
-
-
-
-
-
- true
- 8.0
- 5
- 5
- 4
- 8
- Name
- NAME -->
-
- STATE
- STATE
- countyTypes.txt
-
- distance
-
-
-
-
-
-
-
- City
- ZONE
+ WarnGenLoc
+
+ Zone
States
TIMEZONES
TIME_ZONE
+
+
+
+
+
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.vm b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.vm
index 3c6b02794a..09730f84bc 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.vm
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.vm
@@ -13,9 +13,11 @@
## MIKE REGA 5-03-12 - DR 14885 MND blank line ##
## QINGLU LIN 7-31-2012 DR 15217 use roundAndPad ##
## QINGLU LIN 8-14-2012 DR 14493 use TMLtime ##
+## Mike Dangelo 9-13-2012 minor tweaks to ${variables} ##
+## Mike Dangelo 2-4-2013 NWS Mets detected a svr ##
+## PHIL KURIMSKI 2-6-2013 Put tor emergency back in as 3rd bullet ##
###############################################################################
## ESTABLISH SOME INITIAL VARIABLES
-#set($preAmble = "")
#set($hailSize = 0)
#set($hailTag = "<.75IN")
#set($reportType = "A TORNADO WAS REPORTED")
@@ -27,77 +29,85 @@
#set($moveLead = " DOPPLER RADAR SHOWED THESE STORMS MOVING")
#end
##
+###############################################################################
+## Establish the preamble for the default CTA if a Tor Emergency is selected
+###############################################################################
+#if(${list.contains($bullets, "torEmergency")})
+ #set($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TO PROTECT YOUR LIFE...")
+#else
+ #set($preAmble = "")
+#end
#######################################
## HANDLE HAIL POSSIBILITIES ##########
#######################################
-#if(${list.contains($bullets, "pennyHail")})
- #set ($hailThreat = "PENNY SIZE HAIL")
- #set ($hailSize = 0.75)
- #set ($hailTag = "0.75IN")
+#if(${list.contains(${bullets}, "pennyHail")})
+ #set($hailThreat = "PENNY SIZE HAIL")
+ #set($hailSize = 0.75)
+ #set($hailTag = "0.75IN")
#end
-#if(${list.contains($bullets, "nickelHail")})
- #set ($hailThreat = "NICKEL SIZE HAIL")
- #set ($hailSize = 0.88)
- #set ($hailTag = "0.88IN")
+#if(${list.contains(${bullets}, "nickelHail")})
+ #set($hailThreat = "NICKEL SIZE HAIL")
+ #set($hailSize = 0.88)
+ #set($hailTag = "0.88IN")
#end
-#if(${list.contains($bullets, "quarterHail")})
- #set ($hailThreat = "QUARTER SIZE HAIL")
- #set ($hailSize = 1.00)
- #set ($hailTag = "1.00IN")
+#if(${list.contains(${bullets}, "quarterHail")})
+ #set($hailThreat = "QUARTER SIZE HAIL")
+ #set($hailSize = 1.00)
+ #set($hailTag = "1.00IN")
#end
-#if(${list.contains($bullets, "halfdollarHail")})
- #set ($hailThreat = "HALF DOLLAR SIZE HAIL")
- #set ($hailSize = 1.25)
- #set ($hailTag = "1.25IN")
+#if(${list.contains(${bullets}, "halfdollarHail")})
+ #set($hailThreat = "HALF DOLLAR SIZE HAIL")
+ #set($hailSize = 1.25)
+ #set($hailTag = "1.25IN")
#end
-#if(${list.contains($bullets, "pingpongHail")})
- #set ($hailThreat = "PING PONG BALL SIZE")
- #set ($hailSize = 1.50)
- #set ($hailTag = "1.50IN")
+#if(${list.contains(${bullets}, "pingpongHail")})
+ #set($hailThreat = "PING PONG BALL SIZE")
+ #set($hailSize = 1.50)
+ #set($hailTag = "1.50IN")
#end
-#if(${list.contains($bullets, "golfballHail")})
- #set ($hailThreat = "LARGE DAMAGING HAIL UP TO GOLF BALL SIZE")
- #set ($hailSize = 1.75)
- #set ($hailTag = "1.75IN")
+#if(${list.contains(${bullets}, "golfballHail")})
+ #set($hailThreat = "LARGE DAMAGING HAIL UP TO GOLF BALL SIZE")
+ #set($hailSize = 1.75)
+ #set($hailTag = "1.75IN")
#end
-#if(${list.contains($bullets, "twoinchHail")})
- #set ($hailThreat = "LARGE DAMAGING HAIL UP TO TWO INCHES IN DIAMETER")
- #set ($hailSize = 2.00)
- #set ($hailTag = "2.00IN")
+#if(${list.contains(${bullets}, "twoinchHail")})
+ #set($hailThreat = "LARGE DAMAGING HAIL UP TO TWO INCHES IN DIAMETER")
+ #set($hailSize = 2.00)
+ #set($hailTag = "2.00IN")
#end
-#if(${list.contains($bullets, "tennisBallHail")})
- #set ($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO TENNIS BALL SIZE")
- #set ($hailSize = 2.50)
- #set ($hailTag = "2.50IN")
+#if(${list.contains(${bullets}, "tennisBallHail")})
+ #set($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO TENNIS BALL SIZE")
+ #set($hailSize = 2.50)
+ #set($hailTag = "2.50IN")
#end
-#if(${list.contains($bullets, "baseballHail")})
- #set ($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO BASEBALL SIZE")
- #set ($hailSize = 2.75)
- #set ($hailTag = "2.75IN")
+#if(${list.contains(${bullets}, "baseballHail")})
+ #set($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO BASEBALL SIZE")
+ #set($hailSize = 2.75)
+ #set($hailTag = "2.75IN")
#end
-#if(${list.contains($bullets, "threeinchHail")})
- #set ($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO THREE INCHES IN DIAMETER")
- #set ($hailSize = 3.00)
- #set ($hailTag = "3.00IN")
+#if(${list.contains(${bullets}, "threeinchHail")})
+ #set($hailThreat = "LARGE DESTRUCTIVE HAIL UP TO THREE INCHES IN DIAMETER")
+ #set($hailSize = 3.00)
+ #set($hailTag = "3.00IN")
#end
-#if(${list.contains($bullets, "softballHail")})
- #set ($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO SOFTBALL SIZE")
- #set ($hailSize = 4.25)
- #set ($hailTag = "4.25IN")
+#if(${list.contains(${bullets}, "softballHail")})
+ #set($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO SOFTBALL SIZE")
+ #set($hailSize = 4.25)
+ #set($hailTag = "4.25IN")
#end
-#if(${list.contains($bullets, "grapefruitHail")})
- #set ($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO GRAPEFRUIT SIZE")
- #set ($hailSize = 4.00)
- #set ($hailTag = "4.00IN")
+#if(${list.contains(${bullets}, "grapefruitHail")})
+ #set($hailThreat = "DANGEROUS AND EXTREMELY LARGE DESTRUCTIVE HAIL UP TO GRAPEFRUIT SIZE")
+ #set($hailSize = 4.00)
+ #set($hailTag = "4.00IN")
#end
#if(${hailSize} >= 1.50)
#if(${stormType} == "line")
- #set ($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THESE STORMS.")
+ #set($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THESE STORMS.")
#else
- #set ($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THIS STORM.")
+ #set($extraThreat = "IN ADDITION TO A TORNADO...${hailThreat} IS EXPECTED WITH THIS STORM.")
#end
#else
- #set ($extraThreat = "")
+ #set($extraThreat = "")
#end
${WMOId} ${vtecOffice} 000000 ${BBBId}
TOR${siteId}
@@ -119,6 +129,13 @@ ${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})}
...THIS MESSAGE IS FOR TEST PURPOSES ONLY...
#end
+#################################################################
+### TORNADO EMERGENCY HEADLINE...COMING SOON TO A WFO NEAR YOU! #
+#################################################################
+###if(${list.contains(${bullets}, "torEmergency")})
+##...TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...
+##
+###end
#headline(${officeLoc}, ${backupSite})
##################
@@ -140,94 +157,129 @@ THIS IS A TEST MESSAGE. ##
#end
#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone})
-#if(${list.contains($bullets, "doppler")})
+#if(${list.contains(${bullets}, "meteorologistsTOR")})
#if(${stormType} == "line")
- #set ($reportType = "DOPPLER RADAR INDICATED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO. THESE DANGEROUS STORMS WERE LOCATED")
- #set ($pathcastLead = "THESE DANGEROUS STORMS")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO. THESE DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
#else
- #set ($reportType = "DOPPLER RADAR INDICATED A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO. THIS DANGEROUS STORM WAS LOCATED")
- #set ($pathcastLead = "THIS DANGEROUS STORM")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO. THIS DANGEROUS STORM WAS LOCATED")
+ #set($pathcastLead = "THE TORNADO")
#end
- #set ($moveLead = "..AND MOVING")
+ #set($moveLead = "..AND MOVING")
#end
-#if(${list.contains($bullets, "dopplerSquall")})
- #set ($reportType = "DOPPLER RADAR INDICATED A SEVERE SQUALL LINE CAPABLE OF PRODUCING BOTH TORNADOES AND EXTENSIVE STRAIGHT LINE WIND DAMAGE. THESE DANGEROUS STORMS WERE LOCATED")
- #set ($pathcastLead = "THIS DANGEROUS STORM")
- #set ($moveLead = "..AND MOVING")
-#end
-#if(${list.contains($bullets, "confirmedDoppler")})
- #set ($reportType = "DOPPLER RADAR WAS TRACKING A CONFIRMED TORNADO")
+#if(${list.contains(${bullets}, "meteorologistsSquall")})
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE SQUALL LINE CAPABLE OF PRODUCING A TORNADO AS WELL AS DAMAGING STRAIGHT LINE WINDS. THESE DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
#else
- #set ($pathcastLead = "THIS TORNADIC STORM")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE SQUALL LINE CAPABLE OF PRODUCING A TORNADO AS WELL AS DAMAGING STRAIGHT LINE WINDS. THESE DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #end
+ #set($moveLead = "..AND MOVING")
+#end
+#if(${list.contains(${bullets}, "meteorologistsLarge")})
+ #if(${stormType} == "line")
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A LARGE AND EXTREMELY DANGEROUS TORNADO. THESE EXTREMELY DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #else
+ #set($reportType = "NATIONAL WEATHER SERVICE METEOROLOGISTS DETECTED A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A LARGE AND EXTREMELY DANGEROUS TORNADO. THIS EXTREMELY DANGEROUS STORM WAS LOCATED")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
+ #end
+ #set($moveLead = "..AND MOVING")
+#end
+#if(${list.contains(${bullets}, "doppler")})
+ #if(${stormType} == "line")
+ #set($reportType = "DOPPLER RADAR INDICATED A LINE OF SEVERE THUNDERSTORMS CAPABLE OF PRODUCING A TORNADO. THESE DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #else
+ #set($reportType = "DOPPLER RADAR INDICATED A SEVERE THUNDERSTORM CAPABLE OF PRODUCING A TORNADO. THIS DANGEROUS STORM WAS LOCATED")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
+ #end
+ #set($moveLead = "..AND MOVING")
+#end
+#if(${list.contains(${bullets}, "dopplerSquall")})
+ #if(${stormType} == "line")
+ #set($reportType = "DOPPLER RADAR INDICATED A SEVERE SQUALL LINE CAPABLE OF PRODUCING A TORNADO AS WELL AS DAMAGING STRAIGHT LINE WINDS. THESE DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #else
+ #set($reportType = "DOPPLER RADAR INDICATED A SEVERE SQUALL LINE CAPABLE OF PRODUCING A TORNADO AS WELL AS DAMAGING STRAIGHT LINE WINDS. THESE DANGEROUS STORMS WERE LOCATED")
+ #set($pathcastLead = "THIS DANGEROUS STORMS")
+ #end
+ #set($moveLead = "..AND MOVING")
+#end
+#if(${list.contains(${bullets}, "confirmedDoppler")})
+ #set($reportType = "DOPPLER RADAR WAS TRACKING A CONFIRMED TORNADO")
+ #if(${stormType} == "line")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #else
+ #set($pathcastLead = "THIS TORNADIC STORM")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
#end
-#if(${list.contains($bullets, "confirmedLarge")})
- #set ($reportType = "DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
+#if(${list.contains(${bullets}, "confirmedLarge")})
+ #set($reportType = "DOPPLER RADAR AND STORM SPOTTERS WERE TRACKING A LARGE AND EXTREMELY DANGEROUS TORNADO")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TAKE IMMEDIATE ACTION TO PROTECT YOUR LIFE.")
+ #set($preAmble = "TO REPEAT...A LARGE...EXTREMELY DANGEROUS AND POTENTIALLY DEADLY TORNADO IS ON THE GROUND. TAKE IMMEDIATE ACTION TO PROTECT YOUR LIFE. ")
#end
-#if(${list.contains($bullets, "spotter")})
- #set ($reportType = "TRAINED WEATHER SPOTTERS REPORTED A TORNADO")
+#if(${list.contains(${bullets}, "spotter")})
+ #set($reportType = "TRAINED WEATHER SPOTTERS REPORTED A TORNADO")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO HAS BEEN CONFIRMED BY STORM SPOTTERS.")
+ #set($preAmble = "TO REPEAT...A TORNADO HAS BEEN CONFIRMED BY STORM SPOTTERS. ")
#end
-#if(${list.contains($bullets, "lawEnforcement")})
- #set ($reportType = "LOCAL LAW ENFORCEMENT REPORTED A TORNADO")
+#if(${list.contains(${bullets}, "lawEnforcement")})
+ #set($reportType = "LOCAL LAW ENFORCEMENT REPORTED A TORNADO")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO HAS BEEN CONFIRMED BY LOCAL LAW ENFORCEMENT.")
+ #set($preAmble = "TO REPEAT...A TORNADO HAS BEEN CONFIRMED BY LOCAL LAW ENFORCEMENT. ")
#end
-#if(${list.contains($bullets, "emergencyManagement")})
- #set ($reportType = "EMERGENCY MANAGEMENT REPORTED A TORNADO")
+#if(${list.contains(${bullets}, "emergencyManagement")})
+ #set($reportType = "EMERGENCY MANAGEMENT REPORTED A TORNADO")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO HAS BEEN CONFIRMED BY EMERGENCY MANAGEMENT OFFICIALS.")
+ #set($preAmble = "TO REPEAT...A TORNADO HAS BEEN CONFIRMED BY EMERGENCY MANAGEMENT OFFICIALS. ")
#end
-#if(${list.contains($bullets, "public")})
- #set ($reportType = "THE PUBLIC REPORTED A TORNADO")
+#if(${list.contains(${bullets}, "public")})
+ #set($reportType = "THE PUBLIC REPORTED A TORNADO")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE TORNADIC STORMS")
- #set ($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
+ #set($pathcastLead = "THESE TORNADIC STORMS")
+ #set($moveLead = " DOPPLER RADAR SHOWED THESE TORNADIC STORMS MOVING")
#else
- #set ($pathcastLead = "THE TORNADO")
- #set ($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
+ #set($pathcastLead = "THE TORNADO")
+ #set($moveLead = " DOPPLER RADAR SHOWED THIS TORNADO MOVING")
#end
- #set ($preAmble = "TO REPEAT...A TORNADO HAS BEEN SIGHTED.")
+ #set($preAmble = "TO REPEAT...A TORNADO HAS BEEN SIGHTED. ")
#end
-#if(${list.contains($bullets, "spotterFunnelCloud")})
- #set ($reportType = "TRAINED WEATHER SPOTTERS REPORTED A FUNNEL CLOUD")
+#if(${list.contains(${bullets}, "spotterFunnelCloud")})
+ #set($reportType = "TRAINED WEATHER SPOTTERS REPORTED A FUNNEL CLOUD")
#if(${stormType} == "line")
- #set ($pathcastLead = "THESE DANGEROUS STORMS")
- #set ($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THESE DANGEROUS STORMS MOVING")
+ #set($pathcastLead = "THESE DANGEROUS STORMS")
+ #set($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THESE DANGEROUS STORMS MOVING")
#else
- #set ($pathcastLead = "THIS DANGEROUS STORM")
- #set ($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THIS DANGEROUS STORM MOVING")
+ #set($pathcastLead = "THIS DANGEROUS STORM")
+ #set($moveLead = " A TORNADO MAY DEVELOP AT ANY TIME. DOPPLER RADAR SHOWED THIS DANGEROUS STORM MOVING")
#end
#end
@@ -243,8 +295,12 @@ THIS IS A TEST MESSAGE. ##
THIS IS A TEST MESSAGE. ##
#end
#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${reportType} ##
-#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES", true)
-#if($movementSpeed < 3 || ${stationary})
+#if(${stormType} == "line")
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", false)
+#else
+#handleClosestPoints(${list}, ${closestPoints}, ${otherClosestPoints}, ${stormType}, "NEAR", 6, "OVER", 2, "MILES", true)
+#end
+#if(${movementSpeed} < 3 || ${stationary})
#if(${stormType} == "line")
. THE LINE OF TORNADIC STORMS WAS NEARLY STATIONARY.
#else
@@ -258,47 +314,47 @@ THIS IS A TEST MESSAGE. ##
### TORNADO EMERGENCY PER NWS 10-511 DIRECTIVE GOES WITH 3RD BULLET #
#####################################################################
#if(${list.contains($bullets, "torEmergency")})
-THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...TAKE IMMEDIATE TORNADO PRECAUTIONS NOW.
+#wrapText("THIS IS A TORNADO EMERGENCY FOR !** EDIT LOCATION(S) **!...TAKE IMMEDIATE TORNADO PRECAUTIONS NOW." 2 2)
#end
############################
### HAIL THREAT AS WELL? ###
############################
-#if (${extraThreat} != "")
+#if(${extraThreat} != "")
${extraThreat}
#end
############################
### ADDITIONAL REPORTS ####
############################
-#if(${list.contains($bullets, "extraReportTornado")})
+#if(${list.contains(${bullets}, "extraReportTornado")})
AT !**ENTER TIME, TORNADO/DAMAGE INFO**! WAS REPORTED !** ENTER LOCATION **!.
#end
-#if(${list.contains($bullets, "extraReportHail")})
+#if(${list.contains(${bullets}, "extraReportHail")})
#if(${stormType} == "line")
-IN ADDITION...AT !**ENTER TIME, HAIL SIZE**! WAS REPORTED !** ENTER LOCATION **! WITH THESE STORMS.
+#wrapText("IN ADDITION...AT !**ENTER TIME, HAIL SIZE**! WAS REPORTED !** ENTER LOCATION **! WITH THESE STORMS." 2 2)
#else
-IN ADDITION...AT !**ENTER TIME, HAIL SIZE**! WAS REPORTED !** ENTER LOCATION **! WITH THIS STORM.
+#wrapText("IN ADDITION...AT !**ENTER TIME, HAIL SIZE**! WAS REPORTED !** ENTER LOCATION **! WITH THIS STORM." 2 2)
#end
#end
-#if(${list.contains($bullets, "extraReportWind")})
+#if(${list.contains(${bullets}, "extraReportWind")})
#if(${stormType} == "line")
-IN ADDITION...AT !**ENTER TIME, WIND INFO**! WAS REPORTED !** ENTER LOCATION **! WITH THESE STORMS.
+#wrapText("IN ADDITION...AT !**ENTER TIME, WIND INFO**! WAS REPORTED !** ENTER LOCATION **! WITH THESE STORMS." 2 2)
#else
-IN ADDITION...AT !**ENTER TIME, WIND INFO**! WAS REPORTED !** ENTER LOCATION **! WITH THIS STORM.
+#wrapText("IN ADDITION...AT !**ENTER TIME, WIND INFO**! WAS REPORTED !** ENTER LOCATION **! WITH THIS STORM." 2 2)
#end
#end
-#if(${list.contains($bullets, "extraReportHailWind")})
+#if(${list.contains(${bullets}, "extraReportHailWind")})
#if(${stormType} == "line")
-IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATION **! WITH THESE STORMS.
+#wrapText("IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATION **! WITH THESE STORMS." 2 2)
#else
-IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATION **! WITH THIS STORM.
+#wrapText("IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATION **! WITH THIS STORM." 2 2)
#end
#end
@@ -306,18 +362,18 @@ IN ADDITION...AT !**ENTER TIME, HAIL/WIND INFO**! WERE REPORTED !** ENTER LOCATI
######## GENERATE PATHCAST OR CITIES LIST #########
###################################################
#if(${stormType} == "line")
-#set ($otherLead = "THESE TORNADIC STORMS")
+#set($otherLead = "THESE TORNADIC STORMS")
#else
-#set ($otherLead = "THIS TORNADIC THUNDERSTORM")
+#set($otherLead = "THIS TORNADIC THUNDERSTORM")
#end
-#if(${list.contains($bullets, "pathcast")})
+#if(${list.contains(${bullets}, "pathcast")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
#end
#pathCast("${pathcastLead} WILL BE NEAR..." ${otherLead} ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0)
-#elseif(${list.contains($bullets, "listofcities")})
+#elseif(${list.contains(${bullets}, "listofcities")})
* ##
#if(${productClass}=="T")
THIS IS A TEST MESSAGE. ##
@@ -336,7 +392,7 @@ THIS IS A TEST MESSAGE. ##
##############################################
###### SPECIAL VENUE/EVENT CASE ##############
##############################################
-#if(${list.contains($bullets, "specialEvent")})
+#if(${list.contains(${bullets}, "specialEvent")})
#if(${stormType} == "line")
THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THESE STORMS AND SHOULD PREPARE FOR IMMINENT DANGEROUS AND POTENTIALLY LIFE THREATENING WEATHER CONDITIONS. SEEK SHELTER NOW.
@@ -352,11 +408,11 @@ THOSE ATTENDING THE !**event/venue name or location**! ARE IN THE PATH OF THIS S
#####################
## CALL TO ACTIONS ##
#####################
-###Check to see if we've selected any calls to action. In our .cfg file
+###Check to see if we've selected any calls to action. In our .xml file
##we ended each CTA bullet ID with "CTA" for this reason as a 'trip'
-#foreach ($bullet in $bullets)
-#if($bullet.endsWith("CTA"))
-#set ($ctaSelected = "YES")
+#foreach (${bullet} in ${bullets})
+#if(${bullet.endsWith("CTA")})
+#set($ctaSelected = "YES")
#end
#end
##
@@ -365,46 +421,55 @@ PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##
-#if(${list.contains($bullets, "replacesSVRCTA")})
+#if(${list.contains(${bullets}, "torEmergencyCTA")} || ${list.contains(${bullets}, "torEmergency")})
+#if(${list.contains(${bullets}, "torEmergency")})
+THIS IS AN EXTREMELY DANGEROUS TORNADO WITH COMPLETE DEVASTATION LIKELY. YOU COULD BE KILLED IF NOT UNDERGROUND OR IN A TORNADO SHELTER. DO NOT DELAY...SEEK SHELTER NOW! IF NO UNDERGROUND SHELTER IS AVAILABLE SEEK SHELTER IN AN INTERIOR ROOM OF THE LOWEST LEVEL OF A STRUCTURE...OR IF TIME ALLOWS...CONSIDER MOVING TO AN UNDERGROUND SHELTER ELSEWHERE. MOBILE HOMES AND OUTBUILDINGS WILL OFFER NO SHELTER FROM THIS TORNADO.
+
+#else
+!** YOU SELECTED THE TORNADO EMERGENCY CTA WITHOUT SELECTING THE TORNADO EMERGENCY HEADER. PLEASE CLOSE THIS WINDOW AND RE-GENERATE THIS WARNING **!
+
+#end
+#end
+#if(${list.contains(${bullets}, "replacesSVRCTA")})
THIS TORNADO WARNING REPLACES THE SEVERE THUNDERSTORM WARNING ISSUED FOR THE SAME AREA.
#end
-#if(${list.contains($bullets, "defaultMobileCTA")})
-TAKE COVER NOW. MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
+#if(${list.contains(${bullets}, "defaultMobileCTA")})
+${preAmble}TAKE COVER NOW. MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A MOBILE HOME OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "defaultUrbanCTA")})
-TAKE COVER NOW. MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
+#if(${list.contains(${bullets}, "defaultUrbanCTA")})
+${preAmble}TAKE COVER NOW. MOVE TO A BASEMENT OR AN INTERIOR ROOM ON THE LOWEST FLOOR OF A STURDY BUILDING. AVOID WINDOWS. IF IN A VEHICLE OR OUTDOORS...MOVE TO THE CLOSEST SUBSTANTIAL SHELTER AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "motoristsCTA")})
+#if(${list.contains(${bullets}, "motoristsCTA")})
MOTORISTS SHOULD NOT TAKE SHELTER UNDER HIGHWAY OVERPASSES. IF YOU CANNOT SAFELY DRIVE AWAY FROM THE TORNADO...AS A LAST RESORT...EITHER PARK YOUR VEHICLE AND STAY PUT...OR ABANDON YOUR VEHICLE AND LIE DOWN IN A LOW LYING AREA AND PROTECT YOURSELF FROM FLYING DEBRIS.
#end
-#if(${list.contains($bullets, "rainWrappedCTA")})
+#if(${list.contains(${bullets}, "rainWrappedCTA")})
HEAVY RAINFALL MAY OBSCURE THIS TORNADO. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
-#if(${list.contains($bullets, "nighttimeCTA")})
+#if(${list.contains(${bullets}, "nighttimeCTA")})
TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT. DO NOT WAIT TO SEE OR HEAR THE TORNADO. TAKE COVER NOW.
#end
-#if(${list.contains($bullets, "largeTORCTA")})
-A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS AN EMERGENCY SITUATION.
+#if(${list.contains(${bullets}, "largeTORCTA")})
+A LARGE AND EXTREMELY DANGEROUS TORNADO IS ON THE GROUND. TAKE IMMEDIATE TORNADO PRECAUTIONS. THIS IS A LIFE-THREATENING SITUATION.
#end
-#if(${list.contains($bullets, "lawEnforcementCTA")})
+#if(${list.contains(${bullets}, "lawEnforcementCTA")})
IF A TORNADO OR OTHER SEVERE WEATHER IS SPOTTED...REPORT IT TO THE NATIONAL WEATHER SERVICE OR YOUR LOCAL AUTHORITY WHO WILL RELAY YOUR REPORT. THIS ACT MAY SAVE LIVES OF OTHERS IN THE PATH OF DANGEROUS WEATHER.
#end
-#if(${list.contains($bullets, "squallCTA")} && ${stormType} == "line")
+#if(${list.contains(${bullets}, "squallCTA")} && ${stormType} == "line")
THIS LINE OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS.
-#elseif(${list.contains($bullets, "squallCTA")})
+#elseif(${list.contains(${bullets}, "squallCTA")})
THIS CLUSTER OF THUNDERSTORMS IS CAPABLE OF PRODUCING TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE. DO NOT WAIT TO SEE OR HEAR THE TORNADO. FOR YOUR PROTECTION MOVE TO AN INTERIOR ROOM ON THE LOWEST FLOOR OF YOUR HOME OR BUSINESS.
#end
-#if(${list.contains($bullets, "waterCTA")})
+#if(${list.contains(${bullets}, "waterCTA")})
IF ON OR NEAR !**NAME OF WATER BODY **!...GET OUT OF THE WATER AND MOVE TO SAFE SHELTER IMMEDIATELY. IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING. IN ADDITION...SEVERE THUNDERSTORMS CAN PRODUCE LARGE CAPSIZING WAVES...EVEN ON SMALL BODIES OF WATER. MOVE INTO DOCK AND SEEK SAFE SHELTER NOW. DO NOT BE CAUGHT ON THE WATER IN A THUNDERSTORM.
#end
@@ -421,25 +486,12 @@ THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE.
#printcoords(${areaPoly}, ${list})
-TIME...MOT...LOC ##
-${dateUtil.format(${TMLtime}, ${timeFormat.time})}Z ##
-${mathUtil.roundAndPad(${movementDirection})}DEG ##
-${mathUtil.round(${movementInKnots})}KT ##
-#foreach(${eventCoord} in ${eventLocation})
-#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ##
-#end
-###########################################################################
+#tml(${TMLtime}, ${timeFormat}, ${movementDirection}, ${movementInKnots}, ${eventLocation})
## UNCOMMENT 2 LINES BELOW IF YOU ARE PARTICIPATING IN THE HAIL TAG TESTBED
##
##HAIL ${hailTag}
-###########################################################################
-###########################################################################
-
$$
-##############################################
-## Code to pull the user name into the product
-##############################################
-##${user}
-!**NAME/INITIALS**!
+
+#parse("forecasterName.vm")
diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml
index 067031d874..414fc9cd7c 100644
--- a/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml
+++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/tornadoWarning.xml
@@ -7,6 +7,9 @@
Mike Dangelo WFO CTP 9-22-2011 to add in remarks and lines which will allow Zone-based products (Alaska TIM)
EVAN BOOKBINDER WFO EAX 2-24-2012 corrected parseString errors that prevented auto selection
Qinglu Lin 04-04-2012 DR 14691. Added tag.
+ Evan Bookbinder 09-11-2012 Added settings for locations shapefile
+ Create new areaSource objects
+ Mike Dangelo 2-4-2013 Added commented bullet for NWS METS DECTECTED
-->
@@ -60,45 +63,51 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
+
@@ -107,6 +116,7 @@
+
@@ -115,48 +125,55 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
@@ -165,6 +182,7 @@
+
@@ -174,50 +192,45 @@
-
-
-
-
-
-
-
-
-
-
- 0.00
- AND
- 0
- COUNTYNAME
-
- NAME
- STATE
- FE_AREA
- TIME_ZONE
- countyTypes.txt
- FIPS
-
- NAME
-
+
+
+ County
+ 0
+ AND
+ 0
+ COUNTYNAME
+ NAME
+ STATE
+ FE_AREA
+ TIME_ZONE
+ countyTypes.txt
+ FIPS
+ NAME
+
parent
-
-
+
+
25
-
+
NAME
+ AREA
POINTS
+
+
+
1
- 50
+ 100
distance
warngenlev
@@ -226,11 +239,15 @@
NAME
+ AREA
POINTS
+
+
+
5
100
@@ -240,6 +257,7 @@
+ 1
true
8.0
5
@@ -247,35 +265,54 @@
4
8
Name
+ AREA
COUNTYNAME
STATE
STATE
countyTypes.txt
- distance
+ warngenlev
+ population
+ distance
+
+
+
NAME
+ 1
+ AREA
TRACK
true
20
10
+
+
+
+
+
+
+
+
warngenlev
population
+ distance
NAME
+ 1
+ AREA
TRACK
true
10
@@ -285,8 +322,11 @@
-
+
+
+
+
@@ -296,7 +336,7 @@ and place into this template
- City
+ WarnGenLoc
County
States
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/LAMPBufrTableB b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/LAMPBufrTableB
index 504a4c04b1..119532ad86 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/LAMPBufrTableB
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/LAMPBufrTableB
@@ -371,7 +371,7 @@
0 20 5 0 0 5 TABLE PAST WEATHER (2)
0 20 9 -1 -40 11 M CEILING ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
0 20 10 0 0 7 % CLOUD COVER (TOTAL)
-0 20 11 0 0 4 TABLE CLOUD AMOUNT
+0 20 11 0 0 4 CODE TABLE CLOUD AMOUNT
0 20 12 0 0 6 TABLE CLOUD TYPE
0 20 13 -1 -40 11 M HEIGHT OF BASE OF CLOUD (SA/SM)
0 20 14 -1 -40 11 M HEIGHT OF TOP OF CLOUD
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/MRFBufrTableB b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/MRFBufrTableB
index ad5c0178bb..6c39b71694 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/MRFBufrTableB
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/bufrtables/MRFBufrTableB
@@ -147,7 +147,7 @@
0 60 65 1 0 12 METERS/SECOND CLIMATIC WIND SPEED
0 60 66 1 0 12 DEGREES KELVIN CLIMATIC(NORMAL) DAY MAX TEMP
0 60 67 1 0 12 DEGREES KELVIN CLIMATIC(NORMAL) NIGHT MIN TEMP
-0 60 90 0 0 4 CODE TABLE UANT PCP FCST (CATEGORIES)
+0 60 90 0 0 4 CODE TABLE QUANT PCP FCST (CATEGORIES)
0 60 91 0 0 3 CODE TABLE COND PCP TYPE FCST (CATS)
0 60 92 0 0 3 CODE TABLE COND PCP CHARACTER FCST (CATS)
0 60 93 0 0 3 CODE TABLE QUANT SNOW AMT FCST (CATS)
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosAVN.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosAVN.xml
index 989f0cfcf6..199efa7ab3 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosAVN.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosAVN.xml
@@ -19,77 +19,77 @@
further_licensing_information.
-->
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
+
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosETA.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosETA.xml
index 2e76e4809a..31c44d1f8d 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosETA.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosETA.xml
@@ -19,86 +19,86 @@
further_licensing_information.
-->
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosGFS.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosGFS.xml
index a8c7efe681..7258411aa0 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosGFS.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosGFS.xml
@@ -19,89 +19,89 @@
further_licensing_information.
-->
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosHPC.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosHPC.xml
index e8debb55fe..e180828f09 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosHPC.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosHPC.xml
@@ -19,11 +19,11 @@
further_licensing_information.
-->
-
-
+
+
-
+
-
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosLAMP.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosLAMP.xml
index 5304cf469f..073f254e2a 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosLAMP.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosLAMP.xml
@@ -21,69 +21,69 @@
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosMRF.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosMRF.xml
index 35306b948e..8d51875f1a 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosMRF.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosMRF.xml
@@ -19,49 +19,49 @@
further_licensing_information.
-->
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosNGM.xml b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosNGM.xml
index 23f8e05900..0a772ed0b5 100644
--- a/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosNGM.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.bufrmos/res/pointdata/bufrmosNGM.xml
@@ -19,79 +19,79 @@
further_licensing_information.
-->
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
-
+
-
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java
index f48dc4cdc0..82b419ab1d 100644
--- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java
+++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java
@@ -92,6 +92,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery;
* 04/08/13 #1949 rjpeter Normalized GFE Database.
* 05/22/13 #2025 dgilling Re-implement functions needed by
* GetLatestDbTimeRequest and GetLatestModelDbIdRequest.
+ * 05/20/13 #2127 rjpeter Set session's to read only and switched to stateless where possible.
*
*
* @author bphillip
@@ -128,6 +129,7 @@ public class GFEDao extends DefaultPluginDao {
try {
sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess.setDefaultReadOnly(true);
int tries = 0;
Transaction tx = null;
while ((rval == null) && (tries < QUERY_RETRY)) {
@@ -217,9 +219,12 @@ public class GFEDao extends DefaultPluginDao {
try {
sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess.setDefaultReadOnly(true);
tx = sess.beginTransaction();
// reattach so dbId doesn't requery
+ // Only safe because DatabaseID has no OneToMany or ManyToMany
+ // relations
sess.buildLockRequest(LockOptions.NONE).lock(dbId);
Query query = sess.createQuery("FROM ParmID WHERE dbId = ?");
@@ -265,8 +270,11 @@ public class GFEDao extends DefaultPluginDao {
try {
sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess.setDefaultReadOnly(true);
// reattach so dbId doesn't requery
+ // Only safe because DatabaseID has no OneToMany or ManyToMany
+ // relations
sess.buildLockRequest(LockOptions.NONE).lock(parmId.getDbId());
int tries = 0;
@@ -571,9 +579,11 @@ public class GFEDao extends DefaultPluginDao {
try {
sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess.setDefaultReadOnly(true);
tx = sess.beginTransaction();
// reattach so parmId doesn't requery
+ // Only safe because ParmID has no OneToMany or ManyToMany relations
sess.buildLockRequest(LockOptions.NONE).lock(parmId);
Query query = sess.createQuery("FROM GFERecord WHERE parmId = ?");
@@ -622,9 +632,11 @@ public class GFEDao extends DefaultPluginDao {
// stateless session so we can bulk query histories instead of once
// per record via hibernate
sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess.setDefaultReadOnly(true);
tx = sess.beginTransaction();
// reattach so parmId doesn't requery
+ // Only safe because ParmID has no OneToMany or ManyToMany relations
sess.buildLockRequest(LockOptions.NONE).lock(parmId);
// start and end specifically reversed as we want
@@ -681,11 +693,12 @@ public class GFEDao extends DefaultPluginDao {
return;
}
- Session sess = null;
+ StatelessSession sess = null;
Transaction tx = null;
try {
- sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess = getHibernateTemplate().getSessionFactory()
+ .openStatelessSession();
tx = sess.beginTransaction();
Query query = sess
.createQuery("DELETE FROM GFERecord WHERE parmId = :parmId"
@@ -694,6 +707,7 @@ public class GFEDao extends DefaultPluginDao {
query.setParameterList("times", times);
int rowsDeleted = query.executeUpdate();
tx.commit();
+ tx = null;
statusHandler.info("Deleted " + rowsDeleted
+ " records from the database.");
@@ -948,11 +962,12 @@ public class GFEDao extends DefaultPluginDao {
ids.add(hist.getId());
}
- Session sess = null;
+ StatelessSession sess = null;
Transaction tx = null;
try {
- sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess = getHibernateTemplate().getSessionFactory()
+ .openStatelessSession();
tx = sess.beginTransaction();
Query q = sess
.createSQLQuery("UPDATE gfe_gridhistory SET publishtime=:publishtime WHERE id IN (:ids)");
@@ -1073,11 +1088,12 @@ public class GFEDao extends DefaultPluginDao {
ids.add(rec.getId());
}
- Session sess = null;
+ StatelessSession sess = null;
Transaction tx = null;
try {
- sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess = getHibernateTemplate().getSessionFactory()
+ .openStatelessSession();
tx = sess.beginTransaction();
Query q = sess
.createQuery("DELETE FROM GFERecord WHERE id in (:ids)");
diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFELockDao.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFELockDao.java
index eabd41a41c..2b8c89fdd4 100644
--- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFELockDao.java
+++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFELockDao.java
@@ -50,7 +50,8 @@ import com.raytheon.uf.edex.database.dao.DaoConfig;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 06/17/08 #940 bphillip Initial Creation
- * 04/19/13 rjpeter Normalized GFE Database.
+ * 04/19/13 #1949 rjpeter Normalized GFE Database.
+ * 06/20/13 #2127 rjpeter Set session to read only.
*
*
* @author bphillip
@@ -98,10 +99,13 @@ public class GFELockDao extends CoreDao {
try {
sess = getHibernateTemplate().getSessionFactory().openSession();
+ sess.setDefaultReadOnly(true);
tx = sess.beginTransaction();
// reattach object so any parmIds found don't requery
for (ParmID requiredParmId : parmIds) {
+ // Only safe because ParmID has no OneToMany or ManyToMany
+ // relations
sess.buildLockRequest(LockOptions.NONE).lock(requiredParmId);
}
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py b/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py
index 4c979a433a..4b8f61f5f2 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py
@@ -161,17 +161,6 @@ class GribDecoder():
filePointer = 0;
version = -1;
-
- if os.path.exists(self.fileName):
- try:
- version = grib2.checkVersion(self.fileName)
- except:
- LogStream.logProblem("Error opening file [", self.fileName, "]: ", sys.exc_info()[1])
- return records
- else:
- LogStream.logProblem("The file does not exist: [", self.fileName, "]")
- return records
-
decodeFile = None
if version == 1:
grib1Decoder = Grib1Decoder()
@@ -619,9 +608,9 @@ class GribDecoder():
elif pdsTemplateNumber == 2 or pdsTemplateNumber == 12:
derivedForecast = pdsTemplate[15]
- if (derivedForecast == 1):
+ if (derivedForecast == 1 or derivedForecast == 0 ):
parameterAbbreviation= parameterAbbreviation+"mean"
- elif (derivedForecast == 2):
+ elif (derivedForecast == 2 or derivedForecast == 3 or derivedForecast == 4 ):
parameterAbbreviation= parameterAbbreviation+"sprd"
pdsFields['typeEnsemble'] = Integer(pdsTemplate[15])
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/META-INF/services/com.raytheon.uf.common.serialization.ISerializableObject b/edexOsgi/com.raytheon.edex.plugin.grib/META-INF/services/com.raytheon.uf.common.serialization.ISerializableObject
index 8e3a2fb387..c35fae50d6 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/META-INF/services/com.raytheon.uf.common.serialization.ISerializableObject
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/META-INF/services/com.raytheon.uf.common.serialization.ISerializableObject
@@ -11,3 +11,4 @@ com.raytheon.edex.plugin.grib.spatial.FileData
com.raytheon.edex.plugin.grib.spatial.FileDataList
com.raytheon.edex.plugin.grib.decoderpostprocessors.PostProcessedModelSet
com.raytheon.edex.plugin.grib.decoderpostprocessors.PostProcessedModel
+com.raytheon.edex.plugin.grib.filenameprocessor.NcgribModelNameMap
\ No newline at end of file
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.deprecated/grib-decode.xml b/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.deprecated/grib-decode.xml
index 719049510f..efa2bd86a0 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.deprecated/grib-decode.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.deprecated/grib-decode.xml
@@ -67,7 +67,7 @@
grid
-
+
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.future/grib-decode.xml b/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.future/grib-decode.xml
index db0b796895..19236c7b3d 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.future/grib-decode.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/res/spring.future/grib-decode.xml
@@ -50,6 +50,8 @@
class="com.raytheon.edex.plugin.grib.spatial.GribSpatialCache"
factory-method="getInstance" depends-on="gridcoveragelookup"/>
+
+
@@ -60,6 +62,7 @@
+
grid
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/filenameprocessor/NcgribFileNameProcessor.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/filenameprocessor/NcgribFileNameProcessor.java
new file mode 100644
index 0000000000..09e97004a2
--- /dev/null
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/filenameprocessor/NcgribFileNameProcessor.java
@@ -0,0 +1,140 @@
+package com.raytheon.edex.plugin.grib.filenameprocessor;
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+/**
+ *
+ * Processor for ncep grib files, this processor has lots of hard coded
+ * assumptions about file naming that need to be more generic based off ncep
+ * file names.
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Mar 1, 2012 bsteffen Initial creation
+ * May 29, 2013 995 B. Yin Get model name from NcgribModelNameMap
+ * June, 2013 T. Lee Added NFCENS
+ *
+ *
+ *
+ * @author bsteffen
+ * @version 1.0
+ */
+public class NcgribFileNameProcessor implements Processor {
+
+ // grab all known ensemble ids; mainly SREF
+ private static final Pattern ENSEMBLE_ID_PATTERN = Pattern
+ .compile("^(p|n|ctl)\\d{0,2}$");
+
+ // grab global wind and wave ensemble IDs
+ private static final Pattern ENSEMBLE_WAVE_PATTERN = Pattern
+ .compile("^gep(\\d{0,2}{2})$");
+
+ // grab global wind and wave ensemble IDs
+ private static final Pattern ENSEMBLE_NFC_PATTERN = Pattern
+ .compile("^HTSGW_(\\d{0,2}{2})$");
+ // anything that ends in nest is assumed to be a nested grid identifier
+ // might add alaska fire weather later...
+ private static final Pattern FIREWXNEST_ID_PATTERN = Pattern
+ .compile("^firewxnest$");
+
+ // anything that ends in nest is assumed to be a nested grid identifier
+ //private static final Pattern NEST_ID_PATTERN = Pattern.compile("^.*nest$");
+
+ // SREF gets special handling, does this apply to other models?
+ //private static final Pattern SREF_PATTERN = Pattern.compile("^sref_.*$");
+
+ // This is the least generic pattern ever, are there any constraints on
+ // event names, who knows?
+ private static final Pattern HURRICANE_PATTERN = Pattern
+ .compile("^([a-z]*)\\d{1,2}[lewcs]$");
+
+ private static NcgribModelNameMap modelMap = null;
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ String flName = (String) exchange.getIn()
+ .getHeader("CamelFileNameOnly");
+ String datasetid = null;
+ String secondaryid = null;
+ String ensembleid = null;
+ String[] nameTokens = flName.split("\\.");
+ for (String token : nameTokens) {
+ if (ENSEMBLE_ID_PATTERN.matcher(token).find()) {
+ ensembleid = token;
+ } else if (ENSEMBLE_WAVE_PATTERN.matcher(token).find()) {
+ Matcher matcher = ENSEMBLE_WAVE_PATTERN.matcher(token);
+ matcher.find();
+ ensembleid = matcher.group(1);
+ } else if (ENSEMBLE_NFC_PATTERN.matcher(token).find()) {
+ Matcher matcher = ENSEMBLE_NFC_PATTERN.matcher(token);
+ datasetid = "nfcens";
+ matcher.find();
+ ensembleid = matcher.group(1);
+ } else if (FIREWXNEST_ID_PATTERN.matcher(token).find()) {
+ //datasetid = "NAMFIREWX";
+ datasetid = "fireWxNAM";
+ //secondaryid = token;
+ //} else if (NEST_ID_PATTERN.matcher(token).find()) {
+ // secondaryid = token;
+ //} else if (SREF_PATTERN.matcher(token).find()) {
+ // String[] tokens = token.split("_");
+ // datasetid = tokens[0].toUpperCase();
+ //secondaryid = tokens[1].toUpperCase();
+ } else if (HURRICANE_PATTERN.matcher(token).find()) {
+ Matcher matcher = HURRICANE_PATTERN.matcher(token);
+ matcher.find();
+ secondaryid = matcher.group(1);
+ datasetid = "GHM";
+ if (nameTokens[2].equalsIgnoreCase("gribn3")) {
+ datasetid = "GHMNEST";
+ } else if (nameTokens[2].equalsIgnoreCase("grib6th")) {
+ datasetid = "GHM6TH";
+ } else if (nameTokens[2].equalsIgnoreCase("hwrfprs_n")) {
+ datasetid = "HWRFNEST";
+ } else if (nameTokens[2].equalsIgnoreCase("hwrfprs_p")) {
+ datasetid = "HWRF";
+ }
+ }
+ }
+
+ if ( modelMap == null ) {
+ modelMap = NcgribModelNameMap.load();
+ }
+
+ if (datasetid == null) {
+ datasetid = modelMap.getModelName(flName);
+ }
+
+ exchange.getIn().setHeader("datasetid", datasetid);
+ exchange.getIn().setHeader("secondaryid", secondaryid);
+ exchange.getIn().setHeader("ensembleid", ensembleid);
+ }
+
+}
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/filenameprocessor/NcgribModelNameMap.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/filenameprocessor/NcgribModelNameMap.java
new file mode 100644
index 0000000000..44e7a6abc0
--- /dev/null
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/filenameprocessor/NcgribModelNameMap.java
@@ -0,0 +1,86 @@
+/*
+ * com.raytheon.edex.plugin.grib.filenameprocessor.NcgribModelNameMap
+ *
+ * 29 May 2013
+ *
+ * This code has been developed by the NCEP/SIB for use in the AWIPS2 system.
+ */
+
+package com.raytheon.edex.plugin.grib.filenameprocessor;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.regex.Pattern;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.raytheon.uf.common.localization.IPathManager;
+import com.raytheon.uf.common.localization.LocalizationContext;
+import com.raytheon.uf.common.localization.PathManagerFactory;
+import com.raytheon.uf.common.serialization.ISerializableObject;
+import com.raytheon.uf.common.serialization.SerializationUtil;
+
+/**
+ * Class to hold the model name look up map for ncgrib data file
+ *
+ *
+ * SOFTWARE HISTORY
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * 05/13 995 B. Yin Initial Creation.
+ *
+ *
+ * @author B. Yin
+ */
+
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class NcgribModelNameMap implements ISerializableObject {
+
+ /*
+ * Mapping between file name templates and model names
+ */
+ private HashMap mapping;
+
+ /**
+ * Load the ncgrib model name mapping between file name templates and model names.
+ * @return NcgribModelNameMap
+ * @throws Exception
+ */
+ public static NcgribModelNameMap load() throws Exception{
+ IPathManager pathMgr = PathManagerFactory.getPathManager();
+ LocalizationContext ctx = pathMgr.getContext(
+ LocalizationContext.LocalizationType.EDEX_STATIC,
+ LocalizationContext.LocalizationLevel.BASE);
+
+ NcgribModelNameMap map = null;
+ try {
+ File xmlFile = pathMgr.getFile(ctx, "/grib/ncgrib/ncgribModelNameMap.xml");
+ map = (NcgribModelNameMap) SerializationUtil
+ .jaxbUnmarshalFromXmlFile(NcgribModelNameMap.class, xmlFile.getAbsolutePath());
+ } catch (Exception e) {
+ throw e;
+ }
+ return map;
+ }
+
+ /**
+ * Gets the model name from the mapping table for the specified file name.
+ * @param fileName
+ * @return model name
+ */
+ public String getModelName( String fileName ){
+ String model = null;
+
+ for ( String namePattern : mapping.keySet() ){
+ if ( Pattern.matches( namePattern, fileName)){
+ model = mapping.get( namePattern );
+ break;
+ }
+ }
+
+ return model;
+ }
+}
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/GribModels_FNMO-58.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/GribModels_FNMO-58.xml
index 3be8e4b8d0..56eb605c65 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/GribModels_FNMO-58.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/GribModels_FNMO-58.xml
@@ -51,24 +51,42 @@
0
2291
- 50
58
18
+
+ fens
+ 58
+ 0
+ 2291
+
+ 50
+
+
+
nogaps
58
0
361181002
- 50
18
58
+
+ fens
+ 58
+ 0
+ 361181002
+
+ 50
+
+
+
fnmocWave
58
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_ECMWF-98.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_ECMWF-98.xml
index 15796c1e65..d2bfc35298 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_ECMWF-98.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_ECMWF-98.xml
@@ -11,6 +11,20 @@
+
+ ecmwfP25
+ 98
+ 0
+ 144072101
+
+ 141
+ 142
+ 143
+ 144
+ 145
+
+
+
ecmwf
98
@@ -188,6 +202,9 @@
110
111
112
+ 113
+ 114
+ 115
@@ -202,6 +219,9 @@
110
111
112
+ 113
+ 114
+ 115
@@ -216,6 +236,9 @@
110
111
112
+ 113
+ 114
+ 115
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml
index 0f9b05d3cb..219bddfe51 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/models/gribModels_NCEP-7.xml
@@ -10,17 +10,6 @@
-
-
- nogapse
- 58
- 0
- 360181001
-
- 1
-
-
-
estofsPR
7
@@ -1701,7 +1690,6 @@
77
81
225
- 255
@@ -1727,7 +1715,6 @@
77
81
225
- 255
@@ -1761,6 +1748,29 @@
+
+ gfs
+ 7
+ 0
+ 145073001
+
+ 96
+ 77
+ 81
+
+
+
+
+ gfs
+ 7
+ 0
+ 375
+
+ 96
+ 81
+
+
+
gdas
7
@@ -1791,18 +1801,6 @@
-
- gfs
- 7
- 0
- 145073001
-
- 96
- 77
- 81
-
-
-
nam12E
7
@@ -1945,17 +1943,6 @@
-
- gfs
- 7
- 0
- 375
-
- 96
- 81
-
-
-
gww375
7
@@ -2402,27 +2389,7 @@
- naefsBC
- 7
- 2
- 375
-
- 114
-
-
-
-
- naefsBC
- 7
- 2
- 372
-
- 114
-
-
-
-
- naefsBC
+ naefs
7
2
3
@@ -2431,16 +2398,6 @@
-
- naefsBC
- 7
- 2
- 361181001
-
- 114
-
-
-
naefsUS
7
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/ncgrib/ncgribModelNameMap.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/ncgrib/ncgribModelNameMap.xml
new file mode 100644
index 0000000000..2f4169156c
--- /dev/null
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/ncgrib/ncgribModelNameMap.xml
@@ -0,0 +1,222 @@
+
+
+
+
+
+ cmc_geavg.*
+ cmceDerv
+
+
+ cmc_gespr.*
+ cmceDerv
+
+
+ gec00.*anl
+ gefsAnal
+
+
+ gep[0-9][0-9].*anl
+ gefsAnal
+
+
+ gec00.*bcf.*
+ gefsBC
+
+
+ gep[0-9][0-9].*bcf.*
+ gefsBC
+
+
+ geavg.*bcf.*
+ gefsBCDerv
+
+
+ gespr.*bcf.*
+ gefsBCDerv
+
+
+ geavg.*
+ gefsDerv
+
+
+ gespr.*
+ gefsDerv
+
+
+ HTSGW_mean.*
+ nfcMean
+
+
+ HTSGW_probab.*
+ nfcProb
+
+
+ HTSGW_spread.*
+ nfcSprd
+
+
+ mens.glo_60m.*.grib2
+ gwwEns
+
+
+ gep[0-9][0-9].glo_60m.*.grib2
+ gwwEns
+
+
+ mean.*
+ gwwMean
+
+
+ spread.*.grib2
+ gwwSprd
+
+
+ probab.*.grib2
+ gwwProb
+
+
+ naefs_geavg.*bcf.*
+ naefsDervBC
+
+
+ naefs_gespr.*bcf.*
+ naefsDervBC
+
+
+ naefs_gemode.*bcf.*
+ naefsModeBC
+
+
+ naefs_ge10pt.*bcf.*
+ naefs10ptBC
+
+
+ naefs_ge50pt.*bcf.*
+ naefs50ptBC
+
+
+ naefs_ge90pt.*bcf.*
+ naefs90ptBC
+
+
+ naefs_geavg.*ndgd_conusf.*grib2
+ naefsDervUS
+
+
+ naefs_gespr.*ndgd_conusf.*grib2
+ naefsDervUS
+
+
+ naefs_gemode.*ndgd_conusf.*grib2
+ naefsModeUS
+
+
+ naefs_ge10pt.*ndgd_conusf.*grib2
+ naefs10ptUS
+
+
+ naefs_ge50pt.*ndgd_conusf.*grib2
+ naefs50ptUS
+
+
+ naefs_ge90pt.*ndgd_conusf.*grib2
+ naefs90ptUS
+
+
+ naefs_geavg.*ndgd_alaskaf.*grib2
+ naefsDervAK
+
+
+ naefs_gespr.*ndgd_alaskaf.*grib2
+ naefsDervAK
+
+
+ naefs_gemode.*ndgd_alaskaf.*grib2
+ naefsModeAK
+
+
+ naefs_ge10pt.*ndgd_alaskaf.*grib2
+ naefs10ptAK
+
+
+ naefs_ge50pt.*ndgd_alaskaf.*grib2
+ naefs50ptAK
+
+
+ naefs_ge90pt.*ndgd_alaskaf.*grib2
+ naefs90ptAK
+
+
+ sref_em.*132.ctl.*
+ sref16EM
+
+
+ sref_em.*132.[pn][1-3].*
+ sref16EM
+
+
+ sref_nmb.*132.ctl.*
+ sref16NMB
+
+
+ sref_nmb.*132.[pn][1-3].*
+ sref16NMB
+
+
+ sref_nmm.*132.ctl.*
+ sref16NMM
+
+
+ sref_nmm.*132.[pn][1-3].*
+ sref16NMM
+
+
+ sref.*132.mean.*
+ sref16Derv
+
+
+ sref.*132.prob.*
+ sref16Derv
+
+
+ sref.*132.spread.*
+ sref16Derv
+
+
+ sref_em.*212.ctl.*
+ sref40EM
+
+
+ sref_em.*212.[pn][1-3].*
+ sref40EM
+
+
+ sref_nmb.*212.ctl.*
+ sref40NMB
+
+
+ sref_nmb.*212.[pn][1-3].*
+ sref40NMB
+
+
+ sref_nmm.*212.ctl.*
+ sref40NMM
+
+
+ sref_nmm.*212.[pn][1-3].*
+ sref40NMM
+
+
+ sref.*212.mean.*
+ sref40Derv
+
+
+ sref.*212.prob.*
+ sref40Derv
+
+
+ sref.*212.spread.*
+ sref40Derv
+
+
+
\ No newline at end of file
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/7/14/4.2.10.3.table b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/7/14/4.2.10.3.table
index 225bcf3a14..34dc83c0b9 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/7/14/4.2.10.3.table
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/7/14/4.2.10.3.table
@@ -1,6 +1,6 @@
# Product Discipline 10: Oceanographic products, Parameter Category 3: Surface Properties
#192-254 Reserved for local use
-192:192:Probabilistic Storm Surge height w/10% chance of being exceeded:%:TPCSG
+192:192:Probabilistic Storm Surge height w/10% chance of being exceeded:m:TPCSG
193:193:Extra Tropical Storm Surge:m:ETSRG
194:194:Ocean Surface Elevation Relative to Geoid:m:ELEV
195:195:Sea Surface Height Relative to Geoid:m:SSHG
@@ -11,13 +11,13 @@
200:200:Surface Salinity Trend:psu per day:SSST
201:201:Kinetic Energy:J/kg:KENG
202:202:Salt Flux:mm*s:SLTFL
-242:242:Probabilistic Storm Surge height w/20% chance of being exceeded:%:TPCSG_20
-243:243:Probabilistic Storm Surge height w/30% chance of being exceeded:%:TPCSG_30
-244:244:Probabilistic Storm Surge height w/40% chance of being exceeded:%:TPCSG_40
-245:245:Probabilistic Storm Surge height w/50% chance of being exceeded:%:TPCSG_50
-246:246:Probabilistic Storm Surge height w/60% chance of being exceeded:%:TPCSG_60
-247:247:Probabilistic Storm Surge height w/70% chance of being exceeded:%:TPCSG_70
-248:248:Probabilistic Storm Surge height w/80% chance of being exceeded:%:TPCSG_80
-249:249:Probabilistic Storm Surge height w/90% chance of being exceeded:%:TPCSG_90
+242:242:Probabilistic Storm Surge height w/20% chance of being exceeded:m:TPCSG_20
+243:243:Probabilistic Storm Surge height w/30% chance of being exceeded:m:TPCSG_30
+244:244:Probabilistic Storm Surge height w/40% chance of being exceeded:m:TPCSG_40
+245:245:Probabilistic Storm Surge height w/50% chance of being exceeded:m:TPCSG_50
+246:246:Probabilistic Storm Surge height w/60% chance of being exceeded:m:TPCSG_60
+247:247:Probabilistic Storm Surge height w/70% chance of being exceeded:m:TPCSG_70
+248:248:Probabilistic Storm Surge height w/80% chance of being exceeded:m:TPCSG_80
+249:249:Probabilistic Storm Surge height w/90% chance of being exceeded:m:TPCSG_90
250:250:Extra Tropical Storm Surge Combined Surge and Tide:m:ETCWL
255:255:Missing
diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/98/0/4.2.10.0.table b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/98/0/4.2.10.0.table
index 305da8b9b2..5de16313cb 100644
--- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/98/0/4.2.10.0.table
+++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/edex_static/base/grib/tables/98/0/4.2.10.0.table
@@ -1,5 +1,3 @@
# Product Discipline 10: Oceanographic products, Parameter Category 0: Waves
# 192-254 Reserved for local use
255:255:Missing
-
-
diff --git a/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/ModelSoundingDecoder.java b/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/ModelSoundingDecoder.java
index 85281093c9..4fdd2d7c64 100644
--- a/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/ModelSoundingDecoder.java
+++ b/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/ModelSoundingDecoder.java
@@ -24,6 +24,8 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import java.util.Map;
+import java.util.HashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -63,6 +65,10 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
* 04/29/13 #1861 bkowal Create a separate Point Data Container for
* every record so each forecast hour will
* receive a unique hdf5 file.
+ * 07/03/13 #2161 bkowal Store and retrieve the Point Data Containers
+ * by forecast hour and reftime when completing
+ * a decode operation. Overrode default
+ * Point Data Container size.
*
*
*
@@ -77,6 +83,8 @@ public class ModelSoundingDecoder extends AbstractDecoder implements
// Name of the plugin controlling this decoder.
public static final String PLUGIN_NAME = "modelsounding";
+ private static final int PDC_SIZE = 20;
+
/** The logger */
private Log logger = LogFactory.getLog(getClass());
@@ -151,16 +159,37 @@ public class ModelSoundingDecoder extends AbstractDecoder implements
Iterator iterator = document.iterator();
List pdoList = new ArrayList();
+ Map pdcTemporalMap = new HashMap();
+
while (iterator.hasNext()) {
- /*
- * Would it be better to cache the Point Data Container
- * based on reftime and forecast hour?
- */
- PointDataContainer container = PointDataContainer
- .build(pdd);
+ BUFRDataDocument dataDoc = iterator.next();
+ if (dataDoc == null) {
+ continue;
+ }
+
+ SoundingTemporalData soundingTemporalData = ModelSoundingDataAdapter
+ .getSoundingTemporalInformation(dataDoc);
+
+ PointDataContainer container = pdcTemporalMap
+ .get(soundingTemporalData);
+ if (container == null) {
+ container = PointDataContainer.build(pdd, PDC_SIZE);
+ pdcTemporalMap.put(soundingTemporalData, container);
+ if (logger.isDebugEnabled()) {
+ logger.debug("Added Point Data Container to Map with: "
+ + ((soundingTemporalData == null) ? " NULL"
+ : soundingTemporalData
+ .toString()));
+ }
+ } else if (logger.isDebugEnabled()) {
+ logger.debug("Retrieved Point Data Container from Map with: "
+ + ((soundingTemporalData == null) ? " NULL"
+ : soundingTemporalData.toString()));
+ }
+
SoundingSite soundingData = ModelSoundingDataAdapter
- .createSoundingData(iterator, wmoHeader,
- container);
+ .createSoundingData(dataDoc, wmoHeader,
+ container, soundingTemporalData);
if (soundingData != null) {
soundingData.setTraceId(traceId);
soundingData.setPluginName(PLUGIN_NAME);
diff --git a/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/SoundingTemporalData.java b/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/SoundingTemporalData.java
new file mode 100644
index 0000000000..27b9dbf213
--- /dev/null
+++ b/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/SoundingTemporalData.java
@@ -0,0 +1,122 @@
+/**
+ * This software was developed and / or modified by Raytheon Company,
+ * pursuant to Contract DG133W-05-CQ-1067 with the US Government.
+ *
+ * U.S. EXPORT CONTROLLED TECHNICAL DATA
+ * This software product contains export-restricted data whose
+ * export/transfer/disclosure is restricted by U.S. law. Dissemination
+ * to non-U.S. persons whether in the United States or abroad requires
+ * an export license or other authorization.
+ *
+ * Contractor Name: Raytheon Company
+ * Contractor Address: 6825 Pine Street, Suite 340
+ * Mail Stop B8
+ * Omaha, NE 68106
+ * 402.291.0100
+ *
+ * See the AWIPS II Master Rights File ("Master Rights File.pdf") for
+ * further licensing information.
+ **/
+package com.raytheon.edex.plugin.modelsounding;
+
+import java.util.Calendar;
+
+import com.raytheon.uf.common.time.DataTime;
+/**
+ * Stores temporal information associated with sounding data.
+ *
+ *
+ *
+ * SOFTWARE HISTORY
+ *
+ * Date Ticket# Engineer Description
+ * ------------ ---------- ----------- --------------------------
+ * Jul 3, 2013 2161 bkowal Initial creation
+ *
+ *
+ *
+ * @author bkowal
+ * @version 1.0
+ */
+
+public class SoundingTemporalData {
+ private Calendar obsTime;
+
+ private DataTime dt;
+
+ private long refTime;
+
+ private long validTime;
+
+ private int forecastHr;
+
+ /**
+ *
+ */
+ public SoundingTemporalData() {
+ this.obsTime = null;
+ this.dt = null;
+ this.refTime = -1L;
+ this.validTime = -1L;
+ this.forecastHr =-1;
+ }
+
+ public Calendar getObsTime() {
+ return obsTime;
+ }
+
+ public void setObsTime(Calendar obsTime) {
+ this.obsTime = obsTime;
+ }
+
+ public DataTime getDt() {
+ return dt;
+ }
+
+ public void setDt(DataTime dt) {
+ this.dt = dt;
+ }
+
+ public long getRefTime() {
+ return refTime;
+ }
+
+ public void setRefTime(long refTime) {
+ this.refTime = refTime;
+ }
+
+ public long getValidTime() {
+ return validTime;
+ }
+
+ public void setValidTime(long validTime) {
+ this.validTime = validTime;
+ }
+
+ public int getForecastHr() {
+ return forecastHr;
+ }
+
+ public void setForecastHr(int forecastHr) {
+ this.forecastHr = forecastHr;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ SoundingTemporalData otherIndex = (SoundingTemporalData) object;
+
+ return (otherIndex.refTime == this.refTime)
+ && (otherIndex.forecastHr == this.forecastHr);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("refTime = ");
+ stringBuilder.append(this.refTime);
+ stringBuilder.append(", forecastHr = ");
+ stringBuilder.append(this.forecastHr);
+
+ return stringBuilder.toString();
+ }
+}
diff --git a/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/decoder/ModelSoundingDataAdapter.java b/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/decoder/ModelSoundingDataAdapter.java
index fa2b2d58be..89c615f34c 100644
--- a/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/decoder/ModelSoundingDataAdapter.java
+++ b/edexOsgi/com.raytheon.edex.plugin.modelsounding/src/com/raytheon/edex/plugin/modelsounding/decoder/ModelSoundingDataAdapter.java
@@ -23,12 +23,12 @@ import static com.raytheon.uf.edex.decodertools.bufr.packets.DataPacketTypes.Rep
import java.io.File;
import java.util.Calendar;
-import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import com.raytheon.edex.plugin.modelsounding.SoundingTemporalData;
import com.raytheon.edex.plugin.modelsounding.common.SoundingModels;
import com.raytheon.edex.plugin.modelsounding.common.SoundingSite;
import com.raytheon.uf.common.geospatial.spi.SPIContainer;
@@ -61,6 +61,8 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
* Mar 17, 2008 1026 jkorman Initial implementation.
* May 09, 2013 1869 bsteffen Modified D2D time series of point data to
* work without dataURI.
+ * 20130703 2161 bkowal Relocated the logic used to retrieve
+ * temporal information into its own function.
*
*
*
@@ -73,11 +75,11 @@ public class ModelSoundingDataAdapter {
.getLog(ModelSoundingDataAdapter.class);
private static final Object LOCK = new Object();
-
+
public static final String SPI_FILE = "basemaps/modelBufr.spi";
public static final String MODEL_STATION_LIST = "modelBufrStationList.txt";
-
+
private static SoundingStations stationsList = new SoundingStations(
MODEL_STATION_LIST);
@@ -85,8 +87,8 @@ public class ModelSoundingDataAdapter {
public static void updateSPIData() {
SPIContainer spi = populateSPIData();
- synchronized(LOCK) {
- if((spi != null)&&(spi.isLoaded())) {
+ synchronized (LOCK) {
+ if ((spi != null) && (spi.isLoaded())) {
SPI_DATA = spi;
}
}
@@ -97,8 +99,8 @@ public class ModelSoundingDataAdapter {
*/
public static void updateStationList() {
SoundingStations ss = new SoundingStations(MODEL_STATION_LIST);
- synchronized(LOCK) {
- if(ss != null) {
+ synchronized (LOCK) {
+ if (ss != null) {
stationsList = ss;
}
}
@@ -107,16 +109,52 @@ public class ModelSoundingDataAdapter {
public static void update() {
SoundingStations ss = new SoundingStations(MODEL_STATION_LIST);
SPIContainer spi = populateSPIData();
- synchronized(LOCK) {
- if(ss != null) {
+ synchronized (LOCK) {
+ if (ss != null) {
stationsList = ss;
}
- if((spi != null)&&(spi.isLoaded())) {
+ if ((spi != null) && (spi.isLoaded())) {
SPI_DATA = spi;
}
}
}
-
+
+ public static SoundingTemporalData getSoundingTemporalInformation(
+ BUFRDataDocument dataDoc) {
+ Calendar obsTime = dataDoc.getEnclosingDocument().getSection1()
+ .getSectionDate();
+ if (obsTime == null) {
+ return null;
+ }
+
+ // Get the primary data list.
+ List dataList = dataDoc.getList();
+ IBUFRDataPacket dp = dataList.get(0);
+ int d = dp.getReferencingDescriptor().getDescriptor();
+ // retrieve the forecast seconds
+ Long forecastSeconds = null;
+ if (d == BUFRDescriptor.createDescriptor(0, 4, 194)) {
+ forecastSeconds = (dp.getValue() != null) ? ((Double) dp.getValue())
+ .longValue() : null;
+ }
+
+ SoundingTemporalData soundingTemporalData = new SoundingTemporalData();
+ soundingTemporalData.setObsTime(obsTime);
+
+ DataTime dt = new DataTime(obsTime, forecastSeconds.intValue());
+ soundingTemporalData.setDt(dt);
+
+ Calendar baseTime = dt.getRefTimeAsCalendar();
+ soundingTemporalData.setRefTime(baseTime.getTimeInMillis() / 1000L);
+
+ Calendar validTime = dt.getValidTime();
+ soundingTemporalData.setValidTime(validTime.getTimeInMillis() / 1000L);
+
+ soundingTemporalData.setForecastHr((int) (forecastSeconds / 3600));
+
+ return soundingTemporalData;
+ }
+
/**
* Construct a ProfilerObs instance from the BUFR decoded data contained in
* the specified separator.
@@ -127,64 +165,56 @@ public class ModelSoundingDataAdapter {
* the wmo header
* @return A ProfilerObs instance, or null in the event of an error.
*/
- public static SoundingSite createSoundingData(
- Iterator iterator, WMOHeader wmoHeader,
- PointDataContainer container) {
+ public static SoundingSite createSoundingData(BUFRDataDocument dataDoc,
+ WMOHeader wmoHeader, PointDataContainer container,
+ SoundingTemporalData soundingTemporalData) {
SoundingSite obsData = null;
- synchronized(LOCK) {
+ synchronized (LOCK) {
try {
- BUFRDataDocument dataDoc = iterator.next();
- if (dataDoc != null) {
+ SoundingModels model = SoundingModels.getModel(wmoHeader
+ .getCccc());
+ // Get the primary data list.
+ List dataList = dataDoc.getList();
+ // Extract the header data.
+ PointDataView view = container.append();
+ obsData = getHeaderData(dataList, model, view);
- SoundingModels model = SoundingModels.getModel(wmoHeader.getCccc());
- // Get the primary data list.
- List dataList = dataDoc.getList();
- // Extract the header data.
- PointDataView view = container.append();
- obsData = getHeaderData(dataList, model, view);
-
- if (obsData != null) {
- switch (model) {
- case MODEL_GFS: {
- obsData.setReportType(model.getReportType());
- obsData = getGFSSiteData(dataList, obsData, view);
- break;
- }
- case MODEL_ETA: {
- obsData.setReportType(model.getReportType());
- obsData = getETASiteData(dataList, obsData, view);
- break;
- }
- }
-
- obsData.setWmoHeader(wmoHeader.getWmoHeader());
-
- Calendar obsTime = dataDoc.getEnclosingDocument().getSection1()
- .getSectionDate();
- if (obsTime != null) {
-
- obsData.setTimeObs(obsTime);
- DataTime dt = new DataTime(obsTime, obsData
- .getFcstSeconds().intValue());
-
- obsData.setDataTime(dt);
-
- Calendar validTime = dt.getValidTime();
- view.setLong("validTime",
- validTime.getTimeInMillis() / 1000L);
-
- }
-
- obsData.setPointDataView(view);
+ if (obsData != null) {
+ switch (model) {
+ case MODEL_GFS: {
+ obsData.setReportType(model.getReportType());
+ obsData = getGFSSiteData(dataList, obsData, view);
+ break;
}
+ case MODEL_ETA: {
+ obsData.setReportType(model.getReportType());
+ obsData = getETASiteData(dataList, obsData, view);
+ break;
+ }
+ }
+
+ obsData.setWmoHeader(wmoHeader.getWmoHeader());
+
+ if (soundingTemporalData != null) {
+
+ obsData.setTimeObs(soundingTemporalData.getObsTime());
+
+ obsData.setDataTime(soundingTemporalData.getDt());
+
+ view.setLong("validTime",
+ soundingTemporalData.getValidTime());
+
+ }
+
+ obsData.setPointDataView(view);
}
- } catch(Throwable t) {
+ } catch (Throwable t) {
logger.error("Error decoding BUFR data", t);
}
}
-
+
return obsData;
}
diff --git a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/ShefSeparator.java b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/ShefSeparator.java
index bb4903bba3..26d2834fe6 100644
--- a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/ShefSeparator.java
+++ b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/ShefSeparator.java
@@ -58,6 +58,8 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
* 12/xx/2010 jkorman Complete rewrite.
* 11/29/2012 lbousaidi fixed the decoding issue when the shef starts
* with :
+ * 6/27/2013 16225 wkwock Fixed trail with slash and space issue.
+ *
*
*
* @author bphillip
@@ -716,7 +718,8 @@ public class ShefSeparator extends AbstractRecordSeparator {
private static boolean findTrailingSlash(String data) {
boolean trailingSlash = false;
if ((data != null) && (data.length() > 0)) {
- trailingSlash = (data.charAt(data.length() - 1) == '/');
+ String trimData = data.trim();
+ trailingSlash = (trimData.charAt(trimData.length() - 1) == '/');
}
return trailingSlash;
}
diff --git a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/AlertalarmStdTextProductUtil.java b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/AlertalarmStdTextProductUtil.java
index bd86a944dd..76f3c23386 100644
--- a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/AlertalarmStdTextProductUtil.java
+++ b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/AlertalarmStdTextProductUtil.java
@@ -48,6 +48,7 @@ import com.raytheon.uf.edex.core.EDEXUtil;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* June 15, 2011 9377 jnjanga Initial creation
+ * July 12, 2013 15711 wkwock Fix verbose, observe mode, etc
*
*
*
@@ -101,6 +102,7 @@ public class AlertalarmStdTextProductUtil {
options.addOption(CmdlineOptionId.FILE_SUFFIX);
options.addOption(CmdlineOptionId.FLAGS);
options.addOption(CmdlineOptionId.PE);
+ options.addOption(CmdlineOptionId.VERBOSE,false);
return options;
}
@@ -142,7 +144,15 @@ public class AlertalarmStdTextProductUtil {
for (CmdlineOptionId optId : CmdlineOptionId.values()) {
String optName = optId.toString();
System.out.println("optName = " + optName);
- System.out.println(" optValue = " + line.getOptionValue(optName));
+ if (optName.equalsIgnoreCase("v")) {
+ if (line.hasOption(optName)) {
+ System.out.println(" optValue = true");
+ } else {
+ System.out.println(" optValue = false");
+ }
+ } else {
+ System.out.println(" optValue = " + line.getOptionValue(optName));
+ }
if (line.hasOption(optName)) {
@@ -191,7 +201,7 @@ public class AlertalarmStdTextProductUtil {
private static void printUsage() {
System.out.print("Usage: report_alarm -d -p ");
System.out.print("[-r] [-m] [-s] ");
- System.out.println("[-f] [-e]");
+ System.out.println("[-f] [-e] [-v]");
}
/*
@@ -208,7 +218,11 @@ public class AlertalarmStdTextProductUtil {
reportWriter = new ReportWriter(currReport, reportOptions, now);
reportWriter.writeHeader();
reportWriter.writeBody(aaRecord);
- reportWriter.writeTrailer();
+ if (reportOptions.getVerbose()) {
+ reportWriter.writeVerboseTrailer();
+ } else {
+ reportWriter.writeReportTrailer();
+ }
// save it to the text database if indeed
// there are alarm events to report.
diff --git a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/CmdlineOptionId.java b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/CmdlineOptionId.java
index 58ce3d1700..0f153a5d46 100644
--- a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/CmdlineOptionId.java
+++ b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/CmdlineOptionId.java
@@ -27,7 +27,7 @@ package com.raytheon.edex.plugin.shef.alarms;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* June 15, 2011 9377 jnjanga Initial creation
- *
+ * July 12, 2013 15711 wkwock Fix verbose, observe mode, etc
*
*
*
@@ -86,6 +86,12 @@ public enum CmdlineOptionId {
return "e";
}
+ },
+
+ VERBOSE("Verbose") {
+ public String toString() {
+ return "v";
+ }
};
CmdlineOptionId(String desc) {
diff --git a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportOptions.java b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportOptions.java
index 67b3d57a2a..5d9c454872 100644
--- a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportOptions.java
+++ b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportOptions.java
@@ -32,7 +32,8 @@ import com.raytheon.uf.common.dataplugin.shef.util.ShefConstants;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* June 15, 2011 9377 jnjanga Initial creation
- *
+ * July 12, 2013 15711 wkwock Fix verbose, observe mode, etc
+ *
*
*
* @author jnjanga
@@ -58,6 +59,8 @@ class ReportOptions {
private int minutes=0;
private boolean minGiven=false;
+
+ private boolean verboseFlag=false;
ReportOptions() {
}
@@ -177,6 +180,14 @@ class ReportOptions {
public void setMin_val_diff(float min_val_diff) {
this.min_val_diff = min_val_diff;
}
+
+ public boolean getVerbose () {
+ return verboseFlag ;
+ }
+
+ public void setVerbose (boolean verboseFlg) {
+ verboseFlag = verboseFlg;
+ }
public void addOption(CmdlineOption option) throws IllegalArgumentException {
String arg = (String) option.getArg();
@@ -202,6 +213,9 @@ class ReportOptions {
case FILE_SUFFIX:
setFileSuffix(arg);
break;
+ case VERBOSE:
+ setVerbose(true);
+ break;
default:
break;
}
diff --git a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportWriter.java b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportWriter.java
index 07bb787246..764590e7a1 100644
--- a/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportWriter.java
+++ b/edexOsgi/com.raytheon.edex.plugin.shef/src/com/raytheon/edex/plugin/shef/alarms/ReportWriter.java
@@ -62,7 +62,7 @@ import com.raytheon.uf.edex.database.dao.DaoConfig;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* June 15, 2011 9377 jnjanga Initial creation
- *
+ * July 12, 2013 15711 wkwock Fix verbose, observe mode, etc
*
*
*
@@ -215,10 +215,28 @@ class ReportWriter {
writeln("--------------------------------------------------------------------");
}
+ public void writeReportTrailer() {
+ /* if no alarms found, then write message */
+
+ if (alarmCount == 0) {
+ writeln("\nNO ALERT/ALARM DATA TO REPORT FOR GIVEN REQUEST.\n");
+ } else {
+ String reportMode=opt.getMode().toString();
+ if (reportMode.equals("")) {
+ writeln("\n"+alarmCount+" ALERT/ALARMS REPORTED.");
+ }else {
+ writeln("\n"+alarmCount+" ALERT/ALARMS REPORTED. ("+reportMode+" MODE)");
+ }
+ }
+
+ writeln ("\nEND OF REPORT");
+ writeToDisk();
+ }
+
/**
* Writes the report's trailer information.
*/
- public void writeTrailer() {
+ public void writeVerboseTrailer() {
if (alarmCount == 0) {
writeNewline();
@@ -226,55 +244,57 @@ class ReportWriter {
writeNewline();
writeNewline();
} else {
- writeNewline();
- writeln("ALERT/ALARMS REPORTED. " + alarmCount);
- writeln("-------------------------------------------------------------------");
+ String reportMode=opt.getMode().toString();
+ if (reportMode.equals("")) {
+ writeln("\n"+alarmCount+" ALERT/ALARMS REPORTED.");
+ }else {
+ writeln("\n"+alarmCount+" ALERT/ALARMS REPORTED. ("+reportMode+" MODE)");
+ }
+ writeln("\n-------------------------------------------------------------------");
writeln("Limits: shown above are the alert threshold/alarm threshold.");
writeln("Info grouped by location, physical element, type-source and check type.");
writeln("Upper, lower, diff and rate-of-change (roc) limits are shown for each group.");
writeln("Columns shown are: threat type > level, time, value [details].");
writeln("For forecast data, the time of the forecast is also given.");
- writeln("Threat types: roc =>value shown exceeded rate-of-change threshold");
+ writeln("Threat types: ");
+ writeln(" roc =>value shown exceeded rate-of-change threshold");
writeln(" lower<=value exceeded threshold");
- writeNewline();
writeln(" upper=>value exceeded threshold");
- writeNewline();
- writeln(" diff=>value exceeded threshold");
- writeNewline();
+ writeln(" diff=>value exceeded threshold\n");
}
// describe the report mode in somewhat verbose terms.
switch (opt.getMode()) {
case ALL:
- writeln("REPORT MODE: ALL");
+ writeln("REPORT MODE: ALL");
writeln("Listing all data.");
break;
case UNREPORTED:
- writeln("REPORT MODE: UNREPORTED");
+ writeln("REPORT MODE: UNREPORTED");
writeln("Listing all unreported records.");
break;
case RECENT:
- writeln("REPORT MODE: RECENT");
+ writeln("REPORT MODE: RECENT");
writeln("Listing observed and forecast records posted within the");
writeln("past " + opt.getMinutes() + " minutes");
break;
case NEAR_NOW:
- writeln("REPORT MODE: NEAR NOW");
+ writeln("REPORT MODE: NEAR NOW");
writeln("Listing observed value within the past "
+ opt.getMinutes());
writeln("and forecast value within the next " + opt.getMinutes()
+ " .");
break;
case NEAREST:
- writeln("REPORT MODE: NEAREST");
+ writeln("REPORT MODE: NEAREST");
writeln("Listing most recent observed value and earliest forecast value.");
break;
case LATEST_MAXFCST:
- writeln("REPORT MODE: LATEST_MAXFCST");
+ writeln("REPORT MODE: LATEST_MAXFCST");
writeln("Listing most recent observed value and maximum forecast value.");
break;
case FRESH:
- writeln("REPORT MODE: FRESH");
+ writeln("REPORT MODE: FRESH");
writeln("For observed data, listing all records that are later than "
+ opt.getMinutes());
writeln("minutes after the time of the most recent reported value. ");
@@ -283,7 +303,7 @@ class ReportWriter {
+ " minutes.");
break;
case NEW_OR_INCREASED:
- writeln("REPORT MODE: NEW_OR_INCREASED");
+ writeln("REPORT MODE: NEW_OR_INCREASED");
writeln("For observed data, listing unreported records if, the previous");
writeln("reported was later than " + opt.getMinutes()
+ " minutes ago OR if the report");
@@ -461,7 +481,7 @@ class ReportWriter {
alarmCount++;
}
}
-
+ }
if (grpTs0 == 'F' || grpTs0 == 'C') {
if (maxfcst != null
&& isNotNull(maxfcst.getActionTime().getTime())) {
@@ -475,8 +495,6 @@ class ReportWriter {
}
}
- }
-
break;
case NEW_OR_INCREASED:
@@ -731,11 +749,12 @@ class ReportWriter {
// make a description of the type portion of the type-source field
String typeInfo = null;
String ts = grpData.get(0).getId().getTs();
- if (ts.equals("C"))
+ String ts1StChr = ts.substring(0,1).toUpperCase();
+ if (ts1StChr.equals("C"))
typeInfo = "Contingengy";
- else if (ts.equals("F"))
+ else if (ts1StChr.equals("F"))
typeInfo = "Forecast";
- else if (ts.equals("P"))
+ else if (ts1StChr.equals("P"))
typeInfo = "Processed";
else
typeInfo = "Observed";
@@ -797,7 +816,9 @@ class ReportWriter {
else
lim.append("undef");
- writeln(lim.toString());
+ if (opt.getVerbose()){
+ writeln(lim.toString());
+ }
} else {
log.info("No data limits found in Database while writing alert/alarm group report!");
diff --git a/edexOsgi/com.raytheon.edex.plugin.text/src/com/raytheon/edex/plugin/text/TextDecoder.java b/edexOsgi/com.raytheon.edex.plugin.text/src/com/raytheon/edex/plugin/text/TextDecoder.java
index 2505945dec..c870667d8e 100644
--- a/edexOsgi/com.raytheon.edex.plugin.text/src/com/raytheon/edex/plugin/text/TextDecoder.java
+++ b/edexOsgi/com.raytheon.edex.plugin.text/src/com/raytheon/edex/plugin/text/TextDecoder.java
@@ -27,12 +27,12 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -77,6 +77,7 @@ import com.raytheon.uf.edex.wmo.message.WMOHeader;
* Aug 26, 2010 2187 cjeanbap Renamed operationalMode for
* consistency.
* Dec 13, 2010 5805 cjeanbap Parse Report to get AFOS Product Id
+ * Jul 16, 2013 DR 16323 D. Friedman Use concurrent map
*
*
* @author
@@ -110,7 +111,7 @@ public class TextDecoder extends AbstractDecoder {
// keeps track of the headers that have been logged as not mapped and the
// time it was logged, so that each one is only logged once a day
- private Map notMappedHeaders = new HashMap();
+ private Map notMappedHeaders = new ConcurrentHashMap();
private long msgHdrLogTime = 0;
diff --git a/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py b/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py
index 342ce0333b..e08ef12a8f 100644
--- a/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py
+++ b/edexOsgi/com.raytheon.edex.plugin.warning/WarningDecoder.py
@@ -33,6 +33,7 @@
# Initial creation
# Feb 19, 2013 1636 rferrel Use TimeTools to get file timestamp.
# May 07, 2013 1973 rferrel Adjust Issue and Purge times to be relative to start time.
+# Jun 24, 2013 DR 16317 D. Friedman If no storm line, parse storm motion from event text.
#
#
# @author rferrel
@@ -68,6 +69,16 @@ REGIONS = {
"WA":"WESTERN", "WI":"CENTRAL", "WV":"EASTERN",
"WY":"CENTRAL", "GM":"SOUTHERN" }
+BEARINGS = {
+ "NORTH": 0, "NORTHEAST": 45, "EAST": 90, "SOUTHEAST": 135,
+ "SOUTH": 180, "SOUTHWEST": 225, "WEST": 270, "NORTWEST": 315 }
+
+SPEED_CONVERSION = {
+ "MPH": 0.86898,
+ "KNOTS": 1,
+ "KTS": 1,
+ "KPH": 0.53996
+ }
class StdWarningDecoder():
@@ -744,8 +755,62 @@ usage: VTECDecoder -f productfilename -d -a activeTableName
storm = (int(search.group(1)), int(search.group(2)), buf)
break
count = count + 1
+ if storm is None:
+ storm = self._getStormFromEvent()
+
+ LogStream.logEvent('returning storm=%s' % repr(storm))
return storm
+ def _getStormFromEvent(self):
+ event_pattern = re.compile(r'^(?:\* )?AT (?:NOON|MIDNIGHT|\d+)(.*?)\n[ \r\t\f\v]*\n',
+ re.M | re.DOTALL)
+ m = event_pattern.search(self._rawMessage)
+ if m is None:
+ return None
+
+ event_text = m.group(1)
+
+ motion_pattern = re.compile(r'\bMOVING\s*(\w+)\s*AT\s*(\d+(?:\.\d*)?)\s*(\w+)')
+ m = motion_pattern.search(event_text)
+ if m is not None:
+ bearing = BEARINGS.get(m.group(1).upper())
+ if bearing is not None:
+ # Bearing is stored as the direction the storm is coming FROM
+ bearing -= 180
+ if bearing < 0:
+ bearing += 360
+ else:
+ LogStream.logProblem("could not parse bearing '%s' in '%s'" %
+ (m.group(1), m.group(0)))
+
+ conversion_factor = SPEED_CONVERSION.get(m.group(3))
+ converted_speed = None
+ if conversion_factor is not None:
+ try:
+ converted_speed = int(round(float(m.group(2)) * conversion_factor))
+ except StandardError, e:
+ LogStream.logProblem("error processing speed in '%s': %s" %
+ (m.group(0), e))
+ else:
+ LogStream.logProblem("unknown unit '%s' in '%s'" %
+ (m.group(3), m.group(0)))
+ else:
+ # find "STATIONARY in the last sentence
+ motion_pattern = re.compile(r'\bSTATIONARY\s*.\s*')
+ if motion_pattern.search(event_text) is not None:
+ bearing = converted_speed = 0
+ else:
+ bearing = converted_speed = None
+
+ # TODO: Storm location: This require parsing (potentially) multiple
+ # references to cities (or marine locations) with distance/bearing
+ # offsets. Need access to geospatial information to get the actual
+ # lat/lons.
+ if bearing is not None and converted_speed is not None:
+ return (bearing, converted_speed, None)
+ else:
+ return None
+
def _calcTime(self, yymmdd, hhmm, allZeroValue):
#Returns tuple of time, and allZeroFlag. Time is based on the
#two time strings. If all zeros, then return allZeroValue
diff --git a/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/ColorMapParameters.java b/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/ColorMapParameters.java
index 1f7ef46ae1..3889f5e143 100644
--- a/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/ColorMapParameters.java
+++ b/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/ColorMapParameters.java
@@ -35,6 +35,7 @@ import javax.xml.bind.annotation.XmlElement;
import com.raytheon.uf.common.colormap.AbstractColorMap;
import com.raytheon.uf.common.colormap.Color;
import com.raytheon.uf.common.colormap.IColorMap;
+import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences;
import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences.DataMappingEntry;
import com.raytheon.uf.common.serialization.ISerializableObject;
@@ -53,6 +54,7 @@ import com.raytheon.uf.common.serialization.ISerializableObject;
* Feb 14, 2013 1616 bsteffen Add option for interpolation of
* colormap parameters, disable colormap
* interpolation by default.
+ * Jun 14, 2013 DR 16070 jgerth Utilize data mapping
*
*
*
@@ -908,7 +910,18 @@ public class ColorMapParameters implements Cloneable, ISerializableObject {
if (colorMapRange != 0.0) {
double pixelValue;
- if (displayToImage != null) {
+ // START DR 16070 fix
+ if (this.dataMapping != null)
+ if (this.dataMapping.getEntries() != null)
+ if (this.dataMapping.getEntries().get(0) != null)
+ if (this.dataMapping.getEntries().get(0).getOperator() != null)
+ if (this.dataMapping.getEntries().get(0).getOperator().equals("i")) {
+ Double dValue = this.dataMapping.getDataValueforNumericValue(dispValue);
+ if (dValue != null)
+ return (dValue.floatValue() - colorMapMin) / colorMapRange;
+ }
+ // END fix
+ if (displayToImage != null) {
pixelValue = displayToImage.convert(dispValue);
} else {
pixelValue = dispValue;
diff --git a/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/DataMappingPreferences.java b/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/DataMappingPreferences.java
index 7b0c86c1fb..da3a217e7c 100644
--- a/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/DataMappingPreferences.java
+++ b/edexOsgi/com.raytheon.uf.common.colormap/src/com/raytheon/uf/common/colormap/prefs/DataMappingPreferences.java
@@ -37,7 +37,7 @@ import com.raytheon.uf.common.units.PiecewisePixel;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
- *
+ * 6/2013 DR 16070 jgerth Interpolation capability
*
*
*
@@ -47,6 +47,8 @@ import com.raytheon.uf.common.units.PiecewisePixel;
@XmlAccessorType(XmlAccessType.NONE)
public class DataMappingPreferences {
+ private String formatString;
+
@XmlAccessorType(XmlAccessType.NONE)
public static class DataMappingEntry implements
Comparable {
@@ -177,6 +179,7 @@ public class DataMappingPreferences {
private final ArrayList greaterThanEntries = new ArrayList();
private final ArrayList lessThanEntries = new ArrayList();
private final ArrayList equalsEntries = new ArrayList();
+ private final ArrayList interpEntries = new ArrayList();
private Unit> imageUnit;
@SuppressWarnings({ "unchecked", "rawtypes" })
@@ -248,10 +251,28 @@ public class DataMappingPreferences {
} else if ("<".equals(operator)) {
lessThanEntries.add(entry);
Collections.sort(lessThanEntries);
+ } else if ("i".equals(operator)) {
+ interpEntries.add(entry);
}
}
}
+ /**
+ * Matches a number against the pixelValue and displays value to the
+ * number of decimal places set in formatString
+ *
+ * DR 16070
+ *
+ * @param dataValue
+ * @param formatString
+ * @return
+ */
+ public String getLabelValueForDataValue(double dataValue,
+ String formatString) {
+ this.setFormatString(formatString);
+ return this.getLabelValueForDataValue(dataValue);
+ }
+
/**
* Matches a number against the pixelValue in each entry based on the
* operator until the first match is found.
@@ -281,7 +302,96 @@ public class DataMappingPreferences {
return entry.getLabel();
}
}
+ // START DR 16070 fix
+ Double interpValue = this.getNumericValueforDataValue(dataValue);
+ int ies = interpEntries.size();
+ for (int i = 1; i < ies; i++) {
+ Double pixelValue1 = interpEntries.get(i - 1).getPixelValue();
+ Double pixelValue2 = interpEntries.get(i).getPixelValue();
+ if ((dataValue >= pixelValue1) && (dataValue <= pixelValue2)) {
+ if (this.getFormatString() != null)
+ return String.format("%." + this.getFormatString() + "f%s",
+ interpValue, interpEntries.get(i).getLabel());
+ else
+ return String.format("%.1f%s", interpValue, interpEntries
+ .get(i).getLabel());
+ }
+ }
+ // END fix
return null;
}
+ /**
+ * Get numeric value for data value
+ *
+ * DR 16070
+ */
+ public Double getNumericValueforDataValue(double dataValue) {
+ Double interpValue;
+ int ies = interpEntries.size();
+ for (int i = 1; i < ies; i++) {
+ Double pixelValue1 = interpEntries.get(i - 1).getPixelValue();
+ Double pixelValue2 = interpEntries.get(i).getPixelValue();
+ Double displValue1 = interpEntries.get(i - 1).getDisplayValue();
+ Double displValue2 = interpEntries.get(i).getDisplayValue();
+ if ((dataValue >= pixelValue1) && (dataValue <= pixelValue2)) {
+ interpValue = displValue1 + (dataValue - pixelValue1)
+ / (pixelValue2 - pixelValue1)
+ * (displValue2 - displValue1);
+ return interpValue;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Get data value for numeric value
+ *
+ * DR 16070
+ */
+ public Double getDataValueforNumericValue(double numericValue) {
+ Double interpValue;
+ int ies = interpEntries.size();
+ for (int i = 1; i < ies; i++) {
+ Double pixelValue1 = interpEntries.get(i - 1).getPixelValue();
+ Double pixelValue2 = interpEntries.get(i).getPixelValue();
+ Double displValue1 = interpEntries.get(i - 1).getDisplayValue();
+ Double displValue2 = interpEntries.get(i).getDisplayValue();
+ if (displValue1 > displValue2) {
+ if ((numericValue <= displValue1) && (numericValue >= displValue2)) {
+ interpValue = pixelValue1 + (numericValue - displValue1)
+ / (displValue2 - displValue1)
+ * (pixelValue2 - pixelValue1);
+ return interpValue;
+ }
+ } else {
+ if ((numericValue >= displValue1) && (numericValue <= displValue2)) {
+ interpValue = pixelValue1 + (numericValue - displValue1)
+ / (displValue2 - displValue1)
+ * (pixelValue2 - pixelValue1);
+ return interpValue;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Set formatString
+ *
+ * DR 16070
+ */
+ public void setFormatString(String formatString) {
+ this.formatString = formatString;
+ }
+
+ /**
+ * Get formatString
+ *
+ * DR 16070
+ */
+ public String getFormatString() {
+ return formatString;
+ }
+
}
diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPBasinData.java b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPBasinData.java
index fa047dbc0d..56e46518d6 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPBasinData.java
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPBasinData.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -51,6 +52,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
* 01/27/13 1569 D. Hladky Added support for write of aggregate record cache
* 04/16/13 1912 bsteffen Initial bulk hdf5 access for ffmp
* 05/09/13 1919 mpduff Use parent pfaf instead of lookupId.
+ * 07/09/13 2152 njensen Ensure purgeData() does not load data
* Jul 15, 2013 2184 dhladky Remove all HUC's for storage except ALL
*
*
@@ -632,7 +634,28 @@ public class FFMPBasinData implements ISerializableObject {
* @param date
*/
public void purgeData(Date date) {
- for (FFMPBasin basin : getBasins().values()) {
+ // remove old tasks before calling getBasins() since that may
+ // cause them to run
+ if (!tasks.isEmpty()) {
+ synchronized (tasks) {
+ Iterator itr = tasks.iterator();
+ {
+ while (itr.hasNext()) {
+ LoadTask task = itr.next();
+ if (task instanceof LoadMapTask) {
+ LoadMapTask mtask = (LoadMapTask) task;
+ if (mtask.date.before(date)) {
+ itr.remove();
+ }
+ }
+ }
+ }
+ if (tasks.isEmpty()) {
+ orderedBasinsCache.clear();
+ }
+ }
+ }
+ for (FFMPBasin basin : basins.values()) {
basin.purgeData(date);
}
}
@@ -643,6 +666,7 @@ public class FFMPBasinData implements ISerializableObject {
* @param times
*/
public void populate(List times) {
+
long[] timesArr = new long[times.size()];
for (int i = 0; i < timesArr.length; i += 1) {
timesArr[i] = times.get(i);
diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPDataContainer.java b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPDataContainer.java
index e357c04e04..2aa7ed477e 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPDataContainer.java
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPDataContainer.java
@@ -45,6 +45,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
* 09/27/12 DR 15471 G.Zhang Fixed ConcurrentModificationException
* 01/27/13 1478 D. Hladky Re-worked to help with memory size and NAS read write stress
* Apr 16, 2013 1912 bsteffen Initial bulk hdf5 access for ffmp
+ * 07/03/13 2131 D. Hladky Fixed null pointers thrown by new container creation.
* Jul 15, 2013 2184 dhladky Remove all HUC's for storage except ALL
*
*
@@ -102,9 +103,11 @@ public class FFMPDataContainer {
this.sourceName = sourceName;
FFMPBasinData basinData = record.getBasins();
+ if (basinData != null) {
basinData.populate(record.getTimes());
basins = basinData;
+ }
}
/**
@@ -124,11 +127,11 @@ public class FFMPDataContainer {
FFMPBasinData currBasinData = getBasinData();
- synchronized (currBasinData) {
-
- if (currBasinData == null) {
+ if (currBasinData == null) {
setBasinData(newBasinData);
- } else {
+ } else {
+
+ synchronized (currBasinData) {
for (Long key : newBasinData.getBasins().keySet()) {
@@ -158,7 +161,6 @@ public class FFMPDataContainer {
val);
}
- // currBasinData.put(key, basin);
syncPut(currBasinData, key, basin);
} else {
diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPTemplates.java b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPTemplates.java
index f67ae97e9e..5958234bfc 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPTemplates.java
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/FFMPTemplates.java
@@ -88,6 +88,7 @@ import com.vividsolutions.jts.io.WKBReader;
* 03/18/13 1817 D. Hladky Fixed issue with BOX where only 1 HUC was showing up.
* 04/15/13 1902 M. Duff Generic List
* 06/10/13 2085 njensen Use countyMap for efficiency
+ * 07/01/13 2155 dhladky Fixed duplicate pfafs that were in domainList arrays from overlapping domains.
* 07/15/13 2184 dhladky Remove all HUC's for storage except ALL
*
*
@@ -661,8 +662,15 @@ public class FFMPTemplates {
for (DomainXML domain : domainList) {
ArrayList pfafList = getAggregatePfafsByDomain(pfaf, dataKey,
domain.getCwa(), huc);
+ // Sometimes the domains have overlaps in basins.
+ // You can't blindly add the domain list to the main list.
+ // You have to check if it already exists in the list.
if (pfafList != null) {
- list.addAll(pfafList);
+ for (Long lpfaf : pfafList) {
+ if (!list.contains(lpfaf)) {
+ list.add(lpfaf);
+ }
+ }
}
}
return list;
@@ -680,8 +688,15 @@ public class FFMPTemplates {
for (DomainXML domain : domains) {
ArrayList domainList = getAggregatePfafsByDomain(pfaf,
dataKey, domain.getCwa(), huc);
+ // Sometimes the domains have overlaps in basins.
+ // You can't blindly add the domain list to the main list.
+ // You have to check if it already exists in the list.
if (domainList != null) {
- list.addAll(domainList);
+ for (Long lpfaf : domainList) {
+ if (!list.contains(lpfaf)) {
+ list.add(lpfaf);
+ }
+ }
}
}
return list;
@@ -706,8 +721,15 @@ public class FFMPTemplates {
for (DomainXML domain : domains) {
ArrayList domainList = getAggregatePfafsByDomain(
pfaf, product.getProductKey(), domain.getCwa(), huc);
+ // Sometimes the domains have overlaps in basins.
+ // You can't blindly add the domain list to the main list.
+ // You have to check if it already exists in the list.
if (domainList != null) {
- domainSet.addAll(domainList);
+ for (Long lpfaf : domainList) {
+ if (!list.contains(lpfaf)) {
+ list.add(lpfaf);
+ }
+ }
}
}
}
@@ -1311,23 +1333,25 @@ public class FFMPTemplates {
return map;
}
-
+
/**
* Find the list of pfafs for this HUC level
+ *
* @param siteKey
* @param huc
* @param domains
* @return
*/
- public synchronized List getHucKeyList(String siteKey, String huc, List domains) {
+ public synchronized List getHucKeyList(String siteKey, String huc,
+ List domains) {
Set keys = new HashSet();
- for (DomainXML domain: domains) {
+ for (DomainXML domain : domains) {
LinkedHashMap map = getMap(siteKey, domain.getCwa(), huc);
keys.addAll(map.keySet());
}
-
+
return new ArrayList(keys);
}
@@ -1681,20 +1705,17 @@ public class FFMPTemplates {
if (isCountyRow(huc, rowName)) {
return getVgbLookupIdsByCounty(dataKey, pfaf, huc, rowName);
}
+
HashMap>> virtualMap = virtualGageBasinsInParentPfaf
.get(dataKey);
ArrayList result = new ArrayList();
for (DomainXML domain : domains) {
-
HashMap> map = virtualMap
.get(domain.getCwa());
if (map != null) {
-
ArrayList list = map.get(pfaf);
-
if (list != null && !list.isEmpty()) {
-
for (FFMPVirtualGageBasinMetaData md : list) {
if (!result.contains(md.getLookupId())) {
result.add(md.getLookupId());
@@ -1705,7 +1726,6 @@ public class FFMPTemplates {
}
return result;
-
}
/**
@@ -2449,9 +2469,8 @@ public class FFMPTemplates {
.get(dataKey);
ArrayList result = new ArrayList();
-
- for (DomainXML domain : domains) {
+ for (DomainXML domain : domains) {
HashMap> map = virtualMap
.get(domain.getCwa());
if (map != null) {
@@ -2468,7 +2487,7 @@ public class FFMPTemplates {
}
}
}
-
+
return result;
}
diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/HucLevelGeometriesFactory.java b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/HucLevelGeometriesFactory.java
index d89a189ea7..f55c00dcd3 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/HucLevelGeometriesFactory.java
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.ffmp/src/com/raytheon/uf/common/dataplugin/ffmp/HucLevelGeometriesFactory.java
@@ -20,6 +20,9 @@
package com.raytheon.uf.common.dataplugin.ffmp;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.Collection;
@@ -29,6 +32,7 @@ import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.zip.GZIPInputStream;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext;
@@ -61,10 +65,11 @@ import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier;
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
- * Dec 9, 2010 rjpeter Initial creation
+ * Dec 9, 2010 rjpeter Initial creation
* Apr 25, 2013 1954 bsteffen Decompress ffmp geometries to save time
* loading them.
* Apr 25, 2013 1954 bsteffen Undo last commit to avoid invalid geoms.
+ * Jul 03, 2013 2152 rjpeter Use streams for serialization
*
*
*
@@ -84,15 +89,15 @@ public class HucLevelGeometriesFactory {
private static final String hucGeomBasePath = "ffmp" + File.separator
+ "aggrGeom";
- private IPathManager pathManager;
+ private final IPathManager pathManager;
public static HucLevelGeometriesFactory getInstance() {
return instance;
}
- private ConcurrentMap