diff --git a/cave/com.raytheon.uf.viz.archive/META-INF/MANIFEST.MF b/cave/com.raytheon.uf.viz.archive/META-INF/MANIFEST.MF index 16c422a542..66240afa76 100644 --- a/cave/com.raytheon.uf.viz.archive/META-INF/MANIFEST.MF +++ b/cave/com.raytheon.uf.viz.archive/META-INF/MANIFEST.MF @@ -16,7 +16,8 @@ Require-Bundle: org.eclipse.ui;bundle-version="3.8.2", com.raytheon.uf.common.time;bundle-version="1.12.1174", com.raytheon.uf.common.util;bundle-version="1.12.1174", com.raytheon.uf.viz.core;bundle-version="1.12.1174", - com.raytheon.uf.common.units;bundle-version="1.0.0" + com.raytheon.uf.common.units;bundle-version="1.0.0", + com.raytheon.uf.common.auth;bundle-version="1.12.1174" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Import-Package: org.apache.commons.compress.archivers, diff --git a/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveCaseCreationDialogAction.java b/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveCaseCreationDialogAction.java index a0c772fd40..6f4167f384 100644 --- a/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveCaseCreationDialogAction.java +++ b/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveCaseCreationDialogAction.java @@ -1,3 +1,22 @@ +/** + * 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.archive; import org.eclipse.core.commands.AbstractHandler; @@ -6,7 +25,15 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import com.raytheon.uf.common.archive.request.ArchiveAdminAuthRequest; +import com.raytheon.uf.common.auth.user.IUser; +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.viz.archive.ui.CaseCreationDlg; +import com.raytheon.uf.viz.core.auth.UserController; +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.uf.viz.core.requests.ThriftClient; /** * Action to bring up the Archive Case Creation dialog.. @@ -18,6 +45,7 @@ import com.raytheon.uf.viz.archive.ui.CaseCreationDlg; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * May 16, 2013 1966 rferrel Initial creation + * Oct 02, 2013 2326 rferrel Check for administration authorization. * * * @@ -25,8 +53,14 @@ import com.raytheon.uf.viz.archive.ui.CaseCreationDlg; * @version 1.0 */ public class ArchiveCaseCreationDialogAction extends AbstractHandler { + private final IUFStatusHandler statusHandler = UFStatus + .getHandler(ArchiveCaseCreationDialogAction.class); + private CaseCreationDlg dialog; + /** Case Administration permission */ + private final String PERMISSION = "archive.casecreation"; + /* * (non-Javadoc) * @@ -36,16 +70,44 @@ public class ArchiveCaseCreationDialogAction extends AbstractHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - if (dialog == null || dialog.isDisposed()) { - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getShell(); - dialog = new CaseCreationDlg(shell); - dialog.open(); - } else { - dialog.bringToTop(); + if (isAuthorized()) { + if (dialog == null || dialog.isDisposed()) { + Shell shell = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getShell(); + dialog = new CaseCreationDlg(shell); + dialog.open(); + } else { + dialog.bringToTop(); + } } return null; } + /** + * Is user authorized? + * + * @return true if authorized + */ + private boolean isAuthorized() { + IUser user = UserController.getUserObject(); + String msg = user.uniqueId() + + " does not have permission to access archive case creation dialog."; + ArchiveAdminAuthRequest request = new ArchiveAdminAuthRequest(); + request.setRoleId(PERMISSION); + request.setNotAuthorizedMessage(msg); + request.setUser(user); + + try { + Object o = ThriftClient.sendPrivilegedRequest(request); + if (o instanceof ArchiveAdminAuthRequest) { + ArchiveAdminAuthRequest r = (ArchiveAdminAuthRequest) o; + return r.isAuthorized(); + } + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); + } + + return false; + } } diff --git a/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveRetentionDialogAction.java b/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveRetentionDialogAction.java index d9a6fa1d60..67d3da0d53 100644 --- a/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveRetentionDialogAction.java +++ b/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ArchiveRetentionDialogAction.java @@ -1,3 +1,22 @@ +/** + * 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.archive; import org.eclipse.core.commands.AbstractHandler; @@ -6,7 +25,15 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; +import com.raytheon.uf.common.archive.request.ArchiveAdminAuthRequest; +import com.raytheon.uf.common.auth.user.IUser; +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.viz.archive.ui.ArchiveRetentionDlg; +import com.raytheon.uf.viz.core.auth.UserController; +import com.raytheon.uf.viz.core.exception.VizException; +import com.raytheon.uf.viz.core.requests.ThriftClient; /** * Action to display the Archive Retention dialog. @@ -18,6 +45,7 @@ import com.raytheon.uf.viz.archive.ui.ArchiveRetentionDlg; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * May 16, 2013 1966 rferrel Initial creation + * Oct 02, 2013 2326 rferrel Check for administration authorization. * * * @@ -25,8 +53,14 @@ import com.raytheon.uf.viz.archive.ui.ArchiveRetentionDlg; * @version 1.0 */ public class ArchiveRetentionDialogAction extends AbstractHandler { + private final IUFStatusHandler statusHandler = UFStatus + .getHandler(ArchiveRetentionDialogAction.class); + private ArchiveRetentionDlg dialog; + /** Retention Administration permission */ + private final String PERMISSION = "archive.retention"; + /* * (non-Javadoc) * @@ -36,15 +70,44 @@ public class ArchiveRetentionDialogAction extends AbstractHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - if (dialog == null || dialog.isDisposed()) { - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getShell(); - dialog = new ArchiveRetentionDlg(shell); - dialog.open(); - } else { - dialog.bringToTop(); + if (isAuthorized()) { + if (dialog == null || dialog.isDisposed()) { + Shell shell = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getShell(); + dialog = new ArchiveRetentionDlg(shell); + dialog.open(); + } else { + dialog.bringToTop(); + } } return null; } + + /** + * Is user authorized? + * + * @return true if authorized + */ + private boolean isAuthorized() { + IUser user = UserController.getUserObject(); + String msg = user.uniqueId() + + " does not have permission to access archive retention dialog."; + ArchiveAdminAuthRequest request = new ArchiveAdminAuthRequest(); + request.setRoleId(PERMISSION); + request.setNotAuthorizedMessage(msg); + request.setUser(user); + + try { + Object o = ThriftClient.sendPrivilegedRequest(request); + if (o instanceof ArchiveAdminAuthRequest) { + ArchiveAdminAuthRequest r = (ArchiveAdminAuthRequest) o; + return r.isAuthorized(); + } + } catch (VizException e) { + statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); + } + + return false; + } } diff --git a/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ui/ArchiveRetentionDlg.java b/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ui/ArchiveRetentionDlg.java index 7a3fd7f52e..0e3267a288 100644 --- a/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ui/ArchiveRetentionDlg.java +++ b/cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ui/ArchiveRetentionDlg.java @@ -37,6 +37,7 @@ import org.eclipse.swt.widgets.Spinner; import com.raytheon.uf.common.archive.config.ArchiveConstants.Type; import com.raytheon.uf.common.archive.config.DisplayData; +import com.raytheon.uf.common.time.util.TimeUtil; /** * Archive retention dialog. @@ -53,6 +54,7 @@ import com.raytheon.uf.common.archive.config.DisplayData; * Jul 24, 2013 #2220 rferrel Add recompute size button. * Jul 24, 2013 #2221 rferrel Changes for select configuration. * Aug 26, 2013 #2225 rferrel Make dialog perspective independent. + * Oct 01, 2013 #2147 rferrel Change getEnd() to pick up files with future time stamps. * * * @@ -305,7 +307,10 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg { @Override protected Calendar getEnd() { // display all elements so no end bound - return null; + Calendar endCal = TimeUtil.newCalendar(); + // Back off an hour so latter rounding doesn't cause overflow. + endCal.setTimeInMillis(Long.MAX_VALUE - TimeUtil.MILLIS_PER_HOUR); + return endCal; } /* diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/VizApp.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/VizApp.java index 642e0ea3bf..13b2ac02c9 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/VizApp.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/VizApp.java @@ -50,6 +50,8 @@ import com.raytheon.uf.viz.core.localization.LocalizationManager; * 7/1/06 chammack Initial Creation. * Sep 12, 2012 1167 djohnson Add datadelivery servers. * Jan 14, 2013 1469 bkowal Removed the hdf5 data directory. + * Aug 27, 2013 2295 bkowal Removed the jms server property; added + * jms connection string * * * @@ -70,16 +72,10 @@ public final class VizApp { private static String httpServer; - private static String jmsServer; + private static String jmsConnectionString; private static String pypiesServer; - private static String dataDeliveryServer; - - private static String dataDeliveryLcmServer; - - private static String dataDeliveryQueryServer; - static { ManagementFactory.getRuntimeMXBean().getName(); } @@ -240,12 +236,12 @@ public final class VizApp { VizApp.httpServer = System.getProperty("awips.httpServer", httpServer); } - public static String getJmsServer() { - return jmsServer; + public static String getJmsConnectionString() { + return jmsConnectionString; } - public static void setJmsServer(String jmsServer) { - VizApp.jmsServer = jmsServer; + public static void setJmsConnectionString(String jmsConnectionString) { + VizApp.jmsConnectionString = jmsConnectionString; } public static String getPypiesServer() { diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/comm/JMSConnection.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/comm/JMSConnection.java index 592b3f7984..51eabed1c1 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/comm/JMSConnection.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/comm/JMSConnection.java @@ -20,14 +20,13 @@ package com.raytheon.uf.viz.core.comm; -import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.jms.ConnectionFactory; - import org.apache.qpid.client.AMQConnectionFactory; -import org.apache.qpid.url.URLSyntaxException; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.viz.core.VizApp; /** @@ -44,16 +43,23 @@ import com.raytheon.uf.viz.core.VizApp; * included in a url. * May 09, 2013 1814 rjpeter Updated prefetch to 10. * Aug 16, 2013 2169 bkowal CAVE will now synchronously acknowledge messages. + * Aug 27, 2013 2295 bkowal The entire connection string is now provided by EDEX; so, it + * no longer needs to be constructed. Replaced stacktrace + * printing with UFStatus. * * * @author chammack * @version 1.0 */ public class JMSConnection { + private static final IUFStatusHandler statusHandler = UFStatus + .getHandler(JMSConnection.class); + + private static final String WSID_PLACEHOLDER = "__WSID__"; private static JMSConnection instance; - private final String jndiProviderUrl; + private final String connectionUrl; private AMQConnectionFactory factory; @@ -66,38 +72,27 @@ public class JMSConnection { } public JMSConnection() { - this(VizApp.getJmsServer()); + this(VizApp.getJmsConnectionString()); } - public JMSConnection(String jndiProviderUrl) { - this.jndiProviderUrl = jndiProviderUrl; + public JMSConnection(String connectionUrl) { + this.connectionUrl = connectionUrl; try { - // do not enable retry/connectdelay connection and factory will - // silently reconnect and user will never be notified qpid is down - // and cave/text workstation will just act like they are hung - // up to each individual component that opens a connection to handle - // reconnect - this.factory = new AMQConnectionFactory( - "amqp://guest:guest@" - + URLEncoder.encode(VizApp.getWsId().toString(), - "UTF-8") - + "/edex?brokerlist='" - + this.jndiProviderUrl - + "?connecttimeout='5000'&heartbeat='0''&maxprefetch='10'&sync_publish='all'&failover='nofailover'&sync_ack='true'"); - } catch (URLSyntaxException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (UnsupportedEncodingException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); + String wsid = URLEncoder.encode(VizApp.getWsId().toString(), + "UTF-8"); + this.factory = new AMQConnectionFactory(this.connectionUrl.replace( + WSID_PLACEHOLDER, wsid)); + } catch (Exception e) { + statusHandler.fatal("Failed to connect to the JMS Server!", e); } } /** - * @return the jndiProviderUrl + * + * @return the jms connection url */ - public String getJndiProviderUrl() { - return jndiProviderUrl; + public String getConnectionUrl() { + return connectionUrl; } /** diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationInitializer.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationInitializer.java index 9fa72603ad..8dc375d9f3 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationInitializer.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationInitializer.java @@ -50,6 +50,8 @@ import com.raytheon.uf.viz.core.exception.VizException; * Sep 12, 2012 1167 djohnson Add datadelivery servers. * Jan 14, 2013 1469 bkowal Removed the hdf5 data directory. * Aug 02, 2013 2202 bsteffen Add edex specific connectivity checking. + * Aug 27, 2013 2295 bkowal The entire jms connection string is now + * provided by EDEX. * * * @@ -126,7 +128,7 @@ public class LocalizationInitializer { LocalizationManager.getInstance().getLocalizationServer(), false); VizApp.setHttpServer(resp.getHttpServer()); - VizApp.setJmsServer(resp.getJmsServer()); + VizApp.setJmsConnectionString(resp.getJmsConnectionString()); VizApp.setPypiesServer(resp.getPypiesServer()); VizServers.getInstance().setServerLocations(resp.getServerLocations()); } diff --git a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationManager.java b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationManager.java index 74f49ea780..8e577dc2ed 100644 --- a/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationManager.java +++ b/cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/localization/LocalizationManager.java @@ -93,6 +93,8 @@ import com.raytheon.uf.viz.core.requests.ThriftClient; * Sep 12, 2012 1167 djohnson Add datadelivery servers. * Jan 14, 2013 1469 bkowal Removed the hdf5 data directory. * Aug 02, 2013 2202 bsteffen Add edex specific connectivity checking. + * Aug 27, 2013 2295 bkowal The entire jms connection string is now + * provided by EDEX. * * * @@ -148,8 +150,8 @@ public class LocalizationManager implements IPropertyChangeListener { this.overrideServer = false; this.overrideSite = false; try { - localizationStore = new ScopedPreferenceStore(new InstanceScope(), - "localization"); + localizationStore = new ScopedPreferenceStore( + InstanceScope.INSTANCE, "localization"); localizationStore.addPropertyChangeListener(this); loadHttpServer(); loadAlertServer(); @@ -222,7 +224,7 @@ public class LocalizationManager implements IPropertyChangeListener { GetServersResponse resp = ConnectivityManager.checkLocalizationServer( currentServer, false); VizApp.setHttpServer(resp.getHttpServer()); - VizApp.setJmsServer(resp.getJmsServer()); + VizApp.setJmsConnectionString(resp.getJmsConnectionString()); VizApp.setPypiesServer(resp.getPypiesServer()); VizServers.getInstance().setServerLocations( resp.getServerLocations()); @@ -910,40 +912,6 @@ public class LocalizationManager implements IPropertyChangeListener { return responses; } - /** - * Makes a request to the UtilitySrv - * - * @param request - * the request to make - * @return the responses from the request - * @throws VizException - */ - private AbstractUtilityResponse[] makeRequest( - PrivilegedUtilityRequestMessage request) - throws LocalizationOpFailedException { - - AbstractUtilityResponse[] responseList = null; - - UtilityResponseMessage localizationResponse = null; - try { - localizationResponse = (UtilityResponseMessage) ThriftClient - .sendLocalizationRequest(request); - } catch (VizException e) { - throw new LocalizationOpFailedException("Localization error", e); - } - if (localizationResponse != null) { - responseList = localizationResponse.getResponses(); - - for (AbstractUtilityResponse response : responseList) { - if (!response.successful()) { - throw new LocalizationOpFailedException( - response.getFormattedErrorMessage()); - } - } - } - return responseList; - } - public boolean isOverrideServer() { return overrideServer; } diff --git a/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/ThinClientNotificationManagerJob.java b/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/ThinClientNotificationManagerJob.java index 71dc290fd2..7e058551c6 100644 --- a/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/ThinClientNotificationManagerJob.java +++ b/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/ThinClientNotificationManagerJob.java @@ -35,7 +35,9 @@ import com.raytheon.uf.viz.core.requests.ThriftClient; import com.raytheon.uf.viz.thinclient.preferences.ThinClientPreferenceConstants; /** - * TODO Add Description + * Listens to changes to the "Disable JMS" option in the Thin Client + * Preferences. Will automatically connect to and disconnect from the + * JMS Server as the option is updated. * *
  * 
@@ -44,6 +46,8 @@ import com.raytheon.uf.viz.thinclient.preferences.ThinClientPreferenceConstants;
  * Date         Ticket#    Engineer    Description
  * ------------ ---------- ----------- --------------------------
  * Nov 29, 2011            bsteffen     Initial creation
+ * Aug 27, 2013 2295       bkowal       The entire jms connection string is now
+ *                                      provided by EDEX.
  * 
  * 
* @@ -96,13 +100,14 @@ public class ThinClientNotificationManagerJob extends NotificationManagerJob if (disableJMS) { disconnect(true); } else { - if (VizApp.getJmsServer() == null) { + if (VizApp.getJmsConnectionString() == null) { GetServersRequest req = new GetServersRequest(); GetServersResponse resp; try { resp = (GetServersResponse) ThriftClient .sendLocalizationRequest(req); - VizApp.setJmsServer(resp.getJmsServer()); + VizApp.setJmsConnectionString(resp + .getJmsConnectionString()); } catch (VizException e) { statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e); diff --git a/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/localization/ThinClientLocalizationInitializer.java b/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/localization/ThinClientLocalizationInitializer.java index 853c352cbb..346bd45b8c 100644 --- a/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/localization/ThinClientLocalizationInitializer.java +++ b/cave/com.raytheon.uf.viz.thinclient/src/com/raytheon/uf/viz/thinclient/localization/ThinClientLocalizationInitializer.java @@ -47,9 +47,11 @@ import com.raytheon.uf.viz.thinclient.ui.ThinClientConnectivityDialog; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Nov 23, 2011 bsteffen Initial creation - * Dec 06, 2012 1396 njensen Added setting VizServers + * Dec 06, 2012 1396 njensen Added setting VizServers * Jan 14, 2013 1469 bkowal Removed setting the hdf5 data directory * Aug 02, 2013 2202 bsteffen Add edex specific connectivity checking. + * Aug 27, 2013 2295 bkowal The entire jms connection string is + * now provided by EDEX. * * * @@ -90,7 +92,7 @@ public class ThinClientLocalizationInitializer extends LocalizationInitializer { if (!disableJMS) { GetServersResponse resp = ConnectivityManager.checkLocalizationServer( servicesProxy, false); - VizApp.setJmsServer(resp.getJmsServer()); + VizApp.setJmsConnectionString(resp.getJmsConnectionString()); } VizApp.setHttpServer(servicesProxy); VizApp.setPypiesServer(store @@ -100,12 +102,13 @@ public class ThinClientLocalizationInitializer extends LocalizationInitializer { HttpClient.getInstance().setCompressRequests(compressRequests); // use the proxy for all servers in VizServers + @SuppressWarnings("unchecked") Map serversMap = new DefaultedMap(servicesProxy); VizServers.getInstance().setServerLocations(serversMap); } else { processGetServers(); if (disableJMS) { - VizApp.setJmsServer(null); + VizApp.setJmsConnectionString(null); } } } diff --git a/edexOsgi/build.edex/esb/bin/setup.env b/edexOsgi/build.edex/esb/bin/setup.env index 83124ec081..6ef0225a30 100644 --- a/edexOsgi/build.edex/esb/bin/setup.env +++ b/edexOsgi/build.edex/esb/bin/setup.env @@ -49,6 +49,7 @@ export EBXML_REGISTRY_FEDERATION_ENABLED=false export HTTP_PORT=9581 export HTTP_SERVER=http://localhost:${HTTP_PORT}/services export JMS_SERVER=tcp://localhost:5672 +export JMS_VIRTUALHOST=edex export RADAR_SERVER=tcp://localhost:8813 export DATADELIVERY_SERVER=http://${DATADELIVERY_HOST}:${EBXML_THRIFT_SERVICE_PORT}/services export EBXML_REGISTRY_SERVICE=http://${EBXML_REGISTRY_HOST}:${EBXML_THRIFT_SERVICE_PORT}/services diff --git a/edexOsgi/build.edex/esb/conf/modes.xml b/edexOsgi/build.edex/esb/conf/modes.xml index 4ad3bd6038..a09b46417a 100644 --- a/edexOsgi/build.edex/esb/conf/modes.xml +++ b/edexOsgi/build.edex/esb/conf/modes.xml @@ -111,6 +111,58 @@ cpgsrv-spring.xml .*sbn-simulator.* + + distribution-spring.xml + manualIngest-common.xml + manualIngest-spring.xml + shef-ingest.xml + shef-common.xml + ohd-common.xml + alarmWhfs-spring.xml + arealffgGenerator-spring.xml + arealQpeGen-spring.xml + DPADecoder-spring.xml + dqcPreprocessor-spring.xml + floodArchiver-spring.xml + freezingLevel-spring.xml + hpeDHRDecoder-spring.xml + ihfsDbPurge-spring.xml + logFilePurger-spring.xml + mpeFieldgen-spring.xml + mpeHpeFilePurge-spring.xml + mpeLightningSrv-ingest.xml + mpeProcessGrib-spring.xml + ohdSetupService-spring.xml + pointDataRetrievel-spring.xml + q2FileProcessor-spring.xml + satpre-spring.xml + purge-logs.xml + + + ohd-common.xml + database-common.xml + ohd-request.xml + alertviz-request.xml + auth-common.xml + auth-request.xml + menus-request.xml + utility-request.xml + management-common.xml + management-request.xml + manualIngest-common.xml + manualIngest-request.xml + nwsauth-request.xml + persist-request.xml + site-common.xml + site-request.xml + time-common.xml + units-common.xml + useradmin-common.xml + useradmin-request.xml + event-common.xml + eventbus-common.xml + edex-request.xml + time-common.xml auth-common.xml diff --git a/edexOsgi/build.edex/esb/conf/spring/edex.xml b/edexOsgi/build.edex/esb/conf/spring/edex.xml index 96d436518b..7d63afb395 100644 --- a/edexOsgi/build.edex/esb/conf/spring/edex.xml +++ b/edexOsgi/build.edex/esb/conf/spring/edex.xml @@ -14,7 +14,7 @@ - + diff --git a/edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFG_TIR_HIRES.xml b/edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFG_TIR_HIRES.xml new file mode 100644 index 0000000000..f67aadaac8 --- /dev/null +++ b/edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFG_TIR_HIRES.xml @@ -0,0 +1,13 @@ + + + FFG_TIR_HIRES + pluginName,info.ensembleId,info.secondaryId,dataTime + + + + + + + + + diff --git a/edexOsgi/build.edex/esb/etc/ingestHydro.sh b/edexOsgi/build.edex/esb/etc/ingestHydro.sh new file mode 100644 index 0000000000..3ef1b62953 --- /dev/null +++ b/edexOsgi/build.edex/esb/etc/ingestHydro.sh @@ -0,0 +1,29 @@ +#!/bin/bash +## +# 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. +## + +export INIT_MEM=412 # in Meg +export MAX_MEM=796 # in Meg + +export METADATA_POOL_MIN=4 +export EDEX_DEBUG_PORT=5006 +export EDEX_JMX_PORT=1617 +export LOG4J_CONF=log4j-ingest.xml +export MGMT_PORT=9602 diff --git a/edexOsgi/build.edex/esb/etc/requestHydro.sh b/edexOsgi/build.edex/esb/etc/requestHydro.sh new file mode 100644 index 0000000000..4d07d95073 --- /dev/null +++ b/edexOsgi/build.edex/esb/etc/requestHydro.sh @@ -0,0 +1,36 @@ +#!/bin/bash +## +# 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. +## +export INIT_MEM=128 # in Meg +if [ "$EDEX_ARCH" == "64-bit" ]; then + export MAX_MEM=1648 # in Meg +else + export MAX_MEM=880 # in Meg +fi +export SERIALIZE_POOL_MAX_SIZE=24 +export SERIALIZE_STREAM_INIT_SIZE_MB=2 +export SERIALIZE_STREAM_MAX_SIZE_MB=8 + + +export JMS_POOL_MIN=8 +export JMS_POOL_MAX=24 +export EDEX_DEBUG_PORT=5005 +export EDEX_JMX_PORT=1616 +export MGMT_PORT=9601 diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java index 42f2be1a89..151dfa34f1 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEDao.java @@ -101,6 +101,7 @@ import com.raytheon.uf.edex.database.query.DatabaseQuery; * 08/08/13 DR16485 ryu Remove call to getDatabaseId() from getMaxInsertTimeByDbId() * so new GFE databases aren't accidentally created. * 08/05/13 #1571 randerso Added support for storing GridLocation and ParmStorageInfo in database + * 09/30/2013 #2147 rferrel Changes to archive hdf5 files. * * * @@ -119,6 +120,7 @@ public class GFEDao extends DefaultPluginDao { */ public GFEDao() throws PluginException { super("gfe"); + this.pathProvider = new GFEPathProvider(); } /** @@ -130,6 +132,7 @@ public class GFEDao extends DefaultPluginDao { */ public GFEDao(String pluginName) throws PluginException { super(pluginName); + this.pathProvider = new GFEPathProvider(); } /** diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEPathProvider.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEPathProvider.java new file mode 100644 index 0000000000..9a0d37c4e5 --- /dev/null +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/db/dao/GFEPathProvider.java @@ -0,0 +1,97 @@ +/** + * 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.gfe.db.dao; + +import java.io.File; + +import com.raytheon.edex.plugin.gfe.server.database.GridDatabase; +import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord; +import com.raytheon.uf.common.dataplugin.gfe.util.GfeUtil; +import com.raytheon.uf.common.dataplugin.persist.DefaultPathProvider; +import com.raytheon.uf.common.dataplugin.persist.IPersistable; + +/** + * Provider for GFE that uses the GfeUtil to get the HDF5 path and file names. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Sep 23, 2013            rferrel     Initial creation
+ * 
+ * 
+ * + * @author rferrel + * @version 1.0 + */ + +public class GFEPathProvider extends DefaultPathProvider { + + /** + * Constructor. + */ + public GFEPathProvider() { + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.common.dataplugin.persist.DefaultPathProvider#getHDFFileName + * (java.lang.String, + * com.raytheon.uf.common.dataplugin.persist.IPersistable) + */ + @Override + public String getHDFFileName(String pluginName, IPersistable persistable) { + String name = null; + if (persistable instanceof GFERecord) { + GFERecord gfeRecord = (GFERecord) persistable; + File hdf5File = GfeUtil.getHdf5File(GridDatabase.gfeBaseDataDir, + gfeRecord.getParmId(), gfeRecord.getTimeRange()); + name = hdf5File.toString(); + name = name.substring(name.lastIndexOf(File.separator) + 1); + } + return name; + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.common.dataplugin.persist.DefaultPathProvider#getHDFPath + * (java.lang.String, + * com.raytheon.uf.common.dataplugin.persist.IPersistable) + */ + @Override + public String getHDFPath(String pluginName, IPersistable persistable) { + String path = null; + path = super.getHDFPath(pluginName, persistable); + if (persistable instanceof GFERecord) { + GFERecord gfeRecord = (GFERecord) persistable; + File pathDir = GfeUtil.getHdf5Dir(GridDatabase.gfeBaseDataDir, + gfeRecord.getDbId()); + path = pathDir.toString(); + path = path.substring(pluginName.length() + 1); + } + return path; + } +} diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_AQA_MultiPil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_AQA_MultiPil.py index 0f2f64b084..b135763d2f 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_AQA_MultiPil.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_AQA_MultiPil.py @@ -47,7 +47,7 @@ class TextProduct(GenericHazards.TextProduct): elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items Definition["productName"] = "AIR QUALITY ALERT" # name of product diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_MWW_MultiPil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_MWW_MultiPil.py index 909c523f88..759335f6c4 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_MWW_MultiPil.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_MWW_MultiPil.py @@ -46,7 +46,7 @@ class TextProduct(GenericHazards.TextProduct): elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_NPW_MultiPil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_NPW_MultiPil.py index a0e6bbd5a4..ddcb1b1fab 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_NPW_MultiPil.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_NPW_MultiPil.py @@ -46,7 +46,7 @@ class TextProduct(GenericHazards.TextProduct): elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_RFW_MultiPil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_RFW_MultiPil.py index 39f473ef5b..db74856844 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_RFW_MultiPil.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_RFW_MultiPil.py @@ -55,7 +55,7 @@ class TextProduct(GenericHazards.TextProduct): elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items Definition["productName"] = "URGENT - FIRE WEATHER MESSAGE" # name of product diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_WSW_MultiPil.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_WSW_MultiPil.py index f1904bef32..a30b05e0a7 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_WSW_MultiPil.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/Hazard_WSW_MultiPil.py @@ -46,7 +46,7 @@ class TextProduct(GenericHazards.TextProduct): elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/SPS_MultiPil_Local.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/SPS_MultiPil_Local.py index 2e40b81245..ec33e3639e 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/SPS_MultiPil_Local.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/product/SPS_MultiPil_Local.py @@ -62,7 +62,7 @@ class TextProduct(GenericReport.TextProduct): elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # product identifiers Definition["productName"] = "SPECIAL WEATHER STATEMENT" # product name diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWFTable_Site_MultiPil_Definition.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWFTable_Site_MultiPil_Definition.py index 0dc183547a..a5a47a1866 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWFTable_Site_MultiPil_Definition.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWFTable_Site_MultiPil_Definition.py @@ -65,7 +65,7 @@ if "" == "AFG": elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items #Definition["productName"] = "FIRE WEATHER PLANNING FORECAST" # name of product diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWF_Site_MultiPil_Definition.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWF_Site_MultiPil_Definition.py index e0dc06099c..d014b408ea 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWF_Site_MultiPil_Definition.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FWF_Site_MultiPil_Definition.py @@ -63,7 +63,7 @@ if "" == "AFG": elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] #Definition["tempLocalEffects"] = 1 # Set to 1 to enable Temp and RH local effects AFTER # creating AboveElev and BelowElev edit areas diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FireWxZones_EA_Site_MultiPil_Definition.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FireWxZones_EA_Site_MultiPil_Definition.py index c0c21fd75c..6fba4b7524 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FireWxZones_EA_Site_MultiPil_Definition.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/FireWxZones_EA_Site_MultiPil_Definition.py @@ -53,6 +53,6 @@ if "" == "AFG": elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/PublicZones_EA_Site_MultiPil_Definition.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/PublicZones_EA_Site_MultiPil_Definition.py index 31172df316..7b64fa5da1 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/PublicZones_EA_Site_MultiPil_Definition.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/PublicZones_EA_Site_MultiPil_Definition.py @@ -53,5 +53,5 @@ if "" == "AFG": elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/SRF_Site_MultiPil_Definition.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/SRF_Site_MultiPil_Definition.py index 7463e52494..20fc1e9fc5 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/SRF_Site_MultiPil_Definition.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/SRF_Site_MultiPil_Definition.py @@ -75,7 +75,7 @@ if "" == "AFG": elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] #Definition["tempLocalEffects"] = 1 # Set to 1 to enable Temp and RH local effects AFTER # creating Inland and Coastal edit areas #Definition["windLocalEffects"] = 1 # Set to 1 to enable wind local effects AFTER diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/ZFP_Site_MultiPil_Definition.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/ZFP_Site_MultiPil_Definition.py index 7977b22eec..b3cae1a4bf 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/ZFP_Site_MultiPil_Definition.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/textproducts/templates/utility/ZFP_Site_MultiPil_Definition.py @@ -61,7 +61,7 @@ if "" == "AFG": elif "_" == "_WCZ": Definition["subDomainUGCs"] = ["AKZ207","AKZ208","AKZ209","AKZ210", "AKZ211","AKZ212","AKZ213","AKZ214", - "AKZ215","AKZ216","AKZ217"] + "AKZ215","AKZ216","AKZ217","AKZ227"] # Header configuration items #Definition["productName"] = "ZONE FORECAST PRODUCT" # name of product diff --git a/edexOsgi/com.raytheon.edex.utilitysrv/src/com/raytheon/edex/services/GetServersHandler.java b/edexOsgi/com.raytheon.edex.utilitysrv/src/com/raytheon/edex/services/GetServersHandler.java index ead823087b..f276c1107b 100644 --- a/edexOsgi/com.raytheon.edex.utilitysrv/src/com/raytheon/edex/services/GetServersHandler.java +++ b/edexOsgi/com.raytheon.edex.utilitysrv/src/com/raytheon/edex/services/GetServersHandler.java @@ -43,6 +43,8 @@ import com.raytheon.uf.common.util.registry.GenericRegistry; * Jan 14, 2013 1469 bkowal No longer includes the hdf5 data directory * in the response. * May 28, 2013 1989 njensen Uses env variables instead of system props + * Aug 27, 2013 2295 bkowal Return the entire jms connection url in + * the response. * * * @@ -61,18 +63,41 @@ public class GetServersHandler extends GenericRegistry GetServersResponse response = new GetServersResponse(); String httpServer = System.getenv("HTTP_SERVER"); String jmsServer = System.getenv("JMS_SERVER"); + String jmsVirtualHost = System.getenv("JMS_VIRTUALHOST"); String pypiesServer = System.getenv("PYPIES_SERVER"); + String jmsConnectionString = this.constructJMSConnectionString( + jmsServer, jmsVirtualHost); logger.info("http.server=" + httpServer); logger.info("jms.server=" + jmsServer); + logger.info("jms.virtualhost=" + jmsVirtualHost); logger.info("pypies.server=" + pypiesServer); logger.info("server locations=" + registry); ; response.setHttpServer(httpServer); - response.setJmsServer(jmsServer); + response.setJmsConnectionString(jmsConnectionString); response.setPypiesServer(pypiesServer); response.setServerLocations(Collections.unmodifiableMap(this.registry)); return response; } + + // do not enable retry/connectdelay connection and factory will + // silently reconnect and user will never be notified qpid is down + // and cave/text workstation will just act like they are hung + // up to each individual component that opens a connection to handle + // reconnect + private String constructJMSConnectionString(String jmsServer, + String jmsVirtualHost) { + /* build the connection String that CAVE will use. */ + StringBuilder stringBuilder = new StringBuilder( + "amqp://guest:guest@__WSID__/"); + stringBuilder.append(jmsVirtualHost); + stringBuilder.append("?brokerlist='"); + stringBuilder.append(jmsServer); + stringBuilder + .append("?connecttimeout='5000'&heartbeat='0''&maxprefetch='10'&sync_publish='all'&failover='nofailover'&sync_ack='true'"); + + return stringBuilder.toString(); + } } diff --git a/edexOsgi/com.raytheon.uf.common.archive/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.common.archive/META-INF/MANIFEST.MF index fb1b6e2af0..fdbfc9a0b5 100644 --- a/edexOsgi/com.raytheon.uf.common.archive/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.common.archive/META-INF/MANIFEST.MF @@ -7,9 +7,13 @@ Bundle-Vendor: RAYTHEON Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.raytheon.uf.common.archive.config, com.raytheon.uf.common.archive.config.select, - com.raytheon.uf.common.archive.exception + com.raytheon.uf.common.archive.exception, + com.raytheon.uf.common.archive.request Require-Bundle: com.raytheon.uf.common.util, com.raytheon.uf.common.localization, com.raytheon.uf.common.status, org.apache.commons.io, - com.raytheon.uf.common.time + com.raytheon.uf.common.time, + com.raytheon.uf.common.serialization;bundle-version="1.12.1174", + com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174", + com.raytheon.uf.common.auth;bundle-version="1.12.1174" diff --git a/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/config/CategoryDataSet.java b/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/config/CategoryDataSet.java index 91f61d4b45..a68e9f887f 100644 --- a/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/config/CategoryDataSet.java +++ b/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/config/CategoryDataSet.java @@ -42,6 +42,7 @@ import com.raytheon.uf.common.time.util.TimeUtil; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Aug 6, 2013 #2224 rferrel Initial creation + * Oct 02, 2013 #2147 rferrel Allow Date to ignore hour in time stamp. * * * @@ -160,7 +161,12 @@ public class CategoryDataSet { if (timeIndices.length > 0) { String[] indexValues = getDateGroupIndices().split("\\s*,\\s*"); for (int index = 0; index < timeIndices.length; ++index) { - timeIndices[index] = Integer.parseInt(indexValues[index]); + if (indexValues.length > index) { + timeIndices[index] = Integer + .parseInt(indexValues[index]); + } else { + timeIndices[index] = -1; + } } } } @@ -233,8 +239,15 @@ public class CategoryDataSet { .group(timeIndices[CategoryDataSet.MONTH_INDEX])) - 1; int day = Integer.parseInt(matcher .group(timeIndices[CategoryDataSet.DAY_INDEX])); - int hour = Integer.parseInt(matcher - .group(timeIndices[CategoryDataSet.HOUR_INDEX])); + + // Default to last hour of the day. + int hour = 23; + + if (timeIndices[CategoryDataSet.HOUR_INDEX] >= 0) { + hour = Integer.parseInt(matcher + .group(timeIndices[CategoryDataSet.HOUR_INDEX])); + } + fileCal.set(year, month, day, hour, 0, 0); fileTime = fileCal.getTimeInMillis(); break; diff --git a/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/request/ArchiveAdminAuthRequest.java b/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/request/ArchiveAdminAuthRequest.java new file mode 100644 index 0000000000..375c5e8d48 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.archive/src/com/raytheon/uf/common/archive/request/ArchiveAdminAuthRequest.java @@ -0,0 +1,107 @@ +/** + * 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.archive.request; + +import com.raytheon.uf.common.auth.req.AbstractPrivilegedRequest; +import com.raytheon.uf.common.serialization.ISerializableObject; +import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; +import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; + +/** + * Class with the serialized data for the Archive Admin. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Oct 02, 2013 2326       rferrel    Initial creation
+ * 
+ * 
+ * + * @author rferrel + * @version 1.0 + */ +@DynamicSerialize +public class ArchiveAdminAuthRequest extends AbstractPrivilegedRequest + implements ISerializableObject { + + @DynamicSerializeElement + private String roleId = null; + + @DynamicSerializeElement + private boolean authorized = false; + + @DynamicSerializeElement + private String notAuthorizedMessage = "Not Authorized"; + + /** + * Constructor + */ + public ArchiveAdminAuthRequest() { + + } + + /** + * @param roleId + * the roleId to set + */ + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + /** + * @return the roleId + */ + public String getRoleId() { + return roleId; + } + + /** + * @return the authorized + */ + public boolean isAuthorized() { + return authorized; + } + + /** + * @param authorized + * the authorized to set + */ + public void setAuthorized(boolean authorized) { + this.authorized = authorized; + } + + /** + * @return the notAuthorizedMessage + */ + public String getNotAuthorizedMessage() { + return notAuthorizedMessage; + } + + /** + * @param notAuthorizedMessage + * the failureMessage to set + */ + public void setNotAuthorizedMessage(String notAuthorizedMessage) { + this.notAuthorizedMessage = notAuthorizedMessage; + } +} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/db/objects/GFERecord.java b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/db/objects/GFERecord.java index 9bae76c55f..369b00841d 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/db/objects/GFERecord.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/db/objects/GFERecord.java @@ -25,6 +25,7 @@ package com.raytheon.uf.common.dataplugin.gfe.db.objects; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.Date; import java.util.List; import java.util.TimeZone; @@ -47,6 +48,7 @@ import org.hibernate.annotations.OnDeleteAction; import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.annotations.DataURI; import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory; +import com.raytheon.uf.common.dataplugin.persist.IPersistable; import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; import com.raytheon.uf.common.time.DataTime; @@ -78,6 +80,7 @@ import com.raytheon.uf.common.time.TimeRange; * May 13, 2013 1869 bsteffen Remove DataURI column from GFE. * Jun 20, 2013 2127 rjpeter Added OnDelete annotation. * Aug 30, 2013 2298 rjpeter Make getPluginName abstract + * Sep 20, 2013 2147 rferrel Changes to archive hdf5 files. * * * @@ -96,7 +99,7 @@ import com.raytheon.uf.common.time.TimeRange; "refTime", "forecastTime" }) }) @DynamicSerialize @BatchSize(size = 500) -public class GFERecord extends PluginDataObject { +public class GFERecord extends PluginDataObject implements IPersistable { private static final long serialVersionUID = 1L; @@ -283,4 +286,16 @@ public class GFERecord extends PluginDataObject { public String getPluginName() { return PLUGIN_NAME; } + + @Override + public Date getPersistenceTime() { + return getInsertTime().getTime(); + } + + @Override + public void setPersistenceTime(Date persistTime) { + Calendar pTime = Calendar.getInstance(); + pTime.setTime(persistTime); + setInsertTime(pTime); + } } diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm deleted file mode 100644 index d08608219d..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.vm +++ /dev/null @@ -1,826 +0,0 @@ -#################################### -## FLOOD ADVISORY FOLLOW-UP ZONES ## -#################################### -## Created by Mike Dangelo 09-19-2011 at Alaska TIM for zones -## Edited by Mike Dangelo 01-26-2012 at CRH TIM -## Edited by Phil Kurimski 2-29-2012 -## Mike Dangelo 9-13-2012 minor tweaks to ${variables} -## -#if(${action} == "EXT") - #set($starttime = "000000T0000Z") - #set($extend = true) -#else - #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})}) - #set($extend = false) -#end -## -#if(${list.contains(${bullets}, "uss")}) - #set($advType = "URBAN AND SMALL STREAM FLOOD ADVISORY") - #set($advTypeShort = "URBAN AND SMALL STREAM FLOODING") -#elseif(${list.contains(${bullets}, "small")}) - #set($advType = "SMALL STREAM FLOOD ADVISORY") - #set($advTypeShort = "SMALL STREAM FLOODING") -#elseif(${list.contains(${bullets}, "arroyo")}) - #set($advType = "ARROYO AND SMALL STREAM FLOOD ADVISORY") - #set($advTypeShort = "ARROYO AND SMALL STREAM FLOODING") -#elseif(${list.contains(${bullets}, "hydrologic")}) - #set($advType = "HYDROLOGIC ADVISORY") - #set($advTypeShort = "MINOR FLOODING") -#else - #set($advType = "FLOOD ADVISORY") - #set($advTypeShort = "MINOR FLOODING") -#end -#if(${ic} == "SM") - #set($hycType = "FOR MELTING SNOW IN") -#elseif(${ic} == "RS") - #set($hycType = "FOR RAIN AND MELTING SNOW IN") -#elseif(${ic} == "IJ") - #set($hycType = "FOR ICE JAM FLOODING IN") -#elseif(${ic} == "IC") - #set($hycType = "FOR AN ICE JAM AND RAIN") -#elseif(${list.contains(${bullets}, "ic1")}) - #set($hycType = "FOR RAPID RIVER RISES IN") -#elseif(${list.contains(${bullets}, "ic2")}) - #set($hycType = "FOR MINOR FLOODING OF POOR DRAINAGE AREAS IN") -#end -#set($hycType = "") -#set($report = "!** warning basis **!") -#set($typeofevent = "") -#set($report2 = "") -#set($cause = "HEAVY RAIN") -#if(${list.contains(${bullets}, "rapidRiver")}) - #set($report2 = ". RAPID RIVER RISES WILL RESULT IN MINOR FLOODING") - #set($hycType = "FOR RAPID RIVER RISES ") -#end -#if(${list.contains(${bullets}, "poorDrainage")}) - #set($report2 = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING") - #set($hycType = "FOR MINOR FLOODING OF POOR DRAINAGE AREAS ") -#end -#if(${ic} == "SM") - #set($cause = "SNOW MELT") - #set($hycType = "FOR MELTING SNOW ") -#end -#if(${ic} == "RS") - #set($cause = "HEAVY RAIN AND SNOW MELT") - #set($hycType = "FOR RAIN AND MELTING SNOW ") -#end -#if(${ic} == "IJ") - #set($cause = "AN ICE JAM") - #set($hycType = "FOR ICE JAM FLOODING ") -#end -#if(${ic} == "IC") - #set($cause = "AN ICE JAM AND HEAVY RAIN") -#end -#if(${list.contains(${bullets}, "rapidRiver")}) - #set($typeofevent = ". RAPID RIVER RISES ARE EXPECTED") -#end -#if(${list.contains(${bullets}, "poorDrainage")}) - #set($typeofevent = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING") -#end -#if(${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "A GLACIER-DAMMED LAKEOUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!") -#end -#if(${list.contains(${bullets}, "groundWater")}) - #set($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!") -#end -#if(${list.contains(${bullets}, "satellite")}) - #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "satelliteGauge")}) - #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "doppler")}) - #set($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "dopplerGauge")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${report2} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "trainedSpotters")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${report2}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "actual")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${report2}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "actual")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${report2}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "emergencyManagement")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "actual")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "actual")}) - #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${report2}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE MINOR FLOODING${report2}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "doppler")} || ${list.contains(${bullets}, "dopplerGauge")}) -#set($estimate = "UP TO !** Number **! INCHES OF RAIN HAS FALLEN IN THE PAST HOUR.") -#else -#set($estimate = "") -#end -########################################## -## FLOOD ADVISORY FOLLOW-UP HEADER INFO ## -########################################## -#if(${action}=="COR" && ${cancelareas}) -#set($CORCAN = "true") -#else -#set($CORCAN = "false") -#end -#if(${action}!="CANCON" && ${CORCAN}!="true") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD ADVISORY...TEST -#else -FLOOD ADVISORY -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -${ugcline} -/${productClass}.${action}.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#end -######################## -## FLOOD ADVISORY CAN ## -######################## -#if(${action}=="CAN") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... - -########### END NEW HEADLINE CODE #################### - -#if(${list.contains(${bullets}, "recedingWater")}) -THE HIGH WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES. - -#end -#if(${list.contains(${bullets}, "rainEnded")}) -THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT. - -#else -!** THE HEAVY RAIN HAS ENDED. !** OR **! THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **! - -#end -#end -######################## -## FLOOD ADVISORY EXP ## -######################## -#if(${action}=="EXP") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} ${hycType}## -#if(${now.compareTo(${expire})} > -1) -EXPIRED AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ## -#else -WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ## -#end -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... - -########### END NEW HEADLINE CODE #################### - -#if(${list.contains(${bullets}, "recedingWater")}) -THE HIGH WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A THREAT. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES. - -#end -#if(${list.contains(${bullets}, "rainEnded")}) -THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT. - -#end -#end -######################## -## FLOOD ADVISORY CON ## -######################## -#if(${action}=="CON" || ${action}=="COR") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} ${hycType}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... - -########### END NEW HEADLINE CODE #################### - -#if(${productClass}=="T") - -THIS IS A TEST MESSAGE. ## -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...!** warning basis **! -#else - -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...${report}. ${estimate} -#end - -#set($phenomena = "FLASH FLOOD") -#set($warningType = "ADVISORY") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -## REMMED OUT FOR Alaska -## #locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA -#if(${list.contains(${bullets}, "fcstPoint")}) -FOR THE !** insert river name and forecast point **!... -AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET. -FLOOD STAGE IS !** xx.x **! FEET. -FORECAST... !** insert crest stage and time **!. -IMPACTS...!** discussion of expected impacts and flood path **! -#else -!** insert impacts and flood path **! - -#end - -#if(${list.contains(${bullets}, "addRainfall")}) -ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL CAUSE MINOR FLOODING. - -#end -#if(${list.contains(${bullets}, "specificPlace")}) -MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!. - -#end -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -##################### -## CALL TO ACTIONS ## -##################### -##Check to see if we've selected any calls to action. In our .xml file -##we ended each CTA bullet ID with "CTA" for this reason as a 'trip' -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -#if(${list.contains(${bullets}, "dontdrownCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "urbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "donotdriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "lowspotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "powerCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${list.contains(${bullets}, "advisoryMeansCTA")}) -A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. KEEP AN EYE ON WATERWAYS AND BE PREPARED TO TAKE ACTION. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### -#end -############################ -## FLOOD ADVISORY CAN/CON ## -############################ -#if(${action}=="CANCON") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD ADVISORY...TEST -#else -FLOOD ADVISORY -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -${ugclinecan} -/${productClass}.CAN.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#elseif(${CORCAN} == "true") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD ADVISORY...TEST -#else -FLOOD ADVISORY -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -${ugclinecan} -/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${cancelareas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${cancelaffectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... -########### END NEW HEADLINE CODE #################### - -## One line explanation - user can delete the one they don't want -## or delete both and explain why manually -!** THE HEAVY RAIN HAS ENDED. THEREFORE...THE FLOODING THREAT HAS ENDED. **! -!** THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **! - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -${ugcline} -/${productClass}.CON.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} REMAINS IN EFFECT UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... -########### END NEW HEADLINE CODE #################### - -#if(${productClass}=="T") - -THIS IS A TEST MESSAGE. ## -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...!** warning basis **! -#else - -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...${report}. ${estimate} -#end - -#set($phenomena = "FLASH FLOOD") -#set($warningType = "ADVISORY") - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -##locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA -#if(${list.contains(${bullets}, "fcstPoint")}) -FOR THE !** insert river name and forecast point **!... -AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET. -FLOOD STAGE IS !** xx.x **! FEET. -FORECAST... !** insert crest stage and time **!. -IMPACTS...!** discussion of expected impacts and flood path **! -#else -!** insert impacts and flood path **! - -#end -#if(${list.contains(${bullets}, "addRainfall")}) - -ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING. -#end -#if(${list.contains(${bullets}, "specificPlace")}) - -MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!. -#end - -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end -##################### -## CALL TO ACTIONS ## -##################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -#if(${list.contains(${bullets}, "dontdrownCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "urbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "donotdriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "lowspotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "powerCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${list.contains(${bullets}, "advisoryMeansCTA")}) -A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### -#elseif(${CORCAN}=="true") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD ADVISORY...TEST -#else -FLOOD ADVISORY -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -${ugclinecan} -/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#elseif(${CORCAN} == "true") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD ADVISORY...TEST -#else -FLOOD ADVISORY -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -${ugclinecan} -/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} ${hycType}HAS BEEN CANCELLED FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${cancelareas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${cancelaffectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... -########### END NEW HEADLINE CODE #################### - -## One line explanation - user can delete the one they don't want -## or delete both and explain why manually -!** THE HEAVY RAIN HAS ENDED. THEREFORE...THE FLOODING THREAT HAS ENDED. **! -!** THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **! - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -${ugcline} -/${productClass}.COR.${vtecOffice}.FA.Y.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE ${advType} REMAINS IN EFFECT UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... -########### END NEW HEADLINE CODE #################### - -#if(${productClass}=="T") - -THIS IS A TEST MESSAGE. ## -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...!** warning basis **! -#else - -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...${report}. ${estimate} -#end - -#set($phenomena = "FLASH FLOOD") -#set($warningType = "ADVISORY") - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -##locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA -#if(${list.contains(${bullets}, "fcstPoint")}) -FOR THE !** insert river name and forecast point **!... -AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET. -FLOOD STAGE IS !** xx.x **! FEET. -FORECAST... !** insert crest stage and time **!. -IMPACTS...!** discussion of expected impacts and flood path **! -#else -!** insert impacts and flood path **! - -#end -#if(${list.contains(${bullets}, "addRainfall")}) - -ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL MAKE MINOR FLOODING. -#end -#if(${list.contains(${bullets}, "specificPlace")}) - -MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!. -#end - -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end -##################### -## CALL TO ACTIONS ## -##################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -#if(${list.contains(${bullets}, "dontdrownCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "urbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "donotdriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "lowspotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "powerCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${list.contains(${bullets}, "advisoryMeansCTA")}) -A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#end -#################################### -## END OF FLOOD ADVISORY PRODUCTS ## -#################################### -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end - -#printcoords(${areaPoly}, ${list}) - - -$$ - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml deleted file mode 100644 index b1c7b3fd20..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisoryFollowup_Zones.xml +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - - - mi - mph - - - - Forecast Zones - - - - - - - - COR - CAN - CON - EXP - - - - - FA.Y - - - - false - - - true - - - - 30 - - 30 - - -ic,advType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - - - AREA - true - 8.0 - 5 - 5 - 4 - 8 - Name - - NAME - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - AREA - 1 - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - - NAME - AREA - POINTS - true - 10 - 200 - - distance - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm deleted file mode 100644 index 85ce41f807..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisory_Zones.vm +++ /dev/null @@ -1,374 +0,0 @@ -############################ -## FLOOD ADVISORY ZONES ## -############################ -## Created by Mike Dangelo 9-21-2011 at Alaska TIM ## -## Mary-Beth Schreck, Ed Plumb, Aaron Jacobs 9-22-2011 at Alaska TIM -## Mike Dangelo 01-26-2012 at CRH TIM -## Phil Kurimski 2-29-2012 -## Evan Bookbinder 4-25-2012 for OB 12.3.1 (MND) -## Mike Dangelo 9-13-2012 minor tweaks to ${variables} -## Mike Dangelo 2-06-2013 default bullets for advType, advTypeShort, ic and hycType -## -#if(${action} == "EXT") - #set($starttime = "000000T0000Z") - #set($extend = true) -#else - #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})}) - #set($extend = false) -#end -## -#set($advType = "FLOOD ADVISORY") -#set($advTypeShort = "MINOR FLOODING") -#if(${list.contains(${bullets}, "general")}) - #set($advType = "FLOOD ADVISORY") - #set($advTypeShort = "MINOR FLOODING") -#elseif(${list.contains(${bullets}, "small")}) - #set($advType = "SMALL STREAM FLOOD ADVISORY") - #set($advTypeShort = "SMALL STREAM FLOODING") -#elseif(${list.contains(${bullets}, "uss")}) - #set($advType = "URBAN AND SMALL STREAM FLOOD ADVISORY") - #set($advTypeShort = "URBAN AND SMALL STREAM FLOODING") - #set($extend = false) -#elseif(${list.contains(${bullets}, "arroyo")}) - #set($advType = "ARROYO AND SMALL STREAM FLOOD ADVISORY") - #set($advTypeShort = "ARROYO AND SMALL STREAM FLOODING") - #set($extend = false) -#elseif(${list.contains(${bullets}, "hydrologic")}) - #set($advType = "HYDROLOGIC ADVISORY") - #set($advTypeShort = "MINOR FLOODING") - #set($extend = false) -#end -## -#set($ic = "ER") -#set($hycType = "") -#if(${list.contains(${bullets}, "ER")}) - #set($ic = "ER") - #set($hycType = "") -#elseif(${list.contains(${bullets}, "SM")}) - #set($ic = "SM") - #set($hycType = "MELTING SNOW") -#elseif(${list.contains(${bullets}, "RS")}) - #set($ic = "RS") - #set($hycType = "RAIN AND MELTING SNOW") -#elseif(${list.contains(${bullets}, "IJ")}) - #set($ic = "IJ") - #set($hycType = "ICE JAM FLOODING") -#elseif(${list.contains(${bullets}, "IC")}) - #set($ic = "IC") -#elseif(${list.contains(${bullets}, "rapidRiver")}) - #set($hycType = "RAPID RIVER RISES") -#elseif(${list.contains(${bullets}, "poorDrainage")}) - #set($hycType = "MINOR FLOODING OF POOR DRAINAGE AREAS") -#elseif(${list.contains(${bullets}, "GO")}) - #set($ic = "GO") - #set($hycType = "A GLACIER-DAMMED LAKE OUTBURST") -#elseif(${list.contains(${bullets}, "OT")}) - #set($ic = "OT") - #set($hycType = "GROUND WATER FLOODING") -#elseif(${list.contains(${bullets}, "DR")}) - #set($ic = "DR") - #set($hycType = "DAM GATE RELEASE") -#end -## -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD ADVISORY...TEST -#else -FLOOD ADVISORY -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -${ugcline} -/${productClass}.${action}.${vtecOffice}.FA.Y.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.N.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#headlineext(${officeLoc}, ${backupSite}, ${extend}) - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -${advType} FOR... -#if(${hycType} != "") -## ${hycType} IN... (EXCLUDED FOR AK) - ${hycType}... -#end -##REMMED OUT FOR ALASKA -###firstBullet(${areas}) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###firstBullet(${affectedCounties}) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) - -#set($report = "!** warning basis **!") -#set($typeofevent = "") -#set($cause = "HEAVY RAIN") -#set($rainAmount = "") -#if(${list.contains(${bullets}, "SM")}) - #set($cause = "SNOW MELT") -#end -#if(${list.contains(${bullets}, "RS")}) - #set($cause = "HEAVY RAIN AND SNOW MELT") -#end -#if(${list.contains(${bullets}, "IJ")}) - #set($cause = "AN ICE JAM") -#end -#if(${list.contains(${bullets}, "IC")}) - #set($cause = "AN ICE JAM AND HEAVY RAIN") -#end -#if(${list.contains(${bullets}, "SM")}) - #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO SNOW MELT") -#end -#if(${list.contains(${bullets}, "RS")}) - #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO HEAVY RAIN AND SNOW MELT") -#end -#if(${list.contains(${bullets}, "IJ")}) - #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO AN ICE JAM") -#end -#if(${list.contains(${bullets}, "IC")}) - #set($report = "MINOR FLOODING IS !** OCCURRING/EXPECTED **! DUE TO AN ICE JAM AND HEAVY RAIN") -#end -#if(${list.contains(${bullets}, "rapidRiver")}) - #set($typeofevent = ". RAPID RIVER RISES ARE EXPECTED") -#end -#if(${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "A GLACIER-DAMMED LAKEOUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!") -#end -#if(${list.contains(${bullets}, "groundWater")}) - #set($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!") -#end -#if(${list.contains(${bullets}, "poorDrainage")}) - #set($typeofevent = ". OVERFLOWING POOR DRAINAGE AREAS WILL RESULT IN MINOR FLOODING") -#end -#if(${list.contains(${bullets}, "satellite")}) - #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "satelliteGauge")}) - #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "doppler")}) - #set($report = "DOPPLER RADAR INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "dopplerGauge")}) - #set($report = "AUTOMATED RAIN GAUGES INDICATED ${cause} THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED ${cause} DUE TO A LINE OF THUNDERSTORMS THAT WILL CAUSE ${advTypeShort}${typeofevent} IN THE ADVISORY AREA") -#end -#if(${list.contains(${bullets}, "trainedSpotters")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "actual")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "actual")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! DUE TO A THUNDERSTORM IN THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "actual")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE ${advTypeShort}${typeofevent}") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "THE PUBLIC REPORTED ${advTypeShort} IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE ${advTypeShort}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "actual")}) - #set($report = "THE PUBLIC REPORTED ${cause} CAUSING ${advTypeShort} IN !** LOCATION **!${typeofevent}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "THE PUBLIC REPORTED ${cause} IN !** LOCATION **! THAT WILL CAUSE MINOR FLOODING${typeofevent}") -#end -#if(${list.contains(${bullets}, "rain1")} ) - #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain2")} ) - #set($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain3")} ) - #set($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rainEdit")} ) - #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "doppler")} || ${list.contains(${bullets}, "dopplerGauge")}) -#set($estimate = "UP TO !** Number **! INCHES OF RAIN HAS FALLEN IN THE PAST HOUR.") -#else -#set($estimate = "") -#end - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...${report}. ${estimate}${rainAmount} - -#set($phenomena = "FLOOD") -#set($warningType = "ADVISORY") -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -## #locationsList("SOME LOCATIONS THAT WILL EXPERIENCE MINOR FLOODING INCLUDE" "THE FLOODING IS EXPECTED TO IMPACT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA -#if(${list.contains(${bullets}, "fcstPoint")}) -FOR THE !** insert river name and forecast point **!... -AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET. -FLOOD STAGE IS !** xx.x **! FEET. -FORECAST... !** insert crest stage and time **!. -IMPACTS...!** discussion of expected impacts and flood path **! -#else -!** insert impacts and flood path **! - -#end -#if(${list.contains(${bullets}, "addRainfall")}) - -ADDITIONAL RAINFALL OF !** Edit Amount **! INCHES IS EXPECTED OVER THE AREA. THIS ADDITIONAL RAIN WILL CAUSE MINOR FLOODING. -#end -#if(${list.contains(${bullets}, "specificPlace")}) - -MINOR FLOODING IS OCCURRING NEAR !** Enter Location **!. -#end - -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -##################### -## CALL TO ACTIONS ## -##################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -#if(${list.contains(${bullets}, "dontdrownCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "urbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "donotdriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "lowspotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "powerCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${list.contains(${bullets}, "advisoryMeansCTA")}) -A FLOOD ADVISORY MEANS RIVER OR STREAM FLOWS ARE ELEVATED...OR PONDING OF WATER IN URBAN OR OTHER AREAS IS OCCURRING OR IS IMMINENT. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -#parse("forecasterName.vm") - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml deleted file mode 100644 index aaa466f272..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodAdvisory_Zones.xml +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - - mi - mph - - - - Forecast Zones - - - - - - - - - NEW - COR - EXT - - - - - FA.Y - - - - true - - - true - - - 180 - - 60 - 120 - 180 - 210 - 240 - 270 - 300 - 330 - 360 - 420 - 480 - 540 - 600 - 660 - 720 - 1440 - 2160 - 2880 - 3600 - - -ic,advType - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - Zone - - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - STATE_ZONE - - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - AREA - 1 - true - 8.0 - 5 - 5 - 4 - 8 - Name - AREA - COUNTYNAME - - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - - NAME - AREA - POINTS - true - 10 - 200 - - distance - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm deleted file mode 100644 index 88d705f130..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.vm +++ /dev/null @@ -1,436 +0,0 @@ -### FLOOD WARNING FOLLOW UP in ZONES ###### -########################################### -####################################################################### -## Created BY MIKE DANGELO 9-19-2011 at Alaska TIM for zones coding ## -## Edited by Phil kurimski 2-29-2012 -## Edited by Mike Rega 5-02-2012 DR 14885-MND blank line -## Mike Dangelo 9-13-2012 minor tweaks to ${variables} -#################################### SET SOME VARs ################################### -#set($hycType = "") -#set($floodReason = "") -#set($floodType = "FLOODING") -###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY -#* -#if(${list.contains(${bullets}, "icrs")}) - #set($hycType = "RAIN AND SNOW MELT") - #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.") -#elseif(${list.contains(${bullets}, "icsm")}) - #set($hycType = "RAPID SNOW MELT") - #set($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains(${bullets}, "icij")}) - #set($hycType = "ICE JAM FLOODING") - #set($floodReason = " AN ICE JAM IS OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains(${bullets}, "icicr")}) - #set($hycType = "AN ICE JAM AND HEAVY RAIN") - #set($floodReason = " AN ICE JAM IS ALSO OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains(${bullets}, "icics")}) - #set($hycType = "AN ICE JAM AND RAPID SNOW MELT") - #set($floodReason = " AN ICE JAM AND RAPID SNOW MELT ARE ALSO OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains(${bullets}, "icerr")}) - #set($hycType = "RAPID RIVER RISES") -#end -*# -#if(${ic} == "SM") - #set($hycType = "RAPID SNOW MELT") - #set($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.") -#elseif(${ic} == "RS") - #set($hycType = "RAIN AND SNOW MELT") - #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.") -#elseif(${ic} == "IJ") - #set($hycType = "ICE JAM FLOODING") - #set($floodReason = " AN ICE JAM IS OCCURRING AND WILL CONTINUE TO CAUSE ${floodType}.") -#elseif(${ic} == "IC") - #set($hycType = "AN ICE JAM AND HEAVY RAIN") - #set($floodReason = " FLOODING DUE TO AN ICE JAM AND HEAVY RAIN WILL CONTINUE.") -#elseif(${ic} == "MC") - #set($hycType = "") - #set($floodReason = "") -#elseif(${ic} == "UU") - #set($hycType = "") - #set($floodReason = "") -#elseif(${ic} == "DM") - #set($hycType = "LEVEE FAILURE") - #set($floodReason = " FLOODING DUE TO A LEVEE FAILURE WILL CONTINUE.") -#elseif(${ic} == "DR") - #set($hycType = "DAM GATE RELEASE") - #set($floodReason = " FLOODING DUE TO A DAM GATE RELEASE.") -#elseif(${ic} == "GO") - #set($hycType = "GLACIER-DAMMED LAKE OUTBURST") - #set($floodReason = " FLOODING DUE TO A GLACIER-DAMMED LAKE OUTBURST.") -#elseif(${ic} == "OT") - #set($hycType = "GROUND WATER FLOODING") - #set($floodReason = " FLOODING DUE TO GROUND WATER.") -#end -## -###################################################################################### -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLS${siteId} - -#if(${productClass}=="T") -TEST...FLOOD STATEMENT...TEST -#else -FLOOD STATEMENT -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${action}=="COR" && ${cancelareas}) -#set($CORCAN = "true") -#else -#set($CORCAN = "false") -#end -#if(${action}=="CANCON") -${ugclinecan} -################### VTEC/COUNTY LINE ################## -/${productClass}.CAN.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} -#elseif(${CORCAN}=="true") -${ugclinecan} -################### VTEC/COUNTY LINE ################## -/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} -#else -${ugcline} -################### VTEC/COUNTY LINE ################## -/${productClass}.${action}.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -################################################################# -################################################################# -## LETS START WITH EXPIRATION AND CANCELLATION SEGMENTS ##### -################################################################# -################################################################# -### CREATE PHRASING DEPENDING ON WHETHER WE ISSUE EXP PRIOR TO EXPIRATION TIME OR NOT -#if(${now.compareTo(${expire})} >= 0 && ${action}=="EXP" ) - #set($expcanHLTag = "HAS EXPIRED") - #set($expcanBODYTag = "HAS BEEN ALLOWED TO EXPIRE") -#elseif(${action}=="EXP") - #set($expcanHLTag = "WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}") - #set($expcanBODYTag = "WILL BE ALLOWED TO EXPIRE") -#elseif(${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true") - #set($expcanHLTag = "IS CANCELLED") - #set($expcanBODYTag = "HAS BEEN CANCELLED") -#end -################################ -#### CREATE HEADLINES ########## -################################ -## County - -#if(${action}=="EXP" || ${action}=="CAN") -...THE FLOOD WARNING FOR ## -#if(${hycType} != "") -${hycType} IN ## -#end -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - ${expcanHLTag}... -## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE -#elseif(${action}=="CANCON" || ${CORCAN}=="true") -...THE FLOOD WARNING FOR ## -#if(${hycType} != "") -${hycType} IN ## -#end -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${cancelareas} true true true false) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${cancelaffectedCounties} true true true false) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - ${expcanHLTag}... -#end - -############################ -## END CAN/EXP HEADLINE #### -############################ -####################################### -## EXPIRATION/CANCELLATION STATEMENT ## -####################################### -#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN}) -#if(${list.contains(${bullets}, "recedingWater")} && ${list.contains(${bullets}, "rainEnded")}) -THE HEAVY RAIN HAS ENDED AND FLOOD WATERS HAVE RECEDED...NO LONGER POSING A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES. -#elseif(${list.contains(${bullets}, "recedingWater")}) -FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES. -#elseif(${list.contains(${bullets}, "rainEnded")}) -THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT. -#else -!** THE HEAVY RAIN HAS ENDED. !** OR **! THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **! -#end - -#printcoords(${areaPoly}, ${list}) - - -#end -#################################### END OF CAN STUFF ################################### -#### IF PARTIAL CANCELLATION, INSERT $$ AND 2ND UGC/MND SECTION PRIOR TO CON PORTION -######################################################################################### -#if(${action}=="CANCON") - - -${ugcline} -/${productClass}.CON.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#elseif(${CORCAN}=="true") - - -${ugcline} -/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#end -############################ -## CONTINUATION STATEMENT ## -############################ -#if(${action}=="CANCON" || ${action}=="CON" || ${action}=="COR" || ${CORCAN}=="true") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE FLOOD WARNING ## -#if(${hycType} != "") -FOR ${hycType} ## -#end -REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###zoneHeadlineLocList(${areas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... - -################################################ -################################# -######## MAIN PARAGRAPH ########### -################################# -#set($rainAmount = "") -#if(${list.contains(${bullets}, "rain1")} ) - #set($rainAmount = " UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain2")} ) - #set($rainAmount = " UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain3")} ) - #set($rainAmount = " UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rainEdit")} ) - #set($rainAmount = " !** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#set($reportBy = "!**YOU DID NOT SELECT A /SOURCE/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!") -#if(${list.contains(${bullets}, "doppler")}) - #set($reportBy = "DOPPLER RADAR INDICATED") -#elseif(${list.contains(${bullets}, "dopplerGauge")}) - #set($reportBy = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED") -#elseif(${list.contains(${bullets}, "trainedSpotters")}) - #set($reportBy = "TRAINED WEATHER SPOTTERS REPORTED") -#elseif(${list.contains(${bullets}, "lawEnforcement")}) - #set($reportBy = "LOCAL LAW ENFORCEMENT REPORTED") -#elseif(${list.contains(${bullets}, "public")}) - #set($reportBy = "THE PUBLIC REPORTED") -#elseif(${list.contains(${bullets}, "emergencyManagement")}) - #set($reportBy = "EMERGENCY MANAGEMENT REPORTED") -#elseif(${list.contains(${bullets}, "satellite")}) - #set($reportBy = "SATELLITE ESTIMATES INDICATED") -#elseif(${list.contains(${bullets}, "satelliteGauge")}) - #set($reportBy = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED") -#end -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#set($cityListLead = "RUNOFF FROM THIS EXCESSIVE RAINFALL WILL CAUSE ${floodType} TO OCCUR. ") -#if(${list.contains(${bullets}, "thunder")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} SLOW MOVING THUNDERSTORMS WITH VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason} -#elseif(${list.contains(${bullets}, "plainRain")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} AN AREA OF VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason} -#elseif(${list.contains(${bullets}, "floodOccurring")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} ${floodType} ACROSS THE WARNED AREA.${rainAmount}${floodReason} !** ENTER SPECIFIC REPORTS OF FLOODING AND EXPECTED RAINFALL AMOUNTS **! -#elseif(${list.contains(${bullets}, "genericFlood")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -!** ENTER REASON AND FORECAST FOR FLOOD **! -#elseif(${list.contains(${bullets}, "glacierOutburst")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} FLOODING DUE TO A GLACIER-DAMMED LAKE OUTBURST ACROSS THE WARNED AREA.${rainAmount} -#elseif(${list.contains(${bullets}, "groundWater")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} FLOODING DUE TO GROUND WATER ACROSS THE WARNED AREA.${rainAmount} -#else -!**YOU DID NOT SELECT AN /EVENT/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**! -#end - -############################################ -######## (CITY LIST) ######### -############################################ -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -${cityListLead} -## #locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE" "${floodType} IS EXPECTED TO OCCUR OVER MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -########################################## END OF OPTIONAL FOURTH BULLET ############################## -###################################### -###### WHERE ADDITIONAL INFO GOES #### -###################################### -#if(${list.contains(${bullets}, "fcstPoint")}) -FOR THE !** insert river name and forecast point **!: -AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET. -FLOOD STAGE IS !** xx.x **! FEET. -FORECAST... !** insert crest stage and time **!. -IMPACTS...!** discussion of expected impacts and flood path **! - -#else -!** insert impacts and flood path **! - -#end -#if(${list.contains(${bullets}, "addRainfall")}) -ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA. - -#end -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -#################################### END OF ADDITIONAL STUFF ################################### -###################################### -####### CALL TO ACTIONS ############## -###################################### -##Check to see if we've selected any calls to action. -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -#if(${list.contains(${bullets}, "warningMeansCTA")}) -A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED. STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED. HOWEVER...ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS IMMEDIATELY. - -#end -#if(${list.contains(${bullets}, "dontdrownCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "urbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER ON COUNTRY ROADS AND FARMLAND ALONG THE BANKS OF CREEKS AND STREAMS. - -#end -#if(${list.contains(${bullets}, "USS_CTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES IN URBAN AREAS. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "particularStreamCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "specificCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "nightCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "donotdriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "autoSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "camperCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS. - -#end -#if(${list.contains(${bullets}, "lowspotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "powerCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### - -########################################## -########BOTTOM OF THE PRODUCT############# -########################################## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - -#end - -$$ - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml deleted file mode 100644 index ac8e88d277..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarningFollowup_Zones.xml +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - - - - mi - mph - - - - Forecast Zones - - - - - - - - COR - CON - CAN - EXP - - - - - FA.W - - - - false - - - true - - - - 30 - - 30 - - -ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - true - 8.0 - 5 - 5 - 4 - 8 - Name - - NAME - AREA - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - - NAME - AREA - POINTS - true - 10 - 200 - - distance - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarning_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarning_Zones.vm deleted file mode 100644 index 06674f50d8..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarning_Zones.vm +++ /dev/null @@ -1,355 +0,0 @@ -############################################################################### -## Created BY Mike Dangelo 9-19-2011 at Alaska TIM for zone code issuances ## -## Mary-Beth Schreck, Ed Plumb, Aaron Jacobs 9-23-2011 at Alaska TIM -## edited by Mike Dangelo 01-26-2012 at CRH TIM -## edited by Phil Kurimski 2-29-2012 -## Mike Dangelo 9-13-2012 minor tweaks to ${variables} -#################################### SET SOME VARIABLES ################################### -#if(${action} == "EXT") - #set($starttime = "000000T0000Z") - #set($extend = true) -#else - #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})}) - #set($extend = false) -#end -## -#if(${list.contains(${bullets}, "small")}) - #set($advType = "SMALL STREAM FLOOD WARNING") -#elseif(${list.contains(${bullets}, "uss")}) - #set($advType = "URBAN AND SMALL STREAM FLOOD WARNING") -#else - #set($advType = "FLOOD WARNING") -#end -#set($ic = "ER") -#set($hycType = "") -#if(${list.contains(${bullets}, "sm")}) - #set($ic = "SM") - #set($hycType = "SNOW MELT") -#elseif(${list.contains(${bullets}, "rs")}) - #set($ic = "RS") - #set($hycType = "RAIN AND SNOW MELT") -#elseif(${list.contains(${bullets}, "ij")}) - #set($ic = "IJ") - #set($hycType = "AN ICE JAM") -#elseif(${list.contains(${bullets}, "ic")}) - #set($ic = "IC") - #set($hycType = "AN ICE JAM WITH RAIN AND SNOW MELT") -#elseif(${list.contains(${bullets}, "go")}) - #set($ic = "GO") - #set($hycType = "A GLACIER-DAMMED LAKE OUTBURST") -#elseif(${list.contains(${bullets}, "dm")}) - #set($ic = "DM") - #set($hycType = "A LEVEE FAILURE") -#elseif(${list.contains(${bullets}, "dr")}) - #set($ic = "DR") - #set($hycType = "A DAM GATE RELEASE") -#elseif(${list.contains(${bullets}, "OT")}) - #set($ic = "OT") - #set($hycType = "GROUND WATER FLOODING") -#elseif(${list.contains(${bullets}, "mc")}) - #set($ic = "MC") -#elseif(${list.contains(${bullets}, "uu")}) - #set($ic = "UU") -#end -## -${WMOId} ${vtecOffice} 000000 ${BBBId} -FLW${siteId} - -BULLETIN - EAS ACTIVATION REQUESTED -#if(${productClass}=="T") -TEST...FLOOD WARNING...TEST -#else -FLOOD WARNING -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -${ugcline} -/${productClass}.${action}.${vtecOffice}.FA.W.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#headlineext(${officeLoc}, ${backupSite}, ${extend}) - -################################# -######## FIRST BULLET ########### -################################# -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -${advType} FOR... -#if(${hycType} != "") -## (EXCLUDED FOR AK) -## ${hycType} IN... - ${hycType}... -#end -##REMMED OUT FOR ALASKA -###firstBullet(${areas}) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###firstBullet(${affectedCounties}) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - -################################# -####### SECOND BULLET ########### -################################# -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) - -#set($typeofevent = "") -#set($report = "HEAVY RAIN THAT WILL CAUSE FLOODING.") -#set($rainAmount = "") -#if(${list.contains(${bullets}, "rapidRiver")}) - #set($typeofevent = ". RAPID RIVER RISES ARE EXPECTED.") -#end -#if(${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "A GLACIER-DAMMED LAKE OUTBURST FLOOD WILL RESULT IN MINOR FLOODING AT !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "groundWater")}) - #set($report = "RISING GROUND WATER LEVELS WILL RESULT IN MINOR FLOODING AT !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "satellite")}) - #set($report = "SATELLITE ESTIMATES INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advType}${typeofevent} IN THE WARNING AREA.") -#end -#if(${list.contains(${bullets}, "satelliteGauge")}) - #set($report = "SATELLITE ESTIMATES AND RAIN GAUGE DATA INDICATE HEAVY RAINFALL THAT WILL CAUSE ${advType}${typeofevent} IN THE WARNING AREA.") -#end -#if(${list.contains(${bullets}, "doppler")}) - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A LINE OF THUNDERSTORMS. THE HEAVY RAIN WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "dopplerGauge")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. THAT HEAVY RAIN WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. THAT RAIN WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "floodReport")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLOODING IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **! THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "floodReport")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLOODING IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **! THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "floodReport")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED FLOODING IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **! THAT WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. THE HEAVY RAIN WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "floodReport")}) - #set($report = "THE PUBLIC REPORTED FLOODING IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "THE PUBLIC REPORTED HEAVY RAIN IN !** LOCATION **!. THAT HEAVY RAIN WILL CAUSE FLOODING.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "THE PUBLIC REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "A TRAINED SPOTTER REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "glacierOutburst")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO A GLACIER-DAMMED LAKE OUTBURST FLOOD.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "groundWater")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED MINOR FLOODING IN !** LOCATION **! DUE TO RISING GROUND WATER LEVELS.") -#end -#if(${list.contains(${bullets}, "rain1")} ) - #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain2")} ) - #set($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain3")} ) - #set($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rainEdit")} ) - #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.") -#end - -################################# -######## THIRD BULLET ########### -################################# -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...${report} ${rainAmount} - -############################################################# -######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) ######### -############################################################# -#set($phenomena = "FLOOD") -#set($warningType = "WARNING") -#if(${list.contains(${bullets}, "listofcities")}) -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -## #locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE" "FLOODING IS EXPECTED TO OCCUR OVER MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) EXCLUDED FOR ALASKA - -#end -########################################## END OF FOURTH BULLET ############################## -###################################### -###### WHERE ADD INFO GOES ########### -###################################### -#if(${list.contains(${bullets}, "fcstPoint")}) -FOR THE !** insert river name and forecast point **!: -AT ${dateUtil.format(${now}, ${timeFormat.clock}, ${localtimezone})} THE STAGE WAS !** xx.x **! FEET. -FLOOD STAGE IS !** xx.x **! FEET. -FORECAST... !** insert crest stage and time **!. -IMPACTS...!** discussion of expected impacts and flood path **! - -#else -!** insert impacts and flood path **! - -#end -#if(${list.contains(${bullets}, "addRainfall")}) -ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA. - -#end -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -#################################### END OF ADDITIONAL STUFF ################################### -###################################### -####### CALL TO ACTIONS ############## -###################################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -## -#if(${list.contains(${bullets}, "warningMeansCTA")}) -A FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR HAS BEEN REPORTED. STREAM RISES WILL BE SLOW AND FLASH FLOODING IS NOT EXPECTED. HOWEVER...ALL INTERESTED PARTIES SHOULD TAKE NECESSARY PRECAUTIONS IMMEDIATELY. - -#end -#if(${list.contains(${bullets}, "dontdrownCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "urbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER IN URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER POOR DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE ELEVATED LEVELS ON SMALL CREEKS AND STREAMS...AND PONDING OF WATER ON COUNTRY ROADS AND FARMLAND ALONG THE BANKS OF CREEKS AND STREAMS. - -#end -#if(${list.contains(${bullets}, "USS_CTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES IN URBAN AREAS. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "particularStreamCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "specificCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "nightCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "donotdriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "autoSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "camperCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS. - -#end -#if(${list.contains(${bullets}, "lowspotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND ALTERNATE ROUTES. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "powerCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### -########################################## -########BOTTOM OF THE PRODUCT############# -########################################## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarning_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarning_Zones.xml deleted file mode 100644 index 5ef2dc44fe..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/arealFloodWarning_Zones.xml +++ /dev/null @@ -1,420 +0,0 @@ - - - - - - - - - mi - mph - - - - Forecast Zones - County Warning Areas - - - - - - - NEW - COR - EXT - - - - - FA.W - - - - true - - - true - - - 180 - - 60 - 120 - 150 - 180 - 210 - 240 - 360 - 480 - 600 - 720 - - -ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - true - 8.0 - 5 - 5 - 4 - 8 - Name - AREA - - NAME - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - - NAME - AREA - POINTS - true - 10 - 200 - - distance - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/customTemplate.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/customTemplate.vm deleted file mode 100644 index a3323ebfad..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/customTemplate.vm +++ /dev/null @@ -1,184 +0,0 @@ -#################################################################### -## CUSTOM TEMPLATE ## -## History -## QINGLU LIN 8-14-2012 DR 14493 use corToNewMarker and TMLtime ## -#################################################################### -${WMOId} ${vtecOffice} 000000 -CUSTOM -${ugcline} -/${productClass}.${action}.${vtecOffice}.SS.W.${etn}.${dateUtil.format(${start}, ${timeFormat.ymdthmz})}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ - -BULLETIN - EAS ACTIVATION REQUESTED -#if(${productClass}=="T") -TEST...CUSTOM WARNING...TEST -#else -CUSTOM WARNING -#end -NATIONAL WEATHER SERVICE ${officeShort} -${dateUtil.format(${start}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#headline(${officeLoc}, ${backupSite}) - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -CUSTOM WARNING FOR... -#foreach (${area} in ${areas}) - ## -#if(${area.partOfArea}) -#areaFormat(${area.partOfArea} true false) ## -#end -${area.name} ${area.areaNotation} IN #areaFormat(${area.partOfParentRegion} true false) ${area.parentRegion}... -#if(${list.size($area.points)} > 0) -#if(${list.size($area.points)} > 1) - THIS INCLUDES THE CITIES OF... #foreach (${city} in ${area.points})${city}... #end - -#else - THIS INCLUDES THE CITY OF ${list.get(${area.points},0)} -#end -#end -#end - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -UNTIL ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} - -#set($report = "") -#if(${list.contains($bullets, "much")}) - #set ($report = "NATIONAL WEATHER SERVICE CUSTOM RADAR WAS TRACKING A CUSTOM THING") -#end -#set($closest = ${list.get($closestPoints, 0)}) -#set($secondary = ${list.get($closestPoints, 1)}) -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ## -#if($closest.roundedDistance <= 4) -OVER ## -#else -${closest.roundedDistance} MILES #direction(${closest.oppositeRoundedAzimuth}) OF ## -#end -${closest.name}## -#if($secondary) -...OR ${secondary.roundedDistance} MILES #direction(${secondary.oppositeRoundedAzimuth}) OF ${secondary.name}## -#end -#if($movementSpeed < 3 || ${stationary}) -. ${reportType2} NEARLY STATIONARY. -#else -...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH. -#end -## Determine if the pathcast goes over only rural areas -#set($ruralOnly = 1) -#foreach(${pc} in ${pathCast}) -#if(${pc.points}) -#set($ruralOnly = 0) -#end -#end -#set($numOtherCities = ${list.size($otherPoints)}) - -#################### -## BEGIN PATHCAST ## -#################### -#if(${pathCast} && ${ruralOnly} == 0) -#if(${stormType} == "line") -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -THE CUSTOM THING PRODUCING STORMS WILL BE NEAR... -#else -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -THE CUSTOM THING WILL BE NEAR... -#end -#set($numRural = 0)## indicates the number of rural points -#foreach (${pc} in ${pathCast}) -#if(${pc.points}) -#set($numRural = 0) -#set($numCities = ${list.size($pc.points)}) -#set($count = 0) - ## -#foreach (${city} in ${pc.points}) -#if(${city.roundedDistance} < 3) -## close enough to not need azran, considered OVER the area -${city.name}## -#else -## needs azran information -${city.roundedDistance} MILES #direction(${city.oppositeRoundedAzimuth}) OF ${city.name}## -#end -#set($count = $count + 1) -#if($count == $numCities - 1) - AND ## -#elseif($count < $numCities) -...## -#end -#end - BY ${dateUtil.format(${pc.time}, ${timeFormat.clock}, ${localtimezone})}... -#else## Handle the rural cases -#set($numRural = $numRural + 1) -#if($numRural > 2) - RURAL ${pc.area} ${pc.areaNotation} AT ${dateUtil.format(${pc.time}, ${timeFormat.clock}, ${localtimezone})}... -#set($numRural = 0) -#end -#end -#end -#elseif(${otherPoints} && ${numOtherCities} > 0) -* OTHER LOCATIONS IN THE WARNING INCLUDE BUT ARE NOT LIMITED TO -#set($count = 0) - ## -#foreach(${point} in ${otherPoints}) -#set($count = $count + 1) -${point}## -#if($count == $numOtherCities - 1) - AND ## -#elseif($count < $numOtherCities) -...## -#end -#end - -#else -* THE CUSTOM THING WILL OTHERWISE REMAIN OVER MAINLY RURAL AREAS OF THE INDICATED COUNTIES. - -#end -#################### -## ENDS PATHCAST ## -#################### - -#if(${list.contains($bullets, "more")}) -IN ADDITION TO THE CUSTOM WARNING... - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -#end -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - -TIME...MOT...LOC ## -#if(${corToNewMarker}) -${dateUtil.format(${TMLtime}, ${timeFormat.time})}Z ## -#else -${dateUtil.format(${event}, ${timeFormat.time})}Z ## -#end -${mathUtil.roundAndPad(${movementDirection})}DEG ## -${mathUtil.round(${movementInKnots})}KT ## -#foreach(${eventCoord} in ${eventLocation}) -#llFormat(${eventCoord.y}) #llFormat(${eventCoord.x}) ## -#end - -$$ - -!**NAME/INITIALS**! diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/customTemplate.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/customTemplate.xml deleted file mode 100644 index 5a5af277f5..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/customTemplate.xml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - XX.W - - - - true - - - true - - - - torWatches - svrWatches - - - - 30 - - 10 - 15 - 20 - 25 - 30 - 40 - 45 - 50 - 60 - 75 - 90 - - - - - - - - - - - - - - - 0.00 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - WARNGENLEV - 1 - INCLUSIVE - - 25 - - 50 - true - true - - warngenlev - population - - - - - - - 2 - mi - mph - NAME - - WARNGENLEV - 0 - EXCLUSIVE - - - distance - warngenlev - - - - - - true - 20 - 45 - 8.0 - 5 - 4 - 8 - Name - - WARNGENLEV - 0 - EXCLUSIVE - - COUNTYNAME - STATE - STATE - countyTypes.txt - - distance - - - - - - - - City - County - States - TIMEZONES - TIME_ZONE - CWA - - WFO - $warngenCWAFilter - INCLUSIVE - - - - \ No newline at end of file diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/ffwfaw.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/ffwfaw.vm deleted file mode 100644 index 43ef9d09c8..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/ffwfaw.vm +++ /dev/null @@ -1,311 +0,0 @@ -################################################################## -## FLASH FLOOD/AREAL WARNING TEMPLATE FOR COUNTY-BASED PRODUCTS ## -################################################################## -## EDITED BY MIKE DANGELO 7-13-2011 ## -## Edited by Phil Kurimski 8-15-2011 for OB11.80-4 ## -## Overhauled by Evan Bookbinder 9-15-2011 for OB11.8.0-8 to combine FFW/FLW -## - -#################################### SET SOME VARIABLES ################################### -#set ($hycType = "") -#set ($ic = "ER") -#set ($floodReason = "") - -#set ($MNDPROD = "!** YOU DID NOT SELECT A WARNING TYPE! CLOSE THIS WINDOW AND REGENERATE YOUR WARNING **!") - -#if(${list.contains($bullets, "ffwSelect")}) - #set($MNDPROD = "FLASH FLOOD WARNING") - #set($EAS = "EAS ACTIVATION REQUEST") - #set($floodType = "FLASH FLOODING") - #set($pil = "FFW") - #set($vtecPhenSig = "FF.W") -#elseif(${list.contains($bullets, "fawSelect")}) - #set($MNDPROD = "FLOOD WARNING") - #set($EAS = "IMMEDIATE BROADCAST REQUEST") - #set($floodType = "FLOODING") - #set($pil = "FLW") - #set($vtecPhenSig = "FA.W") -#end - -## -#if(${action} == "EXT") - #set($starttime = "000000T0000Z") - #set($extend = true) -#else - #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})}) - #set($extend = false) -#end -## -###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY -#if(${list.contains($bullets, "icrs")}) - #set ($ic = "RS") - #set ($hycType = "RAIN AND SNOW MELT IN...") - #set ($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.") -#elseif(${list.contains($bullets, "icsm")}) - #set ($ic = "SM") - #set ($hycType = "FOR RAPID SNOW MELT IN...") - #set ($floodReason = " RAPID SNOW MELT IS OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains($bullets, "icij")}) - #set ($ic = "IJ") - #set ($hycType = "FOR ICE JAM FLOODING IN...") - #set ($floodReason = " AN ICE JAM IS OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains($bullets, "icicr")}) - #set ($ic = "IC") - #set ($hycType = "FOR AN ICE JAM AND HEAVY RAIN IN...") - #set ($floodReason = " AN ICE JAM IS ALSO OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains($bullets, "icics")}) - #set ($ic = "IC") - #set ($hycType = "FOR AN ICE JAM AND RAPID SNOW MELT IN...") - #set ($floodReason = " AN ICE JAM AND RAPID SNOW MELT ARE ALSO OCCURRING AND WILL CAUSE ${floodType}.") -#elseif(${list.contains($bullets, "icerr")}) - #set ($ic = "ER") - #set ($hycType = "FOR RAPID RIVER RISES IN...") -#end -## -${WMOId} ${vtecOffice} 000000 ${BBBId} -${pil}${siteId} -#if(${specialCorText}) -${specialCorText} -#else -${ugcline} -#################################### VTEC LINE ################################### -/${productClass}.${action}.${vtecOffice}.${vtecPhenSig}.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ - -#################################### MND HEADER ################################### -BULLETIN - ${EAS} -#if(${productClass}=="T") -TEST...${MNDPROD}...TEST -#else -${MNDPROD} -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#headlineext(${officeLoc}, ${backupSite}, ${extend}) - -################################# -######## FIRST BULLET ########### -################################# -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -${MNDPROD} FOR... -#if (${hycType} != "") - ${hycType} -#end -#firstBullet(${areas}) - -################################# -####### SECOND BULLET ########### -################################# -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) - - -################################################ -################################# -######## THIRD BULLET ########### -################################# -#set ($rainAmount = "") -#if(${list.contains($bullets, "rain1")} ) - #set ($rainAmount = " UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains($bullets, "rain2")} ) - #set ($rainAmount = " UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains($bullets, "rain3")} ) - #set ($rainAmount = " UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains($bullets, "rainEdit")} ) - #set ($rainAmount = " !** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#set ($reportBy = "!**YOU DID NOT SELECT A /SOURCE/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**!") -#if(${list.contains($bullets, "doppler")}) - #set ($reportBy = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED") -#elseif(${list.contains($bullets, "dopplerGauge")}) - #set ($reportBy = "NATIONAL WEATHER SERVICE DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED") -#elseif(${list.contains($bullets, "trainedSpotters")}) - #set ($reportBy = "TRAINED WEATHER SPOTTERS REPORTED") -#elseif(${list.contains($bullets, "lawEnforcement")}) - #set ($reportBy = "LOCAL LAW ENFORCEMENT REPORTED") -#elseif(${list.contains($bullets, "public")}) - #set ($reportBy = "THE PUBLIC REPORTED") -#elseif(${list.contains($bullets, "emergencyManagement")}) - #set ($reportBy = "EMERGENCY MANAGEMENT REPORTED") -#elseif(${list.contains($bullets, "satellite")}) - #set ($reportBy = "SATELLITE ESTIMATES INDICATED") -#elseif(${list.contains($bullets, "satelliteGauge")}) - #set ($reportBy = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED") -#end -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#set($cityListLead = "") -#if(${list.contains($bullets, "thunder")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} SLOW MOVING THUNDERSTORMS WITH VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason} -#set($cityListLead = "RUNOFF FROM THIS EXCESSIVE RAINFALL WILL CAUSE ${floodType} TO OCCUR. ") -#elseif(${list.contains($bullets, "plainRain")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} AN AREA OF VERY HEAVY RAINFALL ACROSS THE WARNED AREA.${rainAmount}${floodReason} -#set($cityListLead = "RUNOFF FROM THIS EXCESSIVE RAINFALL WILL CAUSE ${floodType} TO OCCUR. ") -#elseif(${list.contains($bullets, "floodOccurring")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -${reportBy} ${floodType} ACROSS THE WARNED AREA.${rainAmount}${floodReason} !** ENTER SPECIFIC REPORTS OF FLOODING AND EXPECTED RAINFALL AMOUNTS **! -#elseif(${list.contains($bullets, "genericFlood")}) -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...## -!** ENTER REASON AND FORECAST FOR FLOOD **! -#else -"!**YOU DID NOT SELECT AN /EVENT/ BULLET. PLEASE CLOSE THIS WINDOW AND REGENERATE YOUR WARNING**! -#end - -########################################################################## -## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet # -########################################################################## -#if(${list.contains($bullets, "ffwEmergency")} ) -#if(${list.contains($bullets, "ffwSelect")}) - THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!. - -#else - -!** YOU HAVE SELECTED FLASH FLOOD EMERGENCY BUT AN AREAL FLOOD WARNING. PLEASE CLOSE AND REGENERATE YOUR WARNING CORRECTLY **! - -#end -#end -############################################ -######## FOURTH BULLET (CITY LIST) ######### -############################################ -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -${cityListLead}#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE" "${floodType} IS EXPECTED TO OCCUR OVER MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -########################################## END OF OPTIONAL FOURTH BULLET ############################## -###################################### -###### WHERE ADDITIONAL INFO GOES #### -###################################### - -#if(${list.contains($bullets, "addRainfall")}) -ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA. - -#end -#if(${list.contains($bullets, "drainages")}) -#drainages(${riverdrainages}) - -#end -############################################## -###### mile markers ############## -############################################## -#parse("milemarkers.vm") -#################################### END OF ADDITIONAL STUFF ################################### -###################################### -####### CALL TO ACTIONS ############## -###################################### -##Check to see if we've selected any calls to action. -#foreach ($bullet in $bullets) -#if($bullet.endsWith("CTA")) -#set ($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end -#if(${list.contains($bullets, "urbanFloodingCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains($bullets, "ruralFloodingCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains($bullets, "ruralUrbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains($bullets, "particularStreamCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains($bullets, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF ${floodType} IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains($bullets, "dontDriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains($bullets, "turnAroundCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains($bullets, "autoSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND. - -#end -#if(${list.contains($bullets, "camperSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS. - -#end -#if(${list.contains($bullets, "lowSpotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains($bullets, "ffwMeansCTA")}) -A ${MNDPROD} MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE. - -#end -#if(${list.contains($bullets, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains($bullets, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### - -########################################## -########BOTTOM OF THE PRODUCT############# -########################################## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -!**NAME/INITIALS**! - -## example of a for-each loop which will include interstate/mile marker information -## #foreach (${local} in ${alpha}) -## spot is ${local.name}... -## #end - -########### EXAMPLES OF PARSE OR INCLUDE STATEMENTS ################################ -## #parse ("test.vm") -## #include ("username.txt") -#end diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/ffwfaw.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/ffwfaw.xml deleted file mode 100644 index 27e6a280ff..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/ffwfaw.xml +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - - mi - mph - - - - - County Names - County Warning Areas - - - - - - - NEW - COR - EXT - - - - - FF.W - FA.W - - - - true - - - true - - - 360 - - 120 - 180 - 210 - 240 - 270 - 300 - 330 - 360 - 420 - 480 - 540 - 600 - 660 - 720 - 1440 - 2160 - 2880 - 3600 - - -ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0.00 - AND - 0 - COUNTYNAME - - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - - NAME - - parent - - - - - - - 25 - - - - false - - - - true - 8.0 - 5 - 5 - 4 - 8 - Name - COUNTYNAME - STATE - STATE - countyTypes.txt - - distance - - - - - NAME - POINTS - true - 30 - 200 - - warngenlev - population - - - - - - - - - - NAME - POINTS - true - 10 - 200 - - name - - - - - - - - - - City - County - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm deleted file mode 100644 index 7acabc6992..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.vm +++ /dev/null @@ -1,456 +0,0 @@ -#################################################### -## FLASH FLOOD STATEMENT for ZONES ## -#################################################### -## Modified by MIKE DANGELO 9-19-2011 at Alaska TIM ## -## Overhauled by Phil Kurimski 09-23-2011 to reflect work -## done in August. -## Edited by Mike Dangelo 01-26-2012 at CRH TIM -## Edited by Phil Kurimski 2-29-2012 -## Mike Dangelo 9-13-2012 minor tweaks to ${variables} -#################################### SET SOME VARs ################################### -#set($hycType = "") -#set($snowMelt = "") -#set($floodReason = "") -#set($floodType = "FLASH FLOODING") -#set($burnCTA = "") -###OVERRIDE DEFAULT EXECESSIVE RAINFALL IF NECESSARY -#if(${list.contains(${bullets}, "icrs")}) - #set($hycType = "RAIN AND SNOW MELT") - #set($floodReason = " RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE ${floodType}.") -#end -## -###################################################################################### -${WMOId} ${vtecOffice} 000000 ${BBBId} -FFS${siteId} -#if(${productClass}=="T") -TEST...FLASH FLOOD STATEMENT...TEST -#else -FLASH FLOOD STATEMENT -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${action}=="COR" && ${cancelareas}) -#set($CORCAN = "true") -#else -#set($CORCAN = "false") -#end -#if(${action}=="CANCON") -${ugclinecan} -################### VTEC/COUNTY LINE ################## -/${productClass}.CAN.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} -#elseif(${CORCAN}=="true") -${ugclinecan} -################### VTEC/COUNTY LINE ################## -/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire},${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} -#else -${ugcline} -################### VTEC/COUNTY LINE ################## -/${productClass}.${action}.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} -#end - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -################################################################# -################################################################# -## LETS START WITH EXPIRATION AND CANCELLATION SEGMENTS ##### -################################################################# -################################################################# -### CREATE PHRASING DEPENDING ON WHETHER WE ISSUE EXP PRIOR TO EXPIRATION TIME OR NOT -#if(${now.compareTo(${expire})} >= 0 && ${action}=="EXP" ) - #set($expcanHLTag = "HAS EXPIRED") - #set($expcanBODYTag = "HAS BEEN ALLOWED TO EXPIRE") -#elseif(${action}=="EXP") - #set($expcanHLTag = "WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})}") - #set($expcanBODYTag = "WILL BE ALLOWED TO EXPIRE") -#elseif(${action}=="CAN" || ${action}=="CANCON" || ${CORCAN}=="true") - #set($expcanHLTag = "IS CANCELLED") - #set($expcanBODYTag = "HAS BEEN CANCELLED") -#end -################################ -#### CREATE HEADLINES ########## -################################ -## -#if(${action}=="EXP" || ${action}=="CAN") -...THE FLASH FLOOD WARNING FOR ## -#if(${hycType} != "") -${hycType} IN ## -#end -##REMMED OUT FOR Alaska. This would output the headline in zone format -###headlineLocList(${areas} true true true false) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${affectedCounties} true true true false) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - ${expcanHLTag}... -## SLIGHTLY DIFFERENT VARIABLE FOR PARTIAL CANCELLATION HEADLINE -#elseif(${action}=="CANCON" || ${CORCAN}=="true") -...THE FLASH FLOOD WARNING FOR ## -#if(${hycType} != "") -${hycType} IN ## -#end -##REMMED OUT FOR Alaska. This would output the headline in zone format -###headlineLocList(${cancelareas} true true true false) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${cancelaffectedCounties} true true true false) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - ${expcanHLTag}... -#end -############################ -## END CAN/EXP HEADLINE #### -############################ -####################################### -## EXPIRATION/CANCELLATION STATEMENT ## -####################################### - -#if(${action}=="EXP" || ${action} == "CAN" || ${action}=="CANCON" || ${CORCAN}=="true") -#if(${list.contains(${bullets}, "recedingWater")}) -FLOOD WATERS HAVE RECEDED...AND ARE NO LONGER EXPECTED TO POSE A THREAT TO LIFE OR PROPERTY. PLEASE CONTINUE TO HEED ANY ROAD CLOSURES. -#elseif(${list.contains(${bullets}, "rainEnded")}) -THE HEAVY RAIN HAS ENDED...AND FLOODING IS NO LONGER EXPECTED TO POSE A THREAT. -#else -!** THE HEAVY RAIN HAS ENDED. !** OR **! THE FLOOD WATER IS RECEDING. THEREFORE...THE FLOODING THREAT HAS ENDED. **!" -#end - -#printcoords(${areaPoly}, ${list}) - - -$$ -#end -#################################### END OF CAN STUFF ################################### -#### IF PARTIAL CANCELLATION, INSERT 2ND UGC/MND SECTION PRIOR TO CON PORTION -######################################################################################### -#if(${action}=="CANCON") - - -${ugcline} -/${productClass}.CON.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#elseif(${CORCAN}) - - -${ugcline} -/${productClass}.COR.${vtecOffice}.${phenomena}.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz})}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#end -############################ -## CONTINUATION STATEMENT ## -############################ -#if(${action}=="CANCON" || ${action}=="CON" || ${action}=="COR" || ${CORCAN}=="true") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...A FLASH FLOOD WARNING ## -#if(${hycType} != "") -FOR ${hycType} ## -#end -REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ## -##REMMED OUT FOR Alaska. This would output the headline in zone format -###headlineLocList(${cancelareas} true true true false)... -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###headlineLocList(${cancelaffectedCounties} true true true false)... -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**!... - -############################################################################### -## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline # -############################################################################### -#if(${list.contains(${bullets}, "ffwEmergency")}) - -...A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!... - -#end - -################################################ -################################# -######## THIRD BULLET ########### -################################# -#set($reportType = "HEAVY RAIN") -#set($rainAmount = "") -#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!") -#if(${list.contains(${bullets}, "flash")} ) - #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING") -#else - #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY") -#end -#if(${list.contains(${bullets}, "burnScar")} ) - #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.") - #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.") - #set($ctaSelected = "YES") -#elseif(${list.contains(${bullets}, "mudSlide")} ) - #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.") - #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.") - #set($ctaSelected = "YES") -#else - #set($burnScar = "") - #set($burnCTA = "") -#end -#if(${list.contains(${bullets}, "rain1")} ) - #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain2")} ) - #set($rainAmount = "UP TO TWO INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain3")} ) - #set($rainAmount = "UP TO THREE INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rainEdit")} ) - #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "doppler")}) - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "dopplerGauge")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "HEAVY RAIN FROM THUNDERSTORMS HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")}) - #set($report = "FLASH FLOODING HAS BEEN REPORTED IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satellite")}) - #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satelliteGauge")}) - #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) -...${report}. ${snowMelt} - -${burnScar} - -############################################ -######## (CITY LIST) ######### -############################################ -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE" ${floodType} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -########################################## END OF OPTIONAL FOURTH BULLET ############################## -###################################### -###### WHERE ADDITIONAL INFO GOES #### -###################################### - -#if(${list.contains(${bullets}, "addRainfall")}) -ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA. - -#end -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -#################################### END OF ADDITIONAL STUFF ################################### -###################################### -####### CALL TO ACTIONS ############## -###################################### -##Check to see if we've selected any calls to action. -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end - -${burnCTA} - -#if(${list.contains(${bullets}, "urbanFloodingCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralFloodingCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralUrbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "particularStreamCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLASH FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "dontDriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "turnAroundCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "autoSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "camperSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS. - -#end -#if(${list.contains(${bullets}, "lowSpotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "ffwMeansCTA")}) -A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE. - -#end -#if(${list.contains(${bullets}, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### - -########################################## -########BOTTOM OF THE PRODUCT############# -########################################## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ -#end - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml deleted file mode 100644 index bd603b5472..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarningFollowup_Zones.xml +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - mi - mph - - - - Forecast Zones - - - - - - - - COR - CON - CAN - EXP - - - - - FF.W - - - - false - - - true - - - - 30 - - 30 - - -ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - true - 8.0 - 5 - 5 - 4 - 8 - Name - AREA - - NAME - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - - NAME - AREA - POINTS - true - 10 - 200 - - name - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarning_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarning_Zones.vm deleted file mode 100644 index 2ed327655a..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarning_Zones.vm +++ /dev/null @@ -1,347 +0,0 @@ -############################################################ -## FLASH FLOOD WARNING TEMPLATE FOR COUNTY-BASED PRODUCTS ## -############################################################ -## EDITED BY MIKE DANGELO 7-13-2011 ## -## Edited by Phil Kurimski 8-15-2011 for OB11.8 ## -## EDITED BY MIKE DANGELO 9-21-2011 at Alaska TIM ## -## EDITED BY PHIL KURIMSKI 9-23-2011 at Alaska TIM for burn scars and mud slides ## -## EDITED BY PHIL KURIMSKI 2-29-2012 -## Mike Dangelo 9-13-2012 minor tweaks to ${variables} -#################################### SET SOME VARIABLES ################################### -#set($hycType = "") -## -#if(${action} == "EXT") - #set($starttime = "000000T0000Z") - #set($extend = true) -#else - #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})}) - #set($extend = false) -#end -## -#if(${list.contains(${bullets}, "icrs")}) - #set($ic = "RS") - #set($snowMelt = "RAPID SNOW MELT IS ALSO OCCURRING AND WILL ADD TO THE FLOODING.") - #set($hycType = "RAIN AND SNOW MELT IN...") -#else - #set($ic = "ER") - #set($snowMelt = "") -#end -## -${WMOId} ${vtecOffice} 000000 ${BBBId} -FFW${siteId} -${ugcline} -#################################### VTEC LINE ################################### -/${productClass}.${action}.${vtecOffice}.FF.W.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.0.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ - -#################################### MND HEADER ################################### -BULLETIN - EAS ACTIVATION REQUESTED -#if(${productClass}=="T") -TEST...FLASH FLOOD WARNING...TEST -#else -FLASH FLOOD WARNING -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end - -############################################################################# -## Flash Flood Emergency Headline -- Coming soon to a warning near you! # -############################################################################# -###if(${list.contains(${bullets}, "ffwEmergency")} ) -##...FLASH FLOOD EMERGENCY FOR !** LOCATION **!... -## -###end -#headlineext(${officeLoc}, ${backupSite}, ${extend}) - -################################# -######## FIRST BULLET ########### -################################# -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -FLASH FLOOD WARNING FOR... -#if(${hycType} != "") - ${hycType} -#end -##REMMED OUT FOR ALASKA -###firstBullet(${areas}) -##REPLACE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY HEADLINE INSTEAD OF ZONES -###firstBullet(${affectedCounties}) -!**INSERT RIVER/STREAM OR AREA**! IN !**INSERT GEO AREA**! - -################################# -####### SECOND BULLET ########### -################################# - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) - -################################################ -################################# -######## THIRD BULLET ########### -################################# -#set($report = "HEAVY RAIN IS OCCURRING. !** ADD MORE DETAIL HERE **!") -#if(${list.contains(${bullets}, "flash")} ) - #set($isExpected = "FLASH FLOODING IS ALREADY OCCURRING.") -#else - #set($isExpected = "FLASH FLOODING IS EXPECTED TO BEGIN SHORTLY.") -#end -#if(${list.contains(${bullets}, "burnScar")} ) - #set($burnScar = "EXCESSIVE RAINFALL OVER THE BURN SCAR WILL RESULT IN DEBRIS FLOW MOVING THROUGH THE !** DRAINAGE **!. THE DEBRIS FLOW CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.") - #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.") - #set($ctaSelected = "YES") -#elseif(${list.contains(${bullets}, "mudSlide")} ) - #set($burnScar = "EXCESSIVE RAINFALL OVER THE WARNING AREA WILL CAUSE MUD SLIDES NEAR STEEP TERRAIN. THE MUD SLIDE CAN CONSIST OF ROCK...MUD...VEGETATION AND OTHER LOOSE MATERIALS.") - #set($burnCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD EVACUATE IMMEDIATELY.") - #set($ctaSelected = "YES") -#else - #set($burnScar = "") - #set($burnCTA = "") -#end -#set($rainAmount = "") -#if(${list.contains(${bullets}, "rain1")} ) - #set($rainAmount = "UP TO ONE INCH OF RAIN HAS ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain2")} ) - #set($rainAmount = "UP TO TWO INCHES OF RAIN HAVE ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rain3")} ) - #set($rainAmount = "UP TO THREE INCHES OF RAIN HAVE ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "rainEdit")} ) - #set($rainAmount = "!** RAINFALL AMOUNTS **! INCHES OF RAIN HAVE ALREADY FALLEN.") -#end -#if(${list.contains(${bullets}, "doppler")}) - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "doppler")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "dopplerGauge")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "dopplerGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "DOPPLER RADAR AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **! DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "flash")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}") -#end -#if(${list.contains(${bullets}, "trainedSpotters")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "TRAINED WEATHER SPOTTERS REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN OVER !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN DUE TO A THUNDERSTORM OVER !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "flash")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED FLASH FLOODING IN !** LOCATION **!. ${rainAmount}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED HEAVY RAIN IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "emergencyManagement")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN OVER !** LOCATION **! ") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN DUE TO THUNDERSTORMS OVER !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "flash")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED FLASH FLOODING IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "emergencyManagement")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "EMERGENCY MANAGEMENT REPORTED HEAVY RAIN IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "HEAVY RAIN FROM THUNDERSTORMS HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "flash")}) - #set($report = "FLASH FLOODING HAS BEEN REPORTED IN !** LOCATION **!.") -#end -#if(${list.contains(${bullets}, "public")} && ${list.contains(${bullets}, "plainRain")}) - #set($report = "HEAVY RAIN HAS BEEN REPORTED IN !** LOCATION **!. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satellite")}) - #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO A THUNDERSTORM. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satellite")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "SATELLITE ESTIMATES INDICATED HEAVY RAIN DUE TO THUNDERSTORMS. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satelliteGauge")}) - #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT HEAVY RAIN WAS FALLING OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")}) - #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A THUNDERSTORM IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end -#if(${list.contains(${bullets}, "satelliteGauge")} && ${list.contains(${bullets}, "thunder")} && ${stormType} == "line") - #set($report = "SATELLITE ESTIMATES AND AUTOMATED RAIN GAUGES INDICATED THAT A LINE OF THUNDERSTORMS IS PRODUCING HEAVY RAIN OVER THE AREA. ${rainAmount} ${isExpected}") -#end - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${report} ${snowMelt} - -#wrapText("${burnScar} 2 2) - -########################################################################## -## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet # -########################################################################## -#if(${list.contains(${bullets}, "ffwEmergency")} ) -#wrapText("THIS IS A FLASH FLOOD EMERGENCY FOR !** LOCATION **!. 2 2) -#end - - -############################################################# -######## FOURTH BULLET (OPTIONAL IN FLOOD PRODUCTS) ######### -############################################################# -#set($phenomena = "FLASH FLOOD") -#set($floodType = "FLASH FLOODING") -#set($warningType = "WARNING") -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -#locationsList("SOME LOCATIONS THAT WILL EXPERIENCE FLOODING INCLUDE" ${floodType} 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -########################################## END OF OPTIONAL FOURTH BULLET ############################## -###################################### -###### WHERE ADDITIONAL INFO GOES #### -###################################### - -#if(${list.contains(${bullets}, "addRainfall")}) -ADDITIONAL RAINFALL AMOUNTS OF !** EDIT AMOUNT **! ARE POSSIBLE IN THE WARNED AREA. - -#end -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #parse("mileMarkers.vm") - -#################################### END OF ADDITIONAL STUFF ################################### -###################################### -####### CALL TO ACTIONS ############## -###################################### -##Check to see if we've selected any calls to action. -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... - -#end - -${burnCTA} - -#if(${list.contains(${bullets}, "urbanFloodingCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...URBAN AREAS...HIGHWAYS...STREETS AND UNDERPASSES AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralFloodingCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...COUNTRY ROADS...AS WELL AS FARMLAND AS WELL AS OTHER DRAINAGE AREAS AND LOW LYING SPOTS. - -#end -#if(${list.contains(${bullets}, "ruralUrbanCTA")}) -EXCESSIVE RUNOFF FROM HEAVY RAINFALL WILL CAUSE FLOODING OF SMALL CREEKS AND STREAMS...HIGHWAYS AND UNDERPASSES. ADDITIONALLY...COUNTRY ROADS AND FARMLANDS ALONG THE BANKS OF CREEKS...STREAMS AND OTHER LOW LYING AREAS ARE SUBJECT TO FLOODING. - -#end -#if(${list.contains(${bullets}, "particularStreamCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLASH FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "dontDriveCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "turnAroundCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "autoSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS... OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER FIND ANOTHER ROUTE OVER HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "camperSafetyCTA")}) -FLOODING IS OCCURRING OR IS IMMINENT. IT IS IMPORTANT TO KNOW WHERE YOU ARE RELATIVE TO STREAMS...RIVERS...OR CREEKS WHICH CAN BECOME KILLERS IN HEAVY RAINS. CAMPERS AND HIKERS SHOULD AVOID STREAMS OR CREEKS. - -#end -#if(${list.contains(${bullets}, "lowSpotsCTA")}) -IN HILLY TERRAIN THERE ARE HUNDREDS OF LOW WATER CROSSINGS WHICH ARE POTENTIALLY DANGEROUS IN HEAVY RAIN. DO NOT ATTEMPT TO TRAVEL ACROSS FLOODED ROADS. FIND AN ALTERNATE ROUTE. IT TAKES ONLY A FEW INCHES OF SWIFTLY FLOWING WATER TO CARRY VEHICLES AWAY. - -#end -#if(${list.contains(${bullets}, "ffwMeansCTA")}) -A FLASH FLOOD WARNING MEANS THAT FLOODING IS IMMINENT OR OCCURRING. IF YOU ARE IN THE WARNING AREA MOVE TO HIGHER GROUND IMMEDIATELY. RESIDENTS LIVING ALONG STREAMS AND CREEKS SHOULD TAKE IMMEDIATE PRECAUTIONS TO PROTECT LIFE AND PROPERTY. DO NOT ATTEMPT TO CROSS SWIFTLY FLOWING WATERS OR WATERS OF UNKNOWN DEPTH BY FOOT OR BY AUTOMOBILE. - -#end -#if(${list.contains(${bullets}, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportFloodingCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE. - -#end -#if(${ctaSelected} == "YES") -&& - -#end -#################################### END OF CTA STUFF ################################### - -########################################## -########BOTTOM OF THE PRODUCT############# -########################################## - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarning_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarning_Zones.xml deleted file mode 100644 index 472f4dfcdc..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/flashFloodWarning_Zones.xml +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - - - mi - mph - - - - Forecast Zones - Major Rivers - - - - - NEW - COR - EXT - - - - - FF.W - - - - true - - - true - - - - torWatches - svrWatches - - - - 180 - - 30 - 60 - 90 - 120 - 180 - 240 - 360 - 480 - - -ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - true - 8.0 - 5 - 5 - 4 - 8 - Name - AREA - NAME - - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - - NAME - AREA - TRACK - true - 50 - 10 - - - - - - - - - - distance - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm deleted file mode 100644 index 1be5bdc593..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.vm +++ /dev/null @@ -1,815 +0,0 @@ -##################################################### -## DAM BREAK FFW FOLLOW-UP ## -## CREATED BY PHIL KURIMSKI - WFO DTX ## -## VERSION AWIPS II 1.0 -- APR 14 2011 OB11.4 ## -## -- JUL 14 2011 OB11.7 ## -## -- AUG 18 2011 OB11.0.8-4 ## -## Evan Bookbinder -- SEP 16 2011 OB11.0.8-8 ## -## Phil Kurimski -- SEP 23 2011 OB11.0.8-8 ## -## Mike Rega -- MAY 03 2012 DR 14885 MND ## -##################################################### -## -#set($headline = "") -## set reportType2 to a default value in case nothing is selected for site specific -#set($reportType2 = "THE FAILURE OF") -##################################################################### -## set variables to be used in site specific dam break selections -##################################################################### -#set($addInfo = "") -#set($scenario = "") -#set($ruleofthumb = "") -#set($sitespecCTA = "") -#set($addInfo = "") -#set($volcanoCTA = "") -#if(${list.contains(${bullets}, "levee")}) - #set($ic = "DM") - #set($hycType = "A LEVEE FAILURE") - #set($headline = "FOR A LEVEE FAILURE ") - #set($reportType1 = "A LEVEE ON THE !** **! RIVER AT !** **! FAILED CAUSING FLASH FLOODING OF IMMEDIATELY SURROUNDING AREAS") -#elseif(${list.contains(${bullets}, "floodgate")}) - #set($ic = "DR") - #set($hycType = "A DAM FLOODGATE RELEASE") - #set($headline = "FOR A DAM FLOODGATE RELEASE ") - #set($reportType1 = "THE FLOODGATES ON THE !** **! DAM WERE OPENED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER") -#elseif(${list.contains(${bullets}, "glacier")}) - #set($ic = "GO") - #set($hycType = "A GLACIAL-DAMMED LAKE OUTBURST FLOODING") - #set($headline = "FOR A GLACIAL-DAMMED LAKE OUTBURST FLOODING ") - #set($reportType1 = "A GLACIER AT !** **! HAS MELTED...RELEASING LARGE QUANTITIES OF IMPOUNDED WATER AND CAUSING FLASH FLOODING !** **!") -#elseif(${list.contains(${bullets}, "icejam")}) - #set($ic = "IJ") - #set($hycType = "ICE JAM FLOODING") - #set($headline = "FOR ICE JAM FLOODING ") - #set($reportType1 = "AN ICE JAM ON THE !** **! RIVER AT !** **! BROKE CAUSING FLASH FLOODING DOWNSTREAM") -#elseif(${list.contains(${bullets}, "rain")}) - #set($ic = "RS") - #set($hycType = "EXTREMELY RAPID RAIN SNOW MELT") - #set($headline = "FOR EXTREMELY RAPID RAIN SNOW MELT ") - #set($reportType1 = "RAIN FALLING ON EXISTING SNOWPACK WAS GENERATING FLASH FLOODING FROM EXCESSIVE RUNOFF") -#elseif(${list.contains(${bullets}, "volcano")}) - #set($ic = "SM") - #set($hycType = "VOLCANIC SNOW MELT") - #set($headline = "FOR VOLCANIC SNOW MELT ") - #set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID SNOWMELT ON ITS SLOPES AND GENERATING FLASH FLOODING") -#elseif(${list.contains(${bullets}, "volcanoLahar")}) - #set($ic = "SM") - #set($hycType = "VOLCANIC SNOW MELT") - #set($headline = "FOR VOLCANIC SNOW MELT ") - #set($ctaSelected = "YES") - #set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK AND HOT WATER TO FLOW DOWN THE MOUNTAIN THROUGH !** DRAINAGE **! AND GENERATE FLASH FLOODING") - #set($volcanoCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD HEAD TO HIGHER GROUND IMMEDIATELY.") -#elseif(${list.contains(${bullets}, "dam")}) - #set($ic = "DM") - #set($hycType = "A DAM FAILURE") - #set($headline = "FOR A DAM FAILURE ") - ## The next line should be the headline but will not currently work - ##set($headline = "FOR THE FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ") - #set($reportType1 = "THE !** **! DAM FAILED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER") -#elseif(${list.contains(${bullets}, "siteimminent")}) - #set($ic = "DM") - #set($hycType = "A DAM BREAK") - #set($headline = "FOR A DAM BREAK ") - ## The next line should be the headline but will not currently work - ##set($headline = "FOR THE IMMINENT FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ") - #set($reportType1 = "THE IMMINENT FAILURE OF !** **! DAM") - #set($reportType2 = "THE IMMINENT FAILURE OF") -#elseif(${list.contains(${bullets}, "sitefailed")}) - #set($ic = "DM") - #set($hycType = "A DAM BREAK") - #set($headline = "FOR A DAM BREAK ") - ## The next line should be the headline but will not currently work - ##set($headline = "FOR THE FAILURE OF !**DAM NAME**! ON !**STREAM NAME**! ") - #set($reportType1 = "THE FAILURE OF !** **! DAM") - #set($reportType2 = "THE FAILURE OF") -#else - #set($ic = "ER") - #set($hycType = "EXCESSIVE RAIN") - #set($reportType1 = "EXCESSIVE RAIN CAUSING FLASH FLOODING WAS OCCURING OVER THE WARNED AREA") -#end -#set($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.") -#if(${list.contains(${bullets}, "warnend1")}) - #set($endwarning = "THE WATER IS RECEDING...AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.") -#end -#if(${list.contains(${bullets}, "warnend2")}) - #set($endwarning = "FLOODING ON THE !** **! RIVER HAS RECEDED AND IS NO LONGER EXPECTED TO POSE A SIGNIFICANT THREAT. PLEASE CONTINUE TO HEED ALL ROAD CLOSURES.") -#end -#if(${floodic}) - #set($ic = ${floodic}) -#end -######################################################################### -## Parse command to include a damInfo.vm file with site specific dam -## information. Sites can include this information in a separate file or -## include in the template per the coding below. -######################################################################### -##parse ("damInfo.vm") -#* -######################################################################### -## The next section is for site specific dams. Each site should take the -## example below and customize it for their dams with the information -## from the LLL-damInfo.txt file in AWIPS 1. If you have any questions -## please contact Phil Kurimski - WFO DTX -######################################################################### -#if(${list.contains(${bullets}, "BigRockDam")}) - #set($riverName = "PHIL RIVER") - #set($damName = "BIG ROCK DAM") - #set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES") -#end -#if(${list.contains(${bullets}, "BigRockhighfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockhighnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockmediumfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockmediumnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockruleofthumb")}) - #set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.") -#end -#if(${list.contains(${bullets}, "BranchedOakDam")}) - #set($riverName = "KELLS RIVER") - #set($damName = "BRANCHED OAK DAM") - #set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES") -#end -#if(${list.contains(${bullets}, "BranchedOakhighfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakhighnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakmediumfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakmediumnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakruleofthumb")}) - #set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.") -#end -####################################################################### -## Look for site specific selections to override the 4th bullet and -## to set up the headlines and additional info used in the product. -## This loop assumes you end each site specific selection with -## the word "Dam". If you end with a different word you will need -## to modify the loop below. -######################################################################## -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("Dam")}) - #set($ctaSelected = "YES") - #set($sitespecSelected = "YES") - #set($hycType = "THE ${riverName} BELOW ${damName}") - #set($headline = "FOR ${reportType2} ${damName} ON THE ${riverName} ") - #set($reportType1 = "${reportType2} ${damName} ON THE ${riverName}") - #set($addInfo = "THE NEAREST DOWNSTREAM TOWN IS ${cityInfo} FROM THE DAM.") - #set($sitespecCTA = "IF YOU ARE IN LOW LYING AREAS BELOW THE ${damName} YOU SHOULD MOVE TO HIGHER GROUND IMMEDIATELY.") -#end -#end -####################################################################### -## End of Site Specific Dam Information -####################################################################### -*# -#################################### -## DAM BREAK FFW FOLLOW-UP HEADER ## -#################################### -#if(${action}=="COR" && ${cancelareas}) -#set($CORCAN = "true") -#else -#set($CORCAN = "false") -#end -#if(${action}!="CANCON" && ${CORCAN}!="true") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FFS${siteId} - -#if(${productClass}=="T") -TEST...FLASH FLOOD STATEMENT...TEST -#else -FLASH FLOOD STATEMENT -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -${ugcline} -/${productClass}.${action}.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#end -########################## -## DAM BREAK FFW CANCEL ## -########################## -#if(${action}=="CAN") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ## -###zoneHeadlineLocList(${areas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${affectedCounties} true true true false) -...## -########### END NEW HEADLINE CODE #################### - - -## Explanation -${endwarning} - -#end -####################### -## DAM BREAK FFW CON ## -####################### -#if(${action}=="CON" || (${action}=="COR" && ${CORCAN}=="false")) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ## -###zoneHeadlineLocList(${areas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${affectedCounties} true true true false) -...## - - -########### END NEW HEADLINE CODE #################### -############################################################################### -## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline # -############################################################################### -#if(${list.contains(${bullets}, "ffwEmergency")}) - - -...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!... - -#end -##################################################### -## Changed report to match selections in template -##################################################### -#set($report = "${reportType1}") -#if(${list.contains(${bullets}, "county")}) - #set($report = "COUNTY DISPATCH REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "corps")}) - #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "damop")}) - #set($report = "DAM OPERATORS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "bureau")}) - #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "THE PUBLIC REPORTED ${reportType1}") -#end - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}. - -#set($phenomena = "FLASH FLOOD") -#set($warningType = "WARNING") -########################################################################## -## Optional 4th bullet...comment out if needed. -########################################################################## -## This first if loop will override the locations impacted statement -## with the site specific information in the 4th bullet. -########################################################################## -#if(${sitespecSelected} == "YES") -${addInfo} - -${scenario} - -${ruleofthumb} - -########################################################################## -## Continue with the regular 4th bullet information -########################################################################## -#elseif(${list.contains(${bullets}, "pathcast")}) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -#elseif(${list.contains(${bullets}, "listofcities")}) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -#locationsList("LOCATIONS IMPACTED INCLUDE..." "THIS FLOODING WILL AFFECT MAINLY RURAL AREAS OF" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -#end -############################ End of Optional 4th Bullet ########################### -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end -##################### -## CALL TO ACTIONS ## -##################### -####################################################################### -## Check to see if we've selected any calls to action. In our .xml file -## we ended each CTA bullet ID with "CTA" for this reason as a 'trip' -####################################################################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... -#end -## - -${sitespecCTA} - -${volcanoCTA} - -#if(${list.contains(${bullets}, "floodMovingCTA")}) -FLOOD WATERS ARE MOVING DOWN !**name of channel**! FROM !**location**! TO !**location**!. THE FLOOD CREST IS EXPECTED TO REACH !**location(s)**! BY !**time(s)**!. - -#end -#if(${list.contains(${bullets}, "taddCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "vehicleCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "warningMeansCTA")}) -A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${ctaSelected} == "YES") -&& -#end -#end -########################### -## DAM BREAK FFW CAN/CON ## -########################### -#if(${action}=="CANCON") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FFS${siteId} - -#if(${productClass}=="T") -TEST...FLASH FLOOD STATEMENT...TEST -#else -FLASH FLOOD STATEMENT -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -${ugclinecan} -/${productClass}.CAN.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ## -###zoneHeadlineLocList(${cancelareas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${cancelaffectedCounties} true true true false) -...## -########### END NEW HEADLINE CODE #################### - - -## Explanation -${endwarning} - -#printcoords(${areaPoly}, ${list}) - - -$$ - -${ugcline} -/${productClass}.CON.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ## -###zoneHeadlineLocList(${areas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${affectedCounties} true true true false) -...## -########### END NEW HEADLINE CODE #################### - - -############################################################################### -## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline # -############################################################################### -#if(${list.contains(${bullets}, "ffwEmergency")}) - -...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!... - -#end -##################################################### -## Changed report to match selections in template -##################################################### -#set($report = "${reportType1}") -#if(${list.contains(${bullets}, "county")}) - #set($report = "COUNTY DISPATCH REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "corps")}) - #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "damop")}) - #set($report = "DAM OPERATORS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "bureau")}) - #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "THE PUBLIC REPORTED ${reportType1}") -#end - -## Storm current location description -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}. - -#set($phenomena = "FLASH FLOOD") -#set($warningType = "WARNING") -########################################################################## -## Optional 4th bullet...comment out if needed. -########################################################################## -## This first if loop will override the locations impacted statement -## with the site specific information in the 4th bullet. -########################################################################## -#if(${sitespecSelected} == "YES") -${addInfo} - -${scenario} - -${ruleofthumb} - -########################################################################## -## Continue with the regular 4th bullet information -########################################################################## -#elseif(${list.contains(${bullets}, "pathcast")}) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat}) - -#elseif(${list.contains(${bullets}, "listofcities")}) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -#locationsList("LOCATIONS IMPACTED INCLUDE..." "THIS FLOODING" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat}) - -#end -############################ End of Optional 4th Bullet ########################### -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #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)**!. - -#end - -##################### -## CALL TO ACTIONS ## -##################### -####################################################################### -## Check to see if we've selected any calls to action. In our .xml file -## we ended each CTA bullet ID with "CTA" for this reason as a 'trip' -####################################################################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... -#end -## - -${sitespecCTA} - -${volcanoCTA} - -#if(${list.contains(${bullets}, "taddCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "vehicleCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "warningMeansCTA")}) -A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${ctaSelected} == "YES") -&& -#end - -#elseif(${CORCAN}=="true") -${WMOId} ${vtecOffice} 000000 ${BBBId} -FFS${siteId} - -#if(${productClass}=="T") -TEST...FLASH FLOOD STATEMENT...TEST -#else -FLASH FLOOD STATEMENT -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -${ugclinecan} -/${productClass}.COR.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${cancelareas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE FLASH FLOOD WARNING ${headline}HAS BEEN CANCELLED FOR ## -###zoneHeadlineLocList(${cancelareas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${cancelaffectedCounties} true true true false) -...## -########### END NEW HEADLINE CODE #################### - - -## Explanation -${endwarning} - -#printcoords(${areaPoly}, ${list}) - - -$$ - -${ugcline} -/${productClass}.COR.${vtecOffice}.FF.W.${etn}.000000T0000Z-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.${floodseverity}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ -#set($zoneList = "") -#foreach (${area} in ${areas}) -#set($zoneList = "${zoneList}${area.name}-") -#end -${zoneList} - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...A FLASH FLOOD WARNING ${headline}REMAINS IN EFFECT #secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR ## -###zoneHeadlineLocList(${areas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${affectedCounties} true true true false) -...## -########### END NEW HEADLINE CODE #################### - - -############################################################################### -## Flash Flood Emergency per NWS 10-922 Directive goes after initial headline # -############################################################################### -#if(${list.contains(${bullets}, "ffwEmergency")}) - -...THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!... - -#end -##################################################### -## Changed report to match selections in template -##################################################### -#set($report = "${reportType1}") -#if(${list.contains(${bullets}, "county")}) - #set($report = "COUNTY DISPATCH REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "corps")}) - #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "damop")}) - #set($report = "DAM OPERATORS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "bureau")}) - #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "THE PUBLIC REPORTED ${reportType1}") -#end - -## Storm current location description -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone}) ${report}. - -#set($phenomena = "FLASH FLOOD") -#set($warningType = "WARNING") -########################################################################## -## Optional 4th bullet...comment out if needed. -########################################################################## -## This first if loop will override the locations impacted statement -## with the site specific information in the 4th bullet. -########################################################################## -#if(${sitespecSelected} == "YES") -${addInfo} - -${scenario} - -${ruleofthumb} - -########################################################################## -## Continue with the regular 4th bullet information -########################################################################## -#elseif(${list.contains(${bullets}, "pathcast")}) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat}) - -#elseif(${list.contains(${bullets}, "listofcities")}) -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -#locationsList("LOCATIONS IMPACTED INCLUDE..." "THIS FLOODING" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat}) - -#end -############################ End of Optional 4th Bullet ########################### -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #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)**!. - -#end - -##################### -## CALL TO ACTIONS ## -##################### -####################################################################### -## Check to see if we've selected any calls to action. In our .xml file -## we ended each CTA bullet ID with "CTA" for this reason as a 'trip' -####################################################################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... -#end -## - -${sitespecCTA} - -${volcanoCTA} - -#if(${list.contains(${bullets}, "taddCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "vehicleCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "warningMeansCTA")}) -A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${ctaSelected} == "YES") -&& -#end - -#end -####################### -## DAM BREAK FFW EXP ## -####################### -#if(${action}=="EXP") -#if(${productClass}=="T") -THIS IS A TEST MESSAGE.## -#end -...THE FLASH FLOOD WARNING ${headline}## -#if(${now.compareTo(${expire})} > -1) -EXPIRED AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ## -#else -WILL EXPIRE AT ${dateUtil.format(${expire}, ${timeFormat.clock}, 15, ${localtimezone})} FOR ## -#end -###zoneHeadlineLocList(${areas} true true true false) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#headlineLocList(${affectedCounties} true true true false) -...## -########### END NEW HEADLINE CODE #################### - - -## Explaination -${endwarning} - -#end -########################## -## END OF DAM BREAK FFW ## -########################## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end - -#printcoords(${areaPoly}, ${list}) - - -$$ - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml deleted file mode 100644 index cd164beda3..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarningFollowup_Zones.xml +++ /dev/null @@ -1,467 +0,0 @@ - - - - - - - mi - mph - - - - Forecast Zones - - - - - - - - - COR - CON - CAN - EXP - - - - - FF.W - - - - false - - -true - - - true - - - - 30 - - 30 - - - -dam,ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - County - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - 1 - true - 8.0 - 5 - 5 - 4 - 8 - Name - AREA - NAME - - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - warngenlev - population - distance - - - - - - - - - - - - - NAME - AREA - 1 - POINTS - true - 10 - 200 - - name - - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm deleted file mode 100644 index 1edd427b5b..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.vm +++ /dev/null @@ -1,352 +0,0 @@ -################################################# -## DAM BREAK FFW TEMPLATE ## -## CREATED BY PHIL KURIMSKI - WFO DTX ## -## VERSION AWIPS II 1.0 - APR 13 2011 OB11.4 ## -## VERSION AWIPS II 1.1 - JUL 14 2011 OB11.7 ## -## VERSION AWIPS II 1.2 - AUG 18 2011 OB11.8 ## -## VERSION AWIPS II 1.3 - SEP 23 2011 OB11.8 ## -## VERSION AWIPS II 1.4 - JUN 26 2013 OB13.4.1 ## -## to add "U" Unknown servity ## -################################################# -## -#if(${action} == "EXT") - #set($starttime = "000000T0000Z") - #set($extend = true) -#else - #set($starttime = ${dateUtil.format(${start}, ${timeFormat.ymdthmz})}) - #set($extend = false) -#end -#if(${list.contains(${bullets}, "sev1")}) - #set($sev = "1") -#elseif(${list.contains(${bullets}, "sev2")}) - #set($sev = "2") -#elseif(${list.contains(${bullets}, "sev3")}) - #set($sev = "3") -#else - #set($sev = "0") -#end -## -## set reportType2 to a default value in case nothing is selected for site specific -#set($reportType2 = "THE FAILURE OF") -##################################################################### -## set variables to be used in site specific dam break selections -##################################################################### -#set($addInfo = "") -#set($scenario = "") -#set($ruleofthumb = "") -#set($sitespecCTA = "") -#set($volcanoCTA = "") -#if(${list.contains(${bullets}, "levee")}) - #set($ic = "DM") - #set($hycType = "A LEVEE FAILURE") - #set($reportType1 = "A LEVEE ON THE !** **! RIVER AT !** **! FAILED CAUSING FLASH FLOODING OF IMMEDIATELY SURROUNDING AREAS") -#elseif(${list.contains(${bullets}, "floodgate")}) - #set($ic = "DR") - #set($hycType = "A DAM FLOODGATE RELEASE") - #set($reportType1 = "THE FLOODGATES ON THE !** **! DAM WERE OPENED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER") -#elseif(${list.contains(${bullets}, "glacier")}) - #set($ic = "GO") - #set($hycType = "A GLACIAL-DAMMED LAKE OUTBURST FLOODING") - #set($reportType1 = "A GLACIER AT !** **! HAS MELTED...RELEASING LARGE QUANTITIES OF IMPOUNDED WATER AND CAUSING FLASH FLOODING !** **!") -#elseif(${list.contains(${bullets}, "icejam")}) - #set($ic = "IJ") - #set($hycType = "ICE JAM FLOODING") - #set($reportType1 = "AN ICE JAM ON THE !** **! RIVER AT !** **! BROKE CAUSING FLASH FLOODING DOWNSTREAM") -#elseif(${list.contains(${bullets}, "rain")}) - #set($ic = "RS") - #set($hycType = "EXTREMELY RAPID RAIN SNOW MELT") - #set($reportType1 = "RAIN FALLING ON EXISTING SNOWPACK WAS GENERATING FLASH FLOODING FROM EXCESSIVE RUNOFF") -#elseif(${list.contains(${bullets}, "volcano")}) - #set($ic = "SM") - #set($hycType = "VOLCANIC SNOW MELT") - #set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID SNOWMELT ON ITS SLOPES AND GENERATING FLASH FLOODING") -#elseif(${list.contains(${bullets}, "volcanoLahar")}) - #set($ic = "SM") - #set($hycType = "VOLCANIC SNOW MELT") - #set($ctaSelected = "YES") - #set($reportType1 = "ACTIVITY OF THE !** **! VOLCANO WAS CAUSING RAPID MELTING OF SNOW AND ICE ON THE MOUNTAIN. THIS WILL RESULT IN A TORRENT OF MUD...ASH...ROCK AND HOT WATER TO FLOW DOWN THE MOUNTAIN THROUGH !** DRAINAGE **! AND GENERATE FLASH FLOODING") - #set($volcanoCTA = "PERSONS IN THE VICINITY OF !** DRAINAGE **! SHOULD HEAD TO HIGHER GROUND IMMEDIATELY.") -#elseif(${list.contains(${bullets}, "dam")}) - #set($ic = "DM") - #set($hycType = "A DAM FAILURE") - #set($reportType1 = "THE !** **! DAM FAILED CAUSING FLASH FLOODING DOWNSTREAM ON THE !** **! RIVER") - #set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY") -#elseif(${list.contains(${bullets}, "siteimminent")}) - #set($ic = "DM") - #set($hycType = "A DAM BREAK") - #set($reportType1 = "THE IMMINENT FAILURE OF !** **! DAM") - #set($reportType2 = "THE IMMINENT FAILURE OF") - #set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY") -#elseif(${list.contains(${bullets}, "sitefailed")}) - #set($ic = "DM") - #set($hycType = "A DAM BREAK") - #set($reportType1 = "THE FAILURE OF !** **! DAM") - #set($reportType2 = "THE FAILURE OF") - #set($addInfo = "!** **! DAM ON THE !** **! RIVER UPSTREAM FROM !** **! HAS GIVEN WAY AND HIGH WATERS ARE NOW MOVING TOWARD !** **!. AREAS DOWNSTREAM FROM THE DAM ALONG THE !** **! RIVER SHOULD BE PREPARED FOR FLOODING. TAKE NECESSARY PRECAUTIONS IMMEDIATELY") -#else - #set($ic = "ER") - #set($hycType = "EXCESSIVE RAIN") - #set($reportType1 = "EXCESSIVE RAIN CAUSING FLASH FLOODING WAS OCCURING OVER THE WARNED AREA") -#end -######################################################################### -## Parse command to include a damInfo.vm file with site specific dam -## information. Sites can include this information in a separate file or -## include in the template per the coding below. -######################################################################### -##parse ("damInfo.vm") -#* -######################################################################### -## The next section is for site specific dams. Each site should take the -## example below and customize it for their dams with the information -## from the LLL-damInfo.txt file in AWIPS 1. If you have any questions -## please contact Phil Kurimski - WFO DTX -######################################################################### -#if(${list.contains(${bullets}, "BigRockDam")}) - #set($riverName = "PHIL RIVER") - #set($damName = "BIG ROCK DAM") - #set($cityInfo = "EVAN...LOCATED ABOUT 3 MILES") -#end -#if(${list.contains(${bullets}, "BigRockhighfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 18 FEET IN 16 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockhighnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 23 FEET IN 31 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockmediumfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 14 FEET IN 19 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockmediumnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT EVAN COULD EXCEED 17 FEET IN 32 MINUTES.") -#end -#if(${list.contains(${bullets}, "BigRockruleofthumb")}) - #set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.") -#end -#if(${list.contains(${bullets}, "BranchedOakDam")}) - #set($riverName = "KELLS RIVER") - #set($damName = "BRANCHED OAK DAM") - #set($cityInfo = "DANGELO...LOCATED ABOUT 6 MILES") -#end -#if(${list.contains(${bullets}, "BranchedOakhighfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 19 FEET IN 32 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakhighnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 26 FEET IN 56 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakmediumfast")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 14 FEET IN 33 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakmediumnormal")}) - #set($scenario = "IF A COMPLETE FAILURE OF THE DAM OCCURS...THE WATER DEPTH AT DANGELO COULD EXCEED 20 FEET IN 60 MINUTES.") -#end -#if(${list.contains(${bullets}, "BranchedOakruleofthumb")}) - #set($ruleofthumb = "FLOOD WAVE ESTIMATE BASED ON THE DAM IN IDAHO: FLOOD INITIALLY HALF OF ORIGINAL HEIGHT BEHIND DAM AND 3-4 MPH; 5 MILES IN 1/2 HOURS; 10 MILES IN 1 HOUR; AND 20 MILES IN 9 HOURS.") -#end -####################################################################### -## Look for site specific selections to override the 4th bullet and -## to set up the headlines and additional info used in the product. -## This loop assumes you end each site specific selection with -## the word "Dam". If you end with a different word you will need -## to modify the loop below. -######################################################################## -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("Dam")}) - #set($ctaSelected = "YES") - #set($sitespecSelected = "YES") - #set($hycType = "THE ${riverName} BELOW ${damName}") - #set($reportType1 = "${reportType2} ${damName} ON THE ${riverName}") - #set($addInfo = "THE NEAREST DOWNSTREAM TOWN IS ${cityInfo} FROM THE DAM.") - #set($sitespecCTA = "IF YOU ARE IN LOW LYING AREAS BELOW THE ${damName} YOU SHOULD MOVE TO HIGHER GROUND IMMEDIATELY.") -#end -#end -####################################################################### -## End of Site Specific Dam Information -####################################################################### -*# -## -${WMOId} ${vtecOffice} 000000 ${BBBId} -FFW${siteId} -${ugcline} -/${productClass}.${action}.${vtecOffice}.FF.W.${etn}.${starttime}-${dateUtil.format(${expire}, ${timeFormat.ymdthmz}, 15)}/ -/00000.${sev}.${ic}.000000T0000Z.000000T0000Z.000000T0000Z.OO/ - -BULLETIN - EAS ACTIVATION REQUESTED -#if(${productClass}=="T") -TEST...FLASH FLOOD WARNING...TEST -#else -FLASH FLOOD WARNING -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end -#headlineext(${officeLoc}, ${backupSite}, ${extend}) - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -####################################################################### -## Put the hycType variable on the next line and included the word 'IN' -## to come in line with the 10-922 directive -####################################################################### -FLASH FLOOD WARNING FOR... - ${hycType} IN... -###firstBullet(${areas}) -##REPLACE THE LINE ABOVE WITH THE FOLLOWING IF YOU USE COUNTY VS. ZONE OUTPUT -#firstBullet(${affectedCounties}) - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) - -#set($report = "${reportType1}") -#if(${list.contains(${bullets}, "county")}) - #set($report = "COUNTY DISPATCH REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "lawEnforcement")}) - #set($report = "LOCAL LAW ENFORCEMENT REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "corps")}) - #set($report = "CORPS OF ENGINEERS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "damop")}) - #set($report = "DAM OPERATORS REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "bureau")}) - #set($report = "BUREAU OF RECLAMATION REPORTED ${reportType1}") -#end -#if(${list.contains(${bullets}, "public")}) - #set($report = "THE PUBLIC REPORTED ${reportType1}") -#end - -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#thirdBullet(${dateUtil},${event},${timeFormat},${localtimezone},${secondtimezone})...${report}. - -########################################################################## -## Flash Flood Emergency per NWS 10-922 Directive goes with third bullet # -########################################################################## -#if(${list.contains(${bullets}, "ffwEmergency")}) - THIS IS A FLASH FLOOD EMERGENCY FOR !**ENTER LOCATION**!. - -#end -#set($phenomena = "FLASH FLOOD") -#set($warningType = "WARNING") -########################################################################## -## Optional 4th bullet...comment out if not needed. -########################################################################## -## This first if loop will override the locations impacted statement -## with the site specific information in the 4th bullet. -########################################################################## -#if(${sitespecSelected} == "YES") -* ## -${addInfo} - -${scenario} - -${ruleofthumb} - -########################################################################## -## Continue with the regular 4th bullet information -########################################################################## -#elseif(${list.contains(${bullets}, "pathcast")}) -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#pathCast("THE FLOOD WILL BE NEAR..." "THIS FLOODING" ${pathCast} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -#elseif(${list.contains(${bullets}, "listofcities")}) -* ## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -#### THE THIRD ARGUMENT IS A NUMBER SPECIFYING THE NUMBER OF COLUMNS TO OUTPUT THE CITIES LIST IN -#### 0 IS A ... SEPARATED LIST, 1 IS ONE PER LINE, >1 IS A COLUMN FORMAT -#### IF YOU USE SOMETHING OTHER THAN "LOCATIONS IMPACTED INCLUDE" LEAD IN BELOW, MAKE SURE THE -#### ACCOMPANYING XML FILE PARSE STRING IS CHANGED TO MATCH! -#locationsList("LOCATIONS IMPACTED INCLUDE..." "THIS FLOODING" 0 ${cityList} ${otherPoints} ${areas} ${dateUtil} ${timeFormat} 0) - -#end -############################ End of Optional 4th Bullet ########################### -#if(${list.contains(${bullets}, "drainages")}) -#drainages(${riverdrainages}) - -#end - -## parse file command here is to pull in mile marker info -## #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)**!. - -#end - -##################### -## CALL TO ACTIONS ## -##################### -####################################################################### -## Check to see if we've selected any calls to action. In our .xml file -## we ended each CTA bullet ID with "CTA" for this reason as a 'trip' -####################################################################### -#foreach (${bullet} in ${bullets}) -#if(${bullet.endsWith("CTA")}) -#set($ctaSelected = "YES") -#end -#end -## -#if(${ctaSelected} == "YES") -PRECAUTIONARY/PREPAREDNESS ACTIONS... -#end -## - -${sitespecCTA} - -${volcanoCTA} - -#if(${list.contains(${bullets}, "taddCTA")}) -MOST FLOOD DEATHS OCCUR IN AUTOMOBILES. NEVER DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. FLOOD WATERS ARE USUALLY DEEPER THAN THEY APPEAR. JUST ONE FOOT OF FLOWING WATER IS POWERFUL ENOUGH TO SWEEP VEHICLES OFF THE ROAD. WHEN ENCOUNTERING FLOODED ROADS MAKE THE SMART CHOICE...TURN AROUND...DONT DROWN. - -#end -#if(${list.contains(${bullets}, "nighttimeCTA")}) -BE ESPECIALLY CAUTIOUS AT NIGHT WHEN IT IS HARDER TO RECOGNIZE THE DANGERS OF FLOODING. IF FLOODING IS OBSERVED ACT QUICKLY. MOVE UP TO HIGHER GROUND TO ESCAPE FLOOD WATERS. DO NOT STAY IN AREAS SUBJECT TO FLOODING WHEN WATER BEGINS RISING. - -#end -#if(${list.contains(${bullets}, "vehicleCTA")}) -DO NOT DRIVE YOUR VEHICLE INTO AREAS WHERE THE WATER COVERS THE ROADWAY. THE WATER DEPTH MAY BE TOO GREAT TO ALLOW YOUR CAR TO CROSS SAFELY. MOVE TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "warningMeansCTA")}) -A FLASH FLOOD WARNING MEANS FLASH FLOODING IS OCCURRING OR IS IMMINENT. MOST FLOOD RELATED DEATHS OCCUR IN AUTOMOBILES. DO NOT ATTEMPT TO CROSS WATER COVERED BRIDGES...DIPS...OR LOW WATER CROSSINGS. NEVER TRY TO CROSS A FLOWING STREAM...EVEN A SMALL ONE...ON FOOT. TO ESCAPE RISING WATER MOVE UP TO HIGHER GROUND. - -#end -#if(${list.contains(${bullets}, "powerFloodCTA")}) -DO NOT UNDERESTIMATE THE POWER OF FLOOD WATERS. ONLY A FEW INCHES OF RAPIDLY FLOWING WATER CAN QUICKLY CARRY AWAY YOUR VEHICLE. - -#end -#if(${list.contains(${bullets}, "reportCTA")}) -TO REPORT FLOODING...HAVE THE NEAREST LAW ENFORCEMENT AGENCY RELAY YOUR REPORT TO THE NATIONAL WEATHER SERVICE FORECAST OFFICE. - -#end -#if(${ctaSelected} == "YES") -&& -#end - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - - -$$ - -#parse("forecasterName.vm") diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml deleted file mode 100644 index 44d87c07d0..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/nonConvectiveFlashFloodWarning_Zones.xml +++ /dev/null @@ -1,441 +0,0 @@ - - - - - - mi - mph - - - - Forecast Zones - - - - - - - - NEW - COR - EXT - - - - - FF.W - - - -true - - -true - - - true - - - 180 - - 30 - 40 - 45 - 50 - 60 - 90 - 120 - 150 - 180 - 210 - 240 - 270 - 300 - 360 - - - -dam,ic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -false - - - - - - - - - - - Zone - HATCHING - 0 - AND - 0 - NAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - - STATE_ZONE - NAME - - parent - - - - - - - 25 - - - - - COUNTY - INTERSECT - 0 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - - 1 - AREA - true - 8.0 - 5 - 5 - 4 - 8 - Name - - NAME - STATE - STATE - countyTypes.txt - - distance - - - - - - - - - - - - - NAME - 1 - AREA - POINTS - true - 30 - 200 - - - - - - - - - - warngenlev - population - distance - - - - - NAME - 1 - AREA - POINTS - true - 10 - 200 - - distance - - - - - - - - - - - - - - - - WarnGenLoc - - Zone - States - TIMEZONES - TIME_ZONE - - - - ffmp_basins - 0.064 - streamname - - - - - - true - - - diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/sws_county.vm b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/sws_county.vm deleted file mode 100644 index 064e4cd910..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/sws_county.vm +++ /dev/null @@ -1,103 +0,0 @@ -## new template jfrederick tim feb 2011 -## sigwx alert for thunderstorms with wind and/or hail under -## severe limits -## county list needs to be sortable by state/parts of state/ -## -## Qinglu Lin 12-27-2012 DR 15594. Appended true to headlineLocList's parameter list. -## -${WMOId} ${vtecOffice} 000000 ${BBBId} -SPS${siteId} - -#if(${productClass}=="T") -TEST...SPECIAL WEATHER STATEMENT...TEST -#else -SPECIAL WEATHER STATEMENT -#end -NATIONAL WEATHER SERVICE ${officeShort} -#backupText(${backupSite}) -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#foreach (${area} in ${areas}) -${area.name} ${area.stateabbr}-## -#end - -${dateUtil.format(${now}, ${timeFormat.header}, ${localtimezone})} - -#if(${productClass}=="T") -...THIS MESSAGE IS FOR TEST PURPOSES ONLY... - -#end - -THE NATIONAL WEATHER SERVICE IN ${officeLoc} HAS ISSUED A SPECIAL WEATHER STATEMENT EFFECTIVE ## -#secondBullet(${dateUtil},${expire},${timeFormat},${localtimezone},${secondtimezone}) FOR #headlineLocList(${areas} true true true false true). - -#if(${stormType} == "line") - #set ($type1 = "THUNDERSTORMS") -#else - #set ($type1 = "A THUNDERSTORM") -#end -#if(${list.contains($bullets, "doppler")}) - #set ($report = "NATIONAL WEATHER SERVICE DOPPLER RADAR INDICATED ${type1} ") -#end -#if(${list.contains($bullets, "spotter")}) - #set ($report = "AMATEUR RADIO WEATHER SPOTTERS REPORTED !** **!") -#end -#if(${list.contains($bullets, "public")}) - #set ($report = "THE PUBLIC REPORTED !** **! ") -#end - -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. ## -#end -AT ${dateUtil.format(${event}, ${timeFormat.clock}, ${localtimezone})}...${report} ## -#handleClosestPoints($list, $closestPoints, $otherClosestPoints, $stormType, "NEAR", 6, "MILES") -#if($movementSpeed < 3 || ${stationary}) -. ${reportType2} NEARLY STATIONARY. -#else -...MOVING #direction(${movementDirectionRounded}) AT ${mathUtil.roundTo5(${movementSpeed})} MPH. -#end - -## calls to action -#if(${list.contains($bullets, "streamflooding")}) -HEAVY RAINS MAY FLOOD LOW LYING AREAS SUCH AS DITCHES AND ## -UNDERPASSES. AVOID THESE AREAS AND DO NOT CROSS FLOODED ROADS ## -AS THEY MAY BE WASHED OUT. WATER LEVELS OF SMALL STREAMS AND ## -RIVERS MAY ALSO RISE...THEREFORE SEEK HIGHER GROUND IF THREATENED ## -BY FLOOD WATERS. - -#end -#if(${list.contains($bullets, "intenselightning")}) -INTENSE LIGHTNING IS REPORTED WITH THIS STORM. IF OUTDOORS...## -STAY AWAY FROM ISOLATED HIGH OBJECTS SUCH AS TREES. MOVE ## -INDOORS IF POSSIBLE. WHEN INDOORS...STAY AWAY FROM WINDOWS AND ## -DOORS AND AVOID USING TELEPHONES UNLESS IT IS AN EMERGENCY. ## -TRY TO UNPLUG UNNECESSARY ELECTRICAL APPLIANCES BEFORE THE ## -THUNDERSTORM APPROACHES. - -#end - -############# -## WATCHES ## -############# -#if(${list.contains($includedWatches, "torWatches")}) -#inserttorwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat}) -#end -#if(${list.contains($includedWatches, "svrWatches")}) -#insertsvrwatches(${watches}, ${list}, ${secondtimezone}, ${dateUtil}, ${timeFormat}) -#end - -######################## -## LAT/LON, TML, SIGN ## -######################## -#if(${productClass}=="T") -THIS IS A TEST MESSAGE. DO NOT TAKE ACTION BASED ON THIS MESSAGE. - -#end -#printcoords(${areaPoly}, ${list}) - -#tml(${start} ${movementDirection} ${movementInKnots} ${timeFormat} ${eventlocation}) - - -$$ - -!**NAME/INITIALS**! diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/sws_county.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/sws_county.xml deleted file mode 100644 index 6f4e9a5dca..0000000000 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/sws_county.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - mi - mph - - - - - - - - - - - - - - - true - - - true - - - - torWatches - svrWatches - - - - 30 - - 10 - 15 - 20 - 25 - 30 - 40 - 45 - 50 - 60 - 75 - - - - - - - - - - - - - - - - - 0.00 - AND - 0 - COUNTYNAME - NAME - STATE - FE_AREA - TIME_ZONE - countyTypes.txt - FIPS - NAME - - parent - - - - - - - 25 - - - - NAME - TRACK - true - 50 - 10 - - warngenlev - population - - - - - NAME - POINTS - - - - - - 1 - 50 - - distance - warngenlev - - - - - NAME - POINTS - - - - - - 5 - 100 - - distance - warngenlev - - - - - true - 8.0 - 5 - 5 - 4 - 8 - Name - COUNTYNAME - STATE - STATE - countyTypes.txt - - distance - - - - - City - County - States - TIMEZONES - TIME_ZONE - - - - - diff --git a/edexOsgi/com.raytheon.uf.common.localization/src/com/raytheon/uf/common/localization/msgs/GetServersResponse.java b/edexOsgi/com.raytheon.uf.common.localization/src/com/raytheon/uf/common/localization/msgs/GetServersResponse.java index 92e99807a0..0466033b02 100644 --- a/edexOsgi/com.raytheon.uf.common.localization/src/com/raytheon/uf/common/localization/msgs/GetServersResponse.java +++ b/edexOsgi/com.raytheon.uf.common.localization/src/com/raytheon/uf/common/localization/msgs/GetServersResponse.java @@ -36,6 +36,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; * Aug 6, 2009 mschenke Initial creation * Sep 12, 2012 1167 djohnson Add datadelivery servers. * Jan 14, 2013 1469 bkowal Removed the hdf5 data directory + * Aug 27, 2013 2995 bkowal Removed jms server; added jms connection string * * * @@ -49,7 +50,7 @@ public class GetServersResponse { private String httpServer; @DynamicSerializeElement - private String jmsServer; + private String jmsConnectionString; @DynamicSerializeElement private String pypiesServer; @@ -65,12 +66,12 @@ public class GetServersResponse { this.httpServer = httpServer; } - public String getJmsServer() { - return jmsServer; + public String getJmsConnectionString() { + return jmsConnectionString; } - public void setJmsServer(String jmsServer) { - this.jmsServer = jmsServer; + public void setJmsConnectionString(String jmsConnectionString) { + this.jmsConnectionString = jmsConnectionString; } public String getPypiesServer() { diff --git a/edexOsgi/com.raytheon.uf.common.python/utility/common_static/base/python/MasterInterface.py b/edexOsgi/com.raytheon.uf.common.python/utility/common_static/base/python/MasterInterface.py index c9799229a9..40d6655c57 100644 --- a/edexOsgi/com.raytheon.uf.common.python/utility/common_static/base/python/MasterInterface.py +++ b/edexOsgi/com.raytheon.uf.common.python/utility/common_static/base/python/MasterInterface.py @@ -121,7 +121,7 @@ class MasterInterface(object): if self.isInstantiated(moduleName): self.__instanceMap.__delitem__(moduleName) if sys.modules.has_key(moduleName): - self.self.clearModuleAttributes(moduleName) + self.clearModuleAttributes(moduleName) sys.modules.pop(moduleName) if moduleName in self.scripts: self.scripts.remove(moduleName) diff --git a/edexOsgi/com.raytheon.uf.edex.archive/.classpath b/edexOsgi/com.raytheon.uf.edex.archive/.classpath index a6f75277ac..4158707b64 100644 --- a/edexOsgi/com.raytheon.uf.edex.archive/.classpath +++ b/edexOsgi/com.raytheon.uf.edex.archive/.classpath @@ -1,8 +1,8 @@ - - - - - + + + + + diff --git a/edexOsgi/com.raytheon.uf.edex.archive/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.archive/META-INF/MANIFEST.MF index d6df454102..dd531b7090 100644 --- a/edexOsgi/com.raytheon.uf.edex.archive/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.edex.archive/META-INF/MANIFEST.MF @@ -6,4 +6,12 @@ Bundle-Version: 1.0.0.qualifier Bundle-Vendor: RAYTHEON Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.raytheon.uf.edex.archive.purge -Import-Package: com.raytheon.uf.common.archive.config +Import-Package: com.raytheon.uf.common.archive.config, + com.raytheon.uf.common.archive.request +Require-Bundle: com.raytheon.uf.common.auth;bundle-version="1.12.1174", + com.raytheon.uf.edex.auth;bundle-version="1.12.1174", + com.raytheon.uf.common.serialization.comm;bundle-version="1.12.1174", + com.raytheon.uf.common.status;bundle-version="1.12.1174", + com.raytheon.uf.common.serialization;bundle-version="1.12.1174", + com.raytheon.uf.common.util;bundle-version="1.12.1174", + com.raytheon.uf.common.localization;bundle-version="1.12.1174" diff --git a/edexOsgi/com.raytheon.uf.edex.archive/res/spring/archiveadmim-request.xml b/edexOsgi/com.raytheon.uf.edex.archive/res/spring/archiveadmim-request.xml new file mode 100644 index 0000000000..7b1cc0cfa5 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.archive/res/spring/archiveadmim-request.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/edexOsgi/com.raytheon.uf.edex.archive/src/com/raytheon/uf/edex/archive/useradmin/ArchiveAdminPrivilegedRequestHandler.java b/edexOsgi/com.raytheon.uf.edex.archive/src/com/raytheon/uf/edex/archive/useradmin/ArchiveAdminPrivilegedRequestHandler.java new file mode 100644 index 0000000000..7d68c406ff --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.archive/src/com/raytheon/uf/edex/archive/useradmin/ArchiveAdminPrivilegedRequestHandler.java @@ -0,0 +1,98 @@ +/** + * 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.edex.archive.useradmin; + +import com.raytheon.uf.common.archive.request.ArchiveAdminAuthRequest; +import com.raytheon.uf.common.auth.exception.AuthorizationException; +import com.raytheon.uf.common.auth.user.IUser; +import com.raytheon.uf.edex.auth.AuthManager; +import com.raytheon.uf.edex.auth.AuthManagerFactory; +import com.raytheon.uf.edex.auth.req.AbstractPrivilegedRequestHandler; +import com.raytheon.uf.edex.auth.resp.AuthorizationResponse; +import com.raytheon.uf.edex.auth.roles.IRoleStorage; + +/** + * Handler for Archive Admin Privileged Requests. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Oct 02, 2013  2326      rferrel     Initial creation.
+ * 
+ * 
+ * + * @author rferrel + * @version 1.0 + */ + +public class ArchiveAdminPrivilegedRequestHandler extends + AbstractPrivilegedRequestHandler { + + /** + * Application name. This must match the application tag in the user role + * file. + */ + private static final String APPLICATION = "Data Archiving"; + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.common.serialization.comm.IRequestHandler#handleRequest + * (com.raytheon.uf.common.serialization.comm.IServerRequest) + */ + @Override + public ArchiveAdminAuthRequest handleRequest(ArchiveAdminAuthRequest request) + throws Exception { + // If it reaches this point in the code, then the user is authorized, so + // just return the request object with authorized set to true + request.setAuthorized(true); + return request; + } + + /* + * (non-Javadoc) + * + * @see + * com.raytheon.uf.edex.auth.req.AbstractPrivilegedRequestHandler#authorized + * (com.raytheon.uf.common.auth.user.IUser, + * com.raytheon.uf.common.auth.req.AbstractPrivilegedRequest) + */ + @Override + public AuthorizationResponse authorized(IUser user, + ArchiveAdminAuthRequest request) throws AuthorizationException { + + AuthManager manager = AuthManagerFactory.getInstance().getManager(); + IRoleStorage roleStorage = manager.getRoleStorage(); + + boolean authorized = roleStorage.isAuthorized((request).getRoleId(), + user.uniqueId().toString(), APPLICATION); + + if (authorized) { + return new AuthorizationResponse(authorized); + } else { + return new AuthorizationResponse( + (request).getNotAuthorizedMessage()); + } + } +} diff --git a/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/PROCESSED_DATA.xml b/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/PROCESSED_DATA.xml index 2f59c9d30c..6376546ab5 100644 --- a/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/PROCESSED_DATA.xml +++ b/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/PROCESSED_DATA.xml @@ -24,7 +24,8 @@ * Date Ticket# Engineer Description * ============ ========== =========== ========================== * Jun 20, 2013 1966 rferrel Initial creation - * Aug 05, 2012 2224 rferrel Changes to add dataSet tags. + * Aug 05, 2013 2224 rferrel Changes to add dataSet tags. + * Oct 01, 2013 2147 rfrrel Date time stamp no longer requires an hour field. * * @author rferrel * @version 1.0 @@ -69,7 +70,8 @@ EpochMS - The time stamp has one group in the patterns which is the epoch time in milliseconds. File - No group is used to get the time stamp. Instead use the files date of last modification. - Required tag when has any value but File. - Date - A comma separated list of 4 numbers which are in order the index for year, month, day and hour. + Date - A comma separated list of 3 or 4 numbers which are in order the index for year, month, day and hour. + When only 3 numbers the hour is value is 23. EpochSec - A number which is the index for the epoch in seconds. EpochMS - A number which is the index for the epoch in milliseconds. File - Not needed since no group is used to get the time stamp. @@ -143,12 +145,16 @@ GFE 168 - (gfe)/(.*)/.* - (gfe)/(.*) - .*_(\d{4})(\d{2})(\d{2})_(\d{2}).* - {2} + gfe/(.*)/(.*)/(\d{4})_(\d{2})_(\d{2})_(\d{2})\d{2} + {1} - {2} 3,4,5,6 + + gfe/(.*)/(Fcst|Official) + .*_(\d{4})(\d{2})(\d{2})_.* + {1} - {2} + 3,4,5 + Local diff --git a/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/RAW_DATA.xml b/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/RAW_DATA.xml index d32e0412ba..5b7eb5cd63 100644 --- a/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/RAW_DATA.xml +++ b/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/archiver/purger/RAW_DATA.xml @@ -24,7 +24,8 @@ * Date Ticket# Engineer Description * ============ ========== =========== ========================== * Jun 20, 2013 1966 rferrel Initial creation - * Aug 05, 2012 2224 rferrel Changes to add dataSet tags. + * Aug 05, 2013 2224 rferrel Changes to add dataSet tags. + * Oct 01, 2013 2147 rfrrel Date time stamp no longer requires an hour field. * * @author rferrel * @version 1.0 @@ -45,7 +46,7 @@ - Required to have a least one. Each one contains a set of tags explained below. - A directory matching . These are selected directories from the Retention GUI. The purger will used the category's instead of the Arhivie's . - An optional tag; may have more then one.(NOTE these are set internally when a selection configuration + An optional tag; may have more then one. (NOTE these are set internally when a selection configuration file is loaded. They should not appear in the configuration file.) The contains ? types of tags: - Required to have at least one. A regex pattern for finding directories for this category. @@ -69,7 +70,8 @@ EpochMS - The time stamp has one group in the patterns which is the epoch time in milliseconds. File - No group is used to get the time stamp. Instead use the files date of last modification. - Required tag when has any value but File. - Date - A comma separated list of 4 numbers which are in order the index for year, month, day and hour. + Date - A comma separated list of 3 or 4 numbers which are in order the index for year, month, day and hour. + When only 3 numbers the hour is value is 23. EpochSec - A number which is the index for the epoch in seconds. EpochMS - A number which is the index for the epoch in milliseconds. File - Not needed since no group is used to get the time stamp. @@ -107,19 +109,13 @@ Observation 168 - (airep|airmet|taf) + (acars|airep|airmet|taf) (bufrsigwx|sfcobs)/.* {1} Date 2,3,4,5 [^/]*-(\d{4})-(\d{2})-(\d{2})-(\d{2})\..* - - (acars)/(.*) - {1} - [^/]*-(\d{4})-(\d{2})-(\d{2})-(\d{2})\..* - finish this - The first looks for files matching the in the directories acars, airep, airmet or taf. The second expects to find the files in subdirectories of bufrsigwx or sfcobs such as bufrsigwx/SWH. diff --git a/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/roles/archiveAdminRoles.xml b/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/roles/archiveAdminRoles.xml new file mode 100644 index 0000000000..6f8edb996f --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.archive/utility/common_static/base/roles/archiveAdminRoles.xml @@ -0,0 +1,16 @@ + + + Data Archiving + + + + This permission allows the user to access Archive Retention. + + + + + + This permission allows the user to access Archive Case Creation. + + + \ No newline at end of file diff --git a/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/cluster/ClusterLockUtils.java b/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/cluster/ClusterLockUtils.java index 94fd35a7e5..55b6439c83 100644 --- a/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/cluster/ClusterLockUtils.java +++ b/edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/cluster/ClusterLockUtils.java @@ -48,6 +48,8 @@ import com.raytheon.uf.edex.database.dao.DaoConfig; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Apr 28, 2010 #5050 rjpeter Initial creation from SmartInitTransaction. + * Aug 26, 2013 #2272 bkowal Add a function to see if a cluster suffix has + * been specified via the environment. * * * @@ -55,6 +57,16 @@ import com.raytheon.uf.edex.database.dao.DaoConfig; * @version 1.0 */ public class ClusterLockUtils { + /* + * An optional context suffix can be included in an EDEX properties file. + * This suffix will be appended to the details of each cluster task. + */ + public static final String CLUSTER_SUFFIX; + + static { + CLUSTER_SUFFIX = System.getProperty("cluster.suffix") != null ? "-" + + System.getProperty("cluster.suffix") : ""; + } public enum LockState { SUCCESSFUL, ALREADY_RUNNING, FAILED, OLD; diff --git a/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/cluster/quartz/ClusteredQuartzEndpoint.java b/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/cluster/quartz/ClusteredQuartzEndpoint.java index 2d852ff443..fd6a04329c 100644 --- a/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/cluster/quartz/ClusteredQuartzEndpoint.java +++ b/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/cluster/quartz/ClusteredQuartzEndpoint.java @@ -40,6 +40,7 @@ import com.raytheon.uf.edex.database.cluster.ClusterTask; * ------------ ---------- ----------- -------------------------- * Feb 19, 2010 njensen Initial creation * Aug 21, 2013 DR 16521 D. Friedman Ensure endpoint URI is used for cluster entry + * Aug 26, 2013 DR 2272 bkowal Append an optional suffix to the cluster task details * * * @@ -62,7 +63,7 @@ public class ClusteredQuartzEndpoint extends QuartzEndpoint { @Override public void onJobExecute(final JobExecutionContext jobExecutionContext) throws JobExecutionException { - String jName = getEndpointUri(); + String jName = getEndpointUri() + ClusterLockUtils.CLUSTER_SUFFIX; long period = Math.abs(jobExecutionContext.getFireTime().getTime() - jobExecutionContext.getNextFireTime().getTime()) / 2; ClusterTask ct = ClusterLockUtils.lock(TASK, jName, period, false); diff --git a/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/context/ClusteredContextManager.java b/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/context/ClusteredContextManager.java index dfdfce69b7..910a3d06a4 100644 --- a/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/context/ClusteredContextManager.java +++ b/edexOsgi/com.raytheon.uf.edex.esb.camel/src/com/raytheon/uf/edex/esb/camel/context/ClusteredContextManager.java @@ -50,6 +50,7 @@ import com.raytheon.uf.edex.database.cluster.ClusterTask; * Nov 10, 2010 5050 rjpeter Initial creation * Jul 16, 2012 DR 15073 D. Friedman Stop consumers instead of whole context * May 14, 2013 1989 njensen Camel 2.11 compatibility + * Aug 26, 2013 DR 2272 bkowal Append an optional suffix to the cluster task details * * * @author rjpeter @@ -112,8 +113,9 @@ public class ClusteredContextManager { } public void checkClusteredContexts() { + String suffix = ClusterLockUtils.CLUSTER_SUFFIX; for (CamelContext camelContext : clusteredContextList) { - String contextName = camelContext.getName(); + String contextName = camelContext.getName() + suffix; ClusterTask lock = ClusterLockUtils.lock(taskName, contextName, myName, timeOutMillis, false); boolean activateRoute = false; diff --git a/nativeLib/rary.ohd.pproc/src/nc2grib/TEXT/main_nc2grib.c b/nativeLib/rary.ohd.pproc/src/nc2grib/TEXT/main_nc2grib.c index b527f55dde..65d485b2c0 100644 --- a/nativeLib/rary.ohd.pproc/src/nc2grib/TEXT/main_nc2grib.c +++ b/nativeLib/rary.ohd.pproc/src/nc2grib/TEXT/main_nc2grib.c @@ -1,11 +1,18 @@ +/* + * main_nc2grib.c + * + * Created on: Aug 26, 2011 + * Author: snaples + */ + /************************************************************************************ * * nc2grib - GFE NetCDF to GRIB1 translator * * Dave Miller Wyle/IS, OHD/HSEB Version 4.1 August 2009 * -* This routine reads a NetCDF file created by the GFE command ifpnetCDF and -* creates a GRIB1 file from the parameter information. This is required for +* This routine reads a NetCDF file created by the GFE command ifpnetCDF and +* creates a GRIB1 file from the parameter information. This is required for * the CHPS/FEWS application as the NetCDF file is not presently CF compliant. * However, GRIB1 is self-describing and can be translated by the CHPS/FEWS * application. @@ -17,13 +24,13 @@ * - Precipitation * * Part of the difficulty is in choosing an equivalent GRIB1 parameter to the -* GFE parameter. In the case of PET, this doesn't exactly match and +* GFE parameter. In the case of PET, this doesn't exactly match and * Evaporation was chosed as a close substitute. -* -* In addition, since GRIB is particular in several areas, decided to have a +* +* In addition, since GRIB is particular in several areas, decided to have a * lookup table file which will provide some of the values needed to correctly -* encode into GRIB. In addition, this wasn't done for gribit and one has to -* modify the code whenever a new process is created. However, reading from +* encode into GRIB. In addition, this wasn't done for gribit and one has to +* modify the code whenever a new process is created. However, reading from * a text file requires no code change as long as the parameters don't change. * That logic could perhaps change as well. * @@ -49,16 +56,23 @@ * Grid 218 for NPVU processing. Had to modify the source in order for it to use 10km grid * instead of the standard 12 km grid, but that wasn't too difficult. * -* The routine reads NetCDF files with multiple time steps and outputs individual GRIB1 files +* The routine reads NetCDF files with multiple time steps and outputs individual GRIB1 files * according to their valid times. This can be done for either forecast or observed grids. -* +* * Version 4 allows users to combine all GRIB messages into one file. This becomes useful -* when dealing with a lot of files for a parameter such as 1 hour QPF or temperature that -* goes out to num_hours hours. -* +* when dealing with a lot of files for a parameter such as 1 hour QPF or temperature that +* goes out to 240 hours. +* * This is still a work in progress and code can always be improved to increase efficiency. * * Oct 2011 - PTilles - added read of new token for defining number of days of data to process +* +* Sep 2012 -Dan Stein - The original nc2grib program assumed the first variable in the +* NetCDF file (variable[0]) would be the data variable to be converted to grib format. The +* nc2grib tool was hard-coded to only look at variable[0]. In AWIPS-II, GFE began putting +* the history variable first and the data variable last, so nc2grib never found the data +* variable. The fix I implemented searches through all the variables in the NetCDF file +* to see wheter the data variable in question is present. **********************************************************************************************/ #include #include @@ -79,13 +93,12 @@ #include "packgrib.h" #include "getopt.h" + #include "cmapf.h" -#include "version_info.h" - #define SECINHR 3600. -#define PATH_LEN 500 -#define FILE_LEN 300 +#define PATH_LEN 500 +#define FILE_LEN 300 #define BUFFSIZE 1024 #define CMDSIZE 1000 #define COPYSIZE 4200000 @@ -98,7 +111,7 @@ #define UNERR -6 /* unexpected or unhandled input to the program */ #define CDFERR -7 /* error with the NetCDF file */ #define FILEOPERR -8 /* this is a file operations error */ -#define USAGE 1 /* return for usage */ +#define USAGE 1 /* return for usage */ #define MALERR -10 /* memory allocation error */ /* This structure reads lookup values from a file called gfe2grib.txt and compares these @@ -106,7 +119,7 @@ */ typedef struct { - char process[11]; + char GFEParameterName[11]; char gfename[20]; int processid; int gribnum; @@ -115,14 +128,14 @@ typedef struct { int timeunit; } mygfe2grib; -int getAppsDefaults(const char* strToken, char* strTokenValue); +int nc_getAppsDefaults(const char* strToken, char* strTokenValue); /************************************************************************ * This function loads token value. * If token is not available, return -1; otherwise return 0. ************************************************************************/ -int getAppsDefaults(const char* strToken, char* strTokenValue) +int nc_getAppsDefaults(const char* strToken, char* strTokenValue) { int tokenLen, tokenValueLen; @@ -146,37 +159,37 @@ int timet_to_userformat_ansi(time_t timet, char *ansi, char *userformat); int basetime_ansi_to_timet(char *ansi, time_t *timet); -int main (int argc, char *argv[]) +int nc2grib_main (int argc, char *argv[]) { extern char *optarg; /* these are for the getopt C library function */ extern int optind, optopt; - - + + char fn[PATH_LEN+FILE_LEN]={'\0'}; /* complete input NetCDF path filename */ - - - char *infn=NULL; /* input NetCDF filename */ + + + char *infn=NULL; /* input NetCDF filename */ char *ofntemp=NULL; /* output filename template for tailored date/time format */ char *ofn=NULL; /* output GRIB1 filename */ char outfn[PATH_LEN+FILE_LEN]={'\0'}; /* complete output GRIB1 path and filename */ char outfnqpf[PATH_LEN+FILE_LEN]={'\0'}; /* output GRIB1 NPVU filename */ char onegrib[PATH_LEN+FILE_LEN]={'\0'}; /* output path and combine GRIB file if desired */ - + char *onegfname=NULL; /* output filename for combined GRIB file if desired */ - + char *inpath=NULL; /* input NetCDF path */ - + char *gribdir=NULL; /* output GRIB path */ - + char command[CMDSIZE]={'\0'}; /* command string called via system */ char fileline[LINE_MAX]={'\0'}; /* holds an input line from gfe2grib.txt file */ char tmpNPVUfn[PATH_LEN+FILE_LEN]={'\0'}; /* temporary holding file for part of GRIB1 message */ char wmohdr1[7]={'\0'}; /* first part of WMO header */ char wmohdr2[5]={'\0'}; /* second part of WMO header */ - + char crcrlf[3]={'\r','\r','\n'}; /* needed to separate WMO header from first part of GRIB message */ unsigned char aspace={' '}; /* contains a space character for the header */ unsigned char header[18]={'\0'}; /* full WMO header string */ @@ -186,29 +199,27 @@ int main (int argc, char *argv[]) time_t curtime, basetime_t; /* time_t variables */ char adayhrmin[7]={'\0'}; /* day, hour, minute info attached to WMO header */ - - - + + + int numgfeparms=0; - - - char cnum[3] = {'\0'}; - int num_hours = 0; /* (num_days * 24) */ - /* number of days of data to process - read from token - previously hard coded as 10 */ - /* default value = 10 - if token not found then default value used */ - int num_days = 0; - + + + int numgfiles=0; /* number of grib files for combining files into one if desired */ - - /* for reading the NetCDF file */ - int cdfid; /* Netcdf id */ + char *gfiles[240]; /* array of char pointers for holding grib filenames if combining files */ + + + + /* for reading the NetCDF file */ + int NetCDF_ID; /* Netcdf id */ int ndims; /* number of dimensions */ - int nvars; /* number of variables */ + int numVars; /* number of variables */ int ngatts; /* number of attributes */ int recdim; long start[] = {0, 0, 0}; /* start at first value */ long start1r[] = {0, 0}; /* accounts for netcdf with only 1 record and 2 dimensions of y,x */ - + /* flags for different purposes: creating the header, verbose debugging, only processing 1 valid time in the NetCDF file (debugging) */ @@ -228,7 +239,7 @@ int main (int argc, char *argv[]) int errflag=0; /* error flag */ int fflagcntr=0; /* a counter used in conjunction with the format flag */ int onegribflag=0; /* flag for combining all GRIB messages into one file */ - + int found=0; int Yflag=0; int Mflag=0; @@ -239,42 +250,42 @@ int main (int argc, char *argv[]) int qpewarn=0; int formwarn=0; int onegribwarn=0; - + /* flag used with setting temp grib file to beginning for NPVU processing */ - + int firstch=0; - + /* For storing information retrieved from the NetCDF file */ - + double stdParallelOne, stdParallelTwo, xlov; double *latlonLL, *latlonUR, lonOrigin,*domainOrigin, *domainExtent, *latLonOrigin; int *gridPointLL, *gridPointUR; double x1, y1, x2, y2, lat1, lon1, lat2, lon2; nc_type vt_type, dn_type, ll_type, d_type, g_type; - nc_type cdfvar_type; + nc_type varDataType; int vt_len, ll_len, d_len, g_len; - int cdfvar_id, *gridSize; - int cdfvar_ndims; - int cdfvar_dims[MAX_VAR_DIMS]; - int cdfvar_natts; - char varname[MAX_NC_NAME]={'\0'}; + int variableID, *gridSize; + int numberOfVariableDimensions; + int dimensionIDVector[MAX_VAR_DIMS]; + int numAttributes; + char variableName[MAX_NC_NAME]={'\0'}; char dimname[MAX_NC_NAME]={'\0'}; char siteID[MAX_NC_NAME]={'\0'}; char cdfunits[MAX_NC_NAME]={'\0'}; char projection[MAX_NC_NAME]={'\0'}; long dim_size; float *cdfvargrid=NULL; /* this is the main array holding the actual data values */ - float arraysize; + float arraysize; long *validTimes; char descriptName[MAX_NC_NAME]={'\0'}; - - + + /* based on the filename, these are used to determine several time strings which could be coded differently depending on the parameter and whether this is a forecast or observed (estimated) grid */ - + char basetime[ANSI_TIME_LEN+1]={'\0'}; char basistime[11]={'\0'}; /* length of this should not change */ /* char *basistime=NULL;*/ @@ -283,56 +294,56 @@ int main (int argc, char *argv[]) char dummy[FILE_LEN]={'\0'}; float timediff; int timedif_hr, perflag; - + double dxdy; /* holds the DX, DY at standard latitude from a given map projection */ - + int dumint[4]; /* dummy int array */ maparam stcprm; /* mapping structure required to hold projection parameters after initialization */ /* part of dmapf-c/cmapf */ - + /* several file string variables */ - + char file_path[PATH_LEN+FILE_LEN]={'\0'}; char pprocbin[PATH_LEN+FILE_LEN]={'\0'}; char appsdir[PATH_LEN+FILE_LEN]={'\0'}; char process[FILE_LEN]={'\0'}; - - /* - - The fcsth hold the forecast hours determined by differencing the basis time from the + + /* + + The fcsth hold the forecast hours determined by differencing the basis time from the valid time in the NetCDF file. This is then used to determine the valid time in the GRIB message of the grid. */ - + int i, j, m, x, y, status, yr, mon, day, hrmin, sec, fcsth, esth, c; - + /* holds a position value of date/time wildcards in the output filename */ - + size_t psn=0; char * valptr=NULL; - + /* these are a couple of check flags: missing data and all zeros. The missing data will cause the program to return with an error. The zeros is a warning but this could be correct in the case of QPE or QPF. */ int mischek=0; int zerochek=0; - - - /* declare structure variable */ - - mygfe2grib gfe2grib; - - /* file and directory status structure variable */ - - struct stat st; - - FILE *fptrqpf, *fptr, *fp, *tmpfptr, *onegfptr; /* file pointers */ - - + + /* declare structure variable */ + + mygfe2grib gfe2grib; + + /* file and directory status structure variable */ + + struct stat st; + + FILE *fptrqpf, *fptr, *fp, *tmpfptr, *onegfptr; /* file pointers */ + + + /**************************GRIB PARAMETERS for packgrib**********************/ int grib_lbl[43]; /* holds the values for the GRIB meta data */ @@ -347,35 +358,37 @@ int main (int argc, char *argv[]) size_t length; size_t idim; - - output_buffer = (size_t *) malloc (sizeof(size_t)*odim); /* output buffer used when writing GRIB message */ - + + output_buffer = (size_t *) malloc (sizeof(size_t)*odim); /* output buffer used when writing GRIB message */ + + int variableFound = FALSE; /* Is the variable present in the NetCDF file? Stein Sep 2012 */ + /* output_buffer = (int *) malloc (sizeof(int)*odim); /* output buffer used when writing GRIB message */ - + if(output_buffer==NULL) { printf(" ERROR: Something went wrong with memory allocation for the GRIB output buffer....exiting\n"); return MALERR; } - - -/************** start main routine ************************************************/ - - + +/************** start main routine ************************************************/ + + + /* parse command line arguments */ - while ((c = getopt(argc, argv, ":n:i:t:o::b:p:g:Nfrqhv1V")) != -1) { - + while ((c = getopt(argc, argv, ":n:i:t:o::b:p:g:Nfrqhv1")) != -1) { + switch (c) { - + case 'i': /* input filename option */ - + if (iflag) errflag++; - else + else { iflag++; if(optarg!=NULL) @@ -393,9 +406,9 @@ int main (int argc, char *argv[]) printf(" ERROR: Something went wrong with memory allocation for the input file name....exiting\n"); return MALERR; } - + strcpy(infn, optarg); - + *(infn+strlen(optarg))='\0'; } else @@ -414,10 +427,10 @@ int main (int argc, char *argv[]) case 'o': /* output filename option */ if (oflag) errflag++; - else + else { oflag++; - + if(argv[optind]!=NULL && *(argv[optind])!='-') /* have to process a bit differently as this option has an option argument */ { @@ -446,12 +459,12 @@ int main (int argc, char *argv[]) printf(" ERROR: Something went wrong with memory allocation for the temp output file name....exiting\n"); return MALERR; } - + /* copy to both because will use in conjunction with -f format flag if specified */ - - strcpy(ofntemp,argv[optind]); + + strcpy(ofntemp,argv[optind]); strcpy(ofn,argv[optind]); - + } else { @@ -468,13 +481,13 @@ int main (int argc, char *argv[]) } oflag=0; } - + } break; case 't': /* output path option */ if (tflag) errflag++; - else + else { tflag++; if(optarg!=NULL) @@ -486,13 +499,13 @@ int main (int argc, char *argv[]) free(gribdir); gribdir=NULL; } - gribdir=(char *) malloc(sizeof(char)*(strlen(optarg)+1)); + gribdir=(char *) malloc(sizeof(char)*(strlen(optarg)+1)); if(gribdir==NULL) { printf(" ERROR: Something went wrong with memory allocation for the grib directory name....exiting\n"); return MALERR; } - + strcpy(gribdir,optarg); *(gribdir+strlen(optarg))='\0'; } @@ -502,7 +515,7 @@ int main (int argc, char *argv[]) errflag++; optind--; } - + } else errflag++; @@ -511,26 +524,26 @@ int main (int argc, char *argv[]) case 'n': /* input path option */ if (nflag) errflag++; - else + else { nflag++; if(optarg!=NULL) { - + if(*optarg!='-') - { + { if(inpath!=NULL) { free(inpath); inpath=NULL; - } + } inpath=(char *) malloc(sizeof(char)*(strlen(optarg)+1)); if(inpath==NULL) { printf(" ERROR: Something went wrong with memory allocation for the input directory name....exiting\n"); return MALERR; } - + strcpy(inpath,optarg); *(inpath+strlen(optarg))='\0'; } @@ -540,19 +553,19 @@ int main (int argc, char *argv[]) errflag++; optind--; } - - + + } else errflag++; - + } break; case 'p': /* GFE process id option */ if (pflag) errflag++; - else + else { pflag++; if(optarg!=NULL) @@ -561,28 +574,28 @@ int main (int argc, char *argv[]) if(*optarg!='-') { - + strcpy(process,optarg); } else { printf("\n Option -%c requires a value\n", c); - + errflag++; optind--; } - + } else errflag++; - + } break; case 'N': /* flag to process NPVU QPF files */ if (headflag) errflag++; - else + else headflag++; break; case 'f': /* format flag option */ @@ -591,7 +604,7 @@ int main (int argc, char *argv[]) else { fflag++; - + } break; case 'q': /* QPE flag option */ @@ -600,7 +613,7 @@ int main (int argc, char *argv[]) else { qflag++; - + } break; case 'r': /* estimated flag option */ @@ -609,23 +622,23 @@ int main (int argc, char *argv[]) else { rflag++; - + } break; - + case 'b': /* basis time flag option */ if (bflag) errflag++; else - { + { bflag++; if(optarg!=NULL) { if(*optarg!='-') { - - + + strcpy(basistime,optarg); } @@ -635,38 +648,38 @@ int main (int argc, char *argv[]) errflag++; optind--; } - + } else errflag++; } break; - + case 'g': /* combined GRIB message file option */ if (onegribflag) errflag++; - else + else { onegribflag++; if(optarg!=NULL) { - + if(*optarg!='-') - { + { if(onegfname!=NULL) { free(onegfname); onegfname=NULL; - } + } onegfname=(char *) malloc(sizeof(char)*(strlen(optarg)+1)); if(onegfname==NULL) { printf(" ERROR: Something went wrong with memory allocation for the input directory name....exiting\n"); return MALERR; } - + strcpy(onegfname,optarg); *(onegfname+strlen(optarg))='\0'; } @@ -676,31 +689,27 @@ int main (int argc, char *argv[]) errflag++; optind--; } - - + + } else errflag++; - + } break; - + case 'h': /* display help */ helpflag++; break; case 'v': /* turn on verbose debugging */ if (debugflag) errflag++; - else + else debugflag++; break; case '1': /* process only one record of NetCDF, useful for debugging */ time1flag++; break; - case 'V': - printf("version number = %s%s\n",VERSION_NAME,VERSION_NUMBER); - exit(0); - break; case ':': /* for options that need an operand */ if(optopt != 'o') { @@ -724,19 +733,15 @@ int main (int argc, char *argv[]) } } break; - + case '?': printf("Unrecognized program command line option: -%c\n", optopt); errflag++; - - - } - - } /* while c = getopt */ - - - if (errflag || helpflag || argc==1 || ( iflag==0 || pflag==0) ) + } + + + if (errflag || helpflag || argc==1 || ( iflag==0 || pflag==0) ) { if ( iflag==0 || pflag==0) { @@ -744,58 +749,40 @@ int main (int argc, char *argv[]) "was missing when running nc2grib. These must be specified as inputs to nc2grib at a minimum \n" \ "in order for it to run. Check usage of nc2grib below.\n"); } - status=display_usage(); + status=display_usage(); return USAGE; } - -/* Print CHPS build number */ - printf("version number = %s%s\n",VERSION_NAME,VERSION_NUMBER); - - if(getAppsDefaults("nc2g_num_days",cnum) == -1) - { - num_days = 10; - } - else - { - num_days = atoi(cnum); - } - num_hours = num_days * 24; - //numgfiles = num_hours; - char *gfiles[num_hours]; /* array of char pointers for holding grib filenames if combining files */ - - printf("\n number of days to process = %d \n", num_days); - - if(getAppsDefaults("nc2g_app_dir",appsdir) == -1) + if(nc_getAppsDefaults("nc2g_app_dir",appsdir) == -1) { fprintf(stderr," ERROR: Invalid token value for token \"nc2g_app_dir\".\n\t Program exit.\n"); status=display_usage(); return APSDEFERR; } - + sprintf(file_path,"%s/%s",appsdir,"gfe2grib.txt"); - + if((fp = fopen(file_path, "r")) == NULL) { printf (" ERROR: cannot open GFE NetCDF parameter input file: %s\n\tProgram exit.", file_path) ; return OPENERR; } - - + + if(gribdir==NULL) { gribdir=(char *) malloc(sizeof(char)*(PATH_LEN+1)); - + if (gribdir==NULL) { printf(" ERROR: Something went wrong with memory allocation for the grib output directory....exiting\n"); return MALERR; } - + *(gribdir+PATH_LEN)='\0'; - - if(getAppsDefaults("fewsgrib_dir",gribdir) == -1) + + if(nc_getAppsDefaults("fewsgrib_dir",gribdir) == -1) { printf(" ERROR: Invalid token value for token \"fewsgrib_dir\".\n\t Program exit."); status=display_usage(); @@ -806,58 +793,50 @@ int main (int argc, char *argv[]) printf("\n Debug option on...GRIB directory not specified. Will save output GRIB files to:\n" \ " %s \n",gribdir); } - + } else if (debugflag>0) { printf("\n Debug option on...GRIB directory specified as %s\n",gribdir); } - - + + /**************************************************************************/ /* debugflag > 0; debug option is on */ - + if(debugflag>0) printf("\n Debug option on...reading from GFE to GRIB configuation file:\n" \ - " %s\n\n",file_path); - -/**************************************************************************/ - - /* Read one line at a time from the gfe2grib.txt configuration file. It is - * an arguable point as to whether this is necessary or even adds to the - * functionality of the program. I believe all this information can be - * derived directly from the NetCDF file. djsiii 13 Sep 2012 - */ + " %s\n\n",file_path); + +/**************************************************************************/ - /* NOTE - THERE IS A PROBLEM HERE WITH COMMENTS - THIS CODE ONLY CHECKS FOR - * '#' CHARACTERS AT THE BEGINNING OF THE LINE. - */ while (fgets(fileline, LINE_MAX, fp) != NULL) { - + if(fileline[0] != '#') /* check for comments */ { - - sscanf(fileline,"%s%s%d%d%d%d%d",gfe2grib.process, gfe2grib.gfename, &gfe2grib.processid, + + sscanf(fileline,"%s%s%d%d%d%d%d",gfe2grib.GFEParameterName, gfe2grib.gfename, &gfe2grib.processid, &gfe2grib.gribnum,&gfe2grib.decscale, &gfe2grib.timerange, &gfe2grib.timeunit); if(debugflag>0) - printf(" DEBUG: Read in from gfe2grib.txt %s %s %d %d %d %d %d \n",gfe2grib.process, gfe2grib.gfename, gfe2grib.processid, - gfe2grib.gribnum,gfe2grib.decscale, gfe2grib.timerange, gfe2grib.timeunit); - - -/* if (strstr(gfe2grib.process, process)!=NULL) */ /* found a problem using this. try next if instead */ + printf(" DEBUG: Read in from gfe2grib.txt %s %s %d %d %d %d %d \n",gfe2grib.GFEParameterName, gfe2grib.gfename, gfe2grib.processid, + gfe2grib.gribnum,gfe2grib.decscale, gfe2grib.timerange, gfe2grib.timeunit); - if (!(strcmp(gfe2grib.process, process))) + +/* if (strstr(gfe2grib.GFEParameterName, process)!=NULL) */ /* found a problem using this. try next if instead */ + + if (!(strcmp(gfe2grib.GFEParameterName, process))) { + found = 1; break; } - } /* If not a comment */ + } + } + - } /* While we haven't reach the end of the gfe2grib.txt file */ - if (found==0) { printf(" Could not match input process ID with those in gfe2grib.txt file\n" \ @@ -867,26 +846,27 @@ int main (int argc, char *argv[]) else if(debugflag) { printf(" DEBUG: Match found between input process ID and value stored in gfe2grib.txt file\n" \ - " Process ID = %s\n",process); + " Process ID = %s\n",process); } - fclose(fp); + fclose(fp); /* open the Netcdf file*/ - + if(inpath==NULL) { inpath=(char *) malloc(sizeof(char)*(FILE_LEN+1)); - + + if(inpath==NULL) { printf(" ERROR: Something went wrong with memory allocation for the NetCDF input directory....exiting\n"); return MALERR; } - + *(inpath+FILE_LEN)='\0'; - - if(getAppsDefaults("netcdf_dir",inpath) == -1) + + if(nc_getAppsDefaults("netcdf_dir",inpath) == -1) { printf(" ERROR: Invalid token value for token \"netcdf_dir\".\n\t Program exit."); return APSDEFERR; @@ -895,26 +875,25 @@ int main (int argc, char *argv[]) { printf(" Default path for the input NetCDF file not specified...Will use the following:\n" \ " %s\n",inpath); - } - } /* if inpath is NULL */ - -/***************************************************************************/ + } + } +/***************************************************************************/ else if(debugflag) printf(" Will attempt to read NetCDF file from this path:\n" \ " %s\n\n",inpath); - -/**************************************************************************/ + +/**************************************************************************/ if (stat(inpath,&st) != 0) { printf(" ERROR: The NetCDF input path does not exist. Please correct this error and try again.\n"); return FILEERR; } - + sprintf(fn,"%s/%s",inpath,infn); - - cdfid = ncopen(fn,NC_NOWRITE); - - if (cdfid==-1) + + NetCDF_ID=ncopen(fn,NC_NOWRITE); + + if (NetCDF_ID==-1) { printf("\n ERROR: Could not open the netcdf file: %s\n", fn); return CDFERR; @@ -923,52 +902,104 @@ int main (int argc, char *argv[]) { printf ("\n Netcdf file %s was opened successfully.\n\n",fn); } - + /* Inquire about the Netcdf file: No.of dimensions, No.of variables, No. of global attributes etc.*/ - - ncinquire (cdfid, &ndims, &nvars, &ngatts, &recdim); -/*************************************************************************/ -/* debug */ - + + ncinquire (NetCDF_ID, &ndims, &numVars, &ngatts, &recdim); +/*************************************************************************/ +/* debug */ + if (debugflag >0) { printf("\n Debug option on. Debug info from reading the netcdf file follows:\n\n"); printf (" Number of dimensions for this netcdf file is: %d\n",ndims); - printf (" Number of variables for this netcdf file is: %d\n",nvars); + printf (" Number of variables for this netcdf file is: %d\n",numVars); printf (" Number of global attributes for this netcdf file is: %d\n",ngatts); } /*************************************************************************/ - - - cdfvar_id = 0; /* this should not change for this application as the first variable will be the one - that contains the QPF, Temp, etc. */ - - ncvarinq (cdfid, cdfvar_id, varname, &cdfvar_type, &cdfvar_ndims, cdfvar_dims, &cdfvar_natts); - - printf ("\n NetCDF variable name = %s\n",varname); -/***********************************************************************/ -if (debugflag>0) -{ - printf (" Number of %s dimensions - %d\n",varname, cdfvar_ndims); - printf (" Number of %s attributes - %d\n\n",varname, cdfvar_natts); -} -/**********************************************************************/ - if (strstr(varname,gfe2grib.gfename)==NULL) + /************************************************************************** + * Sep 2012 - Stein The utility that takes GFE data and converts it to + * NetCDF format is ifpNetCDF. To the best of my knowledge, this utility + * always puts exactly one variable and exactly one history variable into + * each NetCDF file. The section of code below originally assumed that the + * germane variable (i.e. the non-history variable) was always the first one + * in the file. It was hard-coded to look at variableID 0. + * + * For whatever reason, this order was changed in AWIPS-II so that the + * history variable showed up first and the program wouldn't work. I was + * tasked with correcting this program to make it order independent. My + * solution was to loop through all the variables to see whether the + * variable we're looking for is in the NetCDF file. If it is, variableID + * is set to it's value. If not found, the program will exit as it did + * before. + * + * In addition to inserting the section of code below, I also + * changed a few variable names to make the code more understandable. + *************************************************************************/ + + /* Below, I loop through all the variables, checking the name of each one + * against gfe2grib.gfename. + */ + + variableID = 0; /* Start with the 1st variable in the NetCDF file */ + variableFound = FALSE; /* We haven't found it yet */ + + while ( (variableID < numVars) && (!variableFound) ) { - printf("ERROR: The parameter name in the GFE NetCDF file, %s, doe not match the one\n" \ + /* Get Information about each variable from its ID (NetCDF variable + * inquiry). + */ + ncvarinq (NetCDF_ID, variableID, variableName, &varDataType, &numberOfVariableDimensions, + dimensionIDVector, &numAttributes); + + /***********************************************************************/ + if (debugflag) + { + printf ("\nNetCDF variable name = %s\n",variableName); + printf (" Number of %s dimensions - %d\n", variableName, numberOfVariableDimensions); + printf (" Number of %s attributes - %d\n\n", variableName, numAttributes); + } + /**********************************************************************/ + + if (strcmp(variableName, gfe2grib.gfename) == 0) /* Found it! */ + { + variableFound = TRUE; + } + else /* Didn't find it - try the next variable */ + { + ++variableID; /* Increment variableID, look at the next variable */ + } + + } /* while ( (variableID < numVars) && (!variableFound) ) */ + + + if (!variableFound) /* If the variable wasn't in the NetCDF file */ + { + printf("ERROR: The parameter name in the GFE NetCDF file, %s, does not match the one\n" \ "associated with the process id in the gfe2grib.txt file.\n" \ - "In gfe2grib.txt process ID %s is associated with GFE parameter name %s.\n" \ - "Please specify the correct process ID and try again\n\n",varname,gfe2grib.process,gfe2grib.gfename); + "In gfe2grib.txt process ID %s is associated with GFE parameter name %s.\n" \ + "Please specify the correct process ID and try again\n\n", + variableName,gfe2grib.GFEParameterName,gfe2grib.gfename); return CDFERR; - } - if(cdfvar_ndims==3) /* in some cases, this may not be true if file is produced from MPE/DQC */ - { - for (i=0; i0) { printf("\n Number of dimensions is %d, which is too many dimensions for variable %s.\n" \ " Please ensure the NetCDF file is created properly for at most three dimensions, where\n" \ - " the first dimension allows the NetCDF file to contain multiple records.\n",cdfvar_ndims,varname); + " the first dimension allows the NetCDF file to contain multiple records.\n",numberOfVariableDimensions,variableName); return CDFERR; } -/*************************************************************************/ +/*************************************************************************/ if (debugflag >0) { printf(" DEBUG: cdfvar dimension %d: name=%s size=%ld\n",i+1,dimname,dim_size); } /*************************************************************************/ - + } } - else if (cdfvar_ndims==2) + else if (numberOfVariableDimensions==2) { - - - for (i=0; i0) { printf(" DEBUG: cdfvar dimension %d: name=%s size=%ld\n",i+1,dimname,dim_size); } /*************************************************************************/ - + } } - else + else { printf("\n nc2grib is not coded to handle %d number of dimensions for variable %s.\n" \ " Please ensure the NetCDF file is created properly for two or three dimensions, where\n" \ " two dimensions indicates only 1 record of the variable and three dimensions allow\n" \ - " the NetCDF file to contain multiple records.\n",cdfvar_ndims,varname); + " the NetCDF file to contain multiple records.\n",numberOfVariableDimensions,variableName); return CDFERR; - } + } + - /* get variable attributes */ - + arraysize = x * y; - + cdfvargrid = (float *) malloc (sizeof(float)*arraysize); - + long count[]={1,y,x}; long count1r[]={y,x}; - ncattinq(cdfid,cdfvar_id,"validTimes",&vt_type,&vt_len); - + ncattinq(NetCDF_ID,variableID,"validTimes",&vt_type,&vt_len); + validTimes = (long *) malloc(vt_len * nctypelen(vt_type)); - - ncattget(cdfid, cdfvar_id, "validTimes", validTimes); - - ncattget(cdfid, cdfvar_id, "descriptiveName", descriptName); - - ncattget(cdfid, cdfvar_id, "siteID", siteID); - - ncattget(cdfid, cdfvar_id, "units", cdfunits); - - ncattget(cdfid, cdfvar_id, "projectionType", projection); - - ncattinq(cdfid,cdfvar_id,"latLonLL",&ll_type,&ll_len); - - latlonLL = (double *) malloc(ll_len * nctypelen(ll_type)); - - ncattget(cdfid, cdfvar_id, "latLonLL", (void *) latlonLL); - + + ncattget(NetCDF_ID, variableID, "validTimes", validTimes); + + ncattget(NetCDF_ID, variableID, "descriptiveName", descriptName); + + ncattget(NetCDF_ID, variableID, "siteID", siteID); + + ncattget(NetCDF_ID, variableID, "units", cdfunits); + + ncattget(NetCDF_ID, variableID, "projectionType", projection); + + ncattinq(NetCDF_ID,variableID,"latLonLL",&ll_type,&ll_len); + + latlonLL = (double *) malloc(ll_len * nctypelen(ll_type)); + + ncattget(NetCDF_ID, variableID, "latLonLL", (void *) latlonLL); + latlonUR = (double *) malloc(ll_len * nctypelen(ll_type)); - ncattget(cdfid, cdfvar_id, "latLonUR", (void *) latlonUR); - - ncattinq(cdfid,cdfvar_id,"domainOrigin",&d_type,&d_len); - - domainOrigin = (double *) malloc(d_len * nctypelen(d_type)); + ncattget(NetCDF_ID, variableID, "latLonUR", (void *) latlonUR); - ncattget(cdfid, cdfvar_id, "domainOrigin", (void *) domainOrigin); - - ncattinq(cdfid,cdfvar_id,"domainExtent",&d_type,&d_len); - - domainExtent = (double *) malloc(d_len * nctypelen(d_type)); + ncattinq(NetCDF_ID,variableID,"domainOrigin",&d_type,&d_len); + + domainOrigin = (double *) malloc(d_len * nctypelen(d_type)); + + ncattget(NetCDF_ID, variableID, "domainOrigin", (void *) domainOrigin); + + ncattinq(NetCDF_ID,variableID,"domainExtent",&d_type,&d_len); + + domainExtent = (double *) malloc(d_len * nctypelen(d_type)); + + ncattget(NetCDF_ID, variableID, "domainExtent", (void *) domainExtent); + + ncattinq(NetCDF_ID,variableID,"gridSize",&g_type,&g_len); - ncattget(cdfid, cdfvar_id, "domainExtent", (void *) domainExtent); - - ncattinq(cdfid,cdfvar_id,"gridSize",&g_type,&g_len); - gridSize = (int *) malloc(g_len * nctypelen(g_type)); - - ncattget(cdfid, cdfvar_id, "gridSize", (void *) gridSize); - ncattinq(cdfid,cdfvar_id,"gridPointLL",&g_type,&g_len); - + ncattget(NetCDF_ID, variableID, "gridSize", (void *) gridSize); + + ncattinq(NetCDF_ID,variableID,"gridPointLL",&g_type,&g_len); + gridPointLL = (int *) malloc(g_len * nctypelen(g_type)); - - ncattget(cdfid, cdfvar_id, "gridPointLL", (void *) gridPointLL); - ncattinq(cdfid,cdfvar_id,"gridPointUR",&g_type,&g_len); - + ncattget(NetCDF_ID, variableID, "gridPointLL", (void *) gridPointLL); + + ncattinq(NetCDF_ID,variableID,"gridPointUR",&g_type,&g_len); + gridPointUR = (int *) malloc(g_len * nctypelen(g_type)); - - ncattget(cdfid, cdfvar_id, "gridPointUR", (void *) gridPointUR); - + + ncattget(NetCDF_ID, variableID, "gridPointUR", (void *) gridPointUR); + /* initialize the array to missing value */ - + for (i=0;i0) { - + printf(" DEBUG: siteID = %s\n",siteID); printf(" DEBUG: number of valid times = %d type = %d\n",vt_len, vt_type); printf(" DEBUG: descriptName = %s\n",descriptName); - printf(" DEBUG: projection = %s\n",projection); - + printf(" DEBUG: projection = %s\n",projection); + for (i=0; i0) /* for averaged grids but not used here */ grib_lbl[19]=0; grib_lbl[20]=0; - + /* parameter code, time unit, time range, decimal scale vary per parameter and are configurable in the gfe2grib.txt file */ grib_lbl[7]=gfe2grib.gribnum; - + grib_lbl[15]=gfe2grib.timeunit; - + grib_lbl[18]=gfe2grib.timerange; - + grib_lbl[22]=gfe2grib.decscale; - + /* level type */ grib_lbl[8]=1; /* surface */ if (grib_lbl[7]==7) grib_lbl[8]=4; /* freezing level surface */ - + /* level */ grib_lbl[9]=0; grib_lbl[10]=0; - + /* sub-center id */ - if ( strstr(siteID,"TUA")!=NULL ) + if ( strstr(siteID,"TUA")!=NULL ) { grib_lbl[21] = 150; - + strcpy(wmohdr2,"KTUA"); } - else if ( strstr(siteID,"ACR")!=NULL ) - { + else if ( strstr(siteID,"ACR")!=NULL ) + { grib_lbl[21] = 151; - + strcpy(wmohdr2,"PACR"); } - else if ( strstr(siteID,"STR")!=NULL ) + else if ( strstr(siteID,"STR")!=NULL ) { grib_lbl[21] = 152; - + strcpy(wmohdr2,"KSTR"); } - else if ( strstr(siteID,"RSA")!=NULL ) + else if ( strstr(siteID,"RSA")!=NULL ) { grib_lbl[21] = 153; - + strcpy(wmohdr2,"KRSA"); } - else if ( strstr(siteID,"ORN")!=NULL ) + else if ( strstr(siteID,"ORN")!=NULL ) { grib_lbl[21] = 154; - + strcpy(wmohdr2,"KORN"); } - else if ( strstr(siteID,"RHA")!=NULL ) + else if ( strstr(siteID,"RHA")!=NULL ) { grib_lbl[21] = 155; strcpy(wmohdr2,"KRHA"); } - else if ( strstr(siteID,"KRF")!=NULL ) + else if ( strstr(siteID,"KRF")!=NULL ) { grib_lbl[21] = 156; strcpy(wmohdr2,"KKRF"); } - else if ( strstr(siteID,"MSR")!=NULL ) + else if ( strstr(siteID,"MSR")!=NULL ) { grib_lbl[21] = 157; strcpy(wmohdr2,"KMSR"); } - else if ( strstr(siteID,"TAR")!=NULL ) + else if ( strstr(siteID,"TAR")!=NULL ) { grib_lbl[21] = 158; strcpy(wmohdr2,"KTAR"); } - else if ( strstr(siteID,"PTR")!=NULL ) + else if ( strstr(siteID,"PTR")!=NULL ) { grib_lbl[21] = 159; strcpy(wmohdr2,"KPTR"); } - else if ( strstr(siteID,"TIR")!=NULL ) + else if ( strstr(siteID,"TIR")!=NULL ) { grib_lbl[21] = 160; strcpy(wmohdr2,"KTIR"); } - else if ( strstr(siteID,"ALR")!=NULL ) + else if ( strstr(siteID,"ALR")!=NULL ) { grib_lbl[21] = 161; strcpy(wmohdr2,"KALR"); } - else if ( strstr(siteID,"FWR")!=NULL ) + else if ( strstr(siteID,"FWR")!=NULL ) { grib_lbl[21] = 162; - + strcpy(wmohdr2,"KFWR"); } else - { + { printf(" Unknown site ID %s for this application...Exiting\n",siteID); return UNERR; } - - + + /* binary data section flag */ grib_lbl[23]=0 ; - + /* packing width of data points */ grib_lbl[24]=16; /* original was 16 in the example 4 in gribit */ - + /* initialized but ignored in grib message */ grib_lbl[26]=0; - grib_lbl[27]=0; - + grib_lbl[27]=0; + /* length of GDS */ if (strstr(projection,"POLAR")!=NULL) { - - + + grib_lbl[25]=32; /* polar stereographic and lat/long, 42 for Lambert */ - - + + /* grid (data representation) type, polar stereographic */ grib_lbl[28]=5; grib_lbl[29]=(int) x; grib_lbl[30]=(int) y; - + /* next for initialized but not used */ grib_lbl[39]=0; grib_lbl[40]=0; - grib_lbl[41]=0; - grib_lbl[42]=0; - - ncattget(cdfid, cdfvar_id, "lonOrigin", &lonOrigin); - - grib_lbl[34]=lonOrigin*1000.; /* longitude of grid point orientation */ - + grib_lbl[41]=0; + grib_lbl[42]=0; + + ncattget(NetCDF_ID, variableID, "lonOrigin", &lonOrigin); + + grib_lbl[34]=lonOrigin*1000.; /* longitude of grid point orientation */ + } else if (strstr(projection,"LAMBERT")!=NULL) { - + grib_lbl[25]=42; /* Lambert Conformal, 32 for polar */ - + /* grid (data representation) type, lambert conformal */ - + grib_lbl[28]=3; - + grib_lbl[29]=(int) x; grib_lbl[30]=(int) y; - ncattinq(cdfid,cdfvar_id,"latLonOrigin",&ll_type,&ll_len); - + ncattinq(NetCDF_ID,variableID,"latLonOrigin",&ll_type,&ll_len); + latLonOrigin = (double *) malloc(ll_len * nctypelen(ll_type)); - - ncattget(cdfid, cdfvar_id, "latLonOrigin", latLonOrigin); - - grib_lbl[34]=(*latLonOrigin)*1000.; - - ncattget(cdfid, cdfvar_id, "stdParallelOne", &stdParallelOne); - ncattget(cdfid, cdfvar_id, "stdParallelTwo", &stdParallelTwo); - - + + ncattget(NetCDF_ID, variableID, "latLonOrigin", latLonOrigin); + + grib_lbl[34]=(*latLonOrigin)*1000.; + + ncattget(NetCDF_ID, variableID, "stdParallelOne", &stdParallelOne); + ncattget(NetCDF_ID, variableID, "stdParallelTwo", &stdParallelTwo); + + grib_lbl[39]=stdParallelOne*1000; grib_lbl[40]=stdParallelTwo*1000; - - grib_lbl[41]=0; - grib_lbl[42]=0; - - + + grib_lbl[41]=0; + grib_lbl[42]=0; + + } else { printf(" Unknown projection read from netcdf...Exiting"); return CDFERR; - + /* might account for this as this is a lat,lon grid */ - /* comment out for this version */ - + /* comment out for this version */ + /* latitude/longitude grid grib_lbl(30)=idim grib_lbl(31)=jdim @@ -1332,35 +1363,35 @@ if (debugflag >0) grib_lbl(39)=64 */ } - + /* resolution component flags */ - + grib_lbl[33]=8; /* must find the grid map parameters and then the dx, dy resolution */ /* normally, these are the same for polar stereographic and even lambert conformal, but not necessarily */ - + x1=y1=x2=y2=lat1=lon1=lat2=lon2=0.; /* initialize the end points of the local grid */ - + /* Lower left corner of the main projected grid */ - + x1=(double) *gridPointLL; y1=(double) (*(gridPointLL+1)); lon1= (*latlonLL); lat1= (*(latlonLL+1)); - + /* upper right corner of the main projected grid */ - + x2=(double) *gridPointUR; y2=(double) (*(gridPointUR+1)); lon2= (*latlonUR); lat2= (*(latlonUR+1)); /* check if polar stereographic or lambert conformal to set map parameters correctly */ - + if(grib_lbl[25]==32) stlmbr(&stcprm,90.,lonOrigin); else if(grib_lbl[25]==42) @@ -1368,129 +1399,129 @@ if (debugflag >0) xlov=*latLonOrigin; stlmbr(&stcprm,eqvlat(stdParallelOne,stdParallelTwo),xlov); } - - /* set Earth radius */ - + + /* set Earth radius */ + cstrad(&stcprm,6371.2); /* radius of Earth used by NCEP */ - - + + stcm2p(&stcprm,x1,y1,lat1,lon1,x2,y2,lat2,lon2); /* find map parameters based on known lat/lons */ - - + + /* find DX DY values, should be identical for the projections for this app */ - + if(grib_lbl[25]==32) dxdy = cgszll(&stcprm, 60., lonOrigin); - + else if(grib_lbl[25]==42) dxdy = cgszll(&stcprm, eqvlat(stdParallelOne,stdParallelTwo), xlov); - + /*************************************************************************/ if (debugflag >0) { - + /* debug only */ - + printf(" DEBUG: dxdy is %9.3f\n",dxdy); - + printf(" DEBUG: Crosscheck grid lower left and upper right info\n"); - + printf(" DEBUG: LL X=%6.0f, LL Y=%6.0f, UR X=%6.0f, UR Y=%6.0f\n" \ - " DEBUG: LL Lat=%f, LL Lon=%f, UR Lat=%f, UR Lon=%f\n", + " DEBUG: LL Lat=%f, LL Lon=%f, UR Lat=%f, UR Lon=%f\n", x1,y1,x2,y2,lat1,lon1,lat2,lon2); - - - printf(" DEBUG: longitude at origin = %d\n",grib_lbl[34]/1000); - - -} + + + printf(" DEBUG: longitude at origin = %d\n",grib_lbl[34]/1000); + + +} /*************************************************************************/ - + dxdy=ceil(dxdy*1000); - + int dx = dxdy; int dy = dxdy; - + /* in GFE, the gridsize should equal the extents if using the standard grid resolutions. - If not, the site has changed resolutions and this must be determined + If not, the site has changed resolutions and this must be determined */ - + if ((int) y != (int) (*(domainExtent+1)) || (int) x != (int) (*domainExtent)) { /* first calculate x */ - + /* this formula is in the GFE online help - Adjusting the Grid Resolution in localConfig.py */ - - + + dx = dxdy * ((*domainExtent) / ( x -1)); - + dy = dxdy * ((*(domainExtent+1)) / ( y -1)); - + } - + /* note that this may cause problems for places where dx != dy but they are still using polar stereographic and it usually assumes these are the same */ - + grib_lbl[35]=dx; grib_lbl[36]=dy; - /* now for the local grid (i.e grid 255 in GRIB), will need to get the lower left lat, lon and + /* now for the local grid (i.e grid 255 in GRIB), will need to get the lower left lat, lon and will use the cxy2ll command here for the domain with origin values of x and y */ - + x=*domainOrigin; y=*(domainOrigin+1); - - + + cxy2ll(&stcprm,x,y,&lat1,&lon1); /* Find lat lon */ - - - grib_lbl[31]=(lat1)*1000; - grib_lbl[32]=(lon1)*1000; - + + + grib_lbl[31]=(lat1)*1000; + grib_lbl[32]=(lon1)*1000; + firstLon=grib_lbl[32]; /* must preserve because the packer changes the sign */ - + /*****************debug*********************/ if (debugflag>0) { printf(" DEBUG: dx = %d dy = %d x = %d extent x = %f y = %d extent y = %f \n",dx,dy,x,*domainExtent, y,(*(domainExtent+1))); - printf(" DEBUG: for local domain x = %d and y = %d, the corresponding lat = %f lon = %f\n",(int) x, (int) y, lat1, lon1); -} -/******************************************/ - - + printf(" DEBUG: for local domain x = %d and y = %d, the corresponding lat = %f lon = %f\n",(int) x, (int) y, lat1, lon1); +} +/******************************************/ + + grib_lbl[37]=0; - + /* scanning mode flag */ - + grib_lbl[38]=64; - + /* in the original packgrib_.c documentation, it was thought that this pds_ext could be anything the user wanted. However, this area of the GRIB message actually is used by NCEP to include ensemble forecast information for GRIB1 messages. Therefore this should be set to the NULL string unless one really means to include ensemble information here. */ - + strcpy(pds_ext,""); - + iplen=strlen(pds_ext); /*************************************************************************/ if (debugflag >0) { - - /* debug only */ - - printf(" DEBUG: dxdy is %6.0f\n",dxdy); - - printf(" DEBUG: LL local domain lat=%f lon=%f\n",lat1,lon1); - - - -} + /* debug only */ + + printf(" DEBUG: dxdy is %6.0f\n",dxdy); + + printf(" DEBUG: LL local domain lat=%f lon=%f\n",lat1,lon1); + + + + +} /************************************************************************/ @@ -1498,122 +1529,122 @@ if (debugflag >0) /* if(strrchr(fn,'/') != NULL) slashpos=strrchr(fn,'/') - fn; -*/ +*/ /* If this is a NetCDF file containing forecast grids, the -b switch with a basis time - has to be included. Split the basis time so it can be converted to a time_t + has to be included. Split the basis time so it can be converted to a time_t variable and forecast hours can be determined for GRIB P1 and P2 calculation. */ if(bflag) { - + for (i=0;i<4;i++) { dummy[i]=basistime[i]; } - + dummy[4]='\0'; - + yr=atoi(dummy); - + dummy[0]=basistime[4]; dummy[1]=basistime[5]; dummy[2]='\0'; - + mon=atoi(dummy); - + dummy[0]=basistime[6]; dummy[1]=basistime[7]; dummy[2]='\0'; - + day=atoi(dummy); - + dummy[0]=basistime[8]; dummy[1]=basistime[9]; dummy[2]='0'; dummy[3]='0'; dummy[4]='\0'; - + hrmin=atoi(dummy); grib_lbl[11]=yr; grib_lbl[12]=mon; grib_lbl[13]=day; grib_lbl[14]=hrmin; - + sprintf(basetime,"%4d-%02d-%02d %c%c:00:00",yr,mon,day,basistime[8],basistime[9]); - - + + status = yearsec_ansi_to_timet(basetime, &basetime_t); /*************************************************************/ if (debugflag>0) printf("\n DEBUG: Determined basis time = %s basis time_t = %ld sec \n",basetime,basetime_t); /*************************************************************/ - + if (status != 0 || basetime_t <= 0) { printf(" The basis time could not be correctly calculated from the input NetCDF filename.\n" \ " Determined basis time = %s basis time_t = %ld sec \n" \ " Please rename the file according to guidance and try again.\n", basetime, basetime_t); return FILEERR; - } + } } - - -/************************************************************************************************************ - /* main loop to go through each forecast data set and grib up the data */ - + + +/************************************************************************************************************ + /* main loop to go through each forecast data set and grib up the data */ + /* note that had the loop set up for multiple valid times first. Then thought ABRFC way of 1 file per forecast was - simpler. However, that didn't work for other RFC operations, so went back to multiple forecast hours within 1 NetCDF - file. + simpler. However, that didn't work for other RFC operations, so went back to multiple forecast hours within 1 NetCDF + file. */ - + if (time1flag>0) /* for testing only to do just the first valid time from the netcdf file */ vt_len=2; /****************************************************************************/ if (debugflag>0) printf("\n ***Entering main loop to process NetCDF records(s) into GRIB files*** \n\n"); -/****************************************************************************/ +/****************************************************************************/ - for (m=0; m0) " Exiting...\n"); return UNERR; } - - + + /* this is an "estimate" product rather than a forecast that doesn't need basis time */ - + /* As this is an estimate product, it is valid at the end time retrieved from the NetCDF file rather than determined from a base time. First, though, get the reference time which is the first valid time for this grid. Will reuse basistime variable here for this purpose. */ - - status = timet_to_yearsec_ansi((time_t) *(validTimes+m), basistime); - + status = timet_to_yearsec_ansi((time_t) *(validTimes+m), basistime); + + for (i=0;i<4;i++) { dummy[i]=basistime[i]; } dummy[4]='\0'; - + grib_lbl[11]=atoi(dummy); - + dummy[0]=basistime[5]; dummy[1]=basistime[6]; dummy[2]='\0'; - + grib_lbl[12]=atoi(dummy); - + dummy[0]=basistime[8]; dummy[1]=basistime[9]; dummy[2]='\0'; - + grib_lbl[13]=atoi(dummy); - + dummy[0]=basistime[11]; dummy[1]=basistime[12]; dummy[2]=basistime[14]; dummy[3]=basistime[15]; dummy[4]='\0'; - + grib_lbl[14]=atoi(dummy); - + fcsth=0; - + /* In the case of multiple accumulation periods in the same netcdf file, will need to attach this to the - filename in both cases. Can't reuse fcsth as it might be needed to determine the WMO header for any + filename in both cases. Can't reuse fcsth as it might be needed to determine the WMO header for any future NPVU estimate/observed grids. - */ - - - esth=(int) ((*(validTimes+m+1)) - (*(validTimes+m)))/ SECINHR; - -/*************************************************************/ + */ + + + esth=(int) ((*(validTimes+m+1)) - (*(validTimes+m)))/ SECINHR; + +/*************************************************************/ if (debugflag>0) printf(" DEBUG: esth = %d valid time = %ld initial time = %ld\n",esth, (*(validTimes+m+1)), (*(validTimes+m))); -/*************************************************************/ +/*************************************************************/ - - - if (esth > num_hours || esth < 0) + + + if (esth > 240 || esth < 0) { - printf(" The estimated/observed time period is either less than 0 or greater than %d hours.\n" \ + printf(" The estimated/observed time period is either less than 0 or greater than 10 days (240 hours).\n" \ " Therefore, valid times within the input NetCDF filename may not have been generated \n" \ " correctly. Or this is actually a forecast grid and the -b option should be used so it \n" \ " will be processed correctly. Check your options and ensure this is an estimate or observed grid\n" \ " You could also try to generate the file again.\n" \ - " For debug esth = %d\n",num_hours, esth); + " For debug esth = %d\n",esth); return FILEERR; } - - + + /* see the GRIB table on this for determining reference and valid times for different types of products */ if (gfe2grib.timerange==3 || gfe2grib.timerange==4) { /* average or accumulation */ /* This will be the time determined from grib_lbl 11-14 to that date/time adding the number hours of esth */ - + grib_lbl[16]=0; /* P1 */ grib_lbl[17]=esth; /* P2 */ } @@ -1711,77 +1742,77 @@ if (debugflag>0) this to determine the estimate/observed grid valid time as the reference time is the first valid time in the sequence for the grid. */ - + grib_lbl[16]=esth; /* P1 */ grib_lbl[17]=0; /* P2 */ - + } else { printf(" Unknown time range. Check the gfe2grib.txt file \n"); return UNERR; } - - - printf("\n\n NetCDF record %d is an estimate/observed product\n", m/2+1); + + + printf("\n\n NetCDF record %d is an estimate/observed product\n", m/2+1); /*************************************************************/ if (debugflag>0) /* this is an estimate/observed product */ printf(" DEBUG: valid time = %d %d %d %d validtime=%s\n" \ - " DEBUG: validTimes = %ld\n", yr, mon, day, hrmin, validtime, *(validTimes+m+1)); + " DEBUG: validTimes = %ld\n", yr, mon, day, hrmin, validtime, *(validTimes+m+1)); /*************************************************************/ - + } else { - printf("\n\n NetCDF record %d is a forecast or estimate product needing basis time\n", m/2+1); + printf("\n\n NetCDF record %d is a forecast or estimate product needing basis time\n", m/2+1); fcsth = (int) ((*(validTimes+m+1)) - basetime_t); - + timediff= (*(validTimes+m+1)) - (*(validTimes+m)); - + timedif_hr = (int) timediff/SECINHR; fcsth /= SECINHR; - -/*************************************************************/ + +/*************************************************************/ if (debugflag>0) printf(" DEBUG: fcsth = %d timediff=%f valid time = %ld basis time_t = %ld\n",fcsth, timediff,(*(validTimes+m+1)), basetime_t); -/*************************************************************/ - - if (fcsth > num_hours || fcsth < 0) +/*************************************************************/ + + if (fcsth > 240 || fcsth < 0) { - printf(" The forecast time is either less than 0 or greater than %d hours.\n" \ + printf(" The forecast time is either less than 0 or greater than 10 days (240 hours).\n" \ " Therefore, the basis time may not be specified correctly or may need to be specified \n" \ " on the command line according to guidance. Please check your command options or \n" \ " or the NetCDF file creation and try again.\n" \ - " for debug fcsth = %d\n",num_hours, fcsth); + " for debug fcsth = %d\n",fcsth); return FILEERR; } - -/*************************************************************************/ + +/*************************************************************************/ if (debugflag >0) { - + /* debug only */ - + /*printf(" base time 1=%ld 2=%ld diff=%f\n",*(validTimes+m),*(validTimes+m+1),timediff);*/ - - printf(" DEBUG: reference time = %d%02d%02d%02d \n",yr,mon,day,hrmin); - - - + + printf(" DEBUG: reference time = %d%02d%02d%02d \n",yr,mon,day,hrmin); + + + } -/*************************************************************************/ - +/*************************************************************************/ + if (gfe2grib.timerange==3 || gfe2grib.timerange==4) { /* average or accumulation */ - + grib_lbl[16]=fcsth-(int)(timediff/SECINHR); /* P1 */ grib_lbl[17]=fcsth; /* P2 */ } @@ -1790,10 +1821,10 @@ if (debugflag >0) /* this is for a forecast product valid at reference time + P1 and at present using this for PETF */ - + grib_lbl[16]=fcsth; /* P1 */ grib_lbl[17]=0; /* P2 */ - + } else { @@ -1803,139 +1834,139 @@ if (debugflag >0) } - + /* Get data for this time record */ - - if(cdfvar_ndims==3) + + if(numberOfVariableDimensions==3) { - + start[0]=(long) (m/2); - - status = ncvarget(cdfid,cdfvar_id,start,count,cdfvargrid); + + status = ncvarget(NetCDF_ID,variableID,start,count,cdfvargrid); } - else if (cdfvar_ndims==2) + else if (numberOfVariableDimensions==2) { start1r[0]=(long) (m/2); - - status = ncvarget(cdfid,cdfvar_id,start1r,count1r,cdfvargrid); + + status = ncvarget(NetCDF_ID,variableID,start1r,count1r,cdfvargrid); } - + if (status != NC_NOERR) { printf(" An error occurred while getting the cdfvar array\n"); return CDFERR; } - + /* all missing check */ - + for (i=0;i xmissing) { mischek=1; break; } } - + if(mischek==0) { printf(" All data retrieved from the NetCDF file was missing. Exiting program...\n"); return MISCHECK; } - + /* all data zero check. since already checked for all missing, can see if all data not equal to 0 */ - + for (i=0;i 0) { printf(" DEBUG WARNING: All data retrieved from the NetCDF file was zero. \n" \ "This may be normal in the case of QPF\n"); - + } - + /* depending on the prarameter, convert to GRIB units standards */ - + if (grib_lbl[7]==61) /* precipitation */ { - + if(strstr(cdfunits,"in")!=NULL) { - + for (i=0;i xmissing) - + *(cdfvargrid+i) *= 25.4; /* convert inches to mm */ - + } - } - - } + } + + } else if (grib_lbl[7]==11) /* temperature */ { - + if(strstr(cdfunits,"F")!=NULL) { - + for (i=0;i xmissing) - + *(cdfvargrid+i) = ((*(cdfvargrid+i)-32) * 5/9) + 273.16; /* convert F to K */ - + } - + } else if (strstr(cdfunits,"C")!=NULL) { for (i=0;i xmissing) - + *(cdfvargrid+i) += 273.16; /* convert C to K */ - + } - } + } } - + else if (grib_lbl[7]==57) /* evaporation */ { /* no code yet */ - + } else if (grib_lbl[7]==7) /* height */ - { + { /* this section is for freezing level */ - + if(strstr(cdfunits,"ft")!=NULL) { - + for (i=0;i xmissing) - + *(cdfvargrid+i) *= 0.3048; /* convert feet to meters */ - + } - } - } + } + } else { printf(" Unknown parameter found in nc2grib...Exiting\n"); return UNERR; } - -/*************************************************************************/ + +/*************************************************************************/ if (debugflag >0) { printf("\n DEBUG: GRIB message information follows:\n"); @@ -1949,38 +1980,34 @@ if (debugflag >0) j+=7; } } -} -/*************************************************************************/ +} +/*************************************************************************/ + + + status = packgrib(grib_lbl,pds_ext,&iplen,cdfvargrid,&idim,&xmissing, + output_buffer,&odim,&length); - /* I'm hoping this is where the "meat" of the conversion is taking place. - * I'm also hoping that everything else above is simply parameter checking. - * djsiii 13 Sep 2012 - */ - - status = packgrib(grib_lbl,pds_ext,&iplen,cdfvargrid,&idim,&xmissing, - output_buffer,&odim,&length); - if (status !=0) - { - printf(" DEBUG: The routine which packs the grid into GRIB, packgrib, returned with errors status = %d\n",status); - return SUBERR; + { + printf(" DEBUG: The routine which packs the grid into GRIB, packgrib, returned with errors status = %d\n",status); + return SUBERR; } else { - if(cdfvar_ndims==3) + if(numberOfVariableDimensions==3) printf("\n Gribbing of data successful for record %ld\n",start[0]+1); else printf("\n Gribbing of data successful for record %ld\n",start1r[0]+1); } - + /* create the GRIB1 output filename based input options */ - - + + /***************************************************************************/ if(debugflag) printf("\n DEBUG: Creating output file name \n"); -/***************************************************************************/ +/***************************************************************************/ if(ofn==NULL) { @@ -1988,37 +2015,37 @@ if(debugflag) if(debugflag) printf("\n DEBUG: Output filename not specified...building from input filename \n"); /**************************************************************************/ - + if(strstr(infn,".cdf")!=NULL || strstr(infn,".nc") !=NULL) { valptr=strstr(infn,".cdf"); if (valptr==NULL) valptr=strstr(infn,".nc"); - + psn=valptr-infn; - + ofn=(char *) malloc(sizeof(char) * (psn+1)); - + if (ofn==NULL) { - + printf(" ERROR: Something went wrong with memory allocation for the GRIB filename....exiting\n"); return MALERR; } - - + + strncpy(ofn,infn,psn); - + *(ofn+psn)='\0'; - - } + + } else { - + ofn=(char *) malloc(sizeof(char)*(strlen(infn)+1)); if (ofn==NULL) { - + printf(" ERROR: Something went wrong with memory allocation for the GRIB filename...exiting\n"); return MALERR; } @@ -2026,55 +2053,55 @@ if(debugflag) strcpy(ofn,infn); } - + if(ofntemp!=NULL) { free(ofntemp); ofntemp=NULL; } - + ofntemp=(char *) malloc(sizeof(char) * (strlen(ofn)+1)); if (ofntemp==NULL) { - + printf(" ERROR: Something went wrong with memory allocation for the temp output filename...exiting\n"); return MALERR; } - if(ofn!=NULL) + if(ofn!=NULL) strcpy(ofntemp,ofn); /* must do this so ofntemp isn't NULL in the comparison below. Might not make a - difference but better safe than sorry for coding purposes + difference but better safe than sorry for coding purposes */ else { printf("\n ERROR occurred as out filename is NULL and shouldn't be before copying to ofntemp variable \n"); return UNERR; - } - + } + } - - /* DTM - 08/18/09. An excellent suggestion from OHRFC (Mark Fenbers) is to use the function strftime and the + + /* DTM - 08/18/09. An excellent suggestion from OHRFC (Mark Fenbers) is to use the function strftime and the automatic assignment of date/time strings within the input filename. Took a bit of doing but will use modified - versions of our on Time Util library routines to do this and remove the previous way of doing business - substituting date/time strings in the filenames. This will move this executable to version 4.1. Need to also + versions of our on Time Util library routines to do this and remove the previous way of doing business + substituting date/time strings in the filenames. This will move this executable to version 4.1. Need to also generalize the valid time for NPVU rather than search on the "QPE" string as it done in this present fix. - + If the -f flag is specified, then valid time will be used instead of basetime. - - */ - + + */ + fflagcntr=0; /* initialize counter */ - + if(strrchr(ofntemp,'%') != NULL) /* this will indicate that a date format will be substituted */ { - + for (i=0;i0) /* we only need to check this if basis time is used + + if(strstr(ofntemp,"%%") == NULL && bflag>0) /* we only need to check this if basis time is used in the output filename format */ { fflagcntr = 0; - + if(datewarn<=0) { datewarn++; /* only want to print this warning message for the first record in the NetCDF file */ - + printf("\n WARNING: Basis time option was found but the formatted time interval and/or hours from\n" \ " basetime is missing from the input format string. These should have the format of %%0d \n" \ - " or %%d in the input format string. This should be included so as not overwrite files. \n\n"); - - + " or %%d in the input format string. This should be included so as not overwrite files. \n\n"); + + printf("\n A default date,time will be used instead.\n" \ " If you intended on a custom one, please check the pattern for the missing\n" \ " time interval/hours past basis time pattern in your command line and try again.\n\n"); @@ -2121,25 +2148,25 @@ if(debugflag) { printf("\n Please see WARNING message from first GRIB record generated \n" \ " concerning missing custom date/time wildcards in output GRIB filename \n\n"); - } + } } - else + else { if(bflag) /* basis time is included, use the number of hours past basis time unless other conditions occur with qflag */ { if (qflag) -/* sprintf(ofn,ofn,timedif_hr); +/* sprintf(ofn,ofn,timedif_hr); else if (qflag) */ /* due to filename limitations with base time in the filename, will need both fcst and timedif_hr so filenames are not the same - for an estimate product that is the same number of hours from - base time but different time interval. This can occur in the - precipitation QPE file from daily QC which has a 24 hour 6-hour + for an estimate product that is the same number of hours from + base time but different time interval. This can occur in the + precipitation QPE file from daily QC which has a 24 hour 6-hour product and a 24 hour 24-hour product. So we need to count the times that %% occur together as this will indicate where to put each */ - { + { perflag=0; for (i=0; i=2) { if(!rflag) /* normally put time interval difference before hours past basis */ - - sprintf(ofn,ofn,timedif_hr,fcsth); + + sprintf(ofn,ofn,timedif_hr,fcsth); else sprintf(ofn,ofn,fcsth,timedif_hr); /* but reverse the order here */ - } + } else { if(qpewarn==0) @@ -2168,55 +2195,55 @@ if(debugflag) " a 6-hour QPE and a 24-hour QPE. \n" \ " Please check to ensure you formatted your output string accordingly. \n\n"); qpewarn++; - } + } sprintf(ofn,ofn,fcsth); /* user is taking responsibility to ensure estimate using basis time doesn't include multiple time intervals in NetCDF */ } - - } + + } else - + sprintf(ofn,ofn,fcsth); /* standard forecast product using forecast hours past basis time */ - + } - else /* without a basis time, this has to be an estimated/observed product using the valid time in - the output file. Note that if "%%" is NULL and bflag == 0, specifying esth here is + else /* without a basis time, this has to be an estimated/observed product using the valid time in + the output file. Note that if "%%" is NULL and bflag == 0, specifying esth here is ignored in the output filename. */ - + sprintf(ofn,ofn,esth); - - - + + + if(strstr(ofn,".grb")!=NULL) sprintf(outfn,"%s/%s",gribdir,ofn); - + else - sprintf(outfn,"%s/%s.grb",gribdir,ofn); + sprintf(outfn,"%s/%s.grb",gribdir,ofn); } - - } - + + } + if(oflag==0 || fflagcntr == 0) { - + if(strstr(ofn,".grb")!=NULL) { valptr=strstr(ofn,".grb"); psn=valptr-ofn; - + strncpy(dummy,ofn,psn); - + dummy[psn]='\0'; - + if (ofn!=NULL) { free(ofn); ofn=NULL; } - + ofn=(char *) malloc(sizeof(char)*(strlen(dummy)+1)); if(ofn==NULL) { @@ -2224,34 +2251,34 @@ if(debugflag) " before the default filename was determined...exiting\n"); return MALERR; } - - strcpy(ofn,dummy); - + + strcpy(ofn,dummy); + } - + if(bflag) /* default filenames if output filename and/or format not specified */ { if(qflag) - + sprintf(outfn,"%s/%s_%4d%02d%02d%02dh%03d.grb",gribdir,ofn,yr,mon,day,hrmin/100,timedif_hr); - + else - + sprintf(outfn,"%s/%s_%4d%02d%02d%02df%03d.grb",gribdir,ofn,yr,mon,day,hrmin/100,fcsth); - } + } else - sprintf(outfn,"%s/%s_%4d%02d%02d%02df%03d.grb",gribdir,ofn,yr,mon,day,hrmin/100,esth); - + sprintf(outfn,"%s/%s_%4d%02d%02d%02df%03d.grb",gribdir,ofn,yr,mon,day,hrmin/100,esth); + } - + fptr = fopen ( outfn, "w" ); /* open the output GRIB file */ - - + + if ( fptr == NULL ) { printf ( " ERROR: output GRIB file could not be opened.\n" ); return OPENERR; @@ -2261,10 +2288,10 @@ if(debugflag) printf(" Writing grib data to file %s...\n",outfn); } - /* write out the GRIB data to the output buffer */ + /* write out the GRIB data to the output buffer */ status = fwrite ( (unsigned char *)output_buffer, sizeof(unsigned char), length, fptr ); - + if (status == 0 || length < 100) printf("\n WARNING: Possible problem writing grib file, number of elements written = %d\n",length); else if ( length == 0) @@ -2274,99 +2301,102 @@ if(debugflag) } else printf("\n GRIB file written %s number of elements = %d\n\n",outfn,status); - - fclose(fptr); - + + fclose(fptr); + /* If this is precip (APCP) and headerflag is on, write out to a file for NPVU. */ if (headflag >0 && grib_lbl[7]==61) { - - + + /* get current GMT date and time for header */ - + time( &curtime); - + curgmtime = gmtime (&curtime); - + sprintf(adayhrmin,"%02d%02d%02d",curgmtime->tm_mday,curgmtime->tm_hour,curgmtime->tm_min); -/********************************************************************/ +/********************************************************************/ if(debugflag>0) { - printf("\n DEBUG: current day hour min GMT = %s\n",adayhrmin); -} -/********************************************************************/ - - - if(getAppsDefaults("pproc_bin",pprocbin) == -1) + printf("\n DEBUG: current day hour min GMT = %s\n",adayhrmin); +} +/********************************************************************/ + + + if(nc_getAppsDefaults("pproc_bin",pprocbin) == -1) { printf(" ERROR: Invalid token value for token \"pproc_bin\".\n\t Program exit."); return APSDEFERR; } - - - + + + /* fortran routine copygb_main_ */ sprintf(file_path,"%s/copygb.LX",pprocbin); - + sprintf(tmpNPVUfn,"%s/%s",gribdir,"tmpNPVU.grb"); - - - + + + if(bflag && qflag==0) /* old - strstr(process,"QPE")==NULL && strstr(process,"qpe")==NULL) */ { if(debugflag>0) - + /* the -X here causes copygb to print out expanded information about its operation */ - - sprintf(command,"%s -xg218 -X %s %s",file_path, outfn, tmpNPVUfn); + +/* sprintf(command,"%s -xg218 -X %s %s",file_path, outfn, tmpNPVUfn); */ + sprintf(command,"-xg218 -X %s %s", outfn, tmpNPVUfn); else - sprintf(command,"%s -xg218 %s %s",file_path, outfn, tmpNPVUfn); - - /* first write out the main GRIB file using the copygb command without the header determined above - to a temporary holding file. This file will now contain the QPF forecast on GRID218 at 10km - resolution */ - - status = system(command); +/* sprintf(command,"%s -xg218 %s %s",file_path, outfn, tmpNPVUfn); */ + sprintf(command,"-xg218 %s %s", outfn, tmpNPVUfn); + + + /* first write out the main GRIB file using the copygb command without the header determined above + to a temporary holding file. This file will now contain the QPF forecast on GRID218 at 10km + resolution */ + copygb_main_(command); + /* status = system(command); */ } else { /* for a QPE grid, keep at the HRAP grid resolution and don't copy to the 218 GRID */ - + sprintf(command,"cp %s %s",outfn, tmpNPVUfn); - + status = system(command); } -/********************************************************************/ +/********************************************************************/ if(debugflag>0) { - printf(" DEBUG: command for temp NPVU grib file=%s \n DEBUG: status of command execution=%d\n",command,status); -} -/********************************************************************/ + printf(" DEBUG: command for temp NPVU grib file=%s \n DEBUG: status of command execution=%d\n",command,status); +} +/********************************************************************/ /* create an appropriate filename for the NPVU file */ - + if(strstr(outfn,".grb")!=NULL) { valptr=strstr(outfn,".grb"); psn=valptr-outfn; - + strncpy(outfnqpf,outfn,psn); - + outfnqpf[psn]='\0'; } else strcpy(outfnqpf,outfn); - - + + sprintf(outfnqpf,"%s_NPVU.grb",outfnqpf); - + fptrqpf = fopen ( outfnqpf, "wb" ); - - + + if ( fptrqpf == NULL ) { printf ( " ERROR: NPVU GRIB file could not be opened.\n" ); return OPENERR; @@ -2376,16 +2406,16 @@ if(debugflag>0) printf(" Writing NPVU QPF WMO header info to file %s...\n",outfnqpf); } - + /* apply appropriate header based on estimate or forecast and number of hours */ - + if (fcsth==0) strcpy(wmohdr1,"ZETA98"); else if (strstr(process,"QPE")!=NULL || strstr(process,"qpe")!=NULL) strcpy(wmohdr1,"ZETA98"); else { - + if (fcsth == 6) strcpy(wmohdr1,"YEIG98"); else if (fcsth == 12) @@ -2416,12 +2446,12 @@ if(debugflag>0) " to indicate forecast hour is in the GRIB Product Definition Section\n"); strcpy(wmohdr1,"YEIZ98"); } - } - + } + /* get current GMT date and time for header */ - + j=0; - + for (i=0;i0) } header[j]=aspace; j++; - + for (i=0;i0) } header[j]=aspace; j++; - + for (i=0;i0) { /* printf("\n j=%d\n",j);*/ for (i=0; i0) printf(" ERROR: Could not create output buffer for %s...\n",outfnqpf); return FILEOPERR; } - + if (setvbuf(tmpfptr,NULL,_IOFBF,BUFFSIZE) !=0) { printf(" ERROR: Could not create output buffer for temp NPVU grib file...\n"); return FILEOPERR; } - + long countr; char ch; /* must find the beginning of the GRIB message indicate by "GRIB" */ - + while ((ch = getc(tmpfptr)) != EOF) { - /* later testing revealed that there was a difference between the temp QPE + /* later testing revealed that there was a difference between the temp QPE and converted QPF GRIB files on the 218 grid where extra characters - were in the beginning of the QPF GRIB message but not in the QPE + were in the beginning of the QPF GRIB message but not in the QPE which started with "G". Therefore, the first getc above moves the file position pointer by one and therefore it never sees the "G" in the QPE file. So while the header was copied, there was no "GRIB" found and none in the NPVU QPE file. Therefore if this is the first time we get - a character from the file, reposition it to the beginning and + a character from the file, reposition it to the beginning and grab that character again. Finds "G" for the QPE files now correctly. */ - + if(firstch==0) { fseek(tmpfptr,0L,SEEK_SET); - + firstch=1; - } - + } + countr=ftell(tmpfptr); ch = getc(tmpfptr); /* printf(" ch=%c countr=%ld \n",ch, countr); */ if (ch == 'G') { ch = getc(tmpfptr); - + if (ch == 'R') { - + ch = getc(tmpfptr); if (ch == 'I') { - + ch = getc(tmpfptr); if (ch == 'B') break; } } } - - - + + + fseek(tmpfptr,countr,SEEK_SET); } - - firstch=0; /* reset the flag for next file */ - + + firstch=0; /* reset the flag for next file */ + fseek(tmpfptr,countr,SEEK_SET); - + while ((odim = fread (temp,sizeof(unsigned char),BUFFSIZE,tmpfptr)) > 0 ) { fwrite(temp,sizeof(unsigned char),odim,fptrqpf); } - + if (ferror(tmpfptr) !=0 ) { printf(" Error reading temp NPVU grib file \n"); return FILEOPERR; } - + if (ferror(fptrqpf) !=0 ) { printf(" Error writing to NPVU grib file %s \n",outfnqpf); @@ -2589,38 +2619,38 @@ if (debugflag >0) else { printf(" Writing to NPVU grib file appears to be successful\n"); - } - - + } + + if (tmpfptr != NULL) - fclose(tmpfptr); - + fclose(tmpfptr); + if (fptrqpf !=NULL) fclose(fptrqpf); - + sprintf(command,"rm -f %s",tmpNPVUfn); /* remove the temporary NPVU file */ - + system(command); - - } - + + } + /* ensure these are the correct sign for the next data set */ - + grib_lbl[32]=firstLon; - + if(grib_lbl[25]==32) /* polar stereo */ - grib_lbl[34]=lonOrigin*1000; + grib_lbl[34]=lonOrigin*1000; else if(grib_lbl[25]==42) /* lambert conformal */ grib_lbl[34]=(*latLonOrigin)*1000; else { printf(" Map projection number %d not supported at this time...Exiting\n",grib_lbl[25]); return UNERR; - } - odim=COPYSIZE; /* reinitialize for copygb */ - - grib_lbl[24]=16; /* reinitialize for next data set in the NetCDF file */ - + } + odim=COPYSIZE; /* reinitialize for copygb */ + + grib_lbl[24]=16; /* reinitialize for next data set in the NetCDF file */ + if(oflag==0) { if(ofn!=NULL) @@ -2633,8 +2663,8 @@ if (debugflag >0) free(ofntemp); ofntemp=NULL; } - } - + } + if(onegribflag) { gfiles[numgfiles]= (char *) malloc (strlen(outfn)+1); @@ -2649,21 +2679,21 @@ if (debugflag >0) strcpy(gfiles[numgfiles],outfn); numgfiles++; } - } - - + } + + } - - ncclose(cdfid); - + + ncclose(NetCDF_ID); + /* if user desires only 1 GRIB file, must combine all into one */ - + if (onegribwarn==0 && onegribflag>0 && numgfiles>=2) { if(gfiles[0]!=NULL && gfiles[1]!=NULL) { sprintf(onegrib,"%s/%s",gribdir,onegfname); - + onegfptr = fopen ( onegrib, "wb"); if ( onegfptr == NULL ) { @@ -2679,18 +2709,18 @@ if (debugflag >0) printf(" ERROR: Could not create output buffer for combined GRIB file %s...\n",onegfname); return FILEOPERR; } - - + + for (i=0;i0) } if (fptr != NULL) fclose(fptr); - + sprintf(command,"rm -f %s",gfiles[i]); /* remove the grib file */ status=system(command); - + } printf("\n Successfully combined individual GRIB files into this file:\n %s\n",onegrib); - + } else if (onegribflag>0) { printf("\n While attempting to combine files, there was a problem accessing the first two GRIB filenames.\n" \ " Therefore cannot combine GRIB files into one as desired\n"); - } - + } + } else if (onegribflag>0) printf("\n There was a problem while attempting to combine the GRIB files into one. \n" \ " If number of GRIB files below equals to 1, won't be done. \n" \ " For DEBUG purposes, GRIB warn = %d and number of GRIB files = %d\n",onegribwarn,numgfiles); - -/* clean up */ - printf("\n nc2grib has completed processing for this run.\n"); +/* clean up */ + + printf("\n nc2grib has completed processing for this run.\n"); if(onegribflag>0) - + if(onegfptr!=NULL) fclose(onegfptr); - + for (i=0;i0) free(domainOrigin); if(domainExtent!=NULL) free(domainExtent); - + return 0; } int basetime_ansi_to_timet(char *ansi, time_t *timet) { - + struct tm gm_struct; int rv = 0, scan_rv = 0; - - - + + + memset(&gm_struct,0,sizeof(struct tm)); scan_rv = sscanf(ansi, "%4d%2d%2d%2d", &(gm_struct.tm_year), &(gm_struct.tm_mon), &(gm_struct.tm_mday), &(gm_struct.tm_hour)); - + gm_struct.tm_year = gm_struct.tm_year - 1900; gm_struct.tm_mon = gm_struct.tm_mon - 1; gm_struct.tm_min = 0; @@ -2816,7 +2846,7 @@ int timet_to_userformat_ansi(time_t timet, char *ansi, char* userformat) an ANSI time string representation. */ - + struct tm *gm_struct; size_t rv = 0; @@ -2831,7 +2861,7 @@ int timet_to_userformat_ansi(time_t timet, char *ansi, char* userformat) strcpy(ansi,""); rv = strftime(ansi, FILE_LEN, userformat, gm_struct); - + return((int) rv); } @@ -2902,13 +2932,13 @@ int display_usage(void) " the -t option above, it MUST be specified for nc2grib to run. \n" \ " netcdf_dir - contains default location of the generated NetCDF files. If not overridden by the \n" \ " -n option above, it MUST be specified for nc2grib to run.\n\n" ); - + return 0; /* ============== Statements containing RCS keywords: */ {static char rcs_id1[] = "$Source: /fs/hseb/ob9d/ohd/pproc/src/nc2grib/RCS/main_nc2grib.c,v $"; - static char rcs_id2[] = "$Id: main_nc2grib.c,v 1.3 2011/10/26 14:49:35 pst Exp $";} + static char rcs_id2[] = "$Id: main_nc2grib.c,v 1.2 2010/06/14 15:04:32 millerd Exp $";} /* =================================================== */ -} +} diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.gpd/res/spring/gpd-ingest.xmlforFuture b/ncep/gov.noaa.nws.ncep.edex.plugin.gpd/res/spring/gpd-ingest.xmlforFuture new file mode 100644 index 0000000000..b34381c428 --- /dev/null +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.gpd/res/spring/gpd-ingest.xmlforFuture @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + gpd + + + + + + + + + gpd + + + + + + + + + java.lang.Throwable + + + + + + + + + \ No newline at end of file diff --git a/ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/src/gov/noaa/nws/ncep/edex/plugin/ncuair/decoder/NcUairSeparator.java b/ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/src/gov/noaa/nws/ncep/edex/plugin/ncuair/decoder/NcUairSeparator.java index d54773d744..a623773504 100644 --- a/ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/src/gov/noaa/nws/ncep/edex/plugin/ncuair/decoder/NcUairSeparator.java +++ b/ncep/gov.noaa.nws.ncep.edex.plugin.ncuair/src/gov/noaa/nws/ncep/edex/plugin/ncuair/decoder/NcUairSeparator.java @@ -284,7 +284,8 @@ import org.apache.log4j.Logger; //This method is much faster comparing to doBatchSeparate1. Only several header search is needed. private void doBatchSeparate(byte[] data ) { /* Regex used for separate the bulletins */ - System.out.println("Ncuair doBatchSeparate: input file size is " + data.length); + int dataLen = data.length; + //System.out.println("Ncuair doBatchSeparate: input file size is " + dataLen); final String BULLSEPARATOR = "\\x01\\r\\r\\n\\d{3} \\r\\r\\n"+ WMO_HEADER; Pattern bullPattern; bullPattern = Pattern.compile(BULLSEPARATOR); @@ -293,40 +294,58 @@ import org.apache.log4j.Logger; String msg ; int batchSize = 230000; //separate data to batch size around 230000 String batchStr; - while(charCount < data.length){ + //int count=0; + while(charCount < dataLen){ lastCharCount = charCount; charCount = charCount+ batchSize; - if(charCount < data.length){ + //count++; + if(charCount < dataLen){ + //System.out.println("1st substring begin @"+charCount); msg = message.substring(charCount); + try { // data bulletin is not ended at exactly 2300000 bytes for each batch // therefore, find the next header of bulletin and chop batch data at there Matcher bullMatcher = bullPattern.matcher(msg); if (bullMatcher.find()) { + int start = bullMatcher.start(); charCount = charCount+ start; batchStr= new String(); + //System.out.println("2nd substring begin @"+lastCharCount+ " end @"+charCount); batchStr = message.substring(lastCharCount,charCount); records.add(batchStr); + } else{ // no header find, should be the end of the data batchStr= new String(); - batchStr = message.substring(lastCharCount,data.length); + //System.out.println("3rd substring begin @"+lastCharCount+ " end @"+(dataLen-1)); + batchStr = message.substring(lastCharCount,dataLen-1); records.add(batchStr); break; } } catch (Exception e) { if ( log.isInfoEnabled()) { - log.info ("doBatchSeparate exception !"); + log.info ("doBatchSeparate exception !" + e); } + break; } + } else{ // should be the last batch of the data, just add them without search next header - msg = message.substring(lastCharCount,data.length); + try{ + //System.out.println("4th substring begin @"+lastCharCount+ " end @"+(dataLen-1)); + msg = message.substring(lastCharCount,dataLen-1); records.add(msg); + } + catch (Exception e) { + if ( log.isInfoEnabled()) { + log.info ("doBatchSeparate last batch exception !"+e); + } + } break; } } diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpDisplayElementFactory.java b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpDisplayElementFactory.java new file mode 100644 index 0000000000..6303024347 --- /dev/null +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpDisplayElementFactory.java @@ -0,0 +1,223 @@ +package gov.noaa.nws.ncep.ui.nsharp.display.rsc; +/** + * + * + * This code has been developed by the NCEP-SIB for use in the AWIPS2 system. + * + *
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    	Engineer    Description
+ * -------		------- 	-------- 	-----------
+ * 09/2013			    	Chin Chen	Initial coding
+ *
+ * 
+ * + * @author Chin Chen + * @version 1.0 + */ +import java.awt.Color; +import java.util.ArrayList; + +import org.eclipse.swt.graphics.RGB; + +import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.drawables.IDescriptor; +import com.raytheon.uf.viz.core.drawables.IShadedShape; +import com.raytheon.uf.viz.core.drawables.IWireframeShape; +import com.raytheon.uf.viz.core.drawables.PaintProperties; +import com.raytheon.viz.ui.color.IBackgroundColorChangedListener.BGColorMode; +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.linearref.LengthIndexedLine; + +import gov.noaa.nws.ncep.ui.pgen.display.DisplayElementFactory; +import gov.noaa.nws.ncep.ui.pgen.display.FillDisplayElement; +import gov.noaa.nws.ncep.ui.pgen.display.IDisplayable; +import gov.noaa.nws.ncep.ui.pgen.display.IVector; +import gov.noaa.nws.ncep.ui.pgen.display.LineDisplayElement; + +/* + * Chin Note: This class extends from PGEN's DisplayElementFactory. Its purpose is only for + * Nsharp to draw wind barb in SkewT display. As skewT has its own log scale coordination. + * The key word, CHANGED, is used to mark changes from original PGEN code. + */ +public class NsharpDisplayElementFactory extends DisplayElementFactory { + + public NsharpDisplayElementFactory(IGraphicsTarget target, + IDescriptor iDescriptor) { + super(target, iDescriptor); + // TODO Auto-generated constructor stub + } + + @SuppressWarnings("deprecation") + private ArrayList createWindBarb(IVector vect) { + double sfactor = deviceScale * vect.getSizeScale() * 10.; + IWireframeShape mask = null; + Color bgColor = new Color(0,0,0); // default black + + /* + * Create the List to be returned, and wireframe shape + */ + ArrayList slist = new ArrayList(); + IWireframeShape barb = target.createWireframeShape(false, iDescriptor); + IShadedShape flags = target.createShadedShape(false, iDescriptor, false); + if ( vect.hasBackgroundMask() ) { + mask = target.createWireframeShape(false, iDescriptor); + RGB bg = backgroundColor.getColor(BGColorMode.EDITOR); + bgColor = new Color(bg.red, bg.green, bg.blue); + } + + /* + * Get color for creating displayables. + */ + Color dspClr = getDisplayColor( vect.getColor() ); + + /* + * CHANGED: these 2 lines changed + */ + double[] start = { vect.getLocation().x, vect.getLocation().y, 0.0 }; + //double[] start = iDescriptor.worldToPixel(tmp); + + /* + * If calm wind, draw circle + */ + if ( vect.getSpeed() < 0.5 ) { + double[][] pts = calculateCircle(start,sfactor*0.1); + if ( vect.hasBackgroundMask() ) { + mask.addLineSegment(pts); + mask.compile(); + slist.add( new LineDisplayElement(mask, bgColor, vect.getLineWidth() + (float)deviceScale) ); + } + barb.addLineSegment(pts); + barb.compile(); + slist.add( new LineDisplayElement(barb, dspClr, vect.getLineWidth()) ); + return slist; + } + + /* + * Compute the number of flags, whole barbs and half barbs + * needed to represent the wind speed. + */ + int speed = (int)Math.floor(vect.getSpeed() + 2.5); + int numflags = speed / 50; + int remainder = speed % 50; + int numbarbs = remainder / 10; + remainder = remainder % 10; + int halfbarbs = remainder / 5; + + double MAX_SEGMENTS = 6.0; // Maximum number of segments on original size barb + int numsegs = (2 * numflags) + numbarbs + halfbarbs; + double segmentSpacing = sfactor / MAX_SEGMENTS; + double windLength = segmentSpacing * Math.max( MAX_SEGMENTS, numsegs); + double barbLength = sfactor /3.0; + + /* + * find the end point of the wind barb + */ + //CHANGED:this line changed + double angle = -90.0 + vect.getDirection(); + double[] end = new double[3]; + end[0] = start[0] + (windLength * Math.cos(Math.toRadians(angle)) ); + end[1] = start[1] + (windLength * Math.sin(Math.toRadians(angle)) ); + end[2] = 0.0; + //System.out.println("X0="+start[0]+" Y0="+start[1]+" X1="+end[0]+" Y1="+ end[1]); + + barb.addLineSegment(new double[][] {start, end}); + if ( vect.hasBackgroundMask() ) mask.addLineSegment(new double[][] {start, end}); + + /* + * Create a LengthIndexedLine used to reference points along the path + * at specific distances + */ + LineString[] ls = toLineString(new Coordinate[] {new Coordinate(start[0],start[1]), + new Coordinate(end[0], end[1]) } ); + LengthIndexedLine lil = new LengthIndexedLine(ls[0]); + double currentLoc = lil.getEndIndex(); // start from tail end + + //TODO - orientation issues + double BARB_ANGLE = 70.0; + double barbAngle = angle + BARB_ANGLE; + if ( vect.getLocation().y < 0.0 ) barbAngle = angle - BARB_ANGLE; + double cosineBarbAngle = Math.cos(Math.toRadians(barbAngle)); + double sineBarbAngle = Math.sin(Math.toRadians(barbAngle)); + + /* + * Process flags + */ + for ( int j=0; j createDisplayElements(IVector vect, + PaintProperties paintProps) { + setScales(paintProps); + + ArrayList slist = createWindBarb(vect); + return slist; + } + +} diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpResourceHandler.java b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpResourceHandler.java index 05a66c6230..8b1f4444f1 100644 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpResourceHandler.java +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpResourceHandler.java @@ -351,12 +351,15 @@ public class NsharpResourceHandler { int stnIndex = stnElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(stnIndex).get(currentTimeElementListIndex).get(currentSndElementListIndex); if(stnTmElm!=null){ - stnTmElm.setCompColorIndex(colorIndex++); + stnTmElm.setCompColorIndex(colorIndex); + //if(colorIndex > NsharpConstants.LINE_COMP10) + // colorIndex = NsharpConstants.LINE_COMP1; + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; } } - } setCurSndProfileProp(); setCurrentSoundingLayerInfo(); resetData(); @@ -387,12 +390,15 @@ public class NsharpResourceHandler { int sndIndex = sndElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(currentStnElementListIndex).get(currentTimeElementListIndex).get(sndIndex); if(stnTmElm!=null){ - stnTmElm.setCompColorIndex(colorIndex++); + stnTmElm.setCompColorIndex(colorIndex); + //if(colorIndex > NsharpConstants.LINE_COMP10) + // colorIndex = NsharpConstants.LINE_COMP1; + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; } } - } setCurSndProfileProp(); setCurrentSoundingLayerInfo(); resetData(); @@ -425,12 +431,15 @@ public class NsharpResourceHandler { int tmIndex = timeElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(currentStnElementListIndex).get(tmIndex).get(currentSndElementListIndex); if(stnTmElm!=null){ - stnTmElm.setCompColorIndex(colorIndex++); + stnTmElm.setCompColorIndex(colorIndex); + //if(colorIndex > NsharpConstants.LINE_COMP10) + // colorIndex = NsharpConstants.LINE_COMP1; + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; } } - } setCurSndProfileProp(); setCurrentSoundingLayerInfo(); resetData(); @@ -1201,6 +1210,9 @@ public class NsharpResourceHandler { currentInsetPage = 1; currentParcel = NsharpNativeConstants.PARCELTYPE_MOST_UNSTABLE; currentParcelLayerPressure = NsharpNativeConstants.MU_LAYER; + currentTimeElementListIndex = -1; + currentStnElementListIndex = -1; + currentSndElementListIndex = -1; resetData(); } @@ -1409,12 +1421,12 @@ public class NsharpResourceHandler { Set keyset= new HashSet(soundMap.keySet()); for(String key: keyset) { List sndLy = soundMap.remove(key); - String newkey= key.replace("NAMS", "GOOGLE"); + String newkey= key.replace("NCUAIR", "gpduair"); //String newkey= key.replace("GFSS", "NAMS"); - //newkey = newkey.replace("KSLN", "KFSD"); + //String newkey = key.replace("OAK", "KFSD"); soundMap.put(newkey, sndLy); } - stnInfo.setSndType(stnInfo.getSndType().replace("NAMS", "GOOGLE")); + stnInfo.setSndType(stnInfo.getSndType().replace("NCUAIR", "gpduair")); //stnInfo.setSndType(stnInfo.getSndType().replace("GFSS", "NAMS")); }//*/ @@ -1803,6 +1815,9 @@ public class NsharpResourceHandler { case FIRST: //the oldest time, set to dataTimelineList.length, so in while loop, it starts from dataTimelineList.length-1 targetIndex = timeElementList.size(); break; + default: + break; + } int counter=0; @@ -1824,6 +1839,8 @@ public class NsharpResourceHandler { targetIndex--; targetIndex = targetIndex % this.timeElementList.size(); break; + default: + break; } counter++; if(counter >= timeElementList.size()) @@ -1860,12 +1877,15 @@ public class NsharpResourceHandler { int stnIndex = stnElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(stnIndex).get(targetIndex).get(currentSndElementListIndex); if(stnTmElm != null){ - stnTmElm.setCompColorIndex(colorIndex++); + stnTmElm.setCompColorIndex(colorIndex); + //if(colorIndex > NsharpConstants.LINE_COMP10) + // colorIndex = NsharpConstants.LINE_COMP1; + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; } } - } //no matter we find current stn or not //we should get out of here break; @@ -1897,12 +1917,12 @@ public class NsharpResourceHandler { continue; int sndIndex = sndElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(currentStnElementListIndex).get(targetIndex).get(sndIndex); - if(stnTmElm !=null){ - stnTmElm.setCompColorIndex(colorIndex++); + if(stnTmElm!=null){ + stnTmElm.setCompColorIndex(colorIndex); + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; - - } } } //no matter we find current snd type for this stn or not @@ -1943,6 +1963,9 @@ public class NsharpResourceHandler { currentStnElementListIndex++; currentStnElementListIndex = currentStnElementListIndex % this.stnElementList.size(); break; + default: + break; + } counter++; //System.out.println("counter = "+ counter); @@ -1981,14 +2004,15 @@ public class NsharpResourceHandler { continue; int tmIndex = timeElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(currentStnElementListIndex).get(tmIndex).get(currentSndElementListIndex); - if(stnTmElm != null){ - stnTmElm.setCompColorIndex(colorIndex++); + if(stnTmElm!=null){ + stnTmElm.setCompColorIndex(colorIndex); + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; } } - } //no matter we find current time line for this stn or not //we should get out of here break; @@ -2020,12 +2044,12 @@ public class NsharpResourceHandler { continue; int sndIndex = sndElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(currentStnElementListIndex).get(currentTimeElementListIndex).get(sndIndex); - if(stnTmElm !=null){ - stnTmElm.setCompColorIndex(colorIndex++); + if(stnTmElm!=null){ + stnTmElm.setCompColorIndex(colorIndex); + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; - - } } } //no matter we find current snd type for this stn or not @@ -2065,6 +2089,9 @@ public class NsharpResourceHandler { currentSndElementListIndex++; currentSndElementListIndex = currentSndElementListIndex % this.sndElementList.size(); break; + default: + break; + } counter++; //System.out.println("counter = "+ counter); @@ -2103,12 +2130,12 @@ public class NsharpResourceHandler { continue; int tmIndex = timeElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(currentStnElementListIndex).get(tmIndex).get(currentSndElementListIndex); - if(stnTmElm != null){ - stnTmElm.setCompColorIndex(colorIndex++); + if(stnTmElm!=null){ + stnTmElm.setCompColorIndex(colorIndex); + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; - - } } } //no matter we find current time line for this stn or not @@ -2140,11 +2167,13 @@ public class NsharpResourceHandler { for(NsharpOperationElement elm: stnElementList) { int stnIndex = stnElementList.indexOf(elm); NsharpSoundingElementStateProperty stnTmElm = stnTimeSndTable.get(stnIndex).get(currentTimeElementListIndex).get(currentSndElementListIndex); - if(stnTmElm != null){ - stnTmElm.setCompColorIndex(colorIndex++); + if(stnTmElm!=null){ + stnTmElm.setCompColorIndex(colorIndex); + } + colorIndex++; if(colorIndex > NsharpConstants.LINE_COMP10) colorIndex = NsharpConstants.LINE_COMP1; - } + } } //no matter we find current stn or not diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpSkewTPaneResource.java b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpSkewTPaneResource.java index f14d508c19..efe0aebd34 100644 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpSkewTPaneResource.java +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpSkewTPaneResource.java @@ -861,7 +861,8 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{ Color[] colors = new Color[1]; Color color = new Color(icolor.red, icolor.green, icolor.blue); colors[0]= color; - DisplayElementFactory df = new DisplayElementFactory (target, this.descriptor); + //DisplayElementFactory df = new DisplayElementFactory (target, this.descriptor); + NsharpDisplayElementFactory df = new NsharpDisplayElementFactory (target, this.descriptor); ArrayList elements = new ArrayList (); float wbSize = graphConfigProperty.getWindBarbSize(); @@ -909,7 +910,6 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{ Vector vect= new Vector(); vect.setVectorType(VectorType.WIND_BARB); vect.setArrowHeadSize(1.0); - dir= (dir+180.0f)%360.0f; vect.setDirection(dir); vect.setSpeed(spd); vect.setSizeScale(curWbSize); diff --git a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpTimeStnPaneResource.java b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpTimeStnPaneResource.java index 14894464e5..3156ddae86 100644 --- a/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpTimeStnPaneResource.java +++ b/ncep/gov.noaa.nws.ncep.ui.nsharp/src/gov/noaa/nws/ncep/ui/nsharp/display/rsc/NsharpTimeStnPaneResource.java @@ -551,7 +551,7 @@ public class NsharpTimeStnPaneResource extends NsharpAbstractPaneResource{ if(numStnToShow <1) numStnToShow=1; } - int startIndex = (rscHandler.getCurStnIdPage()-1) * numStnToShow; + int startIndex = (rscHandler.getCurSndPage()-1) * numStnToShow; if(startIndex<0) startIndex =0; int colorIndex; diff --git a/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/attrdialog/SigmetAttrDlg.java b/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/attrdialog/SigmetAttrDlg.java index b5b6ccb78c..75530c0f06 100644 --- a/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/attrdialog/SigmetAttrDlg.java +++ b/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/attrdialog/SigmetAttrDlg.java @@ -99,7 +99,8 @@ import com.vividsolutions.jts.geom.Polygon; * 03/12 #676 Q. Zhou Added Issue Office dropdown list. * 08/12 #612 S. Gurung Fixed issue related to conversion of phenom Lat/Lon to prepended format * 03/13 #928 B. Yin Made the button bar smaller. - * 04/29 #977 S. Gilbert PGEN Database support + * 04/13 #977 S. Gilbert PGEN Database support + * 09/13 TTR656 J. Wu Display for INTL_SIGMET converted from VGF. * * * @author gzhang @@ -1395,9 +1396,13 @@ public class SigmetAttrDlg extends AttrDlg implements ISigmet { final Coordinate[] coors = (elSelected == null) ? null : elSelected .getPoints().toArray(new Coordinate[] {}); + /* + * Added "trim()" since SIGMETs VGFs has no "editableAttrFromLine" and it is + * defaulted as " " when converted into XML - (J. Wu). + */ if (coors != null) { if (editableAttrFromLine == null - || editableAttrFromLine.equals("")) { + || editableAttrFromLine.trim().equals("")) { coorsLatLon.append(getLatLonStringPrepend2(coors, AREA.equals(((Sigmet) elSelected).getType()))); resetText(coorsLatLon.toString(), txtInfo); diff --git a/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/display/DisplayElementFactory.java b/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/display/DisplayElementFactory.java index 55390deefe..96f2d217a6 100644 --- a/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/display/DisplayElementFactory.java +++ b/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/display/DisplayElementFactory.java @@ -7,6 +7,50 @@ */ package gov.noaa.nws.ncep.ui.pgen.display; +import gov.noaa.nws.ncep.common.staticdata.SPCCounty; +import gov.noaa.nws.ncep.edex.common.stationTables.Station; +import gov.noaa.nws.ncep.ui.pgen.PgenUtil; +import gov.noaa.nws.ncep.ui.pgen.attrdialog.vaadialog.CcfpAttrDlg; +import gov.noaa.nws.ncep.ui.pgen.contours.ContourCircle; +import gov.noaa.nws.ncep.ui.pgen.contours.ContourLine; +import gov.noaa.nws.ncep.ui.pgen.contours.ContourMinmax; +import gov.noaa.nws.ncep.ui.pgen.display.ArrowHead.ArrowHeadType; +import gov.noaa.nws.ncep.ui.pgen.display.CornerPatternApplicator.CornerPattern; +import gov.noaa.nws.ncep.ui.pgen.display.FillPatternList.FillPattern; +import gov.noaa.nws.ncep.ui.pgen.display.IAvnText.AviationTextType; +import gov.noaa.nws.ncep.ui.pgen.display.IText.DisplayType; +import gov.noaa.nws.ncep.ui.pgen.display.IText.FontStyle; +import gov.noaa.nws.ncep.ui.pgen.display.IText.TextJustification; +import gov.noaa.nws.ncep.ui.pgen.display.IText.TextRotation; +import gov.noaa.nws.ncep.ui.pgen.display.PatternSegment.PatternType; +import gov.noaa.nws.ncep.ui.pgen.elements.AbstractDrawableComponent; +import gov.noaa.nws.ncep.ui.pgen.elements.Arc; +import gov.noaa.nws.ncep.ui.pgen.elements.ComboSymbol; +import gov.noaa.nws.ncep.ui.pgen.elements.DECollection; +import gov.noaa.nws.ncep.ui.pgen.elements.DrawableElement; +import gov.noaa.nws.ncep.ui.pgen.elements.Line; +import gov.noaa.nws.ncep.ui.pgen.elements.Symbol; +import gov.noaa.nws.ncep.ui.pgen.elements.SymbolLocationSet; +import gov.noaa.nws.ncep.ui.pgen.elements.Text; +import gov.noaa.nws.ncep.ui.pgen.elements.tcm.ITcm; +import gov.noaa.nws.ncep.ui.pgen.elements.tcm.ITcmFcst; +import gov.noaa.nws.ncep.ui.pgen.elements.tcm.ITcmWindQuarter; +import gov.noaa.nws.ncep.ui.pgen.elements.tcm.TcmFcst; +import gov.noaa.nws.ncep.ui.pgen.gfa.Gfa; +import gov.noaa.nws.ncep.ui.pgen.gfa.GfaClip; +import gov.noaa.nws.ncep.ui.pgen.gfa.IGfa; +import gov.noaa.nws.ncep.ui.pgen.sigmet.AbstractSigmet; +import gov.noaa.nws.ncep.ui.pgen.sigmet.CcfpInfo; +import gov.noaa.nws.ncep.ui.pgen.sigmet.ISigmet; +import gov.noaa.nws.ncep.ui.pgen.sigmet.SigmetInfo; +import gov.noaa.nws.ncep.ui.pgen.sigmet.VaaInfo; +import gov.noaa.nws.ncep.ui.pgen.sigmet.Volcano; +import gov.noaa.nws.ncep.ui.pgen.tca.BPGeography; +import gov.noaa.nws.ncep.ui.pgen.tca.ITca; +import gov.noaa.nws.ncep.ui.pgen.tca.TropicalCycloneAdvisory; +import gov.noaa.nws.ncep.ui.pgen.tca.WaterBreakpoint; +import gov.noaa.nws.ncep.viz.common.SnapUtil; + import java.awt.Color; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; @@ -28,45 +72,6 @@ import org.eclipse.swt.graphics.Rectangle; import org.geotools.referencing.GeodeticCalculator; import org.geotools.referencing.datum.DefaultEllipsoid; -import gov.noaa.nws.ncep.common.staticdata.SPCCounty; -import gov.noaa.nws.ncep.edex.common.stationTables.Station; -import gov.noaa.nws.ncep.ui.pgen.PgenUtil; -import gov.noaa.nws.ncep.ui.pgen.display.CornerPatternApplicator.CornerPattern; -import gov.noaa.nws.ncep.ui.pgen.display.FillPatternList.FillPattern; -import gov.noaa.nws.ncep.ui.pgen.display.IAvnText.AviationTextType; -import gov.noaa.nws.ncep.ui.pgen.display.IText.DisplayType; -import gov.noaa.nws.ncep.ui.pgen.display.IText.FontStyle; -import gov.noaa.nws.ncep.ui.pgen.display.IText.TextJustification; -import gov.noaa.nws.ncep.ui.pgen.display.IText.TextRotation; -import gov.noaa.nws.ncep.ui.pgen.display.ArrowHead.ArrowHeadType; -import gov.noaa.nws.ncep.ui.pgen.elements.AbstractDrawableComponent; -import gov.noaa.nws.ncep.ui.pgen.elements.Arc; -import gov.noaa.nws.ncep.ui.pgen.elements.ComboSymbol; -import gov.noaa.nws.ncep.ui.pgen.elements.DECollection; -import gov.noaa.nws.ncep.ui.pgen.elements.DrawableElement; -import gov.noaa.nws.ncep.ui.pgen.elements.Line; -import gov.noaa.nws.ncep.ui.pgen.elements.Symbol; -import gov.noaa.nws.ncep.ui.pgen.elements.SymbolLocationSet; -import gov.noaa.nws.ncep.ui.pgen.elements.Text; -import gov.noaa.nws.ncep.ui.pgen.elements.tcm.ITcm; -import gov.noaa.nws.ncep.ui.pgen.elements.tcm.ITcmFcst; -import gov.noaa.nws.ncep.ui.pgen.elements.tcm.TcmFcst; -import gov.noaa.nws.ncep.ui.pgen.elements.tcm.ITcmWindQuarter; -import gov.noaa.nws.ncep.ui.pgen.gfa.Gfa; -import gov.noaa.nws.ncep.ui.pgen.gfa.GfaClip; -import gov.noaa.nws.ncep.ui.pgen.gfa.IGfa; -import gov.noaa.nws.ncep.ui.pgen.tca.BPGeography; -import gov.noaa.nws.ncep.ui.pgen.tca.ITca; -import gov.noaa.nws.ncep.ui.pgen.tca.TropicalCycloneAdvisory; -import gov.noaa.nws.ncep.ui.pgen.tca.WaterBreakpoint; -import gov.noaa.nws.ncep.ui.pgen.sigmet.*;//SigmetInfo; -import gov.noaa.nws.ncep.ui.pgen.attrdialog.vaadialog.CcfpAttrDlg; -import gov.noaa.nws.ncep.ui.pgen.display.PatternSegment.PatternType; -import gov.noaa.nws.ncep.ui.pgen.contours.ContourLine; -import gov.noaa.nws.ncep.ui.pgen.contours.ContourMinmax; -import gov.noaa.nws.ncep.ui.pgen.contours.ContourCircle; -import gov.noaa.nws.ncep.viz.common.SnapUtil; - import com.raytheon.uf.common.geospatial.util.WorldWrapCorrector; import com.raytheon.uf.viz.core.DrawableString; import com.raytheon.uf.viz.core.IExtent; @@ -76,21 +81,19 @@ import com.raytheon.uf.viz.core.IGraphicsTarget.TextStyle; import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.PixelExtent; import com.raytheon.uf.viz.core.data.IRenderedImageCallback; -import com.raytheon.uf.viz.core.data.prep.IODataPreparer; import com.raytheon.uf.viz.core.drawables.IDescriptor; import com.raytheon.uf.viz.core.drawables.IFont; +import com.raytheon.uf.viz.core.drawables.IFont.Style; import com.raytheon.uf.viz.core.drawables.IImage; import com.raytheon.uf.viz.core.drawables.IShadedShape; import com.raytheon.uf.viz.core.drawables.IWireframeShape; import com.raytheon.uf.viz.core.drawables.PaintProperties; -import com.raytheon.uf.viz.core.drawables.IFont.Style; import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.map.IMapDescriptor; import com.raytheon.viz.core.rsc.jts.JTSCompiler; import com.raytheon.viz.core.rsc.jts.JTSCompiler.PointStyle; import com.raytheon.viz.ui.color.BackgroundColor; import com.raytheon.viz.ui.color.IBackgroundColorChangedListener.BGColorMode; - import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; @@ -105,6 +108,7 @@ import com.vividsolutions.jts.linearref.LengthLocationMap; import com.vividsolutions.jts.linearref.LinearLocation; import com.vividsolutions.jts.linearref.LocationIndexedLine; import com.vividsolutions.jts.operation.distance.DistanceOp; +//SigmetInfo; /** * This factory class is used to create IDisplayable elements from IMultiPoint @@ -132,6 +136,8 @@ import com.vividsolutions.jts.operation.distance.DistanceOp; * 11/12 #901/917 J. Wu Set the symbol in GFA text box in proper location/size * 05/13 Chin Chen use IDescriptor instead of IMapDescriptor for used by Nsharp wind barb drawing * 07/13 #988 Archana added createDisplayElements() to add all symbols in the same color to a single wire-frame. + * 09/23/13 Chin Chen changed several private variables/methods to protected, for NsharpDisplayElementFactory now extend from + * this class * * * @author sgilbert @@ -147,12 +153,12 @@ public class DisplayElementFactory { /** * Graphics Target used to create the Wireframe and Shaded shapes */ - private IGraphicsTarget target; + protected IGraphicsTarget target; /** * Map Descriptor used for Lat/Lon to pixel coordinate transformations */ - private IDescriptor/*IMapDescriptor*/ iDescriptor; + protected IDescriptor/*IMapDescriptor*/ iDescriptor; private GeometryFactory gf; /** @@ -167,7 +173,7 @@ public class DisplayElementFactory { private IWireframeShape sym; private ILine elem; - private double deviceScale = 25.0; // default scale factor for GL device + protected double deviceScale = 25.0; // default scale factor for GL device private double symbolScale = 0.65; private double screenToExtent = 1.0; double screenToWorldRatio = 1.0; @@ -181,7 +187,7 @@ public class DisplayElementFactory { private Color layerColor = null; private Boolean layerFilled = false; - private BackgroundColor backgroundColor = BackgroundColor.getActivePerspectiveInstance(); + protected BackgroundColor backgroundColor = BackgroundColor.getActivePerspectiveInstance(); class SymbolImageCallback implements IRenderedImageCallback { private String patternName; @@ -3106,7 +3112,7 @@ public class DisplayElementFactory { * @param coords - input data points * @return data points in new format */ - private double[][] toDouble( Coordinate[] coords) { + protected double[][] toDouble( Coordinate[] coords) { double[][] dpts = new double[coords.length][3]; @@ -3123,7 +3129,7 @@ public class DisplayElementFactory { * @param coords - input data points * @return data points in new format */ - private LineString[] toLineString ( Coordinate[] coords ) { + protected LineString[] toLineString ( Coordinate[] coords ) { LineString[] ls = new LineString[] { gf.createLineString(coords) }; return ls; @@ -3134,7 +3140,7 @@ public class DisplayElementFactory { * @param coords - input data points * @return data points in new format */ - private LineString[] toLineString ( double[][] points ) { + protected LineString[] toLineString ( double[][] points ) { Coordinate[] coords = new Coordinate[points.length]; for ( int j=0; j * @@ -1274,18 +1275,17 @@ public class ProductManageDialog extends ProductDialog { if ( confirmDlg.getReturnCode() == MessageDialog.OK ) { - PgenFileManageDialog file_dlg = null; - - if ( file_dlg == null ) { + StoreActivityDialog storeDlg = null; + if ( storeDlg == null ) { try { - file_dlg = new PgenFileManageDialog( shell, "Save" ); + storeDlg = new StoreActivityDialog( shell, "Save As" ); } catch (VizException e) { e.printStackTrace(); } } - if ( file_dlg != null ) file_dlg.open(); + if ( storeDlg != null ) storeDlg.open(); } diff --git a/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/tools/PgenSelectHandler.java b/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/tools/PgenSelectHandler.java index de6936fefb..e4019c3914 100644 --- a/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/tools/PgenSelectHandler.java +++ b/ncep/gov.noaa.nws.ncep.ui.pgen/src/gov/noaa/nws/ncep/ui/pgen/tools/PgenSelectHandler.java @@ -74,6 +74,9 @@ import com.vividsolutions.jts.geom.Point; * 04/13 #927 B. Yin Moved from the PgenSelectingTool class * 05/13 #994 J. Wu Removed "DEL" - make it same as "Ctrl+X" * 07/13 ? J. Wu Set the "otherTextLastUsed for GFA. + * 09/13 ? J. Wu Call buildVortext for GFA when mouse is + * down since GFA converted from VGF does not + * have vorText set. * * * @@ -406,6 +409,10 @@ public class PgenSelectHandler extends InputHandlerDefaultImpl { } else if(attrDlg instanceof GfaAttrDlg){ ((GfaAttrDlg)attrDlg).setOtherTextLastUsed( elSelected.getForecastHours() ); ((GfaAttrDlg)attrDlg).redrawHazardSpecificPanel(); + if ( ((Gfa)elSelected).getGfaVorText() == null || + ((Gfa)elSelected).getGfaVorText().length() < 1 ) { + ((Gfa)elSelected).setGfaVorText( Gfa.buildVorText( (Gfa)elSelected ) ); + } attrDlg.setAttrForDlg( elSelected ); ((GfaAttrDlg)attrDlg).enableMoveTextBtn(true); } diff --git a/ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/RADAR/LocalRadar/LocalRadar.xml b/ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/RADAR/LocalRadar/LocalRadar.xml index 502a6ed535..83e44106b1 100644 --- a/ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/RADAR/LocalRadar/LocalRadar.xml +++ b/ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/RADAR/LocalRadar/LocalRadar.xml @@ -5,7 +5,7 @@ RADAR pluginName=radar -format=Radial,Raster,Graphic +format=Radial,Raster legendColor=RGB {200, 200, 200} LocalRadar diff --git a/rpms/awips2.qpid/0.18/SOURCES/wrapper.conf b/rpms/awips2.qpid/0.18/SOURCES/wrapper.conf index d90ec22fb0..28e0ec746d 100644 --- a/rpms/awips2.qpid/0.18/SOURCES/wrapper.conf +++ b/rpms/awips2.qpid/0.18/SOURCES/wrapper.conf @@ -47,7 +47,12 @@ wrapper.search.java.classpath.2=${QPID_HOME}/lib/opt/qpid-deps # garbage collection settings wrapper.java.additional.gc.1=-XX:+UseConcMarkSweepGC -wrapper.java.additional.gc.2=-XX:+HeapDumpOnOutOfMemoryError +wrapper.java.additional.gc.2=-XX:+CMSIncrementalMode +wrapper.java.additional.gc.3=-XX:NewSize=400m +wrapper.java.additional.gc.4=-XX:MaxNewSize=400m +wrapper.java.additional.gc.5=-XX:SurvivorRatio=4 +wrapper.java.additional.gc.6=-XX:+HeapDumpOnOutOfMemoryError +wrapper.java.additional.gc.7=-XX:HeapDumpPath=/data/fxa/qpid # the main qpid java class that will be started wrapper.java.app.mainclass=org.apache.qpid.server.Main @@ -95,7 +100,7 @@ wrapper.console.format=M wrapper.logfile=${QPID_HOME}/log/qpid-wrapper-YYYYMMDD.log # Format of output for the log file. (See docs for formats) -wrapper.logfile.format=M +wrapper.logfile.format=LTM # Log Level for log file output. (See docs for log levels) wrapper.logfile.loglevel=INFO diff --git a/rpms/build/i386/build.sh b/rpms/build/i386/build.sh index 7c73b99ac6..c06f7c3002 100644 --- a/rpms/build/i386/build.sh +++ b/rpms/build/i386/build.sh @@ -85,28 +85,28 @@ if [ "${2}" = "-nobinlightning" ]; then fi if [ "${1}" = "-python-qpid" ]; then -# buildRPM "awips2" -# buildRPM "awips2-python-qpid" -# buildRPM "awips2-python" -# buildRPM "awips2-python-cherrypy" + buildRPM "awips2" + buildRPM "awips2-python-qpid" + buildRPM "awips2-python" + buildRPM "awips2-python-cherrypy" buildRPM "awips2-python-dynamicserialize" -# buildRPM "awips2-python-nose" -# buildRPM "awips2-python-numpy" -# buildRPM "awips2-python-h5py" -# buildRPM "awips2-python-jimporter" -# buildRPM "awips2-python-matplotlib" -# buildRPM "awips2-python-pil" -# buildRPM "awips2-python-pmw" -# buildRPM "awips2-python-pupynere" -# buildRPM "awips2-python-scientific" -# buildRPM "awips2-python-scipy" -# buildRPM "awips2-python-tables" -# buildRPM "awips2-python-thrift" -# buildRPM "awips2-python-tpg" -# buildRPM "awips2-python-ufpy" -# buildRPM "awips2-python-werkzeug" -# buildRPM "awips2-python-pygtk" -# buildRPM "awips2-python-pycairo" + buildRPM "awips2-python-nose" + buildRPM "awips2-python-numpy" + buildRPM "awips2-python-h5py" + buildRPM "awips2-python-jimporter" + buildRPM "awips2-python-matplotlib" + buildRPM "awips2-python-pil" + buildRPM "awips2-python-pmw" + buildRPM "awips2-python-pupynere" + buildRPM "awips2-python-scientific" + buildRPM "awips2-python-scipy" + buildRPM "awips2-python-tables" + buildRPM "awips2-python-thrift" + buildRPM "awips2-python-tpg" + buildRPM "awips2-python-ufpy" + buildRPM "awips2-python-werkzeug" + buildRPM "awips2-python-pygtk" + buildRPM "awips2-python-pycairo" if [ $? -ne 0 ]; then exit 1 fi @@ -360,11 +360,9 @@ if [ "${1}" = "-ade" ]; then fi if [ "${1}" = "-viz" ]; then - buildRPM "awips2" buildRPM "awips2-common-base" - # buildRPM "awips2-rcm" + buildRPM "awips2-rcm" buildRPM "awips2-hydroapps-shared" - # buildRPM "awips2-notification" buildCAVE if [ $? -ne 0 ]; then exit 1 @@ -375,13 +373,11 @@ if [ "${1}" = "-viz" ]; then fi if [ "${1}" = "-edex" ]; then - #buildRPM "awips2" - #buildRPM "awips2-common-base" + buildRPM "awips2-common-base" buildRPM "awips2-adapt-native" - #buildRPM "awips2-python-qpid" - # buildRPM "awips2-cli" buildRPM "awips2-gfesuite-client" buildRPM "awips2-gfesuite-server" + buildRPM "awips2-edex-environment" # buildRPM "awips2-ncep-database" # buildRPM "awips2-python-dynamicserialize" buildEDEX @@ -417,6 +413,19 @@ if [ "${1}" = "-ldm" ]; then exit 0 fi +if [ "${1}" = "-awips2" ]; then + buildRPM "awips2" + + exit 0 +fi + +# Use the custom flag for selecting specific rpms to build +if [ "${1}" = "-custom" ]; then + #buildRPM "awips2-ldm" + + exit 0 +fi + if [ "${1}" = "-package" ]; then repository_directory="awips2-repository-${AWIPSII_VERSION}-${AWIPSII_RELEASE}" if [ -d ${WORKSPACE}/${repository_directory} ]; then diff --git a/rpms/build/i386/build.sh-keep-10032013 b/rpms/build/i386/build.sh-keep-10032013 new file mode 100644 index 0000000000..31dd6470c1 --- /dev/null +++ b/rpms/build/i386/build.sh-keep-10032013 @@ -0,0 +1,456 @@ +#!/bin/bash + +function buildRPM() +{ + # Arguments: + # ${1} == the name of the rpm. + lookupRPM "${1}" + if [ $? -ne 0 ]; then + echo "ERROR: '${1}' is not a recognized AWIPS II RPM." + exit 1 + fi + + /usr/bin/rpmbuild -ba \ + --define '_topdir %(echo ${AWIPSII_TOP_DIR})' \ + --define '_baseline_workspace %(echo ${WORKSPACE})' \ + --define '_uframe_eclipse %(echo ${UFRAME_ECLIPSE})' \ + --define '_awipscm_share %(echo ${AWIPSCM_SHARE})' \ + --define '_build_root %(echo ${AWIPSII_BUILD_ROOT})' \ + --define '_component_version %(echo ${AWIPSII_VERSION})' \ + --define '_component_release %(echo ${AWIPSII_RELEASE})' \ + --define '_component_build_date %(echo ${COMPONENT_BUILD_DATE})' \ + --define '_component_build_time %(echo ${COMPONENT_BUILD_TIME})' \ + --define '_component_build_system %(echo ${COMPONENT_BUILD_SYSTEM})' \ + --buildroot ${AWIPSII_BUILD_ROOT} \ + ${RPM_SPECIFICATION}/component.spec + if [ $? -ne 0 ]; then + echo "ERROR: Failed to build RPM ${1}." + exit 1 + fi + + return 0 +} + +# This script will build all of the 32-bit rpms. +# Ensure that we are on a machine with the correct architecture. + +architecture=`uname -i` +if [ ! "${architecture}" = "i386" ]; then + echo "ERROR: This build can only be performed on a 32-bit Operating System." + exit 1 +fi + +# Determine which directory we are running from. +path_to_script=`readlink -f $0` +dir=$(dirname $path_to_script) + +common_dir=`cd ${dir}/../common; pwd;` +if [ $? -ne 0 ]; then + echo "ERROR: Unable to find the common functions directory." + exit 1 +fi +# source the common functions. +source ${common_dir}/lookupRPM.sh +if [ $? -ne 0 ]; then + echo "ERROR: Unable to source the common functions." + exit 1 +fi +source ${common_dir}/usage.sh +if [ $? -ne 0 ]; then + echo "ERROR: Unable to source the common functions." + exit 1 +fi +source ${common_dir}/rpms.sh +if [ $? -ne 0 ]; then + echo "ERROR: Unable to source the common functions." + exit 1 +fi +source ${common_dir}/systemInfo.sh +if [ $? -ne 0 ]; then + echo "ERROR: Unable to retrieve the system information." + exit 1 +fi + +# prepare the build environment. +source ${dir}/buildEnvironment.sh +if [ $? -ne 0 ]; then + echo "ERROR: Unable to prepare the build environment." + exit 1 +fi + +export LIGHTNING=true +# Determine if the optional '-nobinlightning' argument has been specified. +if [ "${2}" = "-nobinlightning" ]; then + LIGHTNING=false +fi + +if [ "${1}" = "-python-qpid" ]; then + buildRPM "awips2" + buildRPM "awips2-python-qpid" + buildRPM "awips2-python" + buildRPM "awips2-python-cherrypy" + buildRPM "awips2-python-dynamicserialize" + buildRPM "awips2-python-nose" + buildRPM "awips2-python-numpy" + buildRPM "awips2-python-h5py" + buildRPM "awips2-python-jimporter" + buildRPM "awips2-python-matplotlib" + buildRPM "awips2-python-pil" + buildRPM "awips2-python-pmw" + buildRPM "awips2-python-pupynere" + buildRPM "awips2-python-scientific" + buildRPM "awips2-python-scipy" + buildRPM "awips2-python-tables" + buildRPM "awips2-python-thrift" + buildRPM "awips2-python-tpg" + buildRPM "awips2-python-ufpy" + buildRPM "awips2-python-werkzeug" + buildRPM "awips2-python-pygtk" + buildRPM "awips2-python-pycairo" + if [ $? -ne 0 ]; then + exit 1 + fi + + buildQPID + if [ $? -ne 0 ]; then + exit 1 + fi + + #buildRPM "awips2-ant" + #unpackHttpdPypies + if [ $? -ne 0 ]; then + exit 1 + fi + #buildRPM "awips2-httpd-pypies" + #buildRPM "awips2-java" + #buildRPM "awips2-ldm" + #buildRPM "awips2-tools" + buildRPM "awips2-python-shapely" + + exit 0 +fi + +if [ "${1}" = "-postgres" ]; then + buildRPM "awips2-postgres" + buildRPM "awips2-database-server-configuration" + buildRPM "awips2-database-standalone-configuration" + buildRPM "awips2-database" + buildRPM "awips2-maps-database" + buildRPM "awips2-pgadmin3" + buildRPM "awips2-data.hdf5-gfe.climo" + buildRPM "awips2-data.hdf5-topo" + buildRPM "awips2-notification" + buildRPM "awips2-tools" + + exit 0 +fi + +if [ "${1}" = "-delta" ]; then + buildRPM "awips2-common-base" + buildCAVE + if [ $? -ne 0 ]; then + exit 1 + fi + buildRPM "awips2-alertviz" + buildEDEX + if [ $? -ne 0 ]; then + exit 1 + fi + + buildRPM "awips2" + buildRPM "awips2-ncep-database" + buildRPM "awips2-gfesuite-client" + buildRPM "awips2-gfesuite-server" + buildRPM "awips2-python" + buildRPM "awips2-python-dynamicserialize" + buildRPM "awips2-python-ufpy" + buildRPM "awips2-python-qpid" + + buildRPM "awips2-adapt-native" + buildRPM "awips2-aviation-shared" + buildRPM "awips2-cli" + buildRPM "awips2-database" + buildRPM "awips2-database-server-configuration" + buildRPM "awips2-database-standalone-configuration" + buildRPM "awips2-data.hdf5-gfe.climo" + buildRPM "awips2-hydroapps-shared" + buildRPM "awips2-localapps-environment" + buildRPM "awips2-maps-database" + buildRPM "awips2-notification" + buildRPM "awips2-pypies" + buildRPM "awips2-data.hdf5-topo" + buildRPM "awips2-data.gfe" + buildRPM "awips2-rcm" + buildRPM "awips2-edex-environment" + buildLocalizationRPMs + if [ $? -ne 0 ]; then + exit 1 + fi + + exit 0 +fi + +if [ "${1}" = "-full" ]; then + buildRPM "awips2-common-base" + buildCAVE + if [ $? -ne 0 ]; then + exit 1 + fi + buildRPM "awips2-alertviz" + buildEDEX + if [ $? -ne 0 ]; then + exit 1 + fi + buildRPM "awips2-python" + buildRPM "awips2-python-cherrypy" + buildRPM "awips2-python-dynamicserialize" + buildRPM "awips2-python-h5py" + buildRPM "awips2-python-jimporter" + buildRPM "awips2-python-matplotlib" + buildRPM "awips2-python-nose" + buildRPM "awips2-python-numpy" + buildRPM "awips2-python-pil" + buildRPM "awips2-python-pmw" + buildRPM "awips2-python-pupynere" + buildRPM "awips2-python-qpid" + buildRPM "awips2-python-scientific" + buildRPM "awips2-python-scipy" + buildRPM "awips2-python-tables" + buildRPM "awips2-python-thrift" + buildRPM "awips2-python-tpg" + buildRPM "awips2-python-ufpy" + buildRPM "awips2-python-werkzeug" + buildRPM "awips2-python-pygtk" + buildRPM "awips2-python-pycairo" + + buildRPM "awips2" + buildRPM "awips2-adapt-native" + buildRPM "awips2-aviation-shared" + buildRPM "awips2-cli" + buildRPM "awips2-database" + buildRPM "awips2-database-server-configuration" + buildRPM "awips2-database-standalone-configuration" + buildRPM "awips2-data.hdf5-gfe.climo" + buildRPM "awips2-data.gfe" + buildRPM "awips2-gfesuite-client" + buildRPM "awips2-gfesuite-server" + buildRPM "awips2-hydroapps-shared" + buildRPM "awips2-localapps-environment" + buildRPM "awips2-ncep-database" + buildRPM "awips2-maps-database" + buildRPM "awips2-notification" + buildRPM "awips2-pypies" + buildRPM "awips2-data.hdf5-topo" + buildRPM "awips2-rcm" + buildLocalizationRPMs + if [ $? -ne 0 ]; then + exit 1 + fi + + buildQPID + if [ $? -ne 0 ]; then + exit 1 + fi + + buildRPM "awips2-ant" + unpackHttpdPypies + if [ $? -ne 0 ]; then + exit 1 + fi + buildRPM "awips2-httpd-pypies" + buildJava + buildRPM "awips2-groovy" + #buildRPM "awips2-ldm" + buildRPM "awips2-postgres" + buildRPM "awips2-pgadmin3" + buildRPM "awips2-tools" + buildRPM "awips2-edex-environment" + buildRPM "awips2-openfire" + buildRPM "awips2-httpd-collaboration" + buildRPM "awips2-python-shapely" + + exit 0 +fi + +if [ "${1}" = "-ade" ]; then + buildRPM "awips2-eclipse" + buildJava + buildRPM "awips2-ant" + buildRPM "awips2-python" + buildRPM "awips2-python-cherrypy" + buildRPM "awips2-python-dynamicserialize" + buildRPM "awips2-python-h5py" + buildRPM "awips2-python-jimporter" + buildRPM "awips2-python-matplotlib" + buildRPM "awips2-python-nose" + buildRPM "awips2-python-numpy" + buildRPM "awips2-python-pil" + buildRPM "awips2-python-pmw" + buildRPM "awips2-python-pupynere" + buildRPM "awips2-python-qpid" + buildRPM "awips2-python-scientific" + buildRPM "awips2-python-scipy" + buildRPM "awips2-python-tables" + buildRPM "awips2-python-thrift" + buildRPM "awips2-python-tpg" + buildRPM "awips2-python-ufpy" + buildRPM "awips2-python-werkzeug" + buildRPM "awips2-python-pygtk" + buildRPM "awips2-python-pycairo" + buildRPM "awips2-python-shapely" + buildQPID -ade + if [ $? -ne 0 ]; then + exit 1 + fi + + # Package the ade. + # Create the containing directory. + ade_directory="awips2-ade-${AWIPSII_VERSION}-${AWIPSII_RELEASE}" + if [ -d ${WORKSPACE}/${ade_directory} ]; then + rm -rf ${WORKSPACE}/${ade_directory} + if [ $? -ne 0 ]; then + exit 1 + fi + fi + mkdir -p ${WORKSPACE}/${ade_directory} + if [ $? -ne 0 ]; then + exit 1 + fi + + # Copy the rpms to the directory. + cp -v ${AWIPSII_TOP_DIR}/RPMS/i386/* \ + ${AWIPSII_TOP_DIR}/RPMS/noarch/* \ + ${WORKSPACE}/${ade_directory} + if [ $? -ne 0 ]; then + exit 1 + fi + + awips2_ade_directory="${WORKSPACE}/rpms/awips2.ade" + # Copy the install and uninstall script to the directory. + cp -v ${awips2_ade_directory}/tar.ade/scripts/*.sh \ + ${WORKSPACE}/${ade_directory} + if [ $? -ne 0 ]; then + exit 1 + fi + + # Tar the directory. + pushd . > /dev/null 2>&1 + cd ${WORKSPACE} + tar -cvf ${ade_directory}.tar ${ade_directory} + popd > /dev/null 2>&1 + RC=$? + if [ ${RC} -ne 0 ]; then + exit 1 + fi + + exit 0 +fi + +if [ "${1}" = "-viz" ]; then + buildRPM "awips2-common-base" + buildRPM "awips2-rcm" + buildRPM "awips2-hydroapps-shared" + buildCAVE + if [ $? -ne 0 ]; then + exit 1 + fi + buildRPM "awips2-alertviz" + + exit 0 +fi + +if [ "${1}" = "-edex" ]; then + buildRPM "awips2-common-base" + buildRPM "awips2-adapt-native" + buildRPM "awips2-gfesuite-client" + buildRPM "awips2-gfesuite-server" + buildRPM "awips2-edex-environment" + # buildRPM "awips2-ncep-database" + # buildRPM "awips2-python-dynamicserialize" + buildEDEX + if [ $? -ne 0 ]; then + exit 1 + fi + + exit 0 +fi + +if [ "${1}" = "-localization" ]; then + buildLocalizationRPMs + if [ $? -ne 0 ]; then + exit 1 + fi + + exit 0 +fi + + +if [ "${1}" = "-qpid" ]; then + buildQPID + if [ $? -ne 0 ]; then + exit 1 + fi + + exit 0 +fi + +if [ "${1}" = "-ldm" ]; then + buildRPM "awips2-ldm" + + exit 0 +fi + +if [ "${1}" = "-awips2" ]; then + buildRPM "awips2" + + exit 0 +fi + +# Use the custom flag for selecting specific rpms to build +if [ "${1}" = "-custom" ]; then + #buildRPM "awips2-ldm" + + exit 0 +fi + +if [ "${1}" = "-package" ]; then + repository_directory="awips2-repository-${AWIPSII_VERSION}-${AWIPSII_RELEASE}" + if [ -d ${WORKSPACE}/${repository_directory} ]; then + rm -rf ${WORKSPACE}/${repository_directory} + if [ $? -ne 0 ]; then + exit 1 + fi + fi + mkdir -p ${WORKSPACE}/${repository_directory}/${AWIPSII_VERSION}-${AWIPSII_RELEASE} + if [ $? -ne 0 ]; then + exit 1 + fi + + cp -r ${AWIPSII_TOP_DIR}/RPMS/* \ + ${WORKSPACE}/${repository_directory}/${AWIPSII_VERSION}-${AWIPSII_RELEASE} + if [ $? -ne 0 ]; then + exit 1 + fi + + rpms_directory="${WORKSPACE}/rpms" + comps_xml="${rpms_directory}/common/yum/arch.x86/comps.xml" + cp -v ${comps_xml} ${WORKSPACE}/${repository_directory} + if [ $? -ne 0 ]; then + exit 1 + fi + + pushd . > /dev/null + cd ${WORKSPACE} + tar -cvf ${repository_directory}.tar ${repository_directory} + RC=$? + popd > /dev/null + if [ ${RC} -ne 0 ]; then + exit 1 + fi + + exit 0 +fi + + +usage +exit 0