Merge branch 'omaha_16.2.1' into field_16.2.1

Change-Id: Ic499fe14405db74db73740a60613d433260c88e6

Former-commit-id: 6438345d95267bdfc06788899bad16b28f6b54c6
This commit is contained in:
Ana Rivera 2015-09-24 15:57:14 +00:00
commit 465c40d290
86 changed files with 2760 additions and 969 deletions

View file

@ -89,6 +89,10 @@
<available file="${basedir}/../build.edex/lib/ant/ant-contrib-1.0b3.jar" />
</condition>
<condition property="edexsrc.dir" value="${basedir}/.." else="${basedir}/../../edexOsgi" >
<available file="${basedir}/../com.raytheon.edex.plugin.radar/utility/common_static/base/radar/elevationLists.txt" />
</condition>
<!-- Only check for directories on development workstation-->
<if>
<equals arg1="${top.dir}" arg2="${basedir}/../../.." />
@ -125,8 +129,6 @@
</if>
<property name="edexsrc.dir" value="${basedir}/../../edexOsgi"/>
<!-- Set default EDEX install location for copy filter -->
<property name="def.edex.install.dir" value="/awips" />
<condition property="edex.home" value="$EdexBaseDir" else="${def.edex.install.dir}">
@ -259,6 +261,14 @@
<exclude name="**/config.xml"/>
</fileset>
</copy>
<copy todir="${deploy.dir}/data/config/drop-ins" verbose="false">
<filterset refid="installer.filter.set" />
<fileset dir="${edexsrc.dir}/com.raytheon.edex.plugin.radar/utility/common_static/base/radar">
<include name="elevationLists.txt"/>
<include name="tdwrElevations.txt"/>
<include name="ssssElevationLists.txt"/>
</fileset>
</copy>
<!-- this is required because config.xml contains an '@' in a url -->
<copy todir="${deploy.dir}" verbose="false">
<filterset refid="config.xml.filter.set"/>

View file

@ -34,9 +34,19 @@ import com.raytheon.rcm.request.RpsList;
* types to WMO headings.
*
* <p>
* TODO: Make observable.
*
* Constructs (and potentially updates) a StandardConfig based on
* various configuration files.
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* ...
* 2015-09-08 DR 17944 D. Friedman Add RcmResourceProvider
* </pre>
*/
public interface Configuration {
public Collection<String> getConfiguredRadarList();
public RadarConfig getConfigForRadar(String radarID);
@ -86,4 +96,6 @@ public interface Configuration {
public InputStream getDropInData(String name) throws IOException;
public void setLocalRpsList(String radarID, RpsList list) throws IOException;
public RcmResourceProvider getRcmResourceProvider();
}

View file

@ -0,0 +1,78 @@
package com.raytheon.rcm.config;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* This provides a resource to access configuration files that may exist
* locally (when running in RadarServer) or in Localization (when running
* in CAVE.
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2015-09-08 DR 17944 D. Friedman Initial creation
* </pre>
*/
public abstract class RcmResourceProvider {
private static RcmResourceProvider instance;
private Map<String, List<Runnable>> resourceChangeListeners;
public abstract InputStream getResourceAsStream(String resource)/* throws IOException*/;
public void addResourceChangeListener(String resource, Runnable callback) {
synchronized (this) {
if (resourceChangeListeners == null) {
resourceChangeListeners = new HashMap<String, List<Runnable>>();
}
List<Runnable> list = resourceChangeListeners.get(resource);
if (list == null) {
list = new ArrayList<Runnable>();
resourceChangeListeners.put(resource, list);
}
list.add(callback);
}
}
public void removeResourceChangeListener(String resource, Runnable callback) {
synchronized (this) {
if (resourceChangeListeners != null) {
List<Runnable> list = resourceChangeListeners.get(resource);
if (list != null) {
list.remove(callback);
}
}
}
}
protected void notifyResourceChanged(String resource) {
ArrayList<Runnable> runnables = null;
synchronized (this) {
if (resourceChangeListeners != null) {
List<Runnable> list = resourceChangeListeners.get(resource);
if (list != null) {
runnables = new ArrayList<Runnable>(list);
}
}
}
if (runnables != null) {
for (Runnable r : runnables) {
r.run();
}
}
}
public static void setInstance(RcmResourceProvider instance) {
RcmResourceProvider.instance = instance;
}
public static RcmResourceProvider getInstance() {
return instance;
}
}

View file

@ -38,6 +38,7 @@ import com.raytheon.rcm.config.RadarConfig;
* ...
* 2014-02-03 DR 14762 D. Friedman Add Category enum
* 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates.
* 2015-09-08 DR 17944 D. Friedman Handle elevation list file updates.
* </pre>
*
*/
@ -45,7 +46,8 @@ import com.raytheon.rcm.config.RadarConfig;
@XmlAccessorType(XmlAccessType.FIELD)
public class ConfigEvent {
public static enum Category {
GLOBAL_CONFIG, RADAR_CONFIG, PROD_DISTRIBUTION, NATIONAL_RPS_LISTS, CRON_OTRS
GLOBAL_CONFIG, RADAR_CONFIG, PROD_DISTRIBUTION, NATIONAL_RPS_LISTS,
CRON_OTRS, ELEVATION_LISTS
}
private String radarID; // null indicates global configuration change.

View file

@ -25,8 +25,11 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import com.raytheon.rcm.config.RcmResourceProvider;
/**
* TODO Add Description
*
@ -46,14 +49,38 @@ import java.util.Scanner;
public class ElevationInfo {
// TODO: check all handling of -1/null vcp
private static ElevationInfo instance;
public static ElevationInfo getInstance() {
synchronized (ElevationInfo.class) {
if (instance == null)
instance = new ElevationInfo();
}
return instance;
}
public static final List<String> ELEVATION_LIST_RESOURCE_NAMES = Arrays.asList(
"elevationLists.txt", "tdwrElevations.txt",
"ssssElevationLists.txt");
private static volatile ElevationInfo instance;
private static volatile Runnable invalidateInstance;
public static ElevationInfo getInstance() {
ElevationInfo result = instance;
if (result == null) {
synchronized (ElevationInfo.class) {
result = instance;
if (result == null) {
if (invalidateInstance == null) {
invalidateInstance = new Runnable() {
@Override
public void run() {
synchronized (ElevationInfo.class) {
instance = null;
}
}
};
RcmResourceProvider provider = RcmResourceProvider.getInstance();
for (String resource : ELEVATION_LIST_RESOURCE_NAMES) {
provider.addResourceChangeListener(resource, invalidateInstance);
}
}
instance = result = new ElevationInfo();
}
}
}
return result;
}
/* want to be private, but needed by Loader */
static class Sel {
@ -97,7 +124,7 @@ public class ElevationInfo {
Scanner fs;
InputStream s;
s = ElevationInfo.class.getResourceAsStream("elevationLists.txt");
s = RcmResourceProvider.getInstance().getResourceAsStream("elevationLists.txt");
fs = new Scanner(s);
try {
Loader.loadElevationInfo(fs, staticInfo, vcpInfo);
@ -106,7 +133,7 @@ public class ElevationInfo {
}
// Load SSSS radar elevation lists
s = ElevationInfo.class.getResourceAsStream("ssssElevationLists.txt");
s = RcmResourceProvider.getInstance().getResourceAsStream("ssssElevationLists.txt");
fs = new Scanner(s);
try {
Loader.loadSsssElevationInfo(fs, staticInfo);
@ -114,7 +141,7 @@ public class ElevationInfo {
fs.close();
}
s = ElevationInfo.class.getResourceAsStream("tdwrElevations.txt");
s = RcmResourceProvider.getInstance().getResourceAsStream("tdwrElevations.txt");
fs = new Scanner(s);
try {
Loader.loadTdwrElevationInfo(fs, staticInfo);

View file

@ -160,4 +160,3 @@
196| 0 | 0 | 0.0 | 50 | MBA | Microburst AMDA (MBA) | Generic | | | | | | | | | |28 | |
500| 8 | 0 | 0.463| 463 | Z | Reflectivity (Z) | Radial | | | | | | | | | |64 | |
550| 8 | 0 | 0.926| 111 | Z | Reflectivity (Z) | Radial | | | | | | | | | |64 | |
>>>>>>> master_15.1.1

View file

@ -1,103 +0,0 @@
# tdwrElevations.txt
#
# Contains the elevation cuts for every TDWR radar for both Hazard and Monitor
# modes. The columns are separated by tabs. Some elevation cuts are repeated.
# This duplication will be handled by the scripting that processes this file.
#
# Please note that each comment line must begin with a # and each blank line
# can begin with a # / or tab. If the line begins with CR then it will be
# treated as a null line and the script that processes this file,
# readTdwrs.csh, will assume the end of file has been reached and will ignore
# the rest of the file.
#
#ID WFO ID Mode Sc1 Sc2 Sc3 Sc4 Sc5 Sc6 Sc7 Sc8 Sc9 Sc10 Sc11 Sc12 Sc13 Sc14 Sc15 Sc16 Sc17 Sc18 Sc19 Sc20 Sc21 Sc22 Sc23
ADW LWX HAZ 0.6 0.3 0.3 1.0 2.7 5.6 0.3 8.5 13.5 19.5 0.3 28.3 42.5 2.7 0.3 5.6 8.5 13.5 0.3 19.5 28.3 42.5 0.3
ADW LWX MON 0.6 0.3 0.3 1.0 2.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
ATL FFC HAZ 0.6 0.3 0.3 1.0 2.4 4.9 0.3 7.4 11.5 15.9 0.3 22.1 31.1 2.4 0.3 4.9 7.4 11.5 0.3 15.9 22.1 31.1 0.3
ATL FFC MON 0.6 0.3 0.3 1.0 2.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
BNA OHX HAZ 0.6 0.4 0.4 1.0 2.2 4.7 0.4 7.1 10.7 14.4 0.4 19.5 26.5 2.2 0.4 4.7 7.1 10.7 0.4 14.4 19.5 26.5 0.4
BNA OHX MON 0.6 0.4 0.4 1.0 2.2 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
BOS BOX HAZ 0.6 0.3 0.3 1.0 1.6 3.5 0.3 5.4 8.0 10.9 0.3 14.8 20.1 1.6 0.3 3.5 5.4 8.0 0.3 10.9 14.8 20.1 0.3
BOS BOX MON 0.6 0.3 0.3 1.0 1.6 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
BWI LWX HAZ 0.6 0.5 0.5 1.0 3.3 6.6 0.5 10.0 13.4 19.4 0.5 28.1 42.0 3.3 0.5 6.6 10.0 13.4 0.5 19.4 28.1 42.0 0.5
BWI LWX MON 0.6 0.5 0.5 1.0 3.3 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
CLT GSP HAZ 0.6 0.2 0.2 1.0 2.4 5.0 0.2 7.7 11.5 15.6 0.2 21.2 29.1 2.4 0.2 5.0 7.7 11.5 0.2 15.6 21.2 29.1 0.2
CLT GSP MON 0.6 0.2 0.2 1.0 2.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
CMH ILN HAZ 0.6 0.1 0.1 1.0 2.2 4.8 0.1 7.4 11.4 15.6 0.1 21.5 29.8 2.2 0.1 4.8 7.4 11.4 0.1 15.6 21.5 29.8 0.1
CMH ILN MON 0.6 0.1 0.1 1.0 2.2 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
CVG ILN HAZ 0.6 0.1 0.1 1.0 2.1 4.4 0.1 6.6 10.2 13.9 0.1 19.0 26.1 2.1 0.1 4.4 6.6 10.2 0.1 13.9 19.0 26.1 0.1
CVG ILN MON 0.6 0.1 0.1 1.0 2.1 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
DAL FWD HAZ 0.6 0.5 0.5 1.0 3.1 6.3 0.5 9.5 13.5 18.1 0.5 24.6 33.7 3.1 0.5 6.3 9.5 13.5 0.5 18.1 24.6 33.7 0.5
DAL FWD MON 0.6 0.5 0.5 1.0 3.1 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
DAY ILN HAZ 0.6 0.3 0.3 1.0 2.4 4.9 0.3 7.4 10.8 14.5 0.3 19.4 26.1 2.4 0.3 4.9 7.4 10.8 0.3 14.5 19.4 26.1 0.3
DAY ILN MON 0.6 0.3 0.3 1.0 2.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
DCA LWX HAZ 0.6 0.3 0.3 1.0 2.6 5.7 0.3 8.7 11.7 17.2 0.3 25.1 37.7 2.6 0.3 5.7 8.7 11.7 0.3 17.2 25.1 37.7 0.3
DCA LWX MON 0.6 0.3 0.3 1.0 2.6 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
DEN BOU HAZ 0.6 0.3 0.3 1.0 2.5 5.2 0.3 8.0 10.8 13.9 0.3 18.2 24.0 2.5 0.3 5.2 8.0 10.8 0.3 13.9 18.2 24.0 0.3
DEN BOU MON 0.6 0.3 0.3 1.0 2.5 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
DFW FWD HAZ 0.6 0.4 0.4 1.0 1.8 3.8 0.4 5.7 7.7 10.7 0.4 14.7 20.1 1.8 0.4 3.8 5.7 7.7 0.4 10.7 14.7 20.1 0.4
DFW FWD MON 0.6 0.4 0.4 1.0 1.8 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
DTW DTX HAZ 0.6 0.1 0.1 1.0 2.1 4.4 0.1 6.7 10.0 13.7 0.1 18.9 26.1 2.1 0.1 4.4 6.7 10.0 0.1 13.7 18.9 26.1 0.1
DTW DTX MON 0.6 0.1 0.1 1.0 2.1 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
EWR OKX HAZ 0.6 0.3 0.3 1.0 2.7 5.6 0.3 8.4 12.9 17.8 0.3 24.6 34.6 2.7 0.3 5.6 8.4 12.9 0.3 17.8 24.6 34.6 0.3
EWR OKX MON 0.6 0.3 0.3 1.0 2.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
FLL MFL HAZ 0.6 0.3 0.3 1.0 1.9 4.0 0.3 6.1 8.3 11.3 0.3 15.1 20.1 1.9 0.3 4.0 6.1 8.3 0.3 11.3 15.1 20.1 0.3
FLL MFL MON 0.6 0.3 0.3 1.0 1.9 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
HOU HGX HAZ 0.6 0.2 0.2 1.0 2.6 5.3 0.2 8.0 11.9 15.8 0.2 21.1 28.4 2.6 0.2 5.3 8.0 11.9 0.2 15.8 21.1 28.4 0.2
HOU HGX MON 0.6 0.2 0.2 1.0 2.6 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
IAD LWX HAZ 0.6 0.3 0.3 1.0 2.1 4.4 0.3 6.7 10.3 14.1 0.3 19.4 26.9 2.1 0.3 4.4 6.7 10.3 0.3 14.1 19.4 26.9 0.3
IAD LWX MON 0.6 0.3 0.3 1.0 2.1 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
IAH HGX HAZ 0.6 0.1 0.1 1.0 1.6 3.3 0.1 5.1 7.8 10.7 0.1 14.6 20.1 1.6 0.1 3.3 5.1 7.8 0.1 10.7 14.6 20.1 0.1
IAH HGX MON 0.6 0.1 0.1 1.0 1.6 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
ICH ICT HAZ 0.6 0.2 0.2 1.0 2.4 4.9 0.2 7.4 11.1 14.8 0.2 19.8 26.7 2.4 0.2 4.9 7.4 11.1 0.2 14.8 19.8 26.7 0.2
ICH ICT MON 0.6 0.2 0.2 1.0 2.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
IDS IND HAZ 0.6 0.3 0.3 1.0 2.5 5.1 0.3 7.8 12.1 17.2 0.3 24.5 35.7 2.5 0.3 5.1 7.8 12.1 0.3 17.2 24.5 35.7 0.3
IDS IND MON 0.6 0.3 0.3 1.0 2.5 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
JFK OKX HAZ 0.6 0.5 0.5 1.0 2.8 5.7 0.5 8.7 11.6 17.7 0.5 27.3 44.0 2.8 0.5 5.7 8.7 11.6 0.5 17.7 27.3 44.0 0.5
JFK OKX MON 0.6 0.5 0.5 1.0 2.8 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
LAS VEF HAZ 0.6 0.8 0.8 1.0 3.4 6.9 0.8 10.4 13.9 17.6 0.8 22.8 29.8 3.4 0.8 6.9 10.4 13.9 0.8 17.6 22.8 29.8 0.8
LAS VEF MON 0.6 0.8 0.8 1.0 3.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
LVE CLE HAZ 0.6 0.2 0.2 1.0 2.1 4.3 0.2 6.6 9.7 12.8 0.2 17.0 22.6 2.1 0.2 4.3 6.6 9.7 0.2 12.8 17.0 22.6 0.2
LVE CLE MON 0.6 0.2 0.2 1.0 2.1 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MCI EAX HAZ 0.6 0.3 0.3 1.0 1.8 3.7 0.3 5.6 8.4 11.2 0.3 15.0 20.1 1.8 0.3 3.7 5.6 8.4 0.3 11.2 15.0 20.1 0.3
MCI EAX MON 0.6 0.3 0.3 1.0 1.8 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MCO MLB HAZ 0.6 0.3 0.3 1.0 3.3 6.6 0.3 10.0 13.4 16.8 0.3 29.9 60.0 3.3 0.3 6.6 10.0 13.4 0.3 16.8 29.9 60.0 0.3
MCO MLB MON 0.6 0.3 0.3 1.0 3.3 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MDW LOT HAZ 0.6 0.3 0.3 1.0 2.6 5.3 0.3 8.1 10.9 13.8 0.3 17.8 23.3 2.6 0.3 5.3 8.1 10.9 0.3 13.8 17.8 23.3 0.3
MDW LOT MON 0.6 0.3 0.3 1.0 2.6 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MEM MEG HAZ 0.6 0.3 0.3 1.0 2.3 4.7 0.3 7.2 10.9 14.7 0.3 19.8 27.0 2.3 0.3 4.7 7.2 10.9 0.3 14.7 19.8 27.0 0.3
MEM MEG MON 0.6 0.3 0.3 1.0 2.3 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MIA MFL HAZ 0.6 0.2 0.2 1.0 1.9 3.9 0.2 5.9 8.8 11.8 0.2 15.8 21.2 1.9 0.2 3.9 5.9 8.8 0.2 11.8 15.8 21.2 0.2
MIA MFL MON 0.6 0.2 0.2 1.0 1.9 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MKE MKX HAZ 0.6 0.3 0.3 1.0 2.0 4.3 0.3 6.5 8.8 12.1 0.3 16.0 21.3 2.0 0.3 4.3 6.5 8.8 0.3 12.1 16.0 21.3 0.3
MKE MKX MON 0.6 0.3 0.3 1.0 2.0 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MSP MPX HAZ 0.6 0.3 0.3 1.0 1.7 3.7 0.3 5.6 8.4 11.3 0.3 15.0 20.1 1.7 0.3 3.7 5.6 8.4 0.3 11.3 15.0 20.1 0.3
MSP MPX MON 0.6 0.3 0.3 1.0 1.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
MSY LIX HAZ 0.6 0.3 0.3 1.0 2.7 5.5 0.3 8.3 11.1 16.4 0.3 24.7 38.3 2.7 0.3 5.5 8.3 11.1 0.3 16.4 24.7 38.3 0.3
MSY LIX MON 0.6 0.3 0.3 1.0 2.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
OKC OUN HAZ 0.6 0.5 0.5 1.0 2.5 5.1 0.5 7.7 11.3 15.3 0.5 20.7 28.2 2.5 0.5 5.1 7.7 11.3 0.5 15.3 20.7 28.2 0.5
OKC OUN MON 0.6 0.5 0.5 1.0 2.5 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
ORD LOT HAZ 0.6 0.3 0.3 1.0 1.9 3.9 0.3 5.9 8.7 11.5 0.3 15.2 20.1 1.9 0.3 3.9 5.9 8.7 0.3 11.5 15.2 20.1 0.3
ORD LOT MON 0.6 0.3 0.3 1.0 1.9 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
PBI MFL HAZ 0.6 0.1 0.1 1.0 2.1 4.5 0.1 6.8 9.1 12.7 0.1 17.4 23.8 2.1 0.1 4.5 6.8 9.1 0.1 12.7 17.4 23.8 0.1
PBI MFL MON 0.6 0.1 0.1 1.0 2.1 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
PHL PHI HAZ 0.6 0.4 0.4 1.0 2.0 4.3 0.4 6.5 8.7 12.7 0.4 18.3 26.8 2.0 0.4 4.3 6.5 8.7 0.4 12.7 18.3 26.8 0.4
PHL PHI MON 0.6 0.4 0.4 1.0 2.0 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
PHX PSR HAZ 0.6 0.6 0.6 1.0 3.7 7.4 0.6 11.2 15.0 19.3 0.6 25.7 34.7 3.7 0.6 7.4 11.2 15.0 0.6 19.3 25.7 34.7 0.6
PHX PSR MON 0.6 0.6 0.6 1.0 3.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
PIT PBZ HAZ 0.6 0.3 0.3 1.0 1.8 3.7 0.3 5.7 8.6 11.4 0.3 15.3 20.6 1.8 0.3 3.7 5.7 8.6 0.3 11.4 15.3 20.6 0.3
PIT PBZ MON 0.6 0.3 0.3 1.0 1.8 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
RDU RAH HAZ 0.6 0.3 0.3 1.0 2.3 4.8 0.3 7.2 10.9 14.8 0.3 20.3 27.9 2.3 0.3 4.8 7.2 10.9 0.3 14.8 20.3 27.9 0.3
RDU RAH MON 0.6 0.3 0.3 1.0 2.3 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
SDF LMK HAZ 0.6 0.3 0.3 1.0 2.0 4.3 0.3 6.6 9.8 13.0 0.3 17.4 23.3 2.0 0.3 4.3 6.6 9.8 0.3 13.0 17.4 23.3 0.3
SDF LMK MON 0.6 0.3 0.3 1.0 2.0 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
SJU SJU HAZ 0.6 0.3 0.3 1.0 2.0 4.2 0.3 6.4 8.6 11.7 0.3 15.6 20.9 2.0 0.3 4.2 6.4 8.6 0.3 11.7 15.6 20.9 0.3
SJU SJU MON 0.6 0.3 0.3 1.0 2.0 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
SLC SLC HAZ 0.6 0.5 0.5 1.0 2.4 5.0 0.5 7.6 10.2 12.8 0.5 16.3 20.7 2.4 0.5 5.0 7.6 10.2 0.5 12.8 16.3 20.7 0.5
SLC SLC MON 0.6 0.5 0.5 1.0 2.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
STL LSX HAZ 0.6 0.3 0.3 1.0 2.7 5.5 0.3 8.3 13.5 19.9 0.3 29.6 46.0 2.7 0.3 5.5 8.3 13.5 0.3 19.9 29.6 46.0 0.3
STL LSX MON 0.6 0.3 0.3 1.0 2.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
TPA TBW HAZ 0.6 0.3 0.3 1.0 2.7 5.5 0.3 8.3 13.1 18.9 0.3 27.6 41.5 2.7 0.3 5.5 8.3 13.1 0.3 18.9 27.6 41.5 0.3
TPA TBW MON 0.6 0.3 0.3 1.0 2.7 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0
TUL TSA HAZ 0.6 0.3 0.3 1.0 2.4 4.9 0.3 7.5 11.4 15.2 0.3 20.4 27.7 2.4 0.3 4.9 7.5 11.4 0.3 15.2 20.4 27.7 0.3
TUL TSA MON 0.6 0.3 0.3 1.0 2.4 6.1 11.0 15.9 20.8 25.7 30.6 35.5 40.4 45.3 50.2 55.1 60.0

View file

@ -31,6 +31,7 @@ import com.raytheon.rcm.config.EndpointConfig;
import com.raytheon.rcm.config.ProductDistInfoDB;
import com.raytheon.rcm.config.ProductDistributionInfo;
import com.raytheon.rcm.config.RadarConfig;
import com.raytheon.rcm.config.RcmResourceProvider;
import com.raytheon.rcm.message.GraphicProduct.PDB;
import com.raytheon.rcm.request.RpsList;
import com.raytheon.rcm.server.Log;
@ -216,4 +217,17 @@ public class Awips1Config implements Configuration {
throw new IOException(new UnsupportedOperationException(msg));
}
private RcmResourceProvider rcmResourceProvider = new RcmResourceProvider() {
@Override
public InputStream getResourceAsStream(String resource) {
try {
return getDropInData(resource);
} catch (IOException e) {
Log.errorf("Could not open resource/NDM file %s: %s", resource, e);
return null;
}
}
};
public RcmResourceProvider getRcmResourceProvider() { return rcmResourceProvider; }
}

View file

@ -38,6 +38,7 @@ import com.raytheon.rcm.config.MutableConfiguration;
import com.raytheon.rcm.config.ProductDistributionInfo;
import com.raytheon.rcm.config.RadarConfig;
import com.raytheon.rcm.config.RadarType;
import com.raytheon.rcm.config.RcmResourceProvider;
import com.raytheon.rcm.config.RcmUtil;
import com.raytheon.rcm.config.StandardProductDistInfoDB;
import com.raytheon.rcm.config.awips1.Awips1RpsListUtil;
@ -65,6 +66,7 @@ import com.raytheon.uf.common.serialization.SerializationException;
* 2014-02-03 DR 14762 D. Friedman Handle updated NDM config files.
* Send configuration events.
* 2015-06-10 4498 nabowle Switch to JAXBManager. Rename Util->RcmUtil.
* 2015-09-08 DR 17944 D. Friedman Handle elevation list file updates.
* </pre>
*
*/
@ -508,4 +510,26 @@ public class StandardConfig implements Configuration, MutableConfiguration {
this.configurationEventTarget = configurationEventTarget;
}
private class StandardRcmResourceProvider extends RcmResourceProvider {
@Override
public InputStream getResourceAsStream(String resource) {
try {
return getDropInData(resource);
} catch (IOException e) {
Log.errorf("Could not open resource/NDM file %s: %s", resource, e);
return null;
}
}
protected void notifyResourceChanged(String resource) {
super.notifyResourceChanged(resource);
}
};
StandardRcmResourceProvider rcmResourceProvider = new StandardRcmResourceProvider();
public RcmResourceProvider getRcmResourceProvider() { return rcmResourceProvider; }
/*package*/ void notifyResourceChanged(String name) {
rcmResourceProvider.notifyResourceChanged(name);
}
}

View file

@ -23,7 +23,9 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Scanner;
import java.util.regex.Pattern;
@ -42,6 +44,7 @@ import com.raytheon.rcm.config.StandardProductDistInfoDB;
import com.raytheon.rcm.config.awips1.Awips1ConfigProvider;
import com.raytheon.rcm.event.ConfigEvent;
import com.raytheon.rcm.event.RadarEventListener;
import com.raytheon.rcm.products.ElevationInfo;
import com.raytheon.rcm.server.Log;
@ -57,15 +60,16 @@ import com.raytheon.rcm.server.Log;
* ...
* 2014-02-03 DR 14762 D. Friedman Handle updated NDM config files.
* 2015-02-11 DR 17092 D. Friedman Handle NDM cronOTRs.xml updates.
* 2015-09-08 DR 17944 D. Friedman Handle elevation list file updates.
* </pre>
*
*/
public class StandardConfigProvider implements ConfigurationProvider {
private static String WSR_88D_PROD_LIST_NAME = "prodList.txt";
private static String TDWR__PROD_LIST_NAME = "tdwrProdList.txt";
private static String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt";
private static String CRON_OTRS_NAME = "cronOTRs.xml";
private static final String WSR_88D_PROD_LIST_NAME = "prodList.txt";
private static final String TDWR__PROD_LIST_NAME = "tdwrProdList.txt";
private static final String WMO_SITE_INFO_NAME = "wmoSiteInfo.txt";
private static final String CRON_OTRS_NAME = "cronOTRs.xml";
private static JAXBContext jaxbContext;
private static Unmarshaller u;
@ -271,17 +275,24 @@ public class StandardConfigProvider implements ConfigurationProvider {
} else if (WMO_SITE_INFO_NAME.equals(name)) {
updateRegionCode();
} else if (CRON_OTRS_NAME.equals(name)) {
RadarEventListener target = config.getConfigurationEventTarget();
if (target != null) {
ConfigEvent ev = new ConfigEvent(ConfigEvent.Category.CRON_OTRS);
target.handleConfigEvent(ev);
}
sendConfigEvent(ConfigEvent.Category.CRON_OTRS);
} else if (Pattern.matches("^rps-.*OP.*$", name)) {
config.notifyNationalRpsLists();
} else if (ElevationInfo.ELEVATION_LIST_RESOURCE_NAMES.contains(name)) {
config.notifyResourceChanged(name);
sendConfigEvent(ConfigEvent.Category.ELEVATION_LISTS);
} else {
Log.warnf("No action taken for new %s. You may need to restart for changes to take affect.", name);
}
return true;
}
private void sendConfigEvent(ConfigEvent.Category category) {
RadarEventListener target = config.getConfigurationEventTarget();
if (target != null) {
ConfigEvent ev = new ConfigEvent(category);
target.handleConfigEvent(ev);
}
}
}

View file

@ -72,6 +72,7 @@ import com.raytheon.rcm.server.StatusManager.RadarStatus;
* 2013-01-31 DR 15458 D. Friedman Explicitly handle UNSPECIFIED_VCP.
* 2014-02-03 DR 14762 D. Friedman Handle updated national RPS lists.
* 2015-06-10 4498 nabowle Rename Util->RcmUtil
* 2015-09-08 DR 17944 D. Friedman Handle elevation list file updates.
* </pre>
*
*/
@ -583,11 +584,13 @@ public class RPSListManager extends RadarEventAdapter {
.isCollectionEnabled())) {
resetRpsListForRadar(newCfg);
}
} else if (event.getCategory() == Category.NATIONAL_RPS_LISTS) {
} else if (event.getCategory() == Category.NATIONAL_RPS_LISTS
|| event.getCategory() == Category.ELEVATION_LISTS) {
boolean all = event.getCategory() == Category.ELEVATION_LISTS;
Configuration config = radarServer.getConfiguration();
for (String radarID : config.getConfiguredRadarList()) {
RadarConfig rc = config.getConfigForRadar(radarID);
if (rc.isCollectionEnabled()) {
if (all || rc.isCollectionEnabled()) {
resetRpsListForRadar(rc);
}
}

View file

@ -27,6 +27,7 @@ import com.raytheon.rcm.coll.RequestScheduler;
import com.raytheon.rcm.config.Configuration;
import com.raytheon.rcm.config.ConfigurationProvider;
import com.raytheon.rcm.config.MutableConfiguration;
import com.raytheon.rcm.config.RcmResourceProvider;
import com.raytheon.rcm.event.ConfigEvent;
import com.raytheon.rcm.event.NotificationEvent;
import com.raytheon.rcm.event.RadarEvent;
@ -48,6 +49,7 @@ import com.raytheon.rcm.rpsmgr.RPSListManager;
* ...
* 2014-02-03 DR 14762 D. Friedman Connect configuration's event target to
* the RadarServer instance.
* 2015-09-08 DR 17944 D. Friedman Set RcmResourceProvider.
* </pre>
*/
public class RadarServer implements RadarEventListener {
@ -93,10 +95,11 @@ public class RadarServer implements RadarEventListener {
/* (ConfigurationProvider) Class.forName(args[0]) */
/* lookup a *factory* class and pass relevate args */
return new RadarServer(provider.getConfiguration());
return createServer(provider.getConfiguration());
}
public static RadarServer createServer(Configuration configuration) {
RcmResourceProvider.setInstance(configuration.getRcmResourceProvider());
return new RadarServer(configuration);
}

View file

@ -110,6 +110,39 @@ fi
SWITCHES=()
# Delete old Eclipse configuration directories that are no longer in use
function deleteOldEclipseConfigurationDirs()
{
local tmp_dir=$1
local tmp_dir_pat=$(echo "$tmp_dir" | sed -e 's/|/\\|/g')
save_IFS=$IFS
IFS=$'\n'
# Find directories that are owned by the user and older than one hour
local old_dirs=( $(find "$tmp_dir" -mindepth 1 -maxdepth 1 -type d -user "$USER" -mmin +60) )
IFS=$save_IFS
if (( ${#old_dirs[@]} < 1 )); then
return
fi
# Determine which of those directories are in use.
local lsof_args=()
for d in "${old_dirs[@]}"; do
lsof_args+=('+D')
lsof_args+=("$d")
done
IFS=$'\n'
# Run lsof, producing machine readable output, filter the out process IDs,
# the leading 'n' of any path, and any subpath under a configuration
# directory. Then filter for uniq values.
in_use_dirs=$(lsof -w -n -l -P -S 10 -F pn "${lsof_args[@]}" | grep -v ^p | \
sed -r -e 's|^n('"$tmp_dir_pat"'/[^/]*).*$|\1|' | uniq)
IFS=$save_IFS
for p in "${old_dirs[@]}"; do
if ! echo "$in_use_dirs" | grep -qxF "$p"; then
rm -rf "$p"
fi
done
}
function deleteEclipseConfigurationDir()
{
if [[ -n $eclipseConfigurationDir ]]; then
@ -125,6 +158,7 @@ function createEclipseConfigurationDir()
if [[ $d == $HOME/* ]]; then
mkdir -p "$d" || continue
fi
deleteOldEclipseConfigurationDirs "$d"
if dir=$(mktemp -d --tmpdir="$d" "${id}-XXXX"); then
eclipseConfigurationDir=$dir
trap deleteEclipseConfigurationDir EXIT

View file

@ -39,6 +39,7 @@
# Oct 13, 2014 #3675 bclement logExitStatus() waits for child to start and renames log with child PID
# Jul 23, 2015 ASM#13849 D. Friedman Use a unique Eclipse configuration directory
# Aug 03, 2015 #4694 dlovely Fixed path for log file cleanup
# Sep 16, 2015 #18041 lshi Purge CAVE logs after 30 days instead of 7
source /awips2/cave/iniLookup.sh
RC=$?
@ -383,15 +384,48 @@ function deleteOldCaveLogs()
local mybox=$(hostname)
echo -e "Cleaning consoleLogs: "
echo -e "find $HOME/$BASE_LOGDIR -type f -name "*.log" -mtime +7 -exec rm {} \;"
echo -e "find $HOME/$BASE_LOGDIR -type f -name "*.log" -mtime +30 -exec rm {} \;"
find "$HOME/$BASE_LOGDIR" -type f -name "*.log" -mtime +7 -exec rm {} \;
find "$HOME/$BASE_LOGDIR" -type f -name "*.log" -mtime +30 -exec rm {} \;
exit 0
}
# Delete old Eclipse configuration directories that are no longer in use
function deleteOldEclipseConfigurationDirs()
{
local tmp_dir=$1
local tmp_dir_pat=$(echo "$tmp_dir" | sed -e 's/|/\\|/g')
save_IFS=$IFS
IFS=$'\n'
# Find directories that are owned by the user and older than one hour
local old_dirs=( $(find "$tmp_dir" -mindepth 1 -maxdepth 1 -type d -user "$USER" -mmin +60) )
IFS=$save_IFS
if (( ${#old_dirs[@]} < 1 )); then
return
fi
# Determine which of those directories are in use.
local lsof_args=()
for d in "${old_dirs[@]}"; do
lsof_args+=('+D')
lsof_args+=("$d")
done
IFS=$'\n'
# Run lsof, producing machine readable output, filter the out process IDs,
# the leading 'n' of any path, and any subpath under a configuration
# directory. Then filter for uniq values.
in_use_dirs=$(lsof -w -n -l -P -S 10 -F pn "${lsof_args[@]}" | grep -v ^p | \
sed -r -e 's|^n('"$tmp_dir_pat"'/[^/]*).*$|\1|' | uniq)
IFS=$save_IFS
for p in "${old_dirs[@]}"; do
if ! echo "$in_use_dirs" | grep -qxF "$p"; then
rm -rf "$p"
fi
done
}
function deleteEclipseConfigurationDir()
{
if [[ -n $eclipseConfigurationDir ]]; then
@ -406,6 +440,7 @@ function createEclipseConfigurationDir()
if [[ $d == $HOME/* ]]; then
mkdir -p "$d" || continue
fi
deleteOldEclipseConfigurationDirs "$d"
if dir=$(mktemp -d --tmpdir="$d" "${id}-XXXX"); then
eclipseConfigurationDir=$dir
trap deleteEclipseConfigurationDir EXIT

View file

@ -25,6 +25,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.swt.widgets.Shell;
@ -55,7 +56,8 @@ import com.raytheon.uf.viz.core.localization.LocalizationManager;
* Sep 8, 2008 1433 chammack Initial creation
* Oct 18, 2010 5849 cjeanbap NullPointerExceptin thrown if category is null
* Jun 03, 2013 2026 randerso Fixed typo
* Jul 27, 2015 4654 skorolev Added a localization level filtration.
* Jul 27, 2015 4654 skorolev Added a localization level filtration
* Sep 21, 2015 4654 njensen Made filter logic strict instead of eager
*
* </pre>
*
@ -147,16 +149,22 @@ public class Container implements IConfigurationChangedListener {
if (message.getFilters() != null && !message.getFilters().isEmpty()) {
Map<String, String> filters = message.getFilters();
LocalizationLevel[] lvls = LocalizationLevel.values();
boolean matchFound = false;
for (int i = 0; i < lvls.length; i++) {
String lvl = LocalizationManager.getContextName(lvls[i]);
String key = lvls[i].name();
if (filters.containsKey(key)) {
String value = filters.get(key);
if (value != null && !value.equals(lvl)) {
return;
if (value != null && value.equalsIgnoreCase(lvl)) {
matchFound = true;
break;
}
}
}
if (!matchFound) {
return;
}
}
// Check to make sure messages aren't coming in so fast it could cause a
@ -310,7 +318,7 @@ public class Container implements IConfigurationChangedListener {
ErrorDialog.openError(new Shell(),
"Error saving to internal database",
"Serious internal error occurred", new Status(
Status.ERROR, Activator.PLUGIN_ID,
IStatus.ERROR, Activator.PLUGIN_ID,
"Saved failed", new Exception(tmp.toString())));
}
}

View file

@ -29,6 +29,7 @@ import com.raytheon.uf.common.dataplugin.ffmp.FFMPBasin;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPBasinData;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPBasinMetaData;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPGuidanceBasin;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPGuidanceInterpolation;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPRecord;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPRecord.FIELDS;
import com.raytheon.uf.common.dataplugin.ffmp.FFMPTemplates;
@ -925,6 +926,85 @@ public class FFMPRowGenerator implements Runnable {
guidance = Float.NaN;
}
}
} else {
float value1 = 0.0f;
float value2 = 0.0f;
FFMPGuidanceInterpolation interpolate = resource.getGuidanceInterpolators().get(guidType);
String source1 = interpolate.getSource1();
String source2 = interpolate.getSource2();
double ratioOffset = interpolate.getInterpolationOffset();
Float adjValue1 = 0.0f;
Float adjValue2 = 0.0f;
// interpolate from zero to first guidance
if (source1.equals(source2)) {
if ((ratioOffset == Double.NaN) || (ratioOffset == 0.0)) {
adjValue2 = Float.NaN;
}
FFFGDataMgr dman = FFFGDataMgr.getInstance();
if (dman.isExpired() == false) {
adjValue2 = dman.adjustValue(adjValue2, source2, cBasinPfaf, 0l);
}
if (!adjValue2.isNaN()) {
value2 = adjValue2.floatValue();
}
// straight from awips1 code ( FFMPdataUtils.C )
// We have an extrapolation to zero (the low side).
// The formula below yields:
// coeff = 0.62 for 0.25 time frame (endpoints.second)
// coeff = 0.75 for 0.50 time frame (endpoints.second)
// coeff = 0.88 for 0.75 time frame (endpoints.second)
// coeff = 0.95 for 0.90 time frame (endpoints.second)
// float mid, frac;
// mid = endpoints.second / 2.0;
// frac = 1.0 - ( ( duration - mid ) / mid );
// coeff = ( duration / endpoints.second ) + (0.25 * frac);
if ((interpolate.getHour(source1) == 0)
|| (source1.equals(source2) && (interpolate
.getHour(source2) == 1))) {
Double ratio = new Double(ratioOffset);
if (ratio.equals(.25)) {
guidance = (float) (.62 * value2);
} else if (ratio.equals(.5)) {
guidance = (float) (.75 * value2);
} else if (ratio.equals(.75)) {
guidance = (float) (.88 * value2);
} else if (ratio.equals(.9)) {
guidance = (float) (.95 * value2);
}
}
// otherwise interpolate linearly I guess
} else {
// check if values at the source do not exist
FFFGDataMgr dman = FFFGDataMgr.getInstance();
if (dman.isExpired() == false) {
adjValue1 = dman.adjustValue(adjValue1, source1, cBasinPfaf, 0l);
}
if (!adjValue1.isNaN()) {
value1 = adjValue1.floatValue();
}
if (dman.isExpired() == false) {
adjValue2 = dman.adjustValue(adjValue2, source2, cBasinPfaf, 0l);
}
if (!adjValue2.isNaN()) {
value2 = adjValue2.floatValue();
}
if ((value1 == Float.NaN) || (value2 == Float.NaN)) {
guidance = Float.NaN;
}
guidance = (float)(value1 + ((value2 - value1) * ratioOffset));
}
}
return new FFMPTableCellData(FIELDS.GUIDANCE, guidance, forced);

View file

@ -37,6 +37,7 @@ import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.viz.alertviz.AlertVizPreferences;
import com.raytheon.uf.viz.alertviz.AlertvizJob;
import com.raytheon.uf.viz.alertviz.AlertvizJob.AlertVizJobListener;
import com.raytheon.uf.viz.alertviz.Container;
import com.raytheon.uf.viz.alertviz.ReceiverConnChecker;
import com.raytheon.uf.viz.alertviz.SystemStatusHandler;
@ -63,6 +64,8 @@ import com.raytheon.uf.viz.core.notification.jobs.NotificationManagerJob;
* May 08, 2013 1939 rjpeter Updated to start NotificationManagerJob.
* Aug 26, 2014 3356 njensen Explicitly set localization adapter
* Jun 04, 2015 4473 njensen Defer launching of UI to Activator and OSGi services
* Sep 17, 2015 4822 njensen Block application exit until receiver disconnects
* Sep 21, 2015 4654 njensen Setup extra localization levels
*
* </pre>
*
@ -71,16 +74,29 @@ import com.raytheon.uf.viz.core.notification.jobs.NotificationManagerJob;
*/
@SuppressWarnings("restriction")
public class AlertVizApplication implements IStandaloneComponent {
private static final transient IUFStatusHandler statusHandler = UFStatus
.getHandler(AlertVizApplication.class, "GDN_ADMIN", "GDN_ADMIN");
/*
* (non-Javadoc)
*
* @see
* com.raytheon.uf.viz.application.component.IStandaloneComponent#startComponent
* (java.lang.String)
/**
* Private class used to verify we do not exit the application before the
* job has been properly shut down.
*/
private static class ConnectedListener implements AlertVizJobListener {
private boolean connected;
@Override
public void receiverConnected() {
connected = true;
}
@Override
public void receiverDisconnected() {
connected = false;
}
}
@Override
public Object startComponent(String componentName) throws Exception {
Display display = PlatformUI.createDisplay();
@ -140,6 +156,8 @@ public class AlertVizApplication implements IStandaloneComponent {
return IApplication.EXIT_OK;
}
AlertvizJob.getInstance().setEmbedded(false);
ConnectedListener listener = new ConnectedListener();
AlertvizJob.getInstance().addAlertVizJobListener(listener);
AlertvizJob.getInstance().start(port);
// open JMS connection to allow alerts to be received
@ -171,6 +189,21 @@ public class AlertVizApplication implements IStandaloneComponent {
// Killed because of error, set exit status to non zero value
return IApplication.EXIT_RELAUNCH;
}
/*
* don't let the application exit until it is properly disconnected
*/
int stopTries = 0;
while (listener.connected && stopTries < 5) {
/*
* if the job is successfully canceled, the receiverDisconnect()
* will be triggered
*/
AlertvizJob.getInstance().cancel();
Thread.sleep(5);
stopTries++;
}
AlertvizJob.getInstance().removeAlertVizJobListener(listener);
}
return AlertvizJob.getInstance().getExitStatus();
@ -188,6 +221,7 @@ public class AlertVizApplication implements IStandaloneComponent {
protected void initializeLocalization() throws Exception {
PathManagerFactory.setAdapter(new CAVELocalizationAdapter());
new LocalizationInitializer(true, false).run();
AlertVizLocalizationConfigurer.registerExtraLevels();
}
}

View file

@ -0,0 +1,73 @@
/**
* 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.uf.viz.product.alertviz;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.viz.core.ProgramArguments;
import com.raytheon.uf.viz.core.localization.LocalizationManager;
/**
* Configures extra localization information for AlertViz. This whole class
* exists to get around the fact that plugins can contribute custom localization
* levels but AlertViz is not full of extra plugins and should not be full of
* extra plugins. AlertViz still needs to respect localization levels to some
* degree, hence this workaround class.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 21, 2015 4759 njensen Initial creation
*
* </pre>
*
* @author njensen
* @version 1.0
*/
public class AlertVizLocalizationConfigurer {
private static final String DESK = "DESK";
private AlertVizLocalizationConfigurer() {
// don't allow instantiation
}
/**
* Registers other localization levels that AlertViz may need but not have
* plugins contributing.
*/
public static void registerExtraLevels() {
/*
* This code is borrowed from NmapCommon and NcPathManager. Should that
* code change, this code should change.
*/
String deskName = ProgramArguments.getInstance().getString("-desk");
if (deskName != null) {
LocalizationLevel deskLevel = LocalizationLevel.createLevel(DESK,
650);
LocalizationManager.registerContextName(deskLevel, deskName);
}
}
}

View file

@ -23,7 +23,9 @@ import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
import com.raytheon.rcm.config.RcmResourceProvider;
import com.raytheon.uf.viz.core.localization.HierarchicalPreferenceStore;
import com.raytheon.uf.viz.radarapps.core.LocalizationRcmResourceProvider;
/**
* The activator class controls the plug-in life cycle.
@ -36,6 +38,7 @@ import com.raytheon.uf.viz.core.localization.HierarchicalPreferenceStore;
* ------------ ---------- ----------- --------------------------
* Apr 21, 2009 mfegan Initial creation
* Mar 3, 2014 2861 mschenke Create preference store immediately
* Sep 8, 2015 ASM# 17944 D. Friedman Set RcmResourceProvider
*
* </pre>
*
@ -71,6 +74,7 @@ public class Activator extends AbstractUIPlugin {
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
RcmResourceProvider.setInstance(new LocalizationRcmResourceProvider());
}
public void stop(BundleContext context) throws Exception {

View file

@ -0,0 +1,69 @@
package com.raytheon.uf.viz.radarapps.core;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import com.raytheon.rcm.config.RcmResourceProvider;
import com.raytheon.uf.common.localization.FileUpdatedMessage;
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.LocalizationUtil;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.localization.exception.LocalizationException;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
/**
* This is the CAVE implementation of RcmResourceProvider that gets files
* from localization.
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2015-09-08 DR 17944 D. Friedman Initial creation
* </pre>
*/
public class LocalizationRcmResourceProvider extends RcmResourceProvider {
private static final IUFStatusHandler statusHandler = UFStatus
.getHandler(LocalizationRcmResourceProvider.class);
private volatile Map<LocalizationFile, LocalizationFile> watchedLocalizationFiles;
@Override
public InputStream getResourceAsStream(String resource) {
String localizationPath = "radar" + File.separator + resource;
try {
LocalizationFile lf = null;
lf = PathManagerFactory.getPathManager().getStaticLocalizationFile(LocalizationType.COMMON_STATIC, localizationPath);
synchronized (this) {
if (watchedLocalizationFiles == null) {
watchedLocalizationFiles = new HashMap<LocalizationFile, LocalizationFile>();
}
LocalizationFile oldLf = watchedLocalizationFiles.get(lf);
if (oldLf == null) {
watchedLocalizationFiles.put(lf, lf);
lf.addFileUpdatedObserver(new ILocalizationFileObserver() {
@Override
public void fileUpdated(FileUpdatedMessage message) {
notifyResourceChanged(LocalizationUtil
.extractName(message.getFileName()));
}
});
}
}
return lf.openInputStream();
} catch (LocalizationException e) {
statusHandler.error(String.format("Could not open localization file %s: %s", localizationPath, e.getMessage()), e);
return null;
}
}
}

View file

@ -3872,7 +3872,9 @@ public class TafViewerEditorDlg extends CaveSWTDialog implements ITafSettable,
tafViewerStTxt.setText("");
int n = Integer.valueOf(numTafsCbo.getItem(numTafsCbo
.getSelectionIndex()));
tafsInViewer = TafUtil.getLatestTafs(stationName, n);
if (stationName != null) {
tafsInViewer = TafUtil.getLatestTafs(stationName, n);
}
StringBuilder sb = new StringBuilder();
boolean showHeaders = showHeadersChk.getSelection();
if (tafsInViewer != null) {

View file

@ -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.
**/
@ -44,6 +44,7 @@ import org.eclipse.ui.keys.IBindingService;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
import com.raytheon.uf.viz.core.RGBColors;
@ -52,6 +53,7 @@ import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.map.IMapDescriptor;
import com.raytheon.uf.viz.core.maps.MapManager;
import com.raytheon.viz.core.mode.CAVEMode;
import com.raytheon.viz.gfe.Activator;
import com.raytheon.viz.gfe.PythonPreferenceStore;
import com.raytheon.viz.gfe.actions.FormatterlauncherAction;
@ -70,14 +72,14 @@ import com.raytheon.viz.ui.perspectives.AbstractCAVEPerspectiveManager;
/**
* Manages the life cycle of the GFE Perspectives
*
*
* Installs a perspective watcher that handles the transitions in and out of the
* GFE perspectives.
*
*
* <pre>
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* ------------ ---------- ----------- --------------------------
* Jul 17, 2008 #1223 randerso Initial creation
* Oct 6, 2008 #1433 chammack Removed gfe status bars
* Apr 9, 2009 1288 rjpeter Added saving of the renderable display.
@ -85,11 +87,12 @@ import com.raytheon.viz.ui.perspectives.AbstractCAVEPerspectiveManager;
* Apr 27, 2010 mschenke refactor for common perspective switching
* Jul 7, 2011 #9897 ryu close formatters on perspective close/reset
* Aug 20,2012 #1077 randerso Added support for bgColor setting
* Oct 23, 2012 #1287 rferrel Changes for non-blocking FormattrLauncherDialog.
* Dec 09, 2013 #2367 dgilling Remove shutdown of ProcedureJob and
* Oct 23, 2012 #1287 rferrel Changes for non-blocking FormattrLauncherDialog.
* Dec 09, 2013 #2367 dgilling Remove shutdown of ProcedureJob and
* SmartToolJob.
* Jan 14, 2014 2594 bclement added low memory notification
* Aug 24, 2015 4749 dgilling Shutdown TaskManager on perspective close.
* Aug 31, 2015 #17970 yteng Notify user to close GFE if not in real-time
* </pre>
*
* @author randerso
@ -181,6 +184,15 @@ public class GFEPerspectiveManager extends AbstractCAVEPerspectiveManager {
@Override
public void activate() {
if (CAVEMode.getMode().equals(CAVEMode.OPERATIONAL) &&
!SimulatedTime.getSystemTime().isRealTime()
&& !CAVEMode.getFlagInDRT()) {
UFStatus.getHandler().handle(
Priority.WARN,
"CAVE in OPERATIONAL mode and CAVE clock is not set to real-time. Please close all GFE sessions, if any.");
}
super.activate();
// Hack to disable editor closing
@ -404,4 +416,4 @@ public class GFEPerspectiveManager extends AbstractCAVEPerspectiveManager {
+ "\n\nConsider saving Fcst grids to free up memory.";
}
}
}

View file

@ -29,6 +29,7 @@ import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.python.PyUtil;
import com.raytheon.uf.common.python.concurrent.AbstractPythonScriptFactory;
import com.raytheon.uf.common.python.PythonIncludePathUtil;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.viz.gfe.python.GfeCavePyIncludeUtil;
@ -43,6 +44,7 @@ import com.raytheon.viz.gfe.python.GfeCavePyIncludeUtil;
* Apr 20, 2015 4027 randerso Remove unused TextProductsTemplates path and added
* Tests path for GFE formatter auto tests
* Jul 28, 2015 4263 dgilling Refactor based on AbstractPythonScriptFactory.
* Aug 21, 2015 4509 dgilling Added time and dataaccess to include path.
*
* </pre>
*
@ -72,16 +74,17 @@ public class FormatterScriptFactory extends
}
private static String buildIncludePath() {
String include = PyUtil.buildJepIncludePath(true,
GfePyIncludeUtil.getCommonPythonIncludePath(),
GfePyIncludeUtil.getVtecIncludePath(),
GfePyIncludeUtil.getCommonGfeIncludePath(),
GfePyIncludeUtil.getHeadlineIncludePath(),
GfePyIncludeUtil.getTextUtilitiesIncludePath(),
GfePyIncludeUtil.getTextProductsIncludePath(),
GfePyIncludeUtil.getUtilitiesIncludePath(),
GfePyIncludeUtil.getCombinationsIncludePath(),
GfeCavePyIncludeUtil.getTestsIncludePath());
String include = PyUtil.buildJepIncludePath(true, PythonIncludePathUtil
.getCommonPythonIncludePath("time", "dataaccess"),
GfePyIncludeUtil.getCommonPythonIncludePath(), GfePyIncludeUtil
.getVtecIncludePath(), GfePyIncludeUtil
.getCommonGfeIncludePath(), GfePyIncludeUtil
.getHeadlineIncludePath(), GfePyIncludeUtil
.getTextUtilitiesIncludePath(), GfePyIncludeUtil
.getTextProductsIncludePath(), GfePyIncludeUtil
.getUtilitiesIncludePath(), GfePyIncludeUtil
.getCombinationsIncludePath(), GfeCavePyIncludeUtil
.getTestsIncludePath());
return include;
}

View file

@ -86,6 +86,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Nov 26, 2014 16889 snaples Updated to fix SNOTEL display
* Jun 18, 2015 14298,17388 ptilles Updated to fix problem with mpe_dqc_6hr_24hr_ste_bad token and problem
* with changing a 6hr value in 24hr mode
* Sep 11, 2015 17986 snaples Updated q45bnames array to correct order issue, with Screened and Questionable being reversed.
*
* </pre>
*
@ -208,8 +209,8 @@ public class EditPrecipStationsDialog extends AbstractMPEDialog implements
private String[] q2bnames = { "Manual", "Reset to Original" };
private String[] q45bnames = { "Verified", "Screened (Forced)",
"Questionable", "Bad" };
private String[] q45bnames = { "Verified", "Questionable", "Screened (Forced)",
"Bad" };
private int initial_qual = F_MANUAL;

View file

@ -67,6 +67,7 @@ import com.raytheon.viz.mpe.util.DailyQcUtils;
* Sep 11, 2013 #2353 lvenable Fixed cursor memory leak.
* Mar 10, 2015 14575 snaples Added additional status flag.
* Jul 9, 2015 14618 snaples Cleaned up code issues.
* Sep 11, 2015 17988 snaples Fixed issue with wait cursor not showing when Rendering Grids.
* </pre>
*
* @author snaples
@ -489,7 +490,7 @@ public class QcPrecipOptionsDialog extends AbstractMPEDialog {
}
});
Composite renderComp = new Composite(dataOptionsGroup, SWT.NONE);
final Composite renderComp = new Composite(dataOptionsGroup, SWT.NONE);
GridLayout renderCompLayout = new GridLayout(2, false);
renderCompLayout.marginHeight = 0;
renderCompLayout.marginWidth = 0;
@ -507,10 +508,10 @@ public class QcPrecipOptionsDialog extends AbstractMPEDialog {
renderGridsBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
shell.setCursor(waitCursor);
renderComp.setCursor(waitCursor);
opo.render_options(0);
shell.setCursor(prevCursor);
renderGridsBtn.setEnabled(false);
renderComp.setCursor(prevCursor);
}
});

View file

@ -19,6 +19,7 @@
<vmArgs>-XX:+UseG1GC
-Dosgi.instance.area.readOnly=true
-Dorg.eclipse.update.reconcile=false
-Dorg.eclipse.swt.internal.gtk.cairoGraphics=false
-XX:MaxPermSize=128m
-Dorg.eclipse.ui/KEY_CONFIGURATION_ID=com.raytheon.viz.ui.awips.scheme
-Dqpid.dest_syntax=BURL

View file

@ -22,7 +22,7 @@
<contribute xsi:type="toolbarSubMenu" menuText="6hr">
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 0.01 inches" key="ProbTP0p01in6hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 0.10 inches" key="ProbTP0p10in6hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 0.25 inches" key="ProbTP0p25in6h" indentText="false" />
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 0.25 inches" key="ProbTP0p25in6hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 0.50 inches" key="ProbTP0p50in6hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 0.75 inches" key="ProbTP0p75in6hr" indentText="false" />
<contribute xsi:type="menuItem" menuText="6hr Prob Total Precip > 1.00 inch" key="ProbTP1p00in6hr" indentText="false" />

View file

@ -74,6 +74,7 @@
<vbSource key="HiResW-NMM-SJU" category="Volume/HiResW" />
<vbSource key="HiResW-NMM-West" category="Volume/HiResW" />
<vbSource key="HRRR" category="Volume" />
<vbSource key="HWRF" category="Volume" />
<vbSource key="LAMPQPF" category="Volume" />
<vbSource key="LAPS" category="Volume" />
<vbSource key="ETA218" category="Volume" />

View file

@ -19,6 +19,9 @@
**/
package com.raytheon.viz.warngen.gui;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.viz.core.IDisplayPane;
import com.raytheon.uf.viz.core.drawables.IDescriptor;
import com.raytheon.uf.viz.core.drawables.ResourcePair;
@ -26,6 +29,7 @@ import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.uf.viz.core.rsc.tools.GenericToolsResourceData;
import com.raytheon.uf.viz.core.rsc.tools.action.AbstractGenericToolAction;
import com.raytheon.viz.core.mode.CAVEMode;
import com.raytheon.viz.ui.input.EditableManager;
/**
@ -40,6 +44,7 @@ import com.raytheon.viz.ui.input.EditableManager;
* Oct 10, 2010 6990 Qinglu Lin Used D. Friedman short solution,
* with minor changes.
* Aug 15, 2013 DR 16418 D. Friedman Always show the dialog.
* Sep 3, 2015 DR 17886 Qinglu Lin Updated for popping up alertViz when switching to DRT.
*
* </pre>
*
@ -64,6 +69,14 @@ public class WarngenAction extends AbstractGenericToolAction<WarngenLayer> {
protected WarngenLayer getResource(LoadProperties loadProperties,
IDescriptor descriptor) throws VizException {
if (CAVEMode.getMode().equals(CAVEMode.OPERATIONAL) &&
!SimulatedTime.getSystemTime().isRealTime() &&
!CAVEMode.getFlagInDRT()) {
UFStatus.getHandler().handle(Priority.WARN,
"WarnGen cannot be launched while " +
"CAVE in OPERATIONAL mode and the CAVE clock is not set to real-time.");
return null;
}
for (IDisplayPane pane : getSelectedPanes()) {
for (ResourcePair rp : pane.getDescriptor().getResourceList()) {
if (rp.getResource() instanceof WarngenLayer) {

View file

@ -50,12 +50,13 @@ import com.raytheon.viz.hydrocommon.HydroConstants;
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2 Dec 2008 wkwock Initial creation.
* 2 Dec 2008 wkwock Initial creation.
* 16 Jan 2009 1883 Venable &amp; Updated database calls and query methods.
* Duff
* 10 Feb 2009 wkwock Added functions and clean up.
* 12 Aug 2014 3049 bkowal Close the BufferedReader when finished.
* 21 May 2015 4501 skorolev Changed a way of database connection. Got rid of Vector.
* 17 Sep 2015 4886 skorolev Corrected updateRejecteddata.
*
* </pre>
*
@ -743,7 +744,7 @@ public class XdatDB {
+ userid + "')";
try {
DirectDbQuery.executeQuery(query, IHFS, QueryLanguage.SQL);
DirectDbQuery.executeStatement(query, IHFS, QueryLanguage.SQL);
} catch (VizException e) {
statusHandler.handle(Priority.PROBLEM,
"Error to update the rejected data table.", e);

View file

@ -61,6 +61,8 @@ import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
* Aug 30, 2013 2298 rjpeter Make getPluginName abstract
* 10/16/2014 3454 bphillip Upgrading to Hibernate 4
* Aug 05, 2015 4486 rjpeter Changed Timestamp to Date.
* Aug 14, 2015 17801 bhunderm Fixed logic to choose the parm with lesser
* duration when have multiple grids for same fcsthr.
* </pre>
*
* @author randerso
@ -239,10 +241,10 @@ public class GFED2DDao extends GridDao {
dur = Integer.parseInt(matcher.group(1));
}
for (int j = i; j < firstTry.size(); j++) {
Object[] nextRow = firstTry.get(j);
while (i < firstTry.size()) {
Object[] nextRow = firstTry.get(i);
if (fcstHr.equals(nextRow[0])) {
i = j;
i++;
String nextParam = (String) nextRow[2];
Matcher nextMatcher = pattern.matcher(nextParam);
int nextDur = Integer.MAX_VALUE;

View file

@ -16,6 +16,7 @@
<alias base="MPE-Mosaic">mosaicMPE</alias>
<alias base="HPE">localHPE</alias>
<alias base="HRRR">HRRR</alias>
<alias base="HWRF">HWRF</alias>
<alias base="BHPE">localBHPE</alias>
<alias base="RFCqpf">qpf218</alias>
<alias base="nogaps">nogaps</alias>

View file

@ -68,6 +68,7 @@
# 05/29/2015 17496 ryu Changed parm definitions for Wave1-10 and Period1-10.
#
# 05/29/2015 #17144 bhunder Added weather Params for URMA25 and OCONUS RTMA
# 09/02/2015 #4819 rferrel Added HWRF.
####################################################################################################
#----------------------------------------------------------------------------
@ -1106,7 +1107,7 @@ GlobalWave = ('GlobalWave', GRID, '', NO, NO, 2, 0)
GLWM = ('GLWM', GRID, '', NO, NO, 2, 0)##########DCS3499
HIRESWarw = ('HIRESWarw', GRID, '', NO, NO, 2, 0)##########DCS3501
HIRESWnmm = ('HIRESWnmm', GRID, '', NO, NO, 2, 0)
HRRR = ("HRRR", GRID, '', NO, NO, 3, 0)
HRRR = ('HRRR', GRID, '', NO, NO, 3, 0)
#### SPC = ('SPC', GRID, '', NO, NO, 2, 0)###DR20634
WCwave10 = ('WCwave10', GRID, '', NO, NO, 2, 0)
WCwave4 = ('WCwave4', GRID, '', NO, NO, 2, 0)
@ -1280,7 +1281,8 @@ elif SID in CONUS_EAST_SITES:
D2DMODELS = [('GFS212', 'GFS40'),
('AVN211', 'GFS80'),
('ETA', 'NAM80'),
('HRRR', 'HRRR'),
'HRRR',
'HWRF',
('NGM', 'NGM80'),
('MRF', 'gfsLR'),
('RUC130', 'RUC13'),
@ -1288,7 +1290,7 @@ elif SID in CONUS_EAST_SITES:
('mesoEta212', 'NAM40'),
('mesoEta215', 'NAM20'),
'MSAS',
('LAPS', 'LAPS'),
'LAPS',
'GWW233',
('HPCqpf', 'HPCQPF'),
('HPCqpfNDFD', 'HPCERP'),
@ -1365,12 +1367,13 @@ else: #######DCS3501 WEST_CONUS
('mesoEta212', 'NAM40'),
('mesoEta215', 'NAM20'),
'MSAS',
('LAPS', 'LAPS'),
'LAPS',
'GWW233',
('HPCqpf', 'HPCQPF'),
('HPCqpfNDFD', 'HPCERP'),
('RFCqpf', 'RFCQPF'),
('HRRR', 'HRRR'),
'HRRR',
'HWRF',
#DR3511 'HPCdelta',
'WNAWAVE238',
'TPCSurgeProb',
@ -1675,6 +1678,7 @@ else:
"NamDNG5" : ["NamDNG5"],
"SREF" : ["SREF"],
"HRRR" : ['HRRR'],
"HRWF" : ['HRWF'],
#########DCS3501
"GLWM" : ["GLWM"],
"HIRESWarw" : ["HIRESWarw"],
@ -1716,6 +1720,7 @@ D2DAccumulativeElements= {
"GFS75": ["tp", "cp"],
"GFS190": ["tp", "cp"],
"HRRR": ["tp", "crain", "csnow", "cfrzr", "cicep"],
"HWRF": ["tp", "cp"],
"NAM95": ["tp", "cp"],
"NAM80": ["tp", "cp"],
"NAM40": ["tp", "cp"],

View file

@ -290,9 +290,33 @@
<Level key="MAXW">
<DatabaseLevel levelName="MAXW" levelOneValue="0.0"/>
</Level>
<Level key="MB2">
<DatabaseLevel levelName="MB" levelOneValue="2.0" unit="hPa"/>
</Level>
<Level key="MB5">
<DatabaseLevel levelName="MB" levelOneValue="5.0" unit="hPa"/>
</Level>
<Level key="MB7">
<DatabaseLevel levelName="MB" levelOneValue="7.0" unit="hPa"/>
</Level>
<Level key="MB10">
<DatabaseLevel levelName="MB" levelOneValue="10.0" unit="hPa"/>
</Level>
<Level key="MB20">
<DatabaseLevel levelName="MB" levelOneValue="20.0" unit="hPa"/>
</Level>
<Level key="MB30">
<DatabaseLevel levelName="MB" levelOneValue="30.0" unit="hPa"/>
</Level>
<Level key="MB50">
<DatabaseLevel levelName="MB" levelOneValue="50.0" unit="hPa"/>
</Level>
<Level key="MB70">
<DatabaseLevel levelName="MB" levelOneValue="70.0" unit="hPa"/>
</Level>
<Level key="MB75">
<DatabaseLevel levelName="MB" levelOneValue="75.0" unit="hPa"/>
</Level>
<Level key="MB100">
<DatabaseLevel levelName="MB" levelOneValue="100.0" unit="hPa"/>
</Level>

View file

@ -24,6 +24,8 @@
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 11/10/14 #4953 randerso Added Hazard_TCV to templateProds
# 09/08/2015 #4847 randerso Restore Hazard_HLS to templateProds
#
##
# ---- NWS Products --------------------------------------------------------
@ -79,7 +81,8 @@ NWSProducts = ['ADR', 'AFD', 'AFM', 'AQA', 'AVA', 'AVW', 'CAE', 'CCF', 'CDW', 'C
#contains the products to be generated (e.g., AFM). These products
#follow the Baseline, Region, Site technique.
templateProds= ['AFM', 'ZFP', 'CCF', 'CWF', 'CWF_Pacific', 'FWF', 'HLS',
'FWFTable', 'FWM', 'GLF', 'MVF', 'NSH', 'PFM', 'SFT', 'SRF', 'OFF', 'AFD', 'Hazard_TCV']
'FWFTable', 'FWM', 'GLF', 'MVF', 'NSH', 'PFM', 'SFT', 'SRF', 'OFF', 'AFD',
'Hazard_TCV', 'Hazard_HLS']
templateProdsWsaf= ['AFM', 'ZFP', 'CCF', 'CWF', 'CWF_Pacific', 'FWF', 'HLS',
'FWFTable', 'FWM', 'GLF', 'MVF', 'NSH', 'PFM', 'SFT', 'SRF', 'OFF', 'AFD', 'SAF',
'FWS', 'Hazard_TCV', 'Hazard_HLS']

View file

@ -1,4 +1,4 @@
# Version 2015.7.23-0
# Version 2015.8.05-0
import GenericHazards
import JsonSupport
@ -1775,9 +1775,11 @@ class StormSurgeSection(SectionCommon):
def _peakSurge(self, segmentDict, productSegmentGroup, productSegment):
self._textProduct.debug_print("_peakSurge _inundationMax = %s" % (self._stats._inundationMax), 1)
# DR 17727: To make the output consistent, max threat should be calculated here
self._stats._maxThreat = "None"
if self._stats._inundationMax is not None and self._stats._inundationMax >= 1:
max = round(self._stats._inundationMax)
self._stats._maxThreat = "None"
if max > 10:
maxRange = 4
self._stats._maxThreat = "Extreme"

View file

@ -0,0 +1,273 @@
/**
* 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.grib.decoderpostprocessors;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.raytheon.edex.plugin.grib.exception.GribException;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.dataplugin.grid.GridInfoRecord;
import com.raytheon.uf.common.dataplugin.grid.GridRecord;
import com.raytheon.uf.common.dataquery.db.QueryResult;
import com.raytheon.uf.common.dataquery.db.QueryResultRow;
import com.raytheon.uf.common.gridcoverage.GridCoverage;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.edex.database.cluster.ClusterLockUtils;
import com.raytheon.uf.edex.database.cluster.ClusterLockUtils.LockState;
import com.raytheon.uf.edex.database.cluster.ClusterTask;
import com.raytheon.uf.edex.database.cluster.handler.CurrentTimeClusterLockHandler;
import com.raytheon.uf.edex.plugin.grid.dao.GridDao;
import com.vividsolutions.jts.geom.Geometry;
/**
* HWRF post processor implementation.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Sep 10, 2015 4819 rferrel Initial Creation
*
* </pre>
*
* @author rferrel
* @version 1
*/
public class HWRFPostProcessor implements IDecoderPostProcessor {
/**
* Format for datasetId prefix <model>-<dx><spacingUnit>-.
*/
private static final String DS_ID_FORMAT = "HWRF-%.2f-%s-";
/**
* Cluster lock task name.
*/
private static final String TASK_NAME = "HWRF_Post_Processor";
/**
* Cluster lock details.
*/
private static final String DETAILS = "HWRF_process";
/**
* Wait 10 seconds for the cluster lock.
*/
private static final int TIMEOUT = 10000;
protected final IUFStatusHandler logger = UFStatus.getHandler(getClass());
/**
* Cache of girdInfo list for a given datasetId prefix.
*/
private final Map<String, List<GridInfoRecord>> gridInfoLists = new ConcurrentHashMap<>();
/**
* Next scheduled time to clear the gridInfo Lists in order to remove purged
* data.
*/
private volatile long nextPurgeGridInfoLists = 0L;
@Override
public GridRecord[] process(GridRecord record) throws GribException {
if (TimeUtil.currentTimeMillis() >= nextPurgeGridInfoLists) {
nextPurgeGridInfoLists = TimeUtil.currentTimeMillis()
+ TimeUtil.MILLIS_PER_HOUR;
gridInfoLists.clear();
}
GridCoverage gc = record.getLocation();
double dx = gc.getDx();
String spacingUnit = gc.getSpacingUnit();
String datasetIdPrefix = String.format(DS_ID_FORMAT, dx, spacingUnit);
List<GridInfoRecord> giList = gridInfoLists.get(datasetIdPrefix);
if (giList == null) {
queryUpdateRecord(record, datasetIdPrefix);
} else {
String datasetId = findMatchingDatasetId(record.getInfo(), giList);
if (datasetId == null) {
/*
* Get new datasetId while locked just in case another process
* created it first.
*/
queryUpdateRecord(record, datasetIdPrefix);
} else {
record.getInfo().setDatasetId(datasetId);
}
}
return new GridRecord[] { record };
}
/**
* Add the count in ct's extrainfo to the dataset name prefix.
*
* @param ct
* @param datasetIdPrefix
* @return datasetId
*/
private String createDatasetId(CurrentTimeClusterLockHandler handler,
String datasetIdPrefix) {
String stormCntString = handler.getExtraInfo();
int stormCnt = 0;
if ((stormCntString == null) || stormCntString.isEmpty()) {
stormCnt = 1;
} else {
try {
stormCnt = Integer.parseInt(stormCntString) + 1;
} catch (NumberFormatException ex) {
stormCnt = 1;
}
}
String newStormCntString = Integer.toString(stormCnt);
handler.setExtraInfo(newStormCntString);
return datasetIdPrefix + newStormCntString;
}
/**
* Find datasetId a result grid that has > 95% intersection with the record.
*
* @param record
* @param result
* @return datasetId or null when > 95% intersection not found
*/
private String findMatchingDatasetId(GridInfoRecord recordInfo,
List<GridInfoRecord> giList) {
if (giList.isEmpty()) {
return null;
}
GridCoverage coverage = recordInfo.getLocation();
Geometry geo = coverage.getGeometry();
double area = geo.getArea();
for (GridInfoRecord gi : giList) {
Geometry resultGeo = gi.getLocation().getGeometry();
/*
* TODO It is possible a storm might be over the dataline, I would
* expect this approach of intersecting to fail horribly if a
* hurricane approached and then crossed the dateline.
*/
double intersect = geo.intersection(resultGeo).getArea();
if ((intersect / area) > 0.95) {
return gi.getDatasetId();
}
}
return null;
}
/**
* While locked get datasetId for the record's grid info and update the grid
* info list associated with dsIdPrefix.
*
* @param record
* @param datasetIdPrefix
*/
private void queryUpdateRecord(GridRecord record, String datasetIdPrefix) {
ClusterTask ct = null;
/*
* Perform lock
*/
try {
/*
* The other lock methods clear the cluster tasks extraInfo where
* the count is being kept.
*/
CurrentTimeClusterLockHandler handler = new CurrentTimeClusterLockHandler(
TIMEOUT, false);
do {
ct = ClusterLockUtils.lock(TASK_NAME, DETAILS, handler, true);
} while (!ct.getLockState().equals(LockState.SUCCESSFUL));
handler.setExtraInfo(ct.getExtraInfo());
/*
* get list of unique grid_coverage to grid_info. records with
* datasetId like 'HWRF-<dx>-<spacingUnit>-%' whose coverage is the
* same type as this coverage.
*/
GridDao dao = new GridDao();
StringBuilder query = new StringBuilder();
query.append("SELECT distinct(gi) FROM ");
query.append(GridInfoRecord.class.getName()).append(" gi WHERE ");
query.append("gi.datasetId LIKE :datasetId");
Map<String, Object> params = new HashMap<>();
params.put("datasetId", datasetIdPrefix + "%");
QueryResult result = dao.executeHQLQuery(query.toString(), params);
List<GridInfoRecord> giList = null;
if (result.getResultCount() > 0) {
// Make room for possible new entry
giList = new ArrayList<>(result.getResultCount() + 1);
for (QueryResultRow row : result.getRows()) {
giList.add((GridInfoRecord) row.getColumn(0));
}
} else {
// Make room for new entry
giList = new ArrayList<>(1);
}
gridInfoLists.put(datasetIdPrefix, giList);
/*
* If matches, and coverage has >95% intersection, use that
* datasetId
*/
GridInfoRecord recordInfo = record.getInfo();
String datasetId = findMatchingDatasetId(recordInfo, giList);
if (datasetId == null) {
datasetId = createDatasetId(handler, datasetIdPrefix);
recordInfo.setDatasetId(datasetId);
if (dao.validateDataset(record) == false) {
logger.handle(Priority.WARN, "Unable to update record: "
+ record);
}
giList.add(recordInfo);
} else {
recordInfo.setDatasetId(datasetId);
}
} catch (PluginException e) {
logger.handle(Priority.PROBLEM,
"Problem with HWRF Post Processing ", e);
} finally {
// unlock
if (ct != null) {
ClusterLockUtils.unlock(ct, false);
}
}
}
}

View file

@ -33,6 +33,16 @@
<id>83</id>
</process>
</model>
<!-- Uses moving grid therefore no grid element. -->
<model>
<name>HWRF</name>
<center>7</center>
<subcenter>0</subcenter>
<process>
<id>89</id>
</process>
</model>
<model>
<name>ETA</name>

View file

@ -123,6 +123,19 @@
<modelName>GFS215|GFS217|GFS20-*</modelName>
<processorName>gov.noaa.nws.crh.edex.grib.decoderpostprocessor.GFS20PostProcessor</processorName>
</postProcessedModel>
<!-- Post processor definition for the HWRF model -->
<!-- This breaks GFE and volume browser. The post processing
creates models based on a storm's moving grid. Currently
the GFE and volume browser do not handle dynamic names
this post processing produces.
-->
<!--
<postProcessedModel>
<modelName>HWRF</modelName>
<processorName>HWRFPostProcessor</processorName>
</postProcessedModel>
-->
</postProcessedModels>

View file

@ -39,10 +39,13 @@
<to uri="jms-durable:queue:Ingest.Radar" />
</route>
-->
<endpoint id="radarJmsEndpoint" uri="jms-durable:queue:Ingest.Radar?concurrentConsumers=${radar-decode.sbn.threads}"/>
<endpoint id="radarRadarServerJmsEndpoint" uri="jms-durable:queue:Ingest.RadarRadarServer?concurrentConsumers=${radar-decode.local.threads}"/>
<!-- Begin Radar routes -->
<route id="radarIngestRoute">
<from uri="jms-durable:queue:Ingest.Radar"/>
<from ref="radarJmsEndpoint"/>
<setHeader headerName="dataType">
<constant>radar-sbn</constant>
</setHeader>
@ -50,7 +53,7 @@
</route>
<route id="radarRadarServerIngestRoute">
<from uri="jms-durable:queue:Ingest.RadarRadarServer"/>
<from ref="radarRadarServerJmsEndpoint"/>
<setHeader headerName="dataType">
<constant>radar-local</constant>
</setHeader>
@ -92,10 +95,18 @@
<bean id="radarMenuCreator" class="com.raytheon.edex.plugin.radar.util.RadarMenuUtil"/>
<bean id="import88dLocations" class="com.raytheon.edex.plugin.radar.util.Import88DLocationsUtil"/>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="elevationLists.txt" />
<constructor-arg ref="radarMenuCreator" />
</bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="tdwrElevations.txt" />
<constructor-arg ref="radarMenuCreator" />
</bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="ssssElevationLists.txt" />
<constructor-arg ref="radarMenuCreator" />
</bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="fsl-w88d.shp" />
<constructor-arg ref="import88dLocations" />

View file

@ -0,0 +1,4 @@
# Number threads for radar products ingested from the SBN
radar-decode.sbn.threads=1
# Number threads for radar products ingested locally
radar-decode.local.threads=1

View file

@ -19,15 +19,12 @@
**/
package com.raytheon.edex.plugin.radar.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -36,6 +33,13 @@ import java.util.Map;
import com.raytheon.uf.common.dataplugin.radar.util.RadarsInUseUtil;
import com.raytheon.uf.common.dataplugin.radar.util.SsssRadarUtil;
import com.raytheon.uf.common.dataplugin.radar.util.TerminalRadarUtils;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.localization.exception.LocalizationException;
import com.raytheon.uf.common.menus.xml.CommonAbstractMenuContribution;
import com.raytheon.uf.common.menus.xml.CommonIncludeMenuContribution;
import com.raytheon.uf.common.menus.xml.CommonIncludeMenuItem;
@ -47,6 +51,7 @@ import com.raytheon.uf.common.menus.xml.VariableSubstitution;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.util.FileUtil;
import com.raytheon.uf.edex.menus.AbstractMenuUtil;
import com.raytheon.uf.edex.ndm.ingest.INationalDatasetSubscriber;
@ -62,6 +67,7 @@ import com.raytheon.uf.edex.ndm.ingest.INationalDatasetSubscriber;
* Feb 25, 2013 DR14418 zwang Change radar menu to dual pol style
* 03/07/2013 DR15495 zwang Handle additional elevation for ssss radars
* Mar 06, 2014 2876 mpduff New NDM plugin.
* Sep 08, 2015 ASM #17944 D. Friedman Handle other elevation list files.
*
* </pre>
*
@ -374,31 +380,40 @@ public class RadarMenuUtil extends AbstractMenuUtil implements
saveFile(file, TerminalRadarUtils.getElevationsFile());
setSkipParse(false);
createMenus();
} else if ("elevationLists.txt".equals(fileName) ||
"ssssElevationLists.txt".equals(fileName)) {
saveFile(file, getRadarElevationLocalizationFile(fileName));
}
statusHandler.handle(Priority.INFO,
"Successfully processed " + file.getAbsolutePath());
}
private void saveFile(File file, File outFile) {
private LocalizationFile getRadarElevationLocalizationFile(String fileName) {
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext context = pathMgr.getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
return pathMgr.getLocalizationFile(context,
"radar" + File.separator + fileName);
}
private void saveFile(File file, LocalizationFile outFile) {
if ((file != null) && file.exists()) {
BufferedReader fis = null;
BufferedWriter fos = null;
InputStream fis = null;
OutputStream fos = null;
try {
fis = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
fos = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile)));
String line = null;
fis = new FileInputStream(file);
fos = outFile.openOutputStream();
try {
while ((line = fis.readLine()) != null) {
fos.write(line);
fos.newLine();
}
FileUtil.copy(fis, fos);
} catch (IOException e) {
statusHandler.handle(Priority.PROBLEM,
"Could not read file: " + file.getName(), e);
}
} catch (LocalizationException e) {
statusHandler.handle(Priority.PROBLEM,
"Failed to open localization file for output: "
+ outFile, e);
} catch (FileNotFoundException e) {
statusHandler.handle(Priority.PROBLEM, "Failed to find file: "
+ file.getName(), e);

View file

@ -36,6 +36,18 @@
<constructor-arg value="cronOTRs.xml" />
<constructor-arg ref="radarServerNdmListener" />
</bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="elevationLists.txt" />
<constructor-arg ref="radarServerNdmListener" />
</bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="tdwrElevations.txt" />
<constructor-arg ref="radarServerNdmListener" />
</bean>
<bean factory-bean="ndmProc" factory-method="registerListener">
<constructor-arg value="ssssElevationLists.txt" />
<constructor-arg ref="radarServerNdmListener" />
</bean>
<camelContext id="rpgenvdata-camel" xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="errorHandler">

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Grid
Bundle-SymbolicName: com.raytheon.uf.common.dataplugin.grid
Bundle-Version: 1.14.0.qualifier
Bundle-Version: 1.15.0.qualifier
Bundle-Vendor: RAYTHEON
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy

View file

@ -1,46 +1,51 @@
/**
* 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.uf.common.dataplugin.grid.units;
import javax.measure.quantity.Dimensionless;
import javax.measure.unit.BaseUnit;
import javax.measure.unit.NonSI;
import javax.measure.unit.SI;
import javax.measure.unit.UnitFormat;
/**
* Provide alias for common units used in grid.
*
*
* <pre>
*
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Oct 20, 2009 mschenke Initial creation
*
* Sep 22, 2015 4498 nabowle Add PSU.
*
* </pre>
*
*
* @author mschenke
* @version 1.0
*/
public class GridUnits {
public static final BaseUnit<Dimensionless> PSU = new BaseUnit<>("PSU");
public static boolean register() {
UnitFormat.getInstance().alias(SI.METER, "gpm");
UnitFormat.getUCUMInstance().alias(SI.METER, "gpm");
@ -60,6 +65,9 @@ public class GridUnits {
UnitFormat.getUCUMInstance().alias(SI.SECOND, "sec");
UnitFormat.getInstance().alias(SI.METER, "meters");
UnitFormat.getUCUMInstance().alias(SI.METER, "meters");
UnitFormat.getInstance().label(PSU, PSU.getSymbol());
UnitFormat.getUCUMInstance().label(PSU, PSU.getSymbol());
return true;
}

View file

@ -36,6 +36,7 @@ import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.PathManagerFactory;
/**
@ -76,7 +77,7 @@ public class TerminalRadarUtils {
if (radarElevations == null) {
radarElevations = new HashMap<String, List<Double>>();
}
File file = getElevationsFile();
File file = getElevationsFile().getFile();
radarElevations = new HashMap<String, List<Double>>();
String line = "";
BufferedReader reader = null;
@ -131,12 +132,12 @@ public class TerminalRadarUtils {
return radarElevations;
}
public static File getElevationsFile() {
public static LocalizationFile getElevationsFile() {
IPathManager pathMgr = PathManagerFactory.getPathManager();
LocalizationContext context = pathMgr.getContext(
LocalizationType.COMMON_STATIC, LocalizationLevel.BASE);
return pathMgr.getLocalizationFile(context,
"radar" + File.separator + "tdwrElevations.txt").getFile();
"radar" + File.separator + "tdwrElevations.txt");
}
public static Map<Double, Double> getPrimarysMap(String site) {

View file

@ -20,6 +20,7 @@
##### Fixed dupCounties.vm not working due a variable switch in HeadlineLocList and ZoneHeadlineLocList
##### Evan Bookbinder 3-23/24-2015 Changes for mixed case (including new capitalize function)
##### D. Friedman 08-11-2015 ASM #17841. Handle possibly duplicate second time zone time.
##### Qinglu Lin 09-11-2015 ASM #17890. Updated headlineExpire.
####################################################################################################
#*
Mile Marker Test Code
@ -1264,21 +1265,17 @@ Until #formatTwoTimes($time1, $time2)##
######### STATEMENTS. THIS WILL BE ALL CAPS ##########
#macro(headlineExpire $dateUtil $expire $timeFormat $localtimezone $secondtimezone $duration)
#if(${duration} >= 360)
#set($timevar = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.plain}, 15, ${localtimezone})})
#capitalize(${timevar} "ALL")##
#set($timevar1 = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.plain}, 15, ${localtimezone})})
#else
#set($timevar = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.clock}, 15, ${localtimezone})})
#capitalize(${timevar} "ALL")##
#set($timevar1 = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.clock}, 15, ${localtimezone})})
#end
#if(${secondtimezone})
#if(${duration} >= 360)
#set($timevar = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.plain}, 15, ${secondtimezone})})
/#capitalize(${timevar} "ALL")/##
#set($timevar2 = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.plain}, 15, ${secondtimezone})})
#else
#set($timevar = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.clock}, 15, ${secondtimezone})})
/#capitalize(${timevar} "ALL")/##
#end
#set($timevar2 = ${dateUtil.formatUseNoonMidnight(${expire}, ${timeFormat.clock}, 15, ${secondtimezone})})
#end
#set($timevar = "#formatTwoTimes($timevar1 $timevar2)")
#capitalize(${timevar} "ALL")##
#end
########END MACRO

View file

@ -145,7 +145,7 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS, AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
@ -199,7 +199,7 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS, AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
@ -253,7 +253,7 @@ Must be paired with proper vm code (which are commented out in arealFloodAdvisor
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS, AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>

View file

@ -175,7 +175,7 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS, AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>
@ -228,7 +228,7 @@ Must be paired with proper vm code (also commented out in arealFloodAdvisoryFoll
<bullet bulletText="****** CALL TO ACTIONS (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="&quot;URBAN AREAS&quot;,&quot;HIGHWAYS&quot;,&quot;STREETS AND UNDERPASSES&quot;"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS...AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="FLOODING OF SMALL CREEKS AND STREAMS, AS WELL AS FARM AND COUNTRY ROADS"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="lowspotsCTA" bulletText="Low spots in hilly terrain" parseString="IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS"/>
<bullet bulletName="powerCTA" bulletText="Power of flood waters/vehicles" parseString="DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS"/>

View file

@ -314,7 +314,7 @@ Flood waters are moving down !**NAME OF CHANNEL**! from !**LOCATION**! to !**LOC
#end
##
#if(${ctaSelected} == "YES")
Precautionary/Preparedness actions...
PRECAUTIONARY/PREPAREDNESS ACTIONS...
#end
##

View file

@ -145,8 +145,8 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletText="****** CALLS TO ACTION (CHOOSE 1 OR MORE) ******" bulletType="title"/>
<bullet bulletName="warningMeansCTA" bulletText="A Flood Warning means" parseString="A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS...HIGHWAYS...STREETS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="&quot;SMALL CREEKS AND STREAMS&quot;,&quot;FARM AND COUNTRY ROADS&quot;"/> <bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS, HIGHWAYS, STREETS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="&quot;SMALL CREEKS AND STREAMS&quot;,&quot;FARM AND COUNTRY ROADS&quot;"/> <bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS, HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="nightCTA" bulletText="Nighttime flooding" parseString="BE ESPECIALLY CAUTIOUS AT NIGHT"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="camperCTA" bulletText="Camper safety" parseString="CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS"/>
@ -203,9 +203,9 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletText="****** CALLS TO ACTION (CHOOSE 1 OR MORE) ******" bulletType="title"/>
<bullet bulletName="warningMeansCTA" bulletText="A Flood Warning means" parseString="A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS...HIGHWAYS...STREETS"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS, HIGHWAYS, STREETS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="&quot;SMALL CREEKS AND STREAMS&quot;,&quot;FARM AND COUNTRY ROADS&quot;"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS, HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="nightCTA" bulletText="Nighttime flooding" parseString="BE ESPECIALLY CAUTIOUS AT NIGHT"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="camperCTA" bulletText="Camper safety" parseString="CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS"/>
@ -262,9 +262,9 @@ Must be paired with proper vm code (also commented out in arealFloodWarning.vm)!
<bullet bulletText="****** CALLS TO ACTION (CHOOSE 1 OR MORE) ******" bulletType="title"/>
<bullet bulletName="warningMeansCTA" bulletText="A Flood Warning means" parseString="A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS...HIGHWAYS...STREETS"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS, HIGHWAYS, STREETS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="&quot;SMALL CREEKS AND STREAMS&quot;,&quot;FARM AND COUNTRY ROADS&quot;"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS, HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="nightCTA" bulletText="Nighttime flooding" parseString="BE ESPECIALLY CAUTIOUS AT NIGHT"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="camperCTA" bulletText="Camper safety" parseString="CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS"/>

View file

@ -377,7 +377,7 @@ Additional rainfall amounts of !** EDIT AMOUNT **! are possible in the warned ar
#end
#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)**!.
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")})

View file

@ -189,9 +189,9 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<!-- end all call to action bullets with "CTA" ex: "obviousNameCTA" -->
<bullet bulletName="warningMeansCTA" bulletText="A Flood Warning means" parseString="A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS...HIGHWAYS...STREETS"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS, HIGHWAYS, STREETS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="&quot;SMALL CREEKS AND STREAMS&quot;,&quot;FARM AND COUNTRY ROADS&quot;"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS, HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="nightCTA" bulletText="Nighttime flooding" parseString="BE ESPECIALLY CAUTIOUS AT NIGHT"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="camperCTA" bulletText="Camper safety" parseString="CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS"/>
@ -249,9 +249,9 @@ Must be paired with proper vm code (which are commented out in arealFloodWarning
<!-- end all call to action bullets with "CTA" ex: "obviousNameCTA" -->
<bullet bulletName="warningMeansCTA" bulletText="A Flood Warning means" parseString="A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT"/>
<bullet bulletName="dontdrownCTA" bulletText="Turn around...dont drown" parseString="MOST FLOOD DEATHS OCCUR IN AUTOMOBILES"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS...HIGHWAYS...STREETS"/>
<bullet bulletName="urbanCTA" bulletText="Urban flooding" parseString="URBAN AREAS, HIGHWAYS, STREETS"/>
<bullet bulletName="ruralCTA" bulletText="Rural flooding/small streams" parseString="&quot;SMALL CREEKS AND STREAMS&quot;,&quot;FARM AND COUNTRY ROADS&quot;"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="USS_CTA" bulletText="Flooding of rural and urban areas" parseString="FLOODING OF SMALL CREEKS AND STREAMS, HIGHWAYS AND UNDERPASSES"/>
<bullet bulletName="nightCTA" bulletText="Nighttime flooding" parseString="BE ESPECIALLY CAUTIOUS AT NIGHT"/>
<bullet bulletName="donotdriveCTA" bulletText="Do not drive into water" parseString="DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY"/>
<bullet bulletName="camperCTA" bulletText="Camper safety" parseString="CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS"/>

View file

@ -146,7 +146,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>
@ -211,7 +211,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>

View file

@ -260,7 +260,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="*********** CALLS TO ACTION (CHOOSE 1 OR MORE) **********" bulletType="title"/>
<bullet bulletName="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA** (CATASTROPHIC Tag use only)" parseString="TORNADO EMERGENCY"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that do not have mobile homes. If you wish to switch defaults or provide both options, remove comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS, IN A MOBILE HOME, OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
@ -332,7 +332,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>
@ -397,7 +397,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="*********** CALLS TO ACTION (CHOOSE 1 OR MORE) **********" bulletType="title"/>
<bullet bulletName="torEmergencyCTA" bulletText="**TOR EMERGENCY CTA** (CATASTROPHIC Tag use only)" parseString="TORNADO EMERGENCY"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that do not have mobile homes. If you wish to switch defaults or provide both options, remove comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS, IN A MOBILE HOME, OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
@ -468,7 +468,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText="******** SPECIAL CASE CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="gustFrontOutflowCTA" bulletText="(B) Preceding svr gust front/outflow...no rain/thunder expected" parseString="WILL OCCUR BEFORE ANY RAIN OR LIGHTNING"/>
<bullet bulletName="squallLineCTA" bulletText="(E) Thunderstorm lines can produce tornadoes (can use w/TOR...POSSIBLE tag)" parseString="TORNADOES AND WIDESPREAD SIGNIFICANT WIND DAMAGE"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER...INCLUDING"/>
<bullet bulletName="superCellsCTA" bulletText="(E) Supercells can produce all types of svr...includes tornado" parseString="ALL TYPES OF SEVERE WEATHER INCLUDING"/>
<bullet bulletText="******** MISCELLANEOUS CALLS TO ACTION **********" bulletType="title"/>
<bullet bulletName="lightningCTA" bulletText="Lightning in addition to hail/winds" parseString="CONTINUOUS CLOUD TO GROUND LIGHTNING IS OCCURRING"/>
<bullet bulletName="boatersCTA" bulletText="Over Lake - Boaters seek shelter" parseString="GET AWAY FROM THE WATER AND MOVE INDOORS"/>

View file

@ -140,7 +140,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
<bullet bulletName="gustyWindsCTA" bulletText="Gusty Winds CTA" parseString="MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING, AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning CTA" parseString="FREQUENT LIGHTNING IS OCCURRING WITH"/>
@ -199,8 +199,8 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="Generic CTA" parseString="MOVE TO SAFE HARBOR UNTIL HAZARDOUS WEATHER PASSES"/>
<bullet bulletName="gustyWindsCTA" bulletText="Gusty Winds CTA" parseString="MOVE TO SAFE HARBOR IMMEDIATELY AS GUSTY WINDS AND HIGH WAVES ARE EXPECTED"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING...AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="hailWindsCTA" bulletText="Wind/Hail cta with hail/wind speeds" parseString="DANGEROUS LIGHTNING, AND HEAVY RAIN ARE POSSIBLE"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Waterspout CTA" parseString="CREATE LOCALLY HAZARDOUS SEAS. SEEK SAFE HARBOR IMMEDIATELY"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning CTA" parseString="FREQUENT LIGHTNING IS OCCURRING WITH"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE NATIONAL WEATHER SERVICE"/>

View file

@ -140,7 +140,7 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that
do not have mobile homes. If you wish to switch defaults or provide a single option, add comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletDefault="true" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS, IN A MOBILE HOME, OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>
<bullet bulletName="nighttimeCTA" bulletText="Tornadoes at night" parseString="TORNADOES ARE EXTREMELY DIFFICULT TO SEE AND CONFIRM AT NIGHT"/>
@ -211,7 +211,7 @@ do not have mobile homes. If you wish to switch defaults or provide a single opt
<bullet bulletName="replacesSVRCTA" bulletText="TOR Replaces Severe Thunderstorm Warning" parseString="TORNADO WARNING REPLACES THE SEVERE"/>
<!-- There are two "default" safety rules. The first...which will probably be used by most offices...includes safety rules for mobile homes. The second...which is commented out...is for large urban areas that
do not have mobile homes. If you wish to switch defaults or provide a single option, add comment tags as necessary and adjust the bulletDefault="true" as appropriate if both options are allowed -->
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS...IN A MOBILE HOME...OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultMobileCTA" bulletText="Default safety rules - includes mobile homes" parseString="IF YOU ARE OUTDOORS, IN A MOBILE HOME, OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="defaultUrbanCTA" bulletText="Default safety rules for urban - no mobile homes" parseString="IF YOU ARE OUTDOORS OR IN A VEHICLE" bulletGroup="cta1"/>
<bullet bulletName="motoristsCTA" bulletText="Safety rules for motorists" parseString="MOTORISTS SHOULD NOT TAKE SHELTER UNDER"/>
<bullet bulletName="rainWrappedCTA" bulletText="Rain wrapped tornado" parseString="HEAVY RAINFALL MAY HIDE THIS TORNADO"/>

View file

@ -137,13 +137,13 @@ Alaska end -->
<bullet bulletName="floodMoving" bulletText="Flooding is occurring in a particular stream/river" parseString="FLOOD WATERS ARE MOVING DOWN"/>
<bullet bulletText="****** CALLS TO ACTION (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="ffwEmergencyCTA" bulletText="**FLASH FLOOD EMERGENCY CTA**" bulletGroup="cta1" parseString="FLASH FLOOD EMERGENCY"/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletDefault="true" bulletGroup="cta1" parseString="HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletDefault="true" bulletGroup="cta1" parseString="HIGHER GROUND NOW! ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="childSafetyCTA" bulletText="Child Safety..." parseString="KEEP CHILDREN AWAY FROM STORM DRAINS"/>
<bullet bulletName="nighttimeCTA" bulletText="Nighttime flooding..." parseString="BE ESPECIALLY CAUTIOUS AT NIGHT WHEN"/>
<bullet bulletName="safetyCTA" bulletText="Safety...by foot or motorist" parseString="DO NOT ENTER OR CROSS FLOWING WATER"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN"/>
<bullet bulletName="stayAwayCTA" bulletText="Stay away or be swept away" parseString="STAY AWAY OR BE SWEPT AWAY"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS, STREAMS, AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="burnAreasCTA" bulletText="Burn Areas..." parseString="MOVE AWAY FROM RECENTLY BURNED AREAS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN"/>
<bullet bulletText="************************************************************" bulletType="title"/>
@ -197,9 +197,9 @@ Alaska end -->
<bullet bulletText="****** REPORTED BY (choose 1) ******" bulletType="title"/>
<bullet bulletName="county" bulletText="County dispatch" bulletGroup="reportedBy" bulletDefault="true" parseString="COUNTY DISPATCH REPORTED"/>
<bullet bulletName="lawEnforcement" bulletText="Law enforcement" bulletGroup="reportedBy" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="corps" bulletText="Corps of engineers" bulletGroup="reportedBy" parseString="CORPS OF ENGINEERS REPORTED"/>
<bullet bulletName="corps" bulletText="Corps of Engineers" bulletGroup="reportedBy" parseString="CORPS OF ENGINEERS REPORTED"/>
<bullet bulletName="damop" bulletText="Dam operator" bulletGroup="reportedBy" parseString="DAM OPERATORS REPORTED"/>
<bullet bulletName="bureau" bulletText="Bureau of reclamation" bulletGroup="reportedBy" parseString="BUREAU OF RECLAMATION REPORTED"/>
<bullet bulletName="bureau" bulletText="Bureau of Reclamation" bulletGroup="reportedBy" parseString="BUREAU OF RECLAMATION REPORTED"/>
<bullet bulletName="public" bulletText="The public" bulletGroup="reportedBy" parseString="THE PUBLIC REPORTED"/>
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="reportedBy" parseString="GAUGE REPORTS "/>
<!-- Uncomment for Alaska
@ -217,13 +217,13 @@ Alaska end -->
<bullet bulletName="floodMoving" bulletText="Flooding is occurring in a particular stream/river" parseString="FLOOD WATERS ARE MOVING DOWN"/>
<bullet bulletText="****** CALLS TO ACTION (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="ffwEmergencyCTA" bulletText="**FLASH FLOOD EMERGENCY CTA**" bulletGroup="cta1" parseString="FLASH FLOOD EMERGENCY"/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletGroup="cta1" parseString="HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletGroup="cta1" parseString="HIGHER GROUND NOW! ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="childSafetyCTA" bulletText="Child Safety..." parseString="KEEP CHILDREN AWAY FROM STORM DRAINS"/>
<bullet bulletName="nighttimeCTA" bulletText="Nighttime flooding..." parseString="BE ESPECIALLY CAUTIOUS AT NIGHT WHEN"/>
<bullet bulletName="safetyCTA" bulletText="Safety...by foot or motorist" parseString="DO NOT ENTER OR CROSS FLOWING WATER"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN"/>
<bullet bulletName="stayAwayCTA" bulletText="Stay away or be swept away" parseString="STAY AWAY OR BE SWEPT AWAY"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS, STREAMS, AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="burnAreasCTA" bulletText="Burn Areas..." parseString="MOVE AWAY FROM RECENTLY BURNED AREAS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN"/>
<bullet bulletText="************************************************************" bulletType="title"/>
@ -275,9 +275,9 @@ Alaska end -->
<bullet bulletText="****** REPORTED BY (choose 1) ******" bulletType="title"/>
<bullet bulletName="county" bulletText="County dispatch" bulletGroup="reportedBy" bulletDefault="true" parseString="COUNTY DISPATCH REPORTED"/>
<bullet bulletName="lawEnforcement" bulletText="Law enforcement" bulletGroup="reportedBy" parseString="LOCAL LAW ENFORCEMENT REPORTED"/>
<bullet bulletName="corps" bulletText="Corps of engineers" bulletGroup="reportedBy" parseString="CORPS OF ENGINEERS REPORTED"/>
<bullet bulletName="corps" bulletText="Corps of Engineers" bulletGroup="reportedBy" parseString="CORPS OF ENGINEERS REPORTED"/>
<bullet bulletName="damop" bulletText="Dam operator" bulletGroup="reportedBy" parseString="DAM OPERATORS REPORTED"/>
<bullet bulletName="bureau" bulletText="Bureau of reclamation" bulletGroup="reportedBy" parseString="BUREAU OF RECLAMATION REPORTED"/>
<bullet bulletName="bureau" bulletText="Bureau of Reclamation" bulletGroup="reportedBy" parseString="BUREAU OF RECLAMATION REPORTED"/>
<bullet bulletName="public" bulletText="The public" bulletGroup="reportedBy" parseString="THE PUBLIC REPORTED"/>
<bullet bulletName="onlyGauge" bulletText="Gauge reports" bulletGroup="reportedBy" parseString="GAUGE REPORTS "/>
<!-- Uncomment for Alaska
@ -295,13 +295,13 @@ Alaska end -->
<bullet bulletName="floodMoving" bulletText="Flooding is occurring in a particular stream/river" parseString="FLOOD WATERS ARE MOVING DOWN"/>
<bullet bulletText="****** CALLS TO ACTION (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="ffwEmergencyCTA" bulletText="**FLASH FLOOD EMERGENCY CTA**" bulletGroup="cta1" parseString="FLASH FLOOD EMERGENCY"/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletGroup="cta1" parseString="HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletGroup="cta1" parseString="HIGHER GROUND NOW! ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="childSafetyCTA" bulletText="Child Safety..." parseString="KEEP CHILDREN AWAY FROM STORM DRAINS"/>
<bullet bulletName="nighttimeCTA" bulletText="Nighttime flooding..." parseString="BE ESPECIALLY CAUTIOUS AT NIGHT WHEN"/>
<bullet bulletName="safetyCTA" bulletText="Safety...by foot or motorist" parseString="DO NOT ENTER OR CROSS FLOWING WATER"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN"/>
<bullet bulletName="stayAwayCTA" bulletText="Stay away or be swept away" parseString="STAY AWAY OR BE SWEPT AWAY"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS, STREAMS, AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="burnAreasCTA" bulletText="Burn Areas..." parseString="MOVE AWAY FROM RECENTLY BURNED AREAS"/>
<bullet bulletName="reportFloodingCTA" bulletText="Report flooding to local law enforcement" parseString="PLEASE REPORT TO YOUR LOCAL LAW ENFORCEMENT AGENCY WHEN YOU CAN"/>
<bullet bulletText="************************************************************" bulletType="title"/>

View file

@ -321,7 +321,7 @@ THIS IS A TEST MESSAGE. ##
## #parse("mileMarkers.vm")
#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)**!.
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

View file

@ -226,13 +226,13 @@ Alaska end -->
<bullet bulletName="floodMoving" bulletText="Flooding is occurring in a particular stream/river" parseString="FLOOD WATERS ARE MOVING DOWN"/>
<bullet bulletText="****** CALLS TO ACTION (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="ffwEmergencyCTA" bulletText="**FLASH FLOOD EMERGENCY CTA**" parseString="FLASH FLOOD EMERGENCY"/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletDefault="true" parseString="HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletDefault="true" parseString="HIGHER GROUND NOW! ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="childSafetyCTA" bulletText="Child Safety..." parseString="KEEP CHILDREN AWAY FROM STORM DRAINS"/>
<bullet bulletName="nighttimeCTA" bulletText="Nighttime flooding..." parseString="BE ESPECIALLY CAUTIOUS AT NIGHT WHEN"/>
<bullet bulletName="safetyCTA" bulletText="Safety...by foot or motorist" parseString="DO NOT ENTER OR CROSS FLOWING WATER"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN!"/>
<bullet bulletName="stayAwayCTA" bulletText="Stay away or be swept away" parseString="STAY AWAY OR BE SWEPT AWAY"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS, STREAMS, AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="burnAreasCTA" bulletText="Burn Areas..." parseString="MOVE AWAY FROM RECENTLY BURNED AREAS"/>
<!-- Uncomment for Alaska
<bullet bulletName="volcanicFloodCTA" bulletText="Volanic Snowmelt..." parseString="VOLCANIC SNOWMELT"/>
@ -317,13 +317,13 @@ Alaska end -->
<bullet bulletName="floodMoving" bulletText="Flooding is occurring in a particular stream/river" parseString="FLOOD WATERS ARE MOVING DOWN"/>
<bullet bulletText="****** CALLS TO ACTION (choose 1 or more) ******" bulletType="title"/>
<bullet bulletName="ffwEmergencyCTA" bulletText="**FLASH FLOOD EMERGENCY CTA**" parseString="FLASH FLOOD EMERGENCY"/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletDefault="true" parseString="HIGHER GROUND NOW. ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="actQuicklyCTA" bulletText="Act Quickly..." bulletDefault="true" parseString="HIGHER GROUND NOW! ACT QUICKLY TO PROTECT YOUR LIFE."/>
<bullet bulletName="childSafetyCTA" bulletText="Child Safety..." parseString="KEEP CHILDREN AWAY FROM STORM DRAINS"/>
<bullet bulletName="nighttimeCTA" bulletText="Nighttime flooding..." parseString="BE ESPECIALLY CAUTIOUS AT NIGHT WHEN"/>
<bullet bulletName="safetyCTA" bulletText="Safety...by foot or motorist" parseString="DO NOT ENTER OR CROSS FLOWING WATER"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN"/>
<bullet bulletName="turnAroundCTA" bulletText="Turn around...dont drown" parseString="TURN AROUND, DON'T DROWN!"/>
<bullet bulletName="stayAwayCTA" bulletText="Stay away or be swept away" parseString="STAY AWAY OR BE SWEPT AWAY"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS...STREAMS AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="arroyosCTA" bulletText="Arroyos..." parseString="ARROYOS, STREAMS, AND RIVERS CAN BECOME RAGING KILLER CURRENTS"/>
<bullet bulletName="burnAreasCTA" bulletText="Burn Areas..." parseString="MOVE AWAY FROM RECENTLY BURNED AREAS"/>
<!-- Uncomment for Alaska
<bullet bulletName="volcanicFloodCTA" bulletText="Volanic Snowmelt..." parseString="VOLCANIC SNOWMELT"/>

View file

@ -133,10 +133,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER, BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS, HIGH WAVES"/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS "/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
@ -185,10 +185,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER, BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS, HIGH WAVES"/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS "/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>

View file

@ -173,10 +173,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER, BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS, HIGH WAVES"/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS "/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>
@ -226,10 +226,10 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<bullet bulletName="specialEvent" bulletText="Special heads-up for large event/venue" parseString="THOSE ATTENDING"/>
<bullet bulletText="" bulletType="title"/>
<bullet bulletText=" ****** CALLS TO ACTION (CHOOSE 1 OR MORE) ****** " bulletType="title"/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER...BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...HIGH WAVES..."/>
<bullet bulletName="genericCTA" bulletText="As thunderstorms move over the water.." parseString="OVER THE WATER, BOATERS CAN EXPECT"/>
<bullet bulletName="gustyWindsCTA" bulletText="Mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS, HIGH WAVES"/>
<bullet bulletName="hailWindsCTA" bulletText="Mariners can expect cta with hail/wind speeds" parseString="MARINERS CAN EXPECT WIND GUSTS "/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS...AND INCREASING WAVES"/>
<bullet bulletName="nonThunderstormCTA" bulletText="Non thunderstorm winds - mariners can expect gusty winds.." parseString="MARINERS CAN EXPECT GUSTY WINDS AND INCREASING WAVES"/>
<bullet bulletName="waterspoutCTA" bulletText="Thunderstorms can produce waterspouts" parseString="THUNDERSTORMS CAN PRODUCE SUDDEN WATERSPOUTS"/>
<bullet bulletName="lightningCTA" bulletText="Frequent lightning" parseString="FREQUENT LIGHTNING IS OCCURRING WITH THIS STORM"/>
<bullet bulletName="reportCTA" bulletText="Report severe wx" parseString="REPORT SEVERE WEATHER TO THE COAST GUARD OR NEAREST LAW ENFORCEMENT AGENCY"/>

View file

@ -35,6 +35,8 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
* ------------ ---------- ----------- --------------------------
* Jan 08, 2011 mpduff Initial creation
* Mar 28, 2014 2952 mpduff Changed to use UFStatus for logging.
* Aug 14, 2015 17357 xwei 1) Added casting for percentValid calculation
* 2) Set goodAvgValue to true at the beginning of computeAvgFfg() method
*
* </pre>
*
@ -182,7 +184,8 @@ public class GAFFAreaProcessor {
*/
private void computeAvgFfg(String areaId, int numRows, int[] rows,
int[] begCol, int[] endCol) {
/* compute average FFG value for basin and areal coverage */
/* compute average FFG value for basin and areal coverage */
int missCnt = 0;
int totalCnt = 0;
int valCnt = 0;
@ -191,6 +194,8 @@ public class GAFFAreaProcessor {
double sum = 0.0;
double rawVal;
goodAvgValue = true;
for (int i = 0; i < numRows; i++) {
totalCnt += endCol[i] - begCol[i];
@ -250,7 +255,7 @@ public class GAFFAreaProcessor {
if (totalCnt <= 0) {
percentValid = 0;
} else {
percentValid = valCnt / totalCnt;
percentValid = (double) valCnt / (double) totalCnt;
}
if (valCnt > 0) {

View file

@ -34,30 +34,38 @@
<!-- Development time slots
<from uri="clusteredquartz://acars/createSounding/?cron=00+0,5,10,15,20,25,30,35,40,45,50,55+*+*+*+?" />
-->
<to uri="jms-generic:queue:scheduledSoundingWork" />
</route>
<route id="scheduledSoundingWork">
<from uri="jms-generic:queue:scheduledSoundingWork" />
<split streaming="true">
<split streaming="true">
<method bean="acarsSoundingSplitter" method="getSeparator"/>
<doTry>
<pipeline>
<pipeline>
<setHeader headerName="pluginName">
<constant>acarssounding</constant>
</setHeader>
<setHeader headerName="dequeueTime">
<method bean="acarsSounding" method="getQueueTime" />
</setHeader>
<bean ref="acarsSounding" method="processSounding" />
<to uri="direct-vm:indexAlert" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:acarssounding?level=ERROR"/>
</doCatch>
<to uri="jms-durable:queue:acarssounding" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:acarssounding?level=ERROR"/>
</doCatch>
</doTry>
</split>
</split>
</route>
<route id="acarsSoundingProcessing">
<from uri="jms-durable:queue:acarssounding" />
<doTry>
<pipeline>
<bean ref="acarsSounding" method="processSounding" />
<to uri="direct-vm:indexAlert" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:acarssounding?level=ERROR"/>
</doCatch>
</doTry>
</route>
<route id="acarsSoundingRoute">

View file

@ -77,6 +77,7 @@ import com.raytheon.uf.edex.plugin.grid.PartialGrid;
* Mar 27, 2013 1821 bsteffen Speed up GridInfoCache.
* Mar 20, 2013 2910 bsteffen Clear dataURI after loading cached info.
* Jul 09, 2015 4500 rjpeter Fix SQL Injection concern.
* Sep 15, 2015 4819 rferrel Made {@link #validateDataset(GridRecord)} public.
* </pre>
*
* @author bphillip
@ -248,7 +249,7 @@ public class GridDao extends PluginDao {
return toPersist.toArray(new GridRecord[toPersist.size()]);
}
private boolean validateDataset(GridRecord record) {
public boolean validateDataset(GridRecord record) {
if (!validateParameter(record)) {
return false;
}

View file

@ -52,6 +52,7 @@ import com.raytheon.uf.edex.core.IContextStateProcessor;
* Jul 17, 2013 2161 bkowal Initial creation.
* Mar 11, 2014 2726 rjpeter Graceful shutdown, don't forward empty pdo lists.
* Feb 09, 2015 4101 rjpeter Added MAX_CONTAINER_SIZE and changed store order to always store container with most entries first.
* Aug 21, 2015 4762 rjpeter Updated sizeSet comparator to use key if size equal.
* </pre>
*
* @author bkowal
@ -88,7 +89,13 @@ public class ModelSoundingPersistenceManager implements IContextStateProcessor {
public int compare(
ModelSoundingStorageContainer o1,
ModelSoundingStorageContainer o2) {
return Integer.compare(o1.size(), o2.size());
int rval = Integer.compare(o1.size(), o2.size());
if (rval == 0) {
rval = o1.getKey().compareTo(o2.getKey());
}
return rval;
}
}));
}

View file

@ -0,0 +1,46 @@
##
# 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.
##
#
# Adapter for FormattedDate
#
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 9/21/2015 4486 rjpeter Initial creation.
#
#
#
from dynamicserialize.dstypes.com.raytheon.uf.common.time import FormattedDate
ClassAdapter = 'com.raytheon.uf.common.time.FormattedDate'
def serialize(context, date):
context.writeI64(date.getTime())
def deserialize(context):
result = FormattedDate()
result.setTime(context.readI64())
return result

View file

@ -32,7 +32,7 @@
# 04/22/13 #1949 rjpeter Added LockTableAdapter
# 02/06/14 #2672 bsteffen Added JTSEnvelopeAdapter
# 06/22/2015 #4573 randerso Added JobProgressAdapter
#
# 09/21/2015 #4486 rjpeter Added FormattedDateAdapter
#
__all__ = [
@ -43,6 +43,7 @@ __all__ = [
'GregorianCalendarAdapter',
'ActiveTableModeAdapter',
'DateAdapter',
'FormattedDateAdapter',
'LocalizationLevelSerializationAdapter',
'LocalizationTypeSerializationAdapter',
'GeometryTypeAdapter',

View file

@ -0,0 +1,39 @@
##
# 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.
##
# ----------------------------------------------------------------------------
#
# SOFTWARE HISTORY
#
# Date Ticket# Engineer Description
# ------------ ---------- ----------- --------------------------
# 09/21/2015 4486 rjpeter Initial creation.
#
##
from time import gmtime, strftime
from dynamicserialize.dstypes.java.util import Date
class FormattedDate(Date):
def __init__(self, timeInMillis=None):
super(FormattedDate, self).__init__(timeInMillis)
def __repr__(self):
return strftime("%Y-%m-%d %H:%M:%S.", gmtime(self.time/1000.0)) + '{:03d}'.format(self.time%1000)

View file

@ -22,9 +22,11 @@
__all__ = [
'DataTime',
'TimeRange'
'TimeRange',
'FormattedDate'
]
from DataTime import DataTime
from TimeRange import TimeRange
from FormattedDate import FormattedDate

View file

@ -1,642 +1,26 @@
#Text DB IDS|DDPLUS ^(S[AP]....) (....) (......)
# FILE -overwrite -close -edex /awips/edex/data/sbn/text/\1_\2_\3_(seq).txt
####### Added by config_pqact #########
NNEXRAD ^(SDUS[234578].|NXUS6.) (K|P|T)(ABR|CYS|DMX|GLD|GID|EAX|ARX|MPX|LBF|OAX|DVN|UNR|FSD|TOP|TLX|LOT) (..)(..)(..) /p(...)(...)
FILE -overwrite -log -close -edex /data_store/radar/(\4:yyyy)(\4:mm)\4/\5/\2\8/\7/\1_\5\6_\2\8_\7_(seq).rad
#IDS|DDPLUS ^(S[AP]....) (....) (..)(....)
# PIPE /usr/local/ldm/decoders/textWriter /awips/edex/data/sbn/text (\3:mm)(\3:yyyy)
################
# Valley NEXRAD Configuration
################
NNEXRAD ^(SDUS[234578].) KABR (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KABR_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KCYS (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KCYS_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KDMX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KDMX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KGLD (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KGLD_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KGID (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KGID_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KEAX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KEAX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KARX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KARX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KMPX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KMPX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KLBF (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KLBF_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KDVN (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KDVN_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KUNR (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KUNR_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KFSD (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KFSD_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KTOP (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KTOP_\2\3\4_(seq).rad.%Y%m%d%H
#NNEXRAD ^(SDUS[234578].) KOAX (......) /p(...)(...)
# FILE -overwrite -close -edex /data_store/radar/\4/\3/\1_\4_\3_\2_(seq).rad
NNEXRAD ^(SDUS[234578].) PHFO (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_PHFO_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) PGUM (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_PGUM_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KBTV (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KBTV_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KBOX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KBOX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KFWD (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KFWD_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KTWC (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KTWC_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KAKQ (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KAKQ_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KRNK (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KRNK_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KLWX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KLWX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KABQ (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KABQ_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KPHI (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KPHI_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KALY (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KALY_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KEPZ (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KEPZ_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KMAF (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KMAF_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KOKX (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KOKX_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KPBZ (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KPBZ_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KSTO (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KSTO_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KREV (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KREV_\2\3\4_(seq).rad.%Y%m%d%H
NNEXRAD ^(SDUS[234578].) KLKN (..)(..)(..) /p(...)(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KLKN_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KABR (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KABR_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KDMX (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1__KDMX_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KGLD (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KGLD_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KGID (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KGID_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KEAX (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KEAX_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KLBF (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KLBF_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KFSD (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KFSD_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KTOP (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/1_KTOP_\2\3\4_(seq).rad.%Y%m%d%H
ANY ^(SDUS8.) KOAX (..)(..)(..) /pDPA(...)
FILE -overwrite -close -edex /data_store/radar/(\2:yyyy)(\2:mm)\2/\3/\1_KOAX_2\3\4_(seq).rad.%Y%m%d%H
################
# End Of Valley NEXRAD Configuration
################
################
# Valley Grid Configuration
################
# in base
#HRS ^([YZ].)([ABD-IMQRU-Z])(...) (KWB.) (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\8/\4/\2/\6/\1\2\3_\4_\5\6\7_(seq).grb
# base does not include T, that a mistake on our end?
#HRS ^(YE[IT].[89]8) KWNH (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWNH/\3/\1_KWNH_\2\3\4_(seq).grb
# in base
#HRS ^(ZEX.98) KWNH (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWNH/\3/\1_KWNH_\2\3\4_(seq).grb
# in base
#HRS ^(H.[A-H]...) ECMF (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/ECMF/\3/\1_ECMF_\2\3\4_(seq).grb
# in base
#HRS ^(H.[I-L]...) EGRR (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/EGRR/\3/\1_EGRR_\2\3\4_(seq).grb
# in base
#HRS ^(H.)([I-L])(...) KWBK (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\7/KWBK/\2/\5/\1\2\3_KWBK_\4\5\6_(seq).grb
# in base
#HRS ^(H.X...) KNWC (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KNWC/\3/\1_KNWC_\2\3\4_(seq).grb
#HRS ^(O.)([JMNQ])(...) KWBJ (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\7/KWBJ/\2/\5/\1\2\3_KWBJ_\4\5\6_(seq).grb
#HRS ^(O.N...) KWBM (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWBM/N/\3/\1_KWBM_\2\3\4_(seq).grb
#HRS ^(O.L...) KWBI (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWBI/L/\3/\1_KWBI_\2\3\4_(seq).grb
#HRS ^OEBA88 KNWC (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\4/KNWC/\2/OEBA88_KNWC_\1\2\3_(seq).grb
#HRS ^([YZ][UV]M.98) KNHC (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KNHC/\3/\1_KNHC_\2\3\4_(seq).grb
#HRS ^(H[ET]QV[01][0-9]) KWNC (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWNC/\3/\1_KWNC_\2\3\4_(seq).grb
#GRID ^([LM].)([ABDHMRSTU])(...) (KWB.) (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\8/\4/\2/\6/\1\2\3_\4_\5\6\7_(seq).grb
#GRID ^([LM].M.98) KWNH (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWNH/\3/\1_KWNH_\2\3\4_(seq).grb
# FILE -overwrite -close -edex /data_store/grib/\5/KWBD/E/\3/\1_KWBD_\2\3\4_(seq).grb
#GRID ^(L.U...) KWBN (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWBN/U/\3/\1_KWBN_\2\3\4_(seq).grb
#GRID ^(L[AB]U[ABC]..) KWNO (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWNO/\3/\1_KWNO_\2\3\4_(seq).grb
#GRID ^(L[UV]I...) KWBJ (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWBJ/I/\3/\1_KWBJ_\2\3\4_(seq).grb
# not in base
GRID ^(LDW[A-U]98) KNHC (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\5/(\2:yyyy)(\2:mm)\2/\3/\1_KNHC_\2\3\4_(seq).\5.%Y%m%d%H
#GRID ^([LM]DG...) KNHC (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KNHC/\3/\1_KNHC_\2\3\4_(seq).grb
#GRID ^(LJ[NP][NT]98) KWNM (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\5/KWNM/\3/\1_KWNM_\2\3\4_(seq).grb
#GRID ^LJPZ98 KNHC (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\4/KNHC/\2/LJPZ98_KNHC_\1\2\3_(seq).grb
#GRID ^ETWA88 KWBI (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\4/KWBI/W/\2/ETWA88_KWBI_\1\2\3_(seq).grb
#GRID ^LAMA98 KNES (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\4/KNES/\2/LAMA98_KNES_\1\2\3_(seq).grb
# partial in base
#GRID ^(E[A-CJ-RWY])([BCDEFGH])([A-Z]88) KWBJ (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\7/KWBJ/\2/\5/\1\2\3_KWBJ_\4\5\6_(seq).grb
GRID ^(E[A-CJ-RWY])([DEF])([A-Z]88) KWBJ (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\7/(\4:yyyy)(\4:mm)\4/\5/\1\2\3_KWBJ_\4\5\6_(seq).\7.%Y%m%d%H
HRS ^(YA)([WX])(A..) (KKCI) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
#HRS ^(YA)(W)([BCDGJM]..) (KKCI) (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\8/\4/\2/\6/\1\2\3_\4_\5\6\7_(seq).grb
#HRS ^(Y[IJL])(X)(A..) (KKCI) (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\8/\4/\2/\6/\1\2\3_\4_\5\6\7_(seq).grb
#HRS ^(YV)(W)([ABCDGJM]..) (KKCI) (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\8/\4/\2/\6/\1\2\3_\4_\5\6\7_(seq).grb
HRS ^(ZV)(W)([ADGJM]..) (KKCI) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
################
# End Of Valley Grid Configuration
################
# OPCWave models
# already in base
#ANY ^LJ(N)T98 (KWBC) (..)(..)(..)$
# FILE -overwrite -close -edex /data_store/grib/grib2/\2/\1/\4/LJNT98_\2_\3\4\5_(seq).grb
#ANY ^LJ(P)N98 (KWBC) (..)(..)(..)$
# FILE -overwrite -close -edex /data_store/grib/grib2/\2/\1/\4/LJPN98_\2_\3\4\5_(seq).grb
#ANY ^LJ(P)Z98 (KNHC) (..)(..)(..)$
# FILE -overwrite -close -edex /data_store/grib/grib2/\2/\1/\4/LJPZ98_\2_\3\4\5_(seq).grb
# AKWAVE models
#GRID ^(O[A-CJ-KM-NPY])N([ACEGI-Z]88) KWBJ (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\6/KWBJ/N/\4/\1N\2_KWBJ_\3\4\5_(seq).grb
# AK-GriddedMOS
# original pattern overlapped with base
#GRID ^(L[A-JR-SU-Y])R([B-J][0-2][0-35-68-9]) KWBQ (..)(..)(..).*!(grib|grib2)
# FILE -overwrite -close -edex /data_store/grib/\6/KWBQ/R/\4/\1R\2_KWBQ_\3\4\5_(seq).grb
GRID ^(L[CEFGIJV-Y])R([B-J][0-2][0-35-68-9]) KWBQ (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\6/(\4:yyyy)(\4:mm)\4/\5/\1R\2_KWBQ_\3\4\5_(seq).\6.%Y%m%d%H
# PR-RTMA
ANY ^(L[HNPRTUV])(C)(A98) (KWBR) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
# PR-NamDNG5
ANY ^([LM][ADEHKRSTUV])(C)([A-TZ][089][068]) (KWBE) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
# PR-GFS
ANY ^([LM][ABCEFGHMO-Y])(O)([A-Z][0-9][0-9]) (KWBC) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
#PR-SREF (SREF243)
ANY ^([LM][DEHMNPQRTUVW])(X)([A-TZ][235789][05689]) (KWBL) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
# NAM95 Grib Data
HRS ^([YZ][CE-HO-RT-Z])(N)([A-JM][0-9][0-9]) (KWBE) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
# NamDNG5 Grib Data no captured in above pattern
HRS ^([LM][EKV])(M)([A-TZ][089][068]) (KWBE) (..)(..)(..).*!(grib|grib2)
FILE -overwrite -close -edex /data_store/\8/(\5:yyyy)(\5:mm)\5/\6/\1\2\3_\4_\5\6\7_(seq).\8.%Y%m%d%H
#NGRID ^([LMYZ][TRUVXEGHVZ][BQRU]...) (KWBE)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#HRS ^([LMYZ][TRUVXEGHVZ][BQRU]...) (KWBE)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(......) (KWBX)
# FILE -overwrite -close -edex /usr/local/ldm/ecmwf/\1_\2.grd
#ANY ^...... KWBX ..(..)..
# PIPE -close /usr/local/ldm/decoders/decrypt_file
# /data_store/grib/grib2/ecmwf/\1/ecmwf
#NIMAGE TIG([EW])(0[0-5]) .... (..)(..)(..)
# FILE -overwrite -close -edex /windata/sbn/sat/GOES-\1_\2_\3\4\5.sat
#NIMAGE ^satz/ch[0-9]/(.*)/(.*)/([12][0-9][0-9][0-9][01][0-9][0-3][0-9]) ([0-2][0-9])([0-5][0-9])/(.*)/(.*km)/ (TI.)(.)(..) .... (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sat/\6/\1/\2/\7/\8\9_\(10)_\(11)\(12)\(13)_(seq).sat
#NGRID ^([LM].M.98) (KWNH)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^([LM].E...) (KWBD)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(L.U...) (KWBN)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(L[AB]U[ABC]..) (KWNO)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(L[UV]I...) (KWBJ)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^([LM]DG...) (KNHC)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(LJ[NP][NT]98) (KWNM)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(LJPZ98) (KNHC)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(ETWA88) (KWBI)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(LAMA98) (KNES)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
#NGRID ^(L.Z...) (KWBX)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
# *WARNING* The following regex turns on all GRIB2 data from the NOAAPort. Only use if you know you want everything
#
#NGRID ^(......) (KWB.)
# FILE -overwrite -close -edex /awips/edex/data/sbn/grib/\1_\2.grd
# Keep only the most recent SIGMET. IDS|DDPLUS ^WS
# FILE -overwrite -close -edex data/ldm/WWA/lastSIGMET
ANY ^([YZ]EI.98) (KKRF|KMKC|KMSR|KMSP) (..)(..)(..) .*!(grib|grib2)/.*/(.*)/#(...)/(............)/(F...)/(.*)/
FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/GRID\8/\7/\9/\(10)-\(11)_\1_\2_\3\4\5_(seq).\6
#
# Bin all the (Non-GRIB) WMO format data, using elements from the identifier as path components. The minutes portion of the timestamp, and the retransmit code is
# ignored. The day of the month portion of the timestamp is not used as a path component, so it would be a good idea to run 'scour' on a less than 24 hour basis.
# This action uses a lot of disk space.
# NamDNG25
ANY ^([LM][ADEHKRSTUVZ]I.[0-9][0-9]) (KWBE) (..)(..)(..)
FILE -overwrite -log -close -edex /data_store/grib2/(\3:yyyy)(\3:mm)\3/\4/NamDNG25/GRID184/\1_\2_\3\4\5_(seq).grib2.%Y%m%d%H
#
# "ASUS42 KRDU 012259" gets filed as data/US/KRDU/22/AS42.wmo
# 2.5km GMOS
NGRID ^(Y.U.[0-9][0-9]) (KWBQ) (..)(..)(..)
FILE -overwrite -log -close -edex /data_store/grib2/(\3:yyyy)(\3:mm)\3/\4/GMOS/GRID184/\1_\2_\3\4\5_(seq).grib2.%Y%m%d%H
#
#WMO ^([^H][A-Z])([A-Z][A-Z])([0-9][0-9]) (....) ([0-3][0-9])([0-2][0-9])
# FILE data/\2/\4/\6/\1\3.wmo
IDS|DDPLUS ^(FGUS53.) (KKRF) (..)(..)(..) FILE -overwrite -log -close -edex /data_store/shef/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).%Y%m%d
# HADS
IDS|DDPLUS ^(SXUS[4-5].) (KGID|KOAX|KLBF|KWOH|KDMX|KFSD) (..)(..)(..)
FILE -overwrite -log -close -edex /data_store/shef/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).%Y%m%d%H
# NUCAP Soundings
HDS ^(IUTN0[6-9]) (....) (..)(..)(..)
FILE -overwrite -log -close -edex /data_store/nucaps/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).hdf.%Y%m%d%H
#
#HDS ^SFUS41 KWBC (..)(..)(..)
# FILE -overwrite -close -edex /data_store/binlightning/\2/SFUS41_KWBC_\1\2\3_(seq).nldn
#HDS ^SFPA41 KWBC (..)(..)(..)
# FILE -overwrite -close -edex /data_store/binlightning/\2/SFPA41_KWBC_\1\2\3_(seq).nldn
# stored by text pattern
# TO 9 SHEF Data;
#IDS|DDPLUS ^(SRU[EMSW][1-9].) (KOMA|KOAX|KLSE|KARX|KDSM|KDMX|KDVN|KMLI|KEAX|KMCI|KFSD|KGRI|KGID|KLBF|KSTL|KLSX|KMSP|KMPX|KTOP|KWBC|KZMP|KPQR) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#river forecast SHEF data
#ANY ^(FGUS[57].) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^SRUS44 KWBC (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\2/SRUS44_KWBC_\1\2\3_(seq).txt
# stored by text pattern
# TO 9 warnings; SVR, TOR, SVS, FFW
#IDS|DDPLUS ^(W[OUFWG]US..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/warning/\4/\1_\2_\3\4\5_(seq).wrn
# stored by text pattern
#IDS|DDPLUS ^(W[UFWG]US..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(F[TC][UX][SX]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/taf/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#Text DB IDS|DDPLUS ^(F[TC][UX][SX]..) (....) (......)
# FILE -overwrite -close -edex /awips/edex/data/sbn/taf/\1_\2_\3_(seq).taf
# stored by text pattern
#IDS|DDPLUS ^(SMUS..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SMCN..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SMMX..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SMV[DCE]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SIV[DCE]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SNV[DCE]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SSV[DX]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(SXUS2[0123]) (KWNB) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
# stored by text pattern
#IDS|DDPLUS ^(VHVD..) (KWNB) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/sfcobs/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(IUST[4-7][123468]) KWBC (..)(..)(..).*
# FILE -overwrite -close -edex
# /data_store/bufrua/\3/\1_KWBC_\2\3\4_(seq).bin
#ANY ^(IUSZ[4-9][123468]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/bufrua/\4/\1_\2_\3\4\5_(seq).bufr
#ANY ^(IUSY4[123468]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/bufrua/\4/\1_\2_\3\4\5_(seq).bufr
#ANY ^(JU[BCFJMNOTVW]E(00|9[679])) KKCI (..)(..)(..)
# FILE -overwrite -close -edex /data_store/bufrsigwx/\4/\1_KKCI_\3\4\5_(seq).bufr
# has some overlap with baseline aircraft, use A1 fields
#ANY ^UA(US|PA)(..) KWBC (..)(..)(..).*
# FILE -overwrite -close -edex
# /data_store/airep/\4/UA\1\2_KWBC_\3\4\5_(seq).bin
# this pattern also contains airep..., use A1 fields
#ANY ^(U.....) KWBC (..)(..)(..).*
# FILE -overwrite -close -edex
# /data_store/pirep/\3/\1_KWBC_\2\3\4_(seq).bin
#ANY ^(IUPT0[1-4]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/profiler/\4/\1_\2_\3\4\5_(seq).bufr
#ANY ^IUPT40 (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/profiler/\3/IUPT40_\1_\2\3\4_(seq).bufr
#ANY ^IUAK01 (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/profiler/\3/IUAK01_\1_\2\3\4_(seq).bufr
#ANY ^IUPT40 KBOU (..)(..)(..)
# FILE -overwrite -close -edex /data_store/profiler/\2/IUPT40_KBOU_\1\2\3_(seq).bufr
# contained in text
#ANY ^(FAUS2[789]) KKCI (..)(..)(..)
# FILE -overwrite -close -edex /data_store/ccfp/\3/\1_KKCI_\2\3\4_(seq).txt
# contained in text
#ANY ^(FA[AU][KS]2.) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/cwa/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(JUS[ABX]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/mdlsndg/\4/\1_\2_\3\4\5_(seq).bufr
#ANY ^(JUTX0[1-9]) KNES (..)(..)(..)
# FILE -overwrite -close -edex /data_store/goessndg/\3/\1_KNES_\2\3\4_(seq).bufr
#ANY ^(IUTX0[1-9]) KNES (..)(..)(..)
# FILE -overwrite -close -edex /data_store/poessndg/\3/\1_KNES_\2\3\4_(seq).bufr
#ANY ^(JSM[TLF]..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/bufrmos/\4/\1_\2_\3\4\5_(seq).bufr
#ANY ^([PQ].....) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/redbook/\4/\1_\2_\3\4\5_(seq).rb
#IDS|DDPLUS ^(FXUS..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt
#IDS|DDPLUS ^(FOUS..) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt
#IDS|DDPLUS ^(AS....) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt
#IDS|DDPLUS ^(FPUS..) (....) (..)(..)(..).*
# FILE -overwrite -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^([AF][BS]....) (KOMA|KOAX|KLSE|KARX|KDSM|KDMX|KDVN|KMLI|KEAX|KMCI|KFSD|KGRI|KGID|KLBF|KSTL|KLSX|KMSP|KMPX|KTOP|KZMP|KPQR) (..)(..)(..).*
# FILE -overwrite -close -edex /data_store/shef/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^SXUS44 KWOH (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\2/SXUS44_KWOH_\1\2\3_(seq).txt
#ANY ^SXUS50 KWOH (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\2/SXUS50_KWOH_\1\2\3_(seq).txt
#ANY ^SXUS49 KWOH (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\2/SXUS49_KWOH_\1\2\3_(seq).txt
#ANY ^SXUS40 KWOH (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\2/SXUS40_KWOH_\1\2\3_(seq).txt
#ANY ^SXUS38 KWOH (..)(..)(..)
# FILE -overwrite -close -edex /data_store/shef/\2/SXUS38_KWOH_\1\2\3_(seq).txt
# Needed In Omaha for Acars since its decrypted as master ldm
#ANY ^(IUA[^X]0[12]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/acars/\4/\1_\2_\3\4\5_(seq).bufr
#ANY ^IUAX02 KARP ..(..)..
# PIPE -close /usr/local/ldm/decoders/decrypt_file
# /data_store/acars/decrypted/\1/acars
ANY ^(ISXA..) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrssmi/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).bufr.%Y%m%d%H
ANY ^JSXX((0[1-9])|(10)) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrascat/(\5:yyyy)(\5:mm)\5/\6/JSXX\1_\4_\5\6\7_(seq).bufr.%Y%m%d%H
ANY ^JSYY(0[1-9]) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrascat/(\3:yyyy)(\3:mm)\3/\4/JSYY\1_\2_\3\4\5_(seq).bufr.%Y%m%d%H
ANY ^ISXX(..) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrquikscat/(\3:yyyy)(\3:mm)\3/\4/ISXX\1_\2_\3\4\5_(seq).bufr.%Y%m%d%H
#ANY ^ZETA98 (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/grib/precip_estimate/\2/ZETA98_\1_\2\3\4_(seq).grb
#ANY ^ZEGA98 KNES (..)(..)(..)
# FILE -overwrite -close -edex /data_store/grib/precip_estimate/\2/ZEGA98_KNES_\1\2\3_(seq).grb
#ANY ^ZEGZ98 (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/grib/ffg/ZEGZ98_\1_\2\3\4_(seq).grd
#ANY ^JSAT98 KKCI (..)(..)(..)
# FILE -overwrite -close -edex /data_store/bufrncwf/\2/JSAT98_KKCI_\1\2\3_(seq).bufr
ANY ^(J[ACEGHJKMNPQR]CX[1-9]1) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrhdw/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).bufr.%Y%m%d%H
ANY ^(JUTX[2-4]1) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrmthdw/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).bufr.%Y%m%d%H
ANY ^(JUTX53) (....) (..)(..)(..)
FILE -overwrite -close -edex /data_store/bufrmthdw/(\3:yyyy)(\3:mm)\3/\4/\1_\2_\3\4\5_(seq).bufr.%Y%m%d%H
#GPSSRC xmrg(..........)z.gz$
# FILE -overwrite -close -edex /data_store/q2/xmrg\1z.gz
#NEXRAD2 ^L2-([^/]*)/(....)/([0-9][0-9][0-9][0-9][0-1][0-9][0-3][0-9][0-2][0-9][0-5][0-9][0-9][0-9])
# FILE -overwrite -close /data_store/koax/raw/nexradII/KOAX/\3.raw
#ANY ^ZDIA98 KKCI (......)
# FILE -overwrite -close -edex /data_store/experimental/grib/NCWF/ZDIA98_KKCI_\1.grb
#ANY (WSUS3[123]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/convsigmet/\4/\1_\2_\3\4\5_(seq).txt
#ANY (W[CSV]US0[1-6]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/nonconvsigmet/\4/\1_\2_\3\4\5_(seq).txt
#ANY (WAUS4[1-6]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/airmet/\4/\1_\2_\3\4\5_(seq).txt
#ANY (W[CSV]PA((0[1-9])|(1[1-3]))) PHFO (..)(..)(..)
# FILE -overwrite -close -edex /data_store/intlsigmet/\6/\1_PHFO_\5\6\7_(seq).txt
#ANY (W[CSV]NT((0[1-9])|(1[1-3]))) KKCI (..)(..)(..)
# FILE -overwrite -close -edex /data_store/intlsigmet/\6/\1_KKCI_\5\6\7_(seq).txt
#ANY (WAAK4[789]) PAWU (..)(..)(..)
# FILE -overwrite -close -edex /data_store/intlsigmet/\3/\1_PAWU_\2\3\4_(seq).txt
#ANY (W[CSV]PN0[1-6]) KKCI (..)(..)(..)
# FILE -overwrite -close -edex /data_store/intlsigmet/\3/\1_KKCI_\2\3\4_(seq).txt
#ANY ^(NWUS5.) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/lsr/\4/\1_\2_\3\4\5.txt
#ANY ^NWUS20 (....) (..)(..)(..)
# FILE -overwrite -close /data_store/svrwx/\3/NWUS20_\1_\2\3\4.txt
#ANY ^UR(PN|NT)(..) KNHC (..)(..)(..)
# FILE -overwrite -close -edex /data_store/recco/\4/UR\1\2_KHNC_\3\4\5_(seq).txt
#ANY ^(FVAK2[0-4]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/vaa/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(FVXX2[0-7]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/vaa/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^WHXX0[14] (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/tcg/\3/WHXX01_\1_\2\3\4_(seq).txt
#ANY ^(WTNT[25][0-9]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/tcs/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(WTPZ[25][0-9]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/tcs/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(WTPA[25][0-9]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/tcs/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(WTPN3[0-9]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/tcs/\4/\1_\2_\3\4\5_(seq).txt
#EXP (ecmwf_decrypted.*)
# FILE -overwrite -close -edex /data_store/grib/grib2/ecmwf/\1
#EXP (acars_decrypted.*)
# FILE -overwrite -close -edex /data_store/acars/decrypted/\1
# added for a missing national product
#ANY ^(ACUS..) (....) (..)(..)(..)
# FILE -overwrite -log -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt.%Y%m%d
#ANY ^(FE[APU][KNS][23][0-9]) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/text/\4/\1_\2_\3\4\5_(seq).txt
#ANY ^(CDUS4.) (....) (..)(..)(..)
# FILE -overwrite -close -edex /data_store/text/climate/\4/\1_\2_\3\4\5_(seq).txt

View file

@ -810,8 +810,8 @@ NGRID ^(Y.C[A-MZ][05789][0-9]) (KWBY) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]
FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
# MRMS
#NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
# FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
NGRID ^(YAU[CDLMPQS][0-2][0-9]) (KWNR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)
FILE -overwrite -log -close -edex /data_store/\6/(\3:yyyy)(\3:mm)\3/\4/\7/GRID\8/\(10)Z_\(11)_\(12)-\1_\2_\3\4\5_(seq).\6.%Y%m%d%H
# RTMA 2.5km
NGRID ^(L.IA98) (KWBR) (..)(..)(..)[^!]*!(grib|grib2)/[^/]*/([^/]*)/#([^/]*)/([0-9]{8})([0-9]{4})(F[0-9]{3})/([^/]*)

View file

@ -129,6 +129,9 @@ rm -rf ${RPM_BUILD_ROOT}
%dir /awips2/rcm
%dir /awips2/rcm/data
/awips2/rcm/data/*
%config(noreplace) /awips2/rcm/data/config/drop-ins/elevationLists.txt
%config(noreplace) /awips2/rcm/data/config/drop-ins/tdwrElevations.txt
%config(noreplace) /awips2/rcm/data/config/drop-ins/ssssElevationLists.txt
%docdir /awips2/rcm/licenses
%dir /awips2/rcm/licenses

View file

@ -0,0 +1 @@
After updating the edex-component spec file, run generatePatchFiles.sh from the parent folder and commit any changed patch0 files that are updated.

View file

@ -0,0 +1 @@
To update the Data Delivery installer, modify the component.spec file. Then, run generatePatchFiles.sh from the parent folder.

View file

@ -0,0 +1,144 @@
#
# AWIPS II Edex "component" spec file
#
%define __prelink_undo_cmd %{nil}
# Turn off the brp-python-bytecompile script
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-java-repack-jars[[:space:]].*$!!g')
Name: awips2-edex-datadelivery
Summary: awips2-edex-datadelivery Installation
Version: %{_component_version}
Release: %{_component_release}
Group: AWIPSII
BuildRoot: %{_build_root}
URL: N/A
License: N/A
Distribution: N/A
Vendor: Raytheon
Packager: Bryan Kowal
provides: awips2-edex-datadelivery
requires: awips2
requires: awips2-edex-base
requires: awips2-python
requires: awips2-java
requires: awips2-psql
%description
AWIPS II Edex - Installs AWIPS II Edex Plugins.
%prep
# Verify That The User Has Specified A BuildRoot.
if [ "%{_build_root}" = "" ]
then
echo "ERROR: The RPM Build Root has not been specified."
exit 1
fi
if [ -d %{_build_root} ]; then
rm -rf %{_build_root}
fi
%build
%install
mkdir -p %{_build_root}
if [ $? -ne 0 ]; then
exit 1
fi
# prepare the init.d directory path
mkdir -p %{_build_root}/etc/init.d
if [ $? -ne 0 ]; then
exit 1
fi
unzip %{_baseline_workspace}/build.edex/edex/dist/edex-datadelivery.zip \
-d %{_build_root}
if [ $? -ne 0 ]; then
exit 1
fi
# include the init.d script
INSTALLER_RPM="%{_baseline_workspace}/rpms"
EDEX_DATADELIVERY="${INSTALLER_RPM}/awips2.edex/Installer.edex-datadelivery"
cp -v ${EDEX_DATADELIVERY}/scripts/init.d/* \
%{_build_root}/etc/init.d
if [ $? -ne 0 ]; then
exit 1
fi
# rename the script to prevent naming conflicts during installation
pushd . > /dev/null 2>&1
cd %{_build_root}/etc/init.d
mv edexServiceList edexServiceList-datadelivery
popd > /dev/null 2>&1
#add central registry script
mkdir -p %{_build_root}/awips2/edex/bin/
if [ $? -ne 0 ]; then
exit 1
fi
cp -v %{_baseline_workspace}/deploy.edex-Data_Delivery/esb/bin/centralRegistryProviderCredentials.sh %{_build_root}/awips2/edex/bin/
if [ $? -ne 0 ]; then
exit 1
fi
#create a list of all files packaged for /awips2/edex/data/utility
UTILITY=/awips2/edex/data/utility
if [ -d %{_build_root}/$UTILITY ]; then
cd %{_build_root}/$UTILITY
find . -type f > %{_build_root}/awips2/edex/util_filelist.%{name}.txt
fi
%pre
%post
# replace the service list script with the datadelivery service list script
if [ -f /etc/init.d/edexServiceList ]; then
mv /etc/init.d/edexServiceList /etc/init.d/edexServiceList.orig
if [ $? -ne 0 ]; then
exit 1
fi
fi
cp /etc/init.d/edexServiceList-datadelivery /etc/init.d/edexServiceList
if [ $? -ne 0 ]; then
exit 1
fi
#change date stamp of utility files
UTILITY=/awips2/edex/data/utility
UTIL_FILENAME=/awips2/edex/util_filelist.%{name}.txt
if [ -d $UTILITY ] && [ -f $UTIL_FILENAME ]; then
while read fileName
do
touch "$UTILITY/$fileName"
done < $UTIL_FILENAME
rm -f $UTIL_FILENAME
fi
%preun
if [ "${1}" = "1" ]; then
exit 0
fi
# restore the original service list script with the datadelivery service list script
if [ -f /etc/init.d/edexServiceList.orig ]; then
mv /etc/init.d/edexServiceList.orig /etc/init.d/edexServiceList
if [ $? -ne 0 ]; then
exit 1
fi
fi
%postun
%clean
rm -rf ${RPM_BUILD_ROOT}
%files
%defattr(644,awips,fxalpha,755)
%dir /awips2
%dir /awips2/edex
/awips2/edex/*
%dir /awips2/edex/bin
%attr(744, -, -) /awips2/edex/bin/centralRegistryProviderCredentials.sh
%attr(744,root,root) /etc/init.d/*

View file

@ -1,5 +1,5 @@
*** Installer.edex-component/component.spec 2015-04-08 09:08:06.552124581 -0400
--- Installer.edex-datadelivery/component.spec 2015-04-08 09:24:36.369123969 -0400
*** Installer.edex-component/component.spec 2015-08-25 15:19:06.962255321 -0500
--- Installer.edex-datadelivery/component.spec 2015-09-15 15:57:16.669506673 -0500
***************
*** 6,13 ****
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')

View file

@ -0,0 +1 @@
To update the Hazard Services installer, modify the component.spec file. Then, run generatePatchFiles.sh from the parent folder.

View file

@ -0,0 +1,140 @@
#
# AWIPS II EDEX Hazard Services spec file
#
%define __prelink_undo_cmd %{nil}
# Turn off the brp-python-bytecompile script
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-java-repack-jars[[:space:]].*$!!g')
Name: awips2-%{_component_name}
Summary: awips2-%{_component_name} Installation
Version: %{_component_version}
Release: %{_component_release}
Group: AWIPSII
BuildRoot: %{_build_root}
URL: N/A
License: N/A
Distribution: N/A
Vendor: Raytheon
provides: awips2-%{_component_name}
requires: awips2
requires: awips2-edex-base
requires: awips2-python
requires: awips2-java
requires: awips2-psql
%description
AWIPS II Edex - Installs AWIPS II Edex Plugins.
%prep
# Verify That The User Has Specified A BuildRoot.
if [ "%{_build_root}" = "" ]
then
echo "ERROR: The RPM Build Root has not been specified."
exit 1
fi
if [ -d %{_build_root} ]; then
rm -rf %{_build_root}
fi
%build
%install
mkdir -p %{_build_root}
if [ $? -ne 0 ]; then
exit 1
fi
unzip %{_baseline_workspace}/build.edex/edex/dist/%{_component_name}.zip \
-d %{_build_root}
if [ $? -ne 0 ]; then
exit 1
fi
#create the edex scripts dir
EDEX_SCRIPTS_DIR=%{_build_root}/awips2/edex/scripts/
if [ ! -d $EDEX_SCRIPTS_DIR ]; then
mkdir -p $EDEX_SCRIPTS_DIR
if [ $? -ne 0 ]; then
exit 1
fi
fi
# verify HazardServices directory exists and copy in files
HS_NAME=HazardServices
TOOLS_HS_DIR=%{_baseline_workspace}/tools/$HS_NAME
if [ -d $TOOLS_HS_DIR ]; then
cp -Rv $TOOLS_HS_DIR $EDEX_SCRIPTS_DIR
if [ $? -ne 0 ]; then
exit 1
fi
fi
# HazardServices dir may not be available, as tools/HazardServices may not exist
# if not available, create the directory for other scripts
if [ ! -d $EDEX_SCRIPTS_DIR/$HS_NAME ]; then
mkdir -p $EDEX_SCRIPTS_DIR/$HS_NAME
if [ $? -ne 0 ]; then
exit 1
fi
fi
#copy in specific files for HS
if [ -d $EDEX_SCRIPTS_DIR/$HS_NAME ]; then
cp -v %{_baseline_workspace}/tools/parseWarngenTemplate.py $EDEX_SCRIPTS_DIR/$HS_NAME
if [ $? -ne 0 ]; then
exit 1
fi
cp -v %{_baseline_workspace}/tools/ingestshapefiles.sh $EDEX_SCRIPTS_DIR/$HS_NAME
if [ $? -ne 0 ]; then
exit 1
fi
fi
#create a list of all files packaged for /awips2/edex/data/utility
UTILITY=/awips2/edex/data/utility
if [ -d %{_build_root}/$UTILITY ]; then
cd %{_build_root}/$UTILITY
find . -type f > %{_build_root}/awips2/edex/util_filelist.%{name}.txt
fi
%pre
%post
#change date stamp of utility files
UTILITY=/awips2/edex/data/utility
UTIL_FILENAME=/awips2/edex/util_filelist.%{name}.txt
if [ -d $UTILITY ] && [ -f $UTIL_FILENAME ]; then
while read fileName
do
touch "$UTILITY/$fileName"
done < $UTIL_FILENAME
rm -f $UTIL_FILENAME
fi
%preun
%postun
%clean
rm -rf ${RPM_BUILD_ROOT}
%files
%defattr(644,awips,fxalpha,755)
%dir /awips2
%dir /awips2/edex
%dir /awips2/edex/conf
/awips2/edex/*
%defattr(755,awips,fxalpha,-)
/awips2/edex/scripts/*

View file

@ -0,0 +1,92 @@
*** Installer.edex-component/component.spec 2015-08-25 15:19:06.962255321 -0500
--- Installer.edex-hazards/component.spec 2015-09-17 14:08:29.271876049 -0500
***************
*** 1,5 ****
#
! # AWIPS II Edex "component" spec file
#
%define __prelink_undo_cmd %{nil}
# Turn off the brp-python-bytecompile script
--- 1,5 ----
#
! # AWIPS II EDEX Hazard Services spec file
#
%define __prelink_undo_cmd %{nil}
# Turn off the brp-python-bytecompile script
***************
*** 16,22 ****
License: N/A
Distribution: N/A
Vendor: Raytheon
- Packager: Bryan Kowal
provides: awips2-%{_component_name}
requires: awips2
--- 16,21 ----
***************
*** 55,60 ****
--- 54,107 ----
exit 1
fi
+ #create the edex scripts dir
+ EDEX_SCRIPTS_DIR=%{_build_root}/awips2/edex/scripts/
+ if [ ! -d $EDEX_SCRIPTS_DIR ]; then
+ mkdir -p $EDEX_SCRIPTS_DIR
+
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ fi
+
+
+ # verify HazardServices directory exists and copy in files
+ HS_NAME=HazardServices
+ TOOLS_HS_DIR=%{_baseline_workspace}/tools/$HS_NAME
+ if [ -d $TOOLS_HS_DIR ]; then
+
+ cp -Rv $TOOLS_HS_DIR $EDEX_SCRIPTS_DIR
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+
+ fi
+
+ # HazardServices dir may not be available, as tools/HazardServices may not exist
+ # if not available, create the directory for other scripts
+ if [ ! -d $EDEX_SCRIPTS_DIR/$HS_NAME ]; then
+ mkdir -p $EDEX_SCRIPTS_DIR/$HS_NAME
+
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ fi
+
+ #copy in specific files for HS
+ if [ -d $EDEX_SCRIPTS_DIR/$HS_NAME ]; then
+
+ cp -v %{_baseline_workspace}/tools/parseWarngenTemplate.py $EDEX_SCRIPTS_DIR/$HS_NAME
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+
+ cp -v %{_baseline_workspace}/tools/ingestshapefiles.sh $EDEX_SCRIPTS_DIR/$HS_NAME
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+
+ fi
+
#create a list of all files packaged for /awips2/edex/data/utility
UTILITY=/awips2/edex/data/utility
if [ -d %{_build_root}/$UTILITY ]; then
***************
*** 87,90 ****
--- 134,140 ----
%defattr(644,awips,fxalpha,755)
%dir /awips2
%dir /awips2/edex
+ %dir /awips2/edex/conf
/awips2/edex/*
+ %defattr(755,awips,fxalpha,-)
+ /awips2/edex/scripts/*

View file

@ -60,15 +60,13 @@ export DATA_ARCHIVE_ROOT=/tmp/sbn
# what to do to get pids of an EDEX instance
# $1 == instance token
getCamelAndWrapperPids() {
_camel_pid=`pgrep -f "java.*-Dedex.run.mode=${1} "`
_camel_pid=`pgrep -f -u $EDEXUSER "java -Dedex.run.mode=${1} "`
if [ "$_camel_pid" != "" ]; then
# grab wrapper pid from edex process, run throw awk to throw away leading white space
# occasionally will get more than one running, grab parent for first one only
_camel_pid="${_camel_pid%% *}"
# grab wrapper pid from edex process, run through awk to throw away leading white space
_wrapper_pid=`ps --no-headers -p $_camel_pid -o ppid | awk '{print $1}'`
# if wrapper died, camel's parent will be 1, don't report that as the wrapper
if [ "$_wrapper_pid" == "1" ]
then
_wrapper_pid=""
fi
else
# camel not up, double check wrapper pid file
pidfile=${EDEX_INSTALL}/bin/${1}.pid
@ -92,7 +90,7 @@ getCamelAndWrapperPids() {
# $1 == instance token
startEDEX() {
getCamelAndWrapperPids ${1}
if [ "$_wrapper_pid" != "" ]; then
if [ "$_wrapper_pid" != "" -o "$_camel_pid" != "" ]; then
echo "WARNING: EDEX ${1} instance already running, not starting another instance"
return 1
fi
@ -144,18 +142,25 @@ stopEDEX() {
while [ "${_wrapper_pid}${_camel_pid}" != "" ]; do
if [ "$_wrapper_pid" != "$savepid" ]; then
# only display warning when other wrapper starts (not if wrapper died)
if [ -n "$_wrapper_pid" ]
then
echo "WARNING: EDEX ${1} instance running under new pid, started by another user?"
if [ "$_wrapper_pid" != "" ]; then
kill $_wrapper_pid
savepid=$_wrapper_pid
fi
return 1
fi
let cnt+=1
let mod10=cnt%10
if [ $cnt -eq 10 ]; then
if [ $cnt -ge 300 ]; then
echo "Force killing EDEX ${1}"
if [ "$_camel_pid" != "" ]; then
kill -9 $_camel_pid
fi
if [ "$_wrapper_pid" != "" ]; then
kill -9 $_wrapper_pid
fi
elif [ $mod10 -eq 0 ]; then
echo "Waiting for EDEX ${1} to shutdown"
cnt=0;
fi
sleep 1

View file

@ -80,20 +80,20 @@ else
echo "Building for architecture ... ${EDEX_BUILD_ARCH}."
fi
function patchDDSpecification()
function patchSpecification()
{
# copy the standard rpm feature specification into the
# data delivery rpm project directory
# component's project directory
cp -v Installer.edex-component/component.spec \
Installer.edex-datadelivery/component.spec
Installer.${COMPONENT_NAME}/component.spec
if [ $? -ne 0 ]; then
exit 1
fi
# apply the specification patch
pushd . > /dev/null 2>&1
cd Installer.edex-datadelivery
patch -p1 -i datadelivery.patch0
cd Installer.${COMPONENT_NAME}
patch -p1 -i *.patch0
if [ $? -ne 0 ]; then
exit 1
fi
@ -155,23 +155,32 @@ cd ../
buildRPM "Installer.edex"
buildRPM "Installer.edex-configuration"
buildRPM "Installer.edex-shapefiles"
# build the edex-datadelivery rpm
export COMPONENT_NAME="edex-datadelivery"
patchDDSpecification
buildRPM "Installer.edex-datadelivery"
# build the edex-hazards component
export COMPONENT_NAME="edex-hazards"
patchSpecification
buildRPM "Installer.edex-hazards"
unset COMPONENT_NAME
DIST="${WORKSPACE}/build.edex/edex/dist"
for edex_zip in `cd ${DIST}; ls -1;`;
do
edex_component=`python -c "zipFile='${edex_zip}'; componentName=zipFile.replace('.zip',''); print componentName;"`
# do not build edex-datadelivery since it is now built differently from the other edex feature rpms
# since this is currently the only case, the exclusion will be hard-coded
#Data Delivery and Hazard Services components are built separately
if [ ! "${edex_component}" = "edex-datadelivery" ] &&
[ ! "${edex_component}" = "common-base" ]; then
[ ! "${edex_component}" = "common-base" ] &&
[ ! "${edex_component}" = "edex-hazards" ]; then
export COMPONENT_NAME="${edex_component}"
buildRPM "Installer.edex-component"
fi
done
# build the edex-datadelivery rpm
export COMPONENT_NAME="edex-datadelivery"
patchSpecification
buildRPM "Installer.edex-datadelivery"
unset COMPONENT_NAME
#build shapefiles RPM last
buildRPM "Installer.edex-shapefiles"

View file

@ -0,0 +1,6 @@
#hazard services
diff -crb Installer.edex-component/component.spec Installer.edex-hazards/component.spec > Installer.edex-hazards/hazards.patch0
#data delivery
diff -crb Installer.edex-component/component.spec Installer.edex-datadelivery/component.spec > Installer.edex-datadelivery/datadelivery.patch0