Merge branch 'master_14.2.4' (14.2.4-7) into omaha_14.2.4

Former-commit-id: 2391bc928e8798f022c3ca5ad8a1d5619ae4e2a4
This commit is contained in:
Steve Harris 2014-09-03 15:22:00 -05:00
commit afa45bf919
48 changed files with 1852 additions and 218 deletions

View file

@ -22,41 +22,12 @@
<displayList>
<displays xsi:type="mapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="pointCapability" pointStyle="NONE" />
<capability xsi:type="labelableCapability" labelField="id" />
<capability xsi:type="magnificationCapability" magnification="1.0" />
<capability xsi:type="densityCapability" density="1.0" />
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="true" isHoverOn="false" isVisible="true" />
<resourceData xsi:type="mapResourceGroupData">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="labelableCapability" labelField="name" />
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="true" isHoverOn="false" isVisible="true">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="lpiResourceData">
<filename>cities.lpi</filename>
<mapName>Cities</mapName>
</resourceData>
</resource>
<mapName>Cities</mapName>
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="labelableCapability" labelField="name" />
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="1" />
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
@ -66,12 +37,11 @@
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="dbPointMapResourceData">
<goodnessField>prog_disc</goodnessField>
<table>mapdata.city</table>
<mapName>Cities</mapName>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -22,35 +22,6 @@
<displayList>
<displays xsi:type="mapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true" />
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="true" isHoverOn="false" isVisible="true" />
<resourceData xsi:type="mapResourceGroupData">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="1" />
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="labelableCapability" labelField="name"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="true"
isHoverOn="false" isVisible="true">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="dbPointMapResourceData">
<table>mapdata.airport</table>
<mapName>Airports</mapName>
</resourceData>
</resource>
<resource>
<loadProperties>
<capabilities>
@ -68,9 +39,6 @@
<mapName>Airports</mapName>
</resourceData>
</resource>
<mapName>Airports</mapName>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -22,37 +22,6 @@
<displayList>
<displays xsi:type="mapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true" />
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="true" isHoverOn="false" isVisible="true" />
<resourceData xsi:type="mapResourceGroupData">
<resource>
<loadProperties>
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="1" />
<capability xsi:type="colorableCapability" colorAsString="#9b9b9b" />
<capability xsi:type="pointCapability" pointStyle="NONE"/>
<capability xsi:type="labelableCapability" labelField="id"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="true" isHoverOn="false"
isVisible="true">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0" />
</properties>
<resourceData xsi:type="dbPointMapResourceData">
<table>mapdata.fix</table>
<mapName>Fixes/Intersections</mapName>
<constraint>type != 'NU'</constraint>
</resourceData>
</resource>
<resource>
<loadProperties>
<capabilities>
@ -70,9 +39,6 @@
<mapName>Fixes/Intersections</mapName>
</resourceData>
</resource>
<mapName>Fixes/Intersections</mapName>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>

View file

@ -0,0 +1,29 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities />
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true" />
<resourceData xsi:type="wouWcnWatchesResourceData"
isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true"
name="Convective Watches">
<metadataMap>
<mapping key="phensig">
<constraint constraintValue="TO.A,SV.A"
constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -20,8 +20,8 @@
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="bundleItem" file="bundles/ncepHydro/SPCWatchPlot.xml"
menuText="SPC Watches" id="spcWatches">
<contribute xsi:type="bundleItem" file="bundles/ncepHydro/ConvectiveWatchPlot.xml"
menuText="Convective Watches" id="convectiveWatches">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/ncepHydro/SvrWxPlot.xml"
menuText="Svr Wx Plot" id="spcWxPlot">

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter abbreviation="BLI" name="Best Lifted Index" unit="K" >
<Method name="Alias">
<Field abbreviation="4LFTX"/>
</Method>
</DerivedParameter>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter unit="" name="Max Lightning Threat (flashes/km^2)" abbreviation="LTNG">
</DerivedParameter>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter abbreviation="MAXDVV" name="Max Downdraft Vertical Velocity" unit="m/s" >
<Method name="Alias">
<Field abbreviation="MAXDVV1hr"/>
</Method>
</DerivedParameter>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter abbreviation="MAXUVV" name="Max Updraft Vertical Velocity" unit="m/s" >
<Method name="Alias">
<Field abbreviation="MAXUVV1hr"/>
</Method>
</DerivedParameter>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter abbreviation="MXREF" name="Max 1hr CAPPI" unit="dB" >
<Method name="Alias" >
<Field abbreviation="MAXREF1hr" />
</Method>
</DerivedParameter>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<DerivedParameter abbreviation="MAXUPHL" name="Max Updraft Helicity" unit="m^2/s^2" >
<Method name="Alias" >
<Field abbreviation="MXUPHL1hr" />
</Method>
</DerivedParameter>

View file

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<DerivedParameter abbreviation="MaxWHRRR" name="Maximum 1hr Wind Gust" unit="m/s">
<Method levels="Surface" models="HRRR" name="Max">
<Field abbreviation="WGS1hr" />
<Field abbreviation="WGS" />
</Method>
</DerivedParameter>

View file

@ -35,7 +35,7 @@
<Method name="Alias">
<Field abbreviation="PAcc"/>
</Method>
<Method name="Alias" models="RUC130">
<Method name="Alias" models="RUC130 HRRR">
<Field abbreviation="TP1hr"/>
</Method>
<Method name="Add">

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DerivedParameter abbreviation="WGS1hr" name="Max 1-hr Wind Gust Speed" unit="m/s">
<Method name="Alias" levels="Surface">
<Field abbreviation="WGS1hr" level="10FHAG"/>
</Method>
<Method name="Alias" levels="Surface">
<Field abbreviation="WS1hr" level="10FHAG"/>
</Method>
<Method name="Vector" levels="Surface" >
<Field abbreviation="MAXUW1hr" level="FHAG10" />
<Field abbreviation="MAXVW1hr" level="FHAG10" />
</Method>
</DerivedParameter>

View file

@ -455,12 +455,9 @@ public class OtherPrecipOptions {
// // do nothing
// }
if (clientdata == 1) {
// do nothing
}
/* Rendering the grids and MAPs. */
else if (clientdata == 0) {
if (clientdata == 0) {
BadValues bv = new BadValues();
bv.update_bad_values(DailyQcUtils.pcpn_day);
@ -472,16 +469,18 @@ public class OtherPrecipOptions {
if (DailyQcUtils.pcpn_day == 0
&& (DailyQcUtils.curHr00_06 == 1
|| DailyQcUtils.curHr06_12 == 1 || DailyQcUtils.curHr18_00 == 1)) {
System.out.println("Not estimating partial point or daily stations.");
// don't estimate
} else {
EstDailyStations ed = new EstDailyStations();
ed.estimate_daily_stations(DailyQcUtils.pcpn_day,
DailyQcUtils.precip_stations, num_stations);
System.out.println("Estimating daily stations.");
EstPartStations ep = new EstPartStations();
ep.estimate_partial_stations(DailyQcUtils.pcpn_day,
DailyQcUtils.precip_stations, num_stations);
System.out.println("Estimating partial stations.");
}
QCStations qs = new QCStations();

View file

@ -64,6 +64,7 @@ import com.raytheon.viz.ui.editor.IMultiPaneEditor;
* Sep 23, 2008 randerso Initial creation
* Apr 30, 2013 lbousaidi made seconds in the date/Time
* fields visible.
* Aug 26, 2014 14578 snaples Added Ending Hydrologic Date selection.
* </pre>
*
* @author randerso
@ -80,8 +81,12 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
private Calendar cal;
private Calendar hydroCal;
public static Date prevDate;
public static Date prevHydDate;
public static String prevArea;
private Text yearText;
@ -94,6 +99,12 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
private Spinner daysSpinner;
private Text hydyearText;
private Text hydmonthText;
private Spinner hyddaySpinner;
private Map<Date, MPEDateInfo> dateMap;
private Label lastExec;
@ -118,6 +129,8 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
private Combo areaCombo;
private static Date currentHydroEndingDate;
public ChooseDataPeriodDialog(Shell parentShell) {
super(parentShell);
setBlockOnOpen(false);
@ -144,8 +157,13 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
dateMap = dataMgr.getDateMap(false);
qcEnable = MPEDisplayManager.isMpeQcOptionEnabled();
cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
hydroCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
prevDate = displayMgr.getCurrentEditDate();
cal.setTime(prevDate);
if(prevHydDate == null){
prevHydDate = prevDate;
}
hydroCal.setTime(prevHydDate);
}
/*
@ -313,8 +331,59 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
gageOptionsGroup.setLayout(layout);
gageOptionsGroup.setText("6/24 hr gage edit options");
new Label(gageOptionsGroup, SWT.NONE);
// create ending hydro date area
Label hydrodateLabel = new Label(gageOptionsGroup, SWT.NONE);
hydrodateLabel.setText("Ending Hydrologic Date: ");
new Label(gageOptionsGroup, SWT.None);
Composite hydrodateComp = new Composite(gageOptionsGroup, SWT.NONE);
GridData hydrodata = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
hydrodateComp.setLayoutData(hydrodata);
GridLayout hydlayout = new GridLayout(3, false);
hydrodateComp.setLayout(hydlayout);
Label hydyearLabel = new Label(hydrodateComp, SWT.NONE);
hydyearLabel.setText("Ending Year");
Label hydmonthLabel = new Label(hydrodateComp, SWT.NONE);
hydmonthLabel.setText("Month");
Label hyddayLabel = new Label(hydrodateComp, SWT.NONE);
hyddayLabel.setText("Day");
hydyearText = new Text(hydrodateComp, SWT.BORDER | SWT.READ_ONLY);
hydrodata = new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false);
hydrodata.widthHint = 100;
hydyearText.setLayoutData(hydrodata);
hydmonthText = new Text(hydrodateComp, SWT.BORDER | SWT.READ_ONLY);
hydrodata = new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false);
hydrodata.widthHint = 50;
hydmonthText.setLayoutData(hydrodata);
hyddaySpinner = new Spinner(hydrodateComp, SWT.BORDER | SWT.READ_ONLY);
hydrodata = new GridData(SWT.DEFAULT, SWT.DEFAULT, false, false);
hydrodata.widthHint = 50;
hyddaySpinner.setLayoutData(data);
hyddaySpinner.setMinimum(0);
hyddaySpinner.setMaximum(32);
hyddaySpinner.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
int day = hyddaySpinner.getSelection();
hydroCal.set(Calendar.DAY_OF_MONTH, day);
updateTimeControls();
}
});
new Label(gageOptionsGroup, SWT.None);
new Label(gageOptionsGroup, SWT.None);
Label selectAreaLabel = new Label(gageOptionsGroup, SWT.NONE);
selectAreaLabel.setText("Select Area");
data = new GridData(SWT.CENTER, SWT.DEFAULT, false, false);
@ -373,6 +442,8 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
public void widgetSelected(SelectionEvent e) {
displayMgr.setDqcDays(daysSpinner.getSelection());
prevArea = areaCombo.getItem(areaCombo.getSelectionIndex());
setCurrentHydroEditDate(getHydroTime());
if (QcPrecipOptionsDialog.isFinished() == false) {
QcPrecipOptionsDialog.destroy(false);
}
@ -400,6 +471,8 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
public void widgetSelected(SelectionEvent e) {
displayMgr.setDqcDays(daysSpinner.getSelection());
prevArea = areaCombo.getItem(areaCombo.getSelectionIndex());
setCurrentHydroEditDate(getHydroTime());
if (QcTempOptionsDialog.isFinished() == false) {
QcTempOptionsDialog.destroy(false);
}
@ -427,6 +500,8 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
public void widgetSelected(SelectionEvent e) {
displayMgr.setDqcDays(daysSpinner.getSelection());
prevArea = areaCombo.getItem(areaCombo.getSelectionIndex());
setCurrentHydroEditDate(getHydroTime());
if (QcFreezeOptionsDialog.isFinished() == false) {
QcFreezeOptionsDialog.destroy(false);
}
@ -454,13 +529,19 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
if (cal.getTime().before(dataMgr.getEarliestDate())
|| cal.getTime().after(dataMgr.getLatestDate())) {
cal.setTime(prevDate);
hydroCal.setTime(prevHydDate);
}
prevDate = cal.getTime();
prevHydDate = hydroCal.getTime();
yearText.setText(Integer.toString(cal.get(Calendar.YEAR)));
monthText.setText(Integer.toString(cal.get(Calendar.MONTH) + 1));
daySpinner.setSelection(cal.get(Calendar.DAY_OF_MONTH));
hydyearText.setText(Integer.toString(hydroCal.get(Calendar.YEAR)));
hydmonthText.setText(Integer.toString(hydroCal.get(Calendar.MONTH) + 1));
hyddaySpinner.setSelection(hydroCal.get(Calendar.DAY_OF_MONTH));
hourSpinner.setSelection(cal.get(Calendar.HOUR_OF_DAY));
if (dateMap.containsKey(cal.getTime()) == false) {
@ -503,6 +584,19 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
return cal.getTime();
}
public Date getHydroTime(){
return hydroCal.getTime();
}
private void setCurrentHydroEditDate(Date hydroTime) {
currentHydroEndingDate = hydroTime;
}
public static Date getCurrentHydroEditDate(){
return currentHydroEndingDate;
}
/**
* Get the selected year;
*

View file

@ -67,6 +67,7 @@ import com.raytheon.viz.ui.perspectives.VizPerspectiveListener;
* ------------ ---------- ----------- --------------------------
* Jul, 7 2009 snaples Initial creation
* Sep 11, 2013 #2353 lvenable Fixed cursor memory leak.
* Aug 26, 2014 14578 snaples Changed the way we get current data to use new ending hydologic date.
*
* </pre>
*
@ -195,8 +196,8 @@ public class QcFreezeOptionsDialog extends AbstractMPEDialog {
Shell parent = this.getParent();
Display display = parent.getDisplay();
MPEDisplayManager displayMgr = MPEDisplayManager.getCurrent();
Date prevDate = displayMgr.getCurrentEditDate();
Date currDate = ChooseDataPeriodDialog.prevDate;
Date prevDate = ChooseDataPeriodDialog.getCurrentHydroEditDate();
Date currDate = ChooseDataPeriodDialog.prevHydDate;
String QcArea = ChooseDataPeriodDialog.prevArea;
AppsDefaults appDefaults = AppsDefaults.getInstance();
DisplayFieldData df = displayMgr.getDisplayFieldType();

View file

@ -67,6 +67,7 @@ import com.raytheon.viz.mpe.util.DailyQcUtils.Ts;
* Mar 7, 2013 15657 lbousaidi fixed DQC slider and added listener to the Keys
* when pressed.
* Sep 11, 2013 #2353 lvenable Fixed cursor memory leak.
* Aug 26, 2014 14578 snaples Changed the way we get the date, to use new ending hydro date field.
* </pre>
*
* @author snaples
@ -207,8 +208,8 @@ public class QcPrecipOptionsDialog extends AbstractMPEDialog {
Shell parent = this.getParent();
Display display = parent.getDisplay();
MPEDisplayManager displayMgr = MPEDisplayManager.getCurrent();
Date prevDate = displayMgr.getCurrentEditDate();
Date currDate = ChooseDataPeriodDialog.prevDate;
Date prevDate = ChooseDataPeriodDialog.getCurrentHydroEditDate();
Date currDate = ChooseDataPeriodDialog.prevHydDate;
String QcArea = ChooseDataPeriodDialog.prevArea;
AppsDefaults appDefaults = AppsDefaults.getInstance();
DisplayFieldData df = displayMgr.getDisplayFieldType();

View file

@ -64,6 +64,7 @@ import com.raytheon.viz.mpe.util.DailyQcUtils.Ts;
* ------------ ---------- ----------- --------------------------
* Nov 12, 2008 snaples Initial creation
* Sep 11, 2013 #2353 lvenable Fixed cursor memory leak.
* Aug 26, 2014 14578 snaples Changed the way we get current data to use new ending hydologic date.
*
* </pre>
*
@ -196,8 +197,8 @@ public class QcTempOptionsDialog extends AbstractMPEDialog {
Shell parent = this.getParent();
Display display = parent.getDisplay();
MPEDisplayManager displayMgr = MPEDisplayManager.getCurrent();
Date prevDate = displayMgr.getCurrentEditDate();
Date currDate = ChooseDataPeriodDialog.prevDate;
Date prevDate = ChooseDataPeriodDialog.getCurrentHydroEditDate();
Date currDate = ChooseDataPeriodDialog.prevHydDate;
String QcArea = ChooseDataPeriodDialog.prevArea;
AppsDefaults appDefaults = AppsDefaults.getInstance();
DisplayFieldData df = displayMgr.getDisplayFieldType();

View file

@ -184,8 +184,8 @@ public class InitPrecipClimo {
precip_stations.set(index, nstation);
nstation = null;
}
++index;
}
++index;
}
in.close();

View file

@ -84,6 +84,7 @@ public class ReadPrecipA {
try {
in = new BufferedReader(new FileReader(preca));
System.out.println("Reading point file: " + preca);
for (j = 0; j < 5; j++) {
number_found[j] = 0;

View file

@ -4398,7 +4398,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
.getProductCategory(token)
+ tdm.getProductDesignator(token);
// Set the header text field.
if (bbbid.equals("NOR") || tdm.getAfosPil(token) != null) {
if (bbbid.equals("NOR") || (bbbid.isEmpty() && tdm.getAfosPil(token) != null)) {
String wmoId = tdm.getWmoId(token);
wmoId = (wmoId.length() > 0 ? wmoId : "-");
String siteId = tdm.getSiteId(token);

View file

@ -0,0 +1,260 @@
<bundle xmlns:ns2="group">
<displayList>
<displays xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="d2DMapRenderableDisplay" scale="CONUS" density="1.0" magnification="1.0" zoomLevel="1.0" mapCenter="-66.2005121984067 35.94909693622639 0.0">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="BARB" loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="CONTOUR" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="Wind" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="EQUALS"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="FHAG" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="10.0" constraintType="EQUALS"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="CONTOUR" loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true" outlineWidth="1"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="CONTOUR" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="T" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="EQUALS"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="FHAG" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="2.0" constraintType="EQUALS"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="CONTOUR" loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true" outlineWidth="1"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="CONTOUR" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="false">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="RH" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="EQUALS"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="FHAG" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="2.0" constraintType="EQUALS"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="CONTOUR" loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true" outlineWidth="1"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="CONTOUR" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="false">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="DpT" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="EQUALS"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="FHAG" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="2.0" constraintType="EQUALS"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="IMAGE" loadWithoutData="true">
<capabilities>
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="Grid/gridded data"/>
</capability>
<capability xsi:type="imagingCapability" alpha="1.0" interpolationState="false" brightness="0.5" contrast="1.0"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="IMAGE_COUNTRY" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="false">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="TP" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="EQUALS"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="SFC" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="0.0" constraintType="EQUALS"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="IMAGE" loadWithoutData="true">
<capabilities>
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="Grid/gridded data"/>
</capability>
<capability xsi:type="imagingCapability" alpha="1.0" interpolationState="false" brightness="0.5" contrast="1.0"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="IMAGE_COUNTRY" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="false">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="MaxWHRRR" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="EQUALS"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="SFC" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="0.0" constraintType="EQUALS"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<resource>
<loadProperties xsi:type="gridLoadProperties" displayType="IMAGE" loadWithoutData="true">
<capabilities>
<capability xsi:type="colorMapCapability">
<colorMapParameters colorMapName="HRRR Reflectivity"/>
</capability>
<capability xsi:type="imagingCapability" alpha="1.0" interpolationState="false" brightness="1.0" contrast="1.0"/>
</capabilities>
<resourceType>PLAN_VIEW</resourceType>
</loadProperties>
<properties renderingOrderId="IMAGE_COUNTRY" isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
<pdProps maxDisplayWidth="100000000" minDisplayWidth="0"/>
</properties>
<resourceData xsi:type="gridResourceData" retrieveData="true" isUpdatingOnMetadataOnly="false" isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="info.parameter.abbreviation">
<constraint constraintValue="CXR" constraintType="EQUALS"/>
</mapping>
<mapping key="info.datasetId">
<constraint constraintValue="${modelName}" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.leveltwovalue">
<constraint constraintValue="-999999" constraintType="IN"/>
</mapping>
<mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping>
<mapping key="info.level.masterLevel.name">
<constraint constraintValue="EA" constraintType="IN"/>
</mapping>
<mapping key="info.level.levelonevalue">
<constraint constraintValue="0.0" constraintType="IN"/>
</mapping>
</metadataMap>
<alertParser xsi:type="dataCubeAlertMessageParser"/>
</resourceData>
</resource>
<timeMatcher xsi:type="d2DTimeMatcher" deltaFilter="0" forecastFilter="0"/>
<numberOfFrames>16</numberOfFrames>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -69,6 +69,12 @@
<substitute key="modelName" value="${MMMmodel2}"/>
<substitute key="frameCount" value="17"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/volume/DefaultFamily.xml"
menuText="HRRR" id="hrrr" useReferenceTime="true">
<substitute key="modelName" value="HRRR"/>
<substitute key="TP" value="TP"/>
<substitute key="frameCount" value="16"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/volume/DefaultFamily.xml"
menuText="NAM12" id="nam12" useReferenceTime="true">
<substitute key="modelName" value="${NAM12model}"/>

View file

@ -44,6 +44,12 @@
<substitute key="modelName" value="${MMMmodel2}"/>
<substitute key="TP" value="TP3hr"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/volume/HRRR.xml"
menuText="HRRR" id="hrrrsurface" useReferenceTime="true">
<substitute key="modelName" value="HRRR"/>
<substitute key="TP" value="TP"/>
<substitute key="frameCount" value="16"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/volume/DefaultSurface.xml"
menuText="NAM12" id="nam12surface" useReferenceTime="true">
<substitute key="modelName" value="${NAM12model}"/>

View file

@ -110,6 +110,8 @@
indentText="false" />
<contribute xsi:type="menuItem" menuText="Gust Speed" key="WGS"
indentText="true" />
<contribute xsi:type="menuItem" menuText="Max Gust Speed" key="MaxWHRRR"
indentText="true" />
<contribute xsi:type="menuItem" menuText="Wind Direction"
key="WD" indentText="true" />
<contribute xsi:type="menuItem" menuText="WDir Anl Uncertainty"
@ -299,6 +301,16 @@
key="PGrdM" indentText="false" />
<contribute xsi:type="menuItem" menuText="MSLP Grad Vec"
key="PGrd1" indentText="false" />
<contribute xsi:type="menuItem" menuText="Max Updraft VV"
key="MAXUVV" indentText="true" />
<contribute xsi:type="menuItem" menuText="Max Downdraft VV"
key="MAXDVV" indentText="true" />
<contribute xsi:type="menuItem" menuText="Max Updraft Helicity"
key="MAXUPHL" indentText="true" />
<contribute xsi:type="menuItem" menuText="Most Unstable BL Parcel Level"
key="PLPL" indentText="true" />
<contribute xsi:type="menuItem" menuText="Max Lightning Threat"
key="LTNG" indentText="true" />
</contribute>
<contribute xsi:type="toolbarSubMenu" menuText="Misc">
@ -1376,6 +1388,14 @@
key="VILIQ" indentText="true" />
<contribute xsi:type="menuItem" menuText="Derived Echo Top"
key="RETOP" indentText="true" />
<contribute xsi:type="menuItem" menuText="CAPPI"
key="REFD" indentText="true" />
<contribute xsi:type="menuItem" menuText="MAX 1hr CAPPI"
key="MXREF" indentText="true" />
<contribute xsi:type="menuItem" menuText="Derived VIL"
key="VILIQ" indentText="true" />
<contribute xsi:type="menuItem" menuText="Derived Echo Top"
key="RETOP" indentText="true" />
</contribute>
<!--

View file

@ -315,6 +315,7 @@
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="90agl" indentText="false"/>
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="120agl" indentText="false"/>
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="150agl" indentText="false"/>
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="400agl" indentText="false"/>
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="Mept" indentText="false"/>
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="WetBulb0" indentText="false"/>
<contribute xsi:type="menuItem" textLookup="LevelMapping" key="CloudBase" indentText="false"/>

View file

@ -1354,8 +1354,8 @@
<DatabaseLevel levelName="SIG" levelOneValue="0.5"
levelTwoValue="0.8" unit="m/s" />
</Level>
<Level displayName="1000MB-400MB" key="1000MB-400MB" group="C">
<DatabaseLevel levelName="MB" levelOneValue="1000"
<Level displayName="400agl" key="400agl" group="C">
<DatabaseLevel levelName="BL" levelOneValue="1000"
levelTwoValue="400" unit="hPa" />
</Level>
<Level displayName="2-5km AGL" key="2-5kmAgl" group="C">

View file

@ -0,0 +1,99 @@
package com.raytheon.viz.warngen.gis;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.raytheon.uf.common.dataplugin.warning.util.WarnFileUtil;
import com.raytheon.uf.common.serialization.SingleTypeJAXBManager;
import com.raytheon.uf.viz.core.localization.LocalizationManager;
import com.raytheon.viz.warngen.gui.WarngenLayer;
/**
* WarngenWordingConfiguration
*
* <pre>
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- -------------- --------------------------
* 2014-08-28 ASM #15658 D. Friedman Initial Creation.
*/
@XmlAccessorType(XmlAccessType.NONE)
@XmlRootElement(name = "zoneWordingConfig")
public class MarineWordingConfiguration {
private static final String FILE_NAME = "marineZoneWording.xml";
@XmlElement(name = "entry")
private List<MarineWordingEntry> entries = new ArrayList<MarineWordingEntry>();
public List<MarineWordingEntry> getEntries() {
return entries;
}
public void setEntries(List<MarineWordingEntry> entries) {
this.entries = entries;
}
@XmlAccessorType(XmlAccessType.NONE)
public static class MarineWordingEntry {
@XmlAttribute(name = "match")
private String matchText;
@XmlAttribute(name = "replace")
private String replacementText;
private Pattern ugcPattern;
public String getMatchText() {
return matchText;
}
public void setMatchText(String matchText) {
this.matchText = matchText;
this.ugcPattern = null;
}
public String getReplacementText() {
return replacementText;
}
public void setReplacementText(String replacementText) {
this.replacementText = replacementText;
}
public Pattern getUgcPattern() {
if (ugcPattern == null) {
if (matchText != null) {
ugcPattern = Pattern.compile(matchText);
}
}
return ugcPattern;
}
}
private static final SingleTypeJAXBManager<MarineWordingConfiguration> jaxb = SingleTypeJAXBManager
.createWithoutException(MarineWordingConfiguration.class);
public static MarineWordingConfiguration load(WarngenLayer forLayer) throws Exception {
String xmlText = WarnFileUtil.convertFileContentsToString(FILE_NAME,
LocalizationManager.getInstance().getCurrentSite(),
forLayer.getLocalizedSite());
MarineWordingConfiguration config = (MarineWordingConfiguration)
jaxb.unmarshalFromXml(xmlText);
for (MarineWordingEntry entry : config.getEntries()) {
// Validate patterns by compiling now.
entry.getUgcPattern();
}
return config;
}
}

View file

@ -33,6 +33,7 @@ import java.util.List;
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul 16, 2014 3419 jsanchez Initial creation
* Aug 28, 2014 ASM #15658 D. Friedman Add marine zone list.
*
* </pre>
*
@ -58,6 +59,8 @@ public class Watch {
private List<String> partOfState;
private List<String> marineAreas;
public Watch(String state, String action, String phenSig, String etn,
Date startTime, Date endTime) {
this.state = state;
@ -132,6 +135,14 @@ public class Watch {
this.etn = etn;
}
public List<String> getMarineAreas() {
return marineAreas;
}
public void setMarineAreas(List<String> marineAreas) {
this.marineAreas = marineAreas;
}
@Override
public int hashCode() {
final int prime = 31;

View file

@ -54,8 +54,11 @@ import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority;
import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.common.util.Pair;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.requests.ThriftClient;
import com.raytheon.viz.core.mode.CAVEMode;
import com.raytheon.viz.warngen.gis.MarineWordingConfiguration.MarineWordingEntry;
import com.raytheon.viz.warngen.gui.WarngenLayer;
import com.raytheon.viz.warngen.gui.WarngenLayer.GeoFeatureType;
import com.vividsolutions.jts.geom.Geometry;
@ -72,6 +75,8 @@ import com.vividsolutions.jts.geom.Polygon;
* ------------ ---------- ----------- --------------------------
* Jul 17, 2014 3419 jsanchez Initial creation
* Aug 20, 2014 ASM #16703 D. Friedman Ensure watches have a state attribute.
* Aug 28, 2014 ASM #15658 D. Friedman Add marine zones.
* Aug 29, 2014 ASM #15551 Qinglu Lin Sorting watches by ETN in processRecords().
*
* </pre>
*
@ -106,10 +111,16 @@ public class WatchUtil {
private static final String COUNTY_FE_AREA_FIELD = "FE_AREA";
private static final Object MARINE_ZONE_UGC_FIELD = "ID";
private static final Object MARINE_ZONE_NAME_FIELD = "NAME";
private static final String STATE_FIELD = "STATE";
private static final String COUNTY_TABLE = "County";
private static final String MARINE_ZONE_TABLE = "MarineZones";
private static final String PARENT_NAME_FIELD = "NAME";
private static final String[] REQUEST_FIELDS = new String[] {
@ -118,8 +129,12 @@ public class WatchUtil {
private GeospatialData[] countyGeoData;
private GeospatialData[] marineGeoData;
private WarngenLayer warngenLayer;
private MarineWordingConfiguration marineWordingConfig;
public WatchUtil(WarngenLayer warngenLayer) throws InstantiationException {
countyGeoData = warngenLayer.getGeodataFeatures(COUNTY_TABLE,
warngenLayer.getLocalizedSite());
@ -155,6 +170,17 @@ public class WatchUtil {
Validate.isTrue(watchAreaBuffer >= 0,
"'includedWatchAreaBuffer' can not be negative in .xml file");
if (config.isIncludeMarineAreasInWatches()) {
marineGeoData = warngenLayer.getGeodataFeatures(MARINE_ZONE_TABLE,
warngenLayer.getLocalizedSite());
if (marineGeoData == null) {
throw new VizException("Cannot get geospatial data for "
+ MARINE_ZONE_TABLE + "-based watches");
}
marineWordingConfig = MarineWordingConfiguration.load(warngenLayer);
}
String[] includedWatches = config.getIncludedWatches();
if ((includedWatches != null) && (includedWatches.length > 0)) {
@ -174,10 +200,16 @@ public class WatchUtil {
entityClass = PracticeActiveTableRecord.class;
}
HashSet<String> allUgcs = new HashSet<String>(
warngenLayer.getAllUgcs(GeoFeatureType.COUNTY));
Set<String> marineUgcs = null;
if (config.isIncludeMarineAreasInWatches()) {
marineUgcs = warngenLayer.getAllUgcs(GeoFeatureType.MARINE);
allUgcs.addAll(marineUgcs);
}
DbQueryRequest request = buildRequest(simulatedTime,
phenSigConstraint.toString(),
warngenLayer.getAllUgcs(GeoFeatureType.COUNTY),
entityClass);
phenSigConstraint.toString(), allUgcs, entityClass);
DbQueryResponse response = (DbQueryResponse) ThriftClient
.sendRequest(request);
@ -192,9 +224,14 @@ public class WatchUtil {
/ KmToDegrees);
System.out.println("create watch area buffer time: "
+ (System.currentTimeMillis() - t0));
Set<String> validUgcZones = warngenLayer
.getUgcsForWatches(watchArea, GeoFeatureType.COUNTY);
watches = processRecords(records, validUgcZones);
HashSet<String> validUgcZones = new HashSet<String>(
warngenLayer.getUgcsForWatches(watchArea,
GeoFeatureType.COUNTY));
if (config.isIncludeMarineAreasInWatches()) {
validUgcZones.addAll(warngenLayer.getUgcsForWatches(
watchArea, GeoFeatureType.MARINE));
}
watches = processRecords(records, validUgcZones, marineUgcs);
} catch (RuntimeException e) {
statusHandler
.handle(Priority.ERROR,
@ -302,12 +339,13 @@ public class WatchUtil {
*
* @param activeTableRecords
* @param validUgcZones
* @param marineUgcs
*
* @return
*/
private List<Watch> processRecords(
List<ActiveTableRecord> activeTableRecords,
Set<String> validUgcZones) {
Set<String> validUgcZones, Set<String> marineUgcs) {
List<Watch> watches = new ArrayList<Watch>();
/*
@ -329,14 +367,16 @@ public class WatchUtil {
* validUgcZones here.
*/
String ugcZone = ar.getUgcZone();
String state = getStateName(ugcZone.substring(0, 2));
String state = null;
/*
* Temporary fix for SS DR #16703. Remove when marine watch wording
* is fixed.
*/
if (state == null)
if (marineUgcs != null && marineUgcs.contains(ugcZone)) {
// Just leave state == null
} else {
state = getStateName(ugcZone.substring(0, 2));
if (state == null) {
continue;
}
}
String action = ar.getAct();
String phenSig = ar.getPhensig();
@ -360,12 +400,18 @@ public class WatchUtil {
for (Entry<Watch, List<String>> entry : map.entrySet()) {
Watch watch = entry.getKey();
watch.setAreas(entry.getValue());
if (watch.getState() != null) {
List<String> partOfState = new ArrayList<String>(
determineAffectedPortions(watch.getAreas()));
watch.setPartOfState(partOfState);
} else {
watch.setMarineAreas(determineMarineAreas(watch.getAreas()));
}
watches.add(watch);
}
// keep the code for their use in the future
/*
// Sorts the watches based on state name.
Collections.sort(watches, new Comparator<Watch>() {
@ -383,6 +429,25 @@ public class WatchUtil {
return state1.compareTo(state2);
}
});
*/
// Sorts the watches based on ETN.
Collections.sort(watches, new Comparator<Watch>() {
@Override
public int compare(Watch watch1, Watch watch2) {
String etn1 = watch1.getEtn();
String etn2 = watch2.getEtn();
if (etn1 == etn2)
return 0;
else if (etn1 == null)
return 1;
else if (etn2 == null)
return -1;
else
return etn1.compareTo(etn2);
}
});
return watches;
}
@ -412,6 +477,40 @@ public class WatchUtil {
return affectedPortions;
}
private List<String> determineMarineAreas(List<String> areas) {
HashSet<Pair<Integer, String>> groupedAreas = new HashSet<Pair<Integer,String>>();
for (String area : areas) {
int entryIndex = 0;
for (MarineWordingEntry entry : marineWordingConfig.getEntries()) {
if (entry.getUgcPattern().matcher(area).matches()) {
String replacement = entry.getReplacementText();
if (replacement != null) {
if (replacement.length() > 0) {
groupedAreas.add(new Pair<Integer, String>(
entryIndex, entry.getReplacementText()));
}
} else {
groupedAreas.add(new Pair<Integer, String>(entryIndex,
getMarineZoneName(area)));
}
}
entryIndex++;
}
}
ArrayList<Pair<Integer, String>> sorted = new ArrayList<Pair<Integer,String>>(groupedAreas);
Collections.sort(sorted, new Comparator<Pair<Integer, String>>() {
public int compare(Pair<Integer, String> o1, Pair<Integer, String> o2) {
int r = o1.getFirst().compareTo(o2.getFirst());
return r != 0 ? r : o1.getSecond().compareTo(o2.getSecond());
};
});
ArrayList<String> result = new ArrayList<String>(sorted.size());
for (Pair<Integer, String> value : sorted) {
result.add(value.getSecond());
}
return result;
}
/**
* Returns the full state name from the state abbreviation.
*
@ -446,6 +545,16 @@ public class WatchUtil {
return null;
}
private String getMarineZoneName(String ugc) {
for (GeospatialData g : marineGeoData) {
if (((String) g.attributes.get(MARINE_ZONE_UGC_FIELD))
.endsWith(ugc)) {
return (String) g.attributes.get(MARINE_ZONE_NAME_FIELD);
}
}
return null;
}
// Based on AWIPS 1 SELSparagraphs.C SELSparagraphs::processWOU().
private String mungeFeAreas(Set<String> feAreas) {
String abrev = "";

View file

@ -141,6 +141,8 @@ import com.vividsolutions.jts.io.WKTReader;
* added determineAffectedMarinePortions().
* Jul 21, 2014 3419 jsanchez Refactored WatchUtil.
* Aug 15, 2014 DR15701 mgamazaychikov Removed static field watchUtil.
* Aug 28, 2014 ASM #15551 Qinglu Lin Replaced 1200 PM/1200 AM by NOON/MIDNIGHT, removed days in
* included tornado/severe thunderstorm watch message.
* </pre>
*
* @author njensen
@ -872,7 +874,37 @@ public class TemplateRunner {
System.out.println("velocity time: "
+ (System.currentTimeMillis() - tz0));
String text = script.toString();
String watches[] = {"TORNADO WATCH", "SEVERE THUNDERSTORM WATCH"};
int index1 = -1, index2 = -1, index1ToUse = -1;
String doubleDollar = "$$";
boolean firstTime = true;
for (String s: watches) {
index1 = script.indexOf(s, 0);
if (index1 > 0) {
index2 = script.indexOf(doubleDollar, index1);
}
if (firstTime && index1 > -1) {
index1ToUse = index1;
firstTime = false;
}
}
String days[] = {"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
String substring = "", text;
if (index1ToUse > -1 && index2 > -1) {
substring = script.substring(index1ToUse, index2).toUpperCase();
// remove day
for (String day: days) {
substring = substring.replaceAll(day + " ", "");
}
// replace 1200 PM/1200 AM with NOON/MIDNIGHT
substring = substring.replaceAll("1200 PM", "NOON");
substring = substring.replaceAll("1200 AM", "MIDNIGHT");
// concatenate strings
text = script.substring(0, index1ToUse - 1);
text = text + " " + substring + script.substring(index2, script.length());
} else {
text = script.toString();
}
WarningTextHandler handler = WarningTextHandlerFactory.getHandler(
selectedAction, text, config.getAutoLockText());
String handledText = handler.handle(text, areas, cancelareas,

View file

@ -42,6 +42,7 @@ import com.raytheon.viz.core.mode.CAVEMode;
* May 3, 2011 jsanchez Initial creation
* Oct 25, 2013 2249 rferrel getAvailableTimes always returns a non-empty list.
* Apr 28, 2014 DR 17310 D. Friedman Handle null VTEC fields.
* Aug 28, 2014 ASM #15682 D. Friedman Refactor for WouWcnWatchesResourceData.
*
* </pre>
*
@ -98,13 +99,13 @@ public class WWAResourceData extends AbstractRequestableResourceData {
@Override
public DataTime[] getAvailableTimes() throws VizException {
DataTime[] available = getAvailableTimes(getMetadataMap(),
DataTime[] available = getAvailableWarningTimes(getMetadataMap(),
getBinOffset());
return available;
}
public static DataTime[] getAvailableTimes(
public DataTime[] getAvailableWarningTimes(
Map<String, RequestConstraint> constraintMap, BinOffset binOffset)
throws VizException {
DbQueryResponse response = null;
@ -116,8 +117,9 @@ public class WWAResourceData extends AbstractRequestableResourceData {
String etn = "etn";
String phensig = "phensig";
String act = "act";
String pil = "pil";
request.addFields(new String[] { startTimeField, endTimeField, act,
etn, phensig });
etn, phensig, pil });
response = (DbQueryResponse) ThriftClient.sendRequest(request);
if (response.getResults() == null) {
@ -137,8 +139,11 @@ public class WWAResourceData extends AbstractRequestableResourceData {
warnRec.setAct((String) map.get(act));
warnRec.setPhensig((String) map.get(phensig));
warnRec.setEtn((String) map.get(etn));
warnRec.setPil((String) map.get(pil));
if (isRecordTimeImportant(warnRec)) {
warnings.add(warnRec);
}
}
RequestConstraint phenSig = constraintMap.get("phensig");
TreeSet<DataTime> startTimes = phenSig != null
@ -165,6 +170,10 @@ public class WWAResourceData extends AbstractRequestableResourceData {
return availableTimes;
}
protected boolean isRecordTimeImportant(AbstractWarningRecord warnRec) {
return true;
}
private static TreeSet<DataTime> getWarningStartTimes(
ArrayList<AbstractWarningRecord> warnings) {
/*

View file

@ -290,7 +290,7 @@ public class WatchesResource extends AbstractWWAResource {
}
}
private void setGeometry(AbstractWarningRecord record) {
protected void setGeometry(AbstractWarningRecord record) {
List<String> county = new ArrayList<String>();
List<String> marinezone = new ArrayList<String>();
List<Geometry> geometries = new ArrayList<Geometry>();

View file

@ -0,0 +1,429 @@
package com.raytheon.viz.warnings.rsc;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.common.time.ISimulatedTimeChangeListener;
import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.drawables.FillPatterns;
import com.raytheon.uf.viz.core.drawables.IShadedShape;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
import com.raytheon.viz.core.rsc.jts.JTSCompiler;
import com.raytheon.viz.core.rsc.jts.JTSCompiler.PointStyle;
import com.vividsolutions.jts.geom.Geometry;
/**
* Displays WOUs updated by WCNs
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2014-08-28 ASM #15682 D. Friemdan Initial creation
* </pre>
*
*/
public class WouWcnWatchesResource extends WatchesResource implements ISimulatedTimeChangeListener {
private static Timer timer;
private TimerTask timerTask;
// If this is changed to use the maps database, could probably be static
private Map<String, Set<String>> cwaUgcMap = new HashMap<String, Set<String>>();
static final ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() {
@Override protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyyMMddHHmm");
}
};
public WouWcnWatchesResource(WWAResourceData data, LoadProperties props) {
super(data, props);
comparator = WouWcnWatchesComparator.getInstance();
resourceName = "Watches";
}
private AbstractWarningRecord getPreviousRecordForEvent(AbstractWarningRecord rec) {
String phenSig = rec.getPhensig();
String etn = rec.getEtn();
if (phenSig == null || etn == null)
return null;
AbstractWarningRecord best = null;
for (WarningEntry e : entryMap.values()) {
if (!phenSig.equals(e.record.getPhensig()) ||
!etn.equals(e.record.getEtn()))
continue;
if (best == null || WouWcnWatchesComparator.getInstance().
compare(best, e.record) < 0) {
best = e.record;
}
}
return best;
}
private Set<String> maskCwaUgcs(Set<String> ugcs, AbstractWarningRecord rec) {
Set<String> cwaUgcs = getUgcsForCwa(rec.getXxxid());
if (cwaUgcs != null) {
HashSet<String> result = new HashSet<String>(ugcs);
result.removeAll(cwaUgcs);
return result;
} else {
return ugcs;
}
}
private Set<String> getUgcsForCwa(String cwa) {
return cwaUgcMap.get(cwa.toUpperCase());
}
private Set<String> safe(Set<String> set) {
return set != null ? set : new HashSet<String>();
}
@Override
protected void updateDisplay(IGraphicsTarget target) throws VizException {
if (recordsToLoad.isEmpty())
return;
List<AbstractWarningRecord> mergedWatches = mergeWatches(recordsToLoad);
for (AbstractWarningRecord watchRec : mergedWatches) {
/* If these things are missing, we can't do anything with the warning. */
if (watchRec.getPhensig() == null || watchRec.getEtn() == null ||
watchRec.getIssueTime() == null || watchRec.getStartTime() == null ||
watchRec.getEndTime() == null || watchRec.getXxxid() == null ||
watchRec.getWmoid() == null || watchRec.getAct() == null) {
continue;
}
WarningAction watchAct = WarningAction.valueOf(watchRec.getAct());
AbstractWarningRecord createShape = null;
boolean isWOU = "WOU".equals(watchRec.getPil());
AbstractWarningRecord prevRec = getPreviousRecordForEvent(watchRec);
Set<String> prevUgcs = new HashSet<String>(safe(
prevRec != null ? prevRec.getUgcZones() : null));
Set<String> newUgcs = null;
if (watchAct == WarningAction.NEW) {
if (isWOU) {
createShape = watchRec;
} else {
noteCwaUgcs(watchRec);
// As per requirements, we do not create frames for these.
}
} else if (watchAct == WarningAction.CON && isWOU) {
// As per requirements, we do not create frames for these.
} else if (watchAct == WarningAction.CON) {
/* No need to do anything because we really only care about
* the segments paired with the CON.
*/
} else if (watchAct == WarningAction.CAN) {
/* Not really expecting this for a WOU, but shouldn't cause
* a problem if there is one.
*/
newUgcs = prevUgcs;
newUgcs.removeAll(safe(watchRec.getUgcZones()));
createShape = watchRec;
} else if (watchAct == WarningAction.EXA || watchAct == WarningAction.EXB) {
if (!isWOU) {
noteCwaUgcs(watchRec);
}
newUgcs = prevUgcs;
newUgcs.addAll(safe(watchRec.getUgcZones()));
createShape = watchRec;
} else if (watchAct == WarningAction.EXP) {
if (isWOU) {
if (prevRec != null) {
if (! prevRec.getEndTime().equals(watchRec.getEndTime())) {
prevRec.setEndTime(watchRec.getEndTime());
}
}
/*
* Ideally we do not need to create a shape, but if we do
* not and time matching creates a frame for an EXP that is
* issued before the expiration time, the warning would show
* as still active on that frame.
*/
newUgcs = new HashSet<String>();
createShape = watchRec;
} else {
newUgcs = maskCwaUgcs(prevUgcs, watchRec);
createShape = watchRec;
}
}
if (watchAct == WarningAction.EXT || watchAct == WarningAction.EXB) {
/* This resource does not handle different expiration times
* for different UGCs.
*
* Also assuming this does not add/remove UGCs.
*/
if (prevRec != null && watchRec.getEndTime() != null) {
if (isWOU && watchRec.getUgcZones() != null && watchRec.getUgcZones().isEmpty()) {
/*
* This probably does not actually happen, but this
* is the only way we can support shortening the
* expiration time with the current design.
*/
prevRec.setEndTime(watchRec.getEndTime());
} else {
if (prevRec.getEndTime().before(watchRec.getEndTime())) {
prevRec.setEndTime(watchRec.getEndTime());
}
}
}
}
if (createShape != null) {
if (newUgcs != null)
createShape.setUgcZones(newUgcs);
else if (createShape.getUgcZones() == null)
createShape.setUgcZones(new HashSet<String>());
insertShape(target, createShape);
}
}
recordsToLoad.clear();
scheduleNextTime();
}
@Override
protected void initShape(IGraphicsTarget target,
AbstractWarningRecord record) throws VizException {
String key = getEntryMapKey(record);
WarningEntry entry = entryMap.get(key);
if (entry != null) {
createShape(target, entry);
}
}
protected void insertShape(IGraphicsTarget target, AbstractWarningRecord record) throws VizException {
String key = getEntryMapKey(record);
WarningEntry entry = entryMap.get(key);
if (entry == null) {
entry = new WarningEntry();
entryMap.put(key, entry);
}
entry.record = record; // ...possibly replacing an existing record
if (! record.getUgcZones().isEmpty()) {
setGeometry(record);
} else {
entry.record.setGeometry(null);
}
createShape(target, entry);
}
protected void createShape(IGraphicsTarget target, WarningEntry entry) throws VizException {
if (entry.shadedShape != null) {
entry.shadedShape.dispose();
entry.shadedShape = null;
}
AbstractWarningRecord record = entry.record;
if (record.getGeometry() != null) {
IShadedShape ss = target.createShadedShape(false,
descriptor.getGridGeometry(), false);
Geometry geo = (Geometry) record.getGeometry().clone();
JTSCompiler jtsCompiler = new JTSCompiler(ss, null,
this.descriptor, PointStyle.CROSS);
jtsCompiler.handle(geo, color);
ss.setFillPattern(FillPatterns.getGLPattern(record.getPhen()
.equals("TO") ? "VERTICAL" : "HORIZONTAL"));
ss.compile();
entry.shadedShape = ss;
}
}
/**
* Groups all the ugc zones with the same action, phensig, ETN, site, and
* issuance time.
*/
protected List<AbstractWarningRecord> mergeWatches(
List<AbstractWarningRecord> watchrecs) {
SimpleDateFormat sdfi = sdf.get();
Map<String, AbstractWarningRecord> watches = new HashMap<String, AbstractWarningRecord>();
for (AbstractWarningRecord watchrec : watchrecs) {
if (watchrec.getIssueTime() == null)
continue;
String key = watchrec.getAct() + '.' + watchrec.getPhensig() + '.'
+ watchrec.getEtn() + '.' + watchrec.getOfficeid() + '.'
+ sdfi.format(watchrec.getIssueTime().getTime());
AbstractWarningRecord watch = watches.get(key);
if (watch == null) {
watch = watchrec;
watches.put(key, watch);
} else {
Set<String> ugcZones = watch.getUgcZones();
if (ugcZones != null) {
ugcZones.addAll(watchrec.getUgcZones());
}
}
}
ArrayList<AbstractWarningRecord> mergedWatches = new ArrayList<AbstractWarningRecord>(
watches.values());
Collections.sort(mergedWatches, comparator);
return mergedWatches;
}
protected String getEntryMapKey(AbstractWarningRecord rec) {
return sdf.get().format(rec.getIssueTime().getTime()) + '.'
+ rec.getWmoid() + '.' + rec.getPhensig() + '.' + rec.getEtn();
}
@Override
protected String getEventKey(WarningEntry entry) {
AbstractWarningRecord r = entry.record;
return r.getPhensig() + '.' + r.getEtn();
}
private void noteCwaUgcs(AbstractWarningRecord watchRec) {
String siteKey = watchRec.getXxxid();
Set<String> recUgcs = watchRec.getUgcZones();
if (siteKey == null || recUgcs == null)
return;
synchronized (cwaUgcMap) {
Set<String> ugcs = cwaUgcMap.get(siteKey);
if (ugcs == null) {
ugcs = new HashSet<String>();
cwaUgcMap.put(siteKey, ugcs);
}
ugcs.addAll(recUgcs);
}
}
@Override
protected void disposeInternal() {
synchronized(this) {
if (timerTask != null)
timerTask.cancel();
}
super.disposeInternal();
}
private void scheduleNextTime() {
/* TODO: This is a race condition. Need the last frame time,
* but getLastFrameTimeRange() is also a race condition. So really need
* last drawn last frame time, but LAST_FRAME_ADJ is an hour ahead??!
*/
long vnow = SimulatedTime.getSystemTime().getMillis();
AbstractWarningRecord best = null;
for (WarningEntry entry : entryMap.values()) {
AbstractWarningRecord rec = entry.record;
if (rec.getEndTime().getTimeInMillis() >= vnow &&
(best == null || rec.getEndTime().before(best.getEndTime()))) {
best = rec;
}
}
if (best != null) {
scheduleTimer(best.getEndTime().getTimeInMillis() - vnow);
} else {
scheduleTimer(-1);
}
}
private synchronized void scheduleTimer(long delay) {
if (timerTask != null) {
timerTask.cancel();
}
if (delay >= 0) {
timerTask = new WatchesTimerTask();
getTimer().schedule(timerTask, delay);
} else {
timerTask = null;
}
}
private Timer getTimer() {
if (timer == null) {
synchronized (WouWcnWatchesResource.class) {
if (timer == null) {
timer = new Timer(WouWcnWatchesResource.class.getName() + " Timer");
}
}
}
return timer;
}
@Override
public void timechanged() {
issueRefresh();
scheduleNextTime();
}
protected class WatchesTimerTask extends TimerTask {
@Override
public void run() {
timechanged();
}
}
protected static class WouWcnWatchesComparator implements Comparator<AbstractWarningRecord> {
static final WouWcnWatchesComparator instance = new WouWcnWatchesComparator();
public static Comparator<AbstractWarningRecord> getInstance() {
return instance;
}
@Override
public int compare(AbstractWarningRecord a, AbstractWarningRecord b) {
int r;
Calendar ca = a.getIssueTime();
Calendar cb = b.getIssueTime();
if (ca == null) {
if (cb == null)
r = 0;
else
return 1;
} else if (cb == null)
return -1;
else
r = ca.compareTo(cb);
if (r != 0)
return r;
// The point of this is to handle the BBB field, but it makes the TTAAii part significant too...
String sa = safeWmo(a);
String sb = safeWmo(b);
r = sa.compareTo(sb);
if (r != 0)
return r;
r = a.getSeg() - b.getSeg();
if (r != 0)
return r;
return 0;
}
}
private static String safeWmo(AbstractWarningRecord record) {
String wmo = record.getWmoid();
return wmo != null ? wmo : "TTAA00 CCCC 000000";
}
}

View file

@ -0,0 +1,56 @@
package com.raytheon.viz.warnings.rsc;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.uf.viz.core.rsc.LoadProperties;
/**
* Displays WOUs updated by WCNs
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 2014-08-28 ASM #15682 D. Friemdan Initial creation
* </pre>
*
*/
@XmlAccessorType(XmlAccessType.NONE)
public class WouWcnWatchesResourceData extends WWAResourceData {
@Override
protected AbstractVizResource<?, ?> constructResource(
LoadProperties loadProperties, PluginDataObject[] objects)
throws VizException {
// add records
records = new ArrayList<AbstractWarningRecord>(objects.length);
for (int i = 0; i < objects.length; i++) {
AbstractWarningRecord r = (AbstractWarningRecord) objects[i];
records.add(r);
}
return new WouWcnWatchesResource(this, loadProperties);
}
@Override
protected boolean isRecordTimeImportant(AbstractWarningRecord warnRec) {
WarningAction act = WarningAction.valueOf(warnRec.getAct());
if (("WOU".equals(warnRec.getPil()) && WarningAction.CON == act) ||
("WCN".equals(warnRec.getPil()) && WarningAction.NEW == act)) {
return false;
} else {
return super.isRecordTimeImportant(warnRec);
}
}
}

View file

@ -43,6 +43,9 @@
// 5km CONUS MOSGuide precip probability
TP0.254mm_T170L42A-NCEP-MDL_1073x689_21600-0 POP6hr
TP0.254mm_T170L42A-NCEP-MDL_1073x689_43200-0 POP12hr
// Added for DCS_266 HRRR, removes F00 precip from any model if it arrives
TP_0-0 PWS64
WEASD_0-0 PWS64
// 5km CONUS MOSGuide cumulative precip
// these are unnessecary since A2 always appends duration
TP_T170L42A-NCEP-MDL_1073x689_21600-0 TP6hr

View file

@ -24,6 +24,7 @@
<name>HRRR</name>
<center>7</center>
<subcenter>0</subcenter>
<grid>184</grid>
<process>
<id>83</id>
</process>

View file

@ -1,5 +1,6 @@
# Product Discipline 0 - Meteorological products, Parameter Category 16: Forecast Radar Imagery
# 192-254 Reserved for Local Use
3:3:Echo Top:m:RETOP
192:192:Derived radar reflectivity backscatter from rain:mm^6/m^3:REFZR
193:193:Derived radar reflectivity backscatter from ice:mm^6/m^3:REFZI
194:194:Derived radar reflectivity backscatter from parameterized convection:mm^6/m^3:REFZC

View file

@ -54,6 +54,31 @@
</contourStyle>
</styleRule>
<!-- HRRR -->
<styleRule>
<paramLevelMatches>
<parameter>MaxWHRRR</parameter>
</paramLevelMatches>
<contourStyle>
<displayUnits>kts</displayUnits>
<contourLabeling labelSpacing="4">
<increment>10</increment>
</contourLabeling>
</contourStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<creatingEntity>HRRR</creatingEntity>
<parameter>CPOFP</parameter>
</paramLevelMatches>
<contourStyle>
<displayUnits>%</displayUnits>
<contourLabeling labelSpacing="4">
<values>0 10 20 30 40 50 60 70 80 90 100</values>
</contourLabeling>
</contourStyle>
</styleRule>
<!--
* GH, GHxSM, zAGL
dam | 0.1 | 0.0 | 4 | i4 | |..|8000F0FF| | 0 | 50
@ -3978,6 +4003,7 @@ kts | 1.0 | 0.0 | 4 | | |..|8000F0FF|,400,0.5,,0 | 8 | \
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
</paramLevelMatches>
<contourStyle>
<displayUnits label="g/Kg/12hr">((g/kg)/h*12)*-1.0</displayUnits>
@ -4096,6 +4122,7 @@ in | .03937 | 0 | 4 | | |..|8000F0FF| | 16 | \
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
</paramLevelMatches>
<contourStyle>
<displayUnits label="-ubar/s">(Pa/s)*-0.1</displayUnits>
@ -4116,6 +4143,7 @@ in | .03937 | 0 | 4 | | |..|8000F0FF| | 16 | \
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
<parameter>AV</parameter>
<parameter>RV</parameter>
<parameter>geoVort</parameter>
@ -4143,6 +4171,7 @@ in | .03937 | 0 | 4 | | |..|8000F0FF| | 16 | \
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
<parameter>VAdv</parameter>
<parameter>dVAdv</parameter>
<parameter>PIVA</parameter>

View file

@ -50,6 +50,39 @@
<displayUnits>ft</displayUnits>
</imageStyle>
</styleRule>
<!-- HRRR -->
<styleRule>
<paramLevelMatches>
<parameter>MaxWHRRR</parameter>
</paramLevelMatches>
<imageStyle>
<displayUnits>kts</displayUnits>
<defaultColormap>Grid/gridded data</defaultColormap>
</imageStyle>
</styleRule>
<styleRule>
<paramLevelMatches>
<creatingEntity>HRRR</creatingEntity>
<parameter>CPOFP</parameter>
</paramLevelMatches>
<imageStyle>
<interpolate>false</interpolate>
<displayUnits>%</displayUnits>
<range scale="LINEAR">
<minValue>-50</minValue>
<maxValue>100</maxValue>
</range>
<defaultColormap>Grid/gridded data</defaultColormap>
<dataMapping>
<entry pixelValue="-50.0" operator="=" label="" />
<entry pixelValue="0" operator="&gt;" displayValue='0.0' />
<entry pixelValue="25" operator="&gt;" displayValue='25.0' />
<entry pixelValue="50" operator="&gt;" displayValue='50.0' />
<entry pixelValue="75" operator="&gt;" displayValue='75.0' />
</dataMapping>
</imageStyle>
</styleRule>
<!--
* GH, GHxSM, Topo, zAGL
km | 0.001 | 0.0 | 0 | 1 | | | 29 | -1 | 0.1
@ -4472,6 +4505,7 @@
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
</paramLevelMatches>
<imageStyle>
<displayUnits label="g/kg/12hr">((g/kg)/(h*12))*-0.001</displayUnits>
@ -4846,6 +4880,7 @@
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
</paramLevelMatches>
<imageStyle>
<displayUnits label="-ubar/s">(Pa/s)*-0.1</displayUnits>
@ -4871,6 +4906,7 @@
<creatingEntity>HiResW-ARW-AK</creatingEntity>
<creatingEntity>HiResW-ARW-PR</creatingEntity>
<creatingEntity>HiResW-ARW-SJU</creatingEntity>
<creatingEntity>HRRR</creatingEntity>
<parameter>AV</parameter>
<parameter>Tdef</parameter>
<parameter>geoVort</parameter>

View file

@ -0,0 +1,260 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<colorMap xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType">
<!-- this is a converted legacy colomap - dec2012 naming -->
<color r="0.0" g="0.0" b="0.0" a="0.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.000000" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.580392" g="0.607843" b="0.709804" a="1.0"/>
<color r="0.572549" g="0.603922" b="0.709804" a="1.0"/>
<color r="0.560784" g="0.596078" b="0.705882" a="1.0"/>
<color r="0.552941" g="0.588235" b="0.705882" a="1.0"/>
<color r="0.541176" g="0.580392" b="0.701961" a="1.0"/>
<color r="0.533333" g="0.572549" b="0.701961" a="1.0"/>
<color r="0.521569" g="0.564706" b="0.698039" a="1.0"/>
<color r="0.513725" g="0.556863" b="0.694118" a="1.0"/>
<color r="0.501961" g="0.552941" b="0.694118" a="1.0"/>
<color r="0.494118" g="0.545098" b="0.690196" a="1.0"/>
<color r="0.482353" g="0.537255" b="0.690196" a="1.0"/>
<color r="0.470588" g="0.529412" b="0.686275" a="1.0"/>
<color r="0.462745" g="0.521569" b="0.686275" a="1.0"/>
<color r="0.450980" g="0.513725" b="0.682353" a="1.0"/>
<color r="0.443137" g="0.505882" b="0.678431" a="1.0"/>
<color r="0.431373" g="0.498039" b="0.678431" a="1.0"/>
<color r="0.423529" g="0.494118" b="0.674510" a="1.0"/>
<color r="0.411765" g="0.486275" b="0.674510" a="1.0"/>
<color r="0.403922" g="0.478431" b="0.670588" a="1.0"/>
<color r="0.392157" g="0.470588" b="0.666667" a="1.0"/>
<color r="0.384314" g="0.462745" b="0.666667" a="1.0"/>
<color r="0.372549" g="0.454902" b="0.662745" a="1.0"/>
<color r="0.360784" g="0.447059" b="0.662745" a="1.0"/>
<color r="0.352941" g="0.439216" b="0.658824" a="1.0"/>
<color r="0.341176" g="0.435294" b="0.658824" a="1.0"/>
<color r="0.333333" g="0.427451" b="0.654902" a="1.0"/>
<color r="0.321569" g="0.419608" b="0.650980" a="1.0"/>
<color r="0.313725" g="0.411765" b="0.650980" a="1.0"/>
<color r="0.301961" g="0.403922" b="0.647059" a="1.0"/>
<color r="0.294118" g="0.396078" b="0.647059" a="1.0"/>
<color r="0.270588" g="0.380392" b="0.639216" a="1.0"/>
<color r="0.270588" g="0.392157" b="0.639216" a="1.0"/>
<color r="0.274510" g="0.407843" b="0.643137" a="1.0"/>
<color r="0.278431" g="0.419608" b="0.643137" a="1.0"/>
<color r="0.278431" g="0.435294" b="0.647059" a="1.0"/>
<color r="0.282353" g="0.450980" b="0.647059" a="1.0"/>
<color r="0.286275" g="0.462745" b="0.650980" a="1.0"/>
<color r="0.290196" g="0.478431" b="0.654902" a="1.0"/>
<color r="0.290196" g="0.494118" b="0.654902" a="1.0"/>
<color r="0.294118" g="0.505882" b="0.658824" a="1.0"/>
<color r="0.298039" g="0.521569" b="0.658824" a="1.0"/>
<color r="0.298039" g="0.537255" b="0.662745" a="1.0"/>
<color r="0.301961" g="0.549020" b="0.666667" a="1.0"/>
<color r="0.305882" g="0.564706" b="0.666667" a="1.0"/>
<color r="0.309804" g="0.580392" b="0.670588" a="1.0"/>
<color r="0.309804" g="0.592157" b="0.670588" a="1.0"/>
<color r="0.313725" g="0.607843" b="0.674510" a="1.0"/>
<color r="0.317647" g="0.623529" b="0.678431" a="1.0"/>
<color r="0.317647" g="0.635294" b="0.678431" a="1.0"/>
<color r="0.321569" g="0.650980" b="0.682353" a="1.0"/>
<color r="0.325490" g="0.666667" b="0.682353" a="1.0"/>
<color r="0.329412" g="0.678431" b="0.686275" a="1.0"/>
<color r="0.329412" g="0.694118" b="0.690196" a="1.0"/>
<color r="0.333333" g="0.709804" b="0.690196" a="1.0"/>
<color r="0.337255" g="0.721569" b="0.694118" a="1.0"/>
<color r="0.337255" g="0.737255" b="0.694118" a="1.0"/>
<color r="0.341176" g="0.752941" b="0.698039" a="1.0"/>
<color r="0.345098" g="0.764706" b="0.701961" a="1.0"/>
<color r="0.349020" g="0.780392" b="0.701961" a="1.0"/>
<color r="0.349020" g="0.796078" b="0.705882" a="1.0"/>
<color r="0.352941" g="0.807843" b="0.705882" a="1.0"/>
<color r="0.360784" g="0.839216" b="0.713725" a="1.0"/>
<color r="0.356863" g="0.831373" b="0.701961" a="1.0"/>
<color r="0.349020" g="0.823529" b="0.686275" a="1.0"/>
<color r="0.341176" g="0.811765" b="0.674510" a="1.0"/>
<color r="0.337255" g="0.803922" b="0.658824" a="1.0"/>
<color r="0.329412" g="0.792157" b="0.647059" a="1.0"/>
<color r="0.321569" g="0.784314" b="0.631373" a="1.0"/>
<color r="0.317647" g="0.772549" b="0.619608" a="1.0"/>
<color r="0.309804" g="0.764706" b="0.603922" a="1.0"/>
<color r="0.301961" g="0.752941" b="0.592157" a="1.0"/>
<color r="0.298039" g="0.745098" b="0.576471" a="1.0"/>
<color r="0.290196" g="0.737255" b="0.564706" a="1.0"/>
<color r="0.282353" g="0.725490" b="0.549020" a="1.0"/>
<color r="0.278431" g="0.717647" b="0.537255" a="1.0"/>
<color r="0.270588" g="0.705882" b="0.521569" a="1.0"/>
<color r="0.262745" g="0.698039" b="0.509804" a="1.0"/>
<color r="0.258824" g="0.686275" b="0.494118" a="1.0"/>
<color r="0.250980" g="0.678431" b="0.482353" a="1.0"/>
<color r="0.243137" g="0.666667" b="0.466667" a="1.0"/>
<color r="0.239216" g="0.658824" b="0.454902" a="1.0"/>
<color r="0.231373" g="0.650980" b="0.439216" a="1.0"/>
<color r="0.223529" g="0.639216" b="0.427451" a="1.0"/>
<color r="0.219608" g="0.631373" b="0.411765" a="1.0"/>
<color r="0.211765" g="0.619608" b="0.400000" a="1.0"/>
<color r="0.203922" g="0.611765" b="0.384314" a="1.0"/>
<color r="0.200000" g="0.600000" b="0.372549" a="1.0"/>
<color r="0.192157" g="0.592157" b="0.356863" a="1.0"/>
<color r="0.184314" g="0.580392" b="0.345098" a="1.0"/>
<color r="0.180392" g="0.572549" b="0.329412" a="1.0"/>
<color r="0.172549" g="0.560784" b="0.317647" a="1.0"/>
<color r="0.164706" g="0.552941" b="0.301961" a="1.0"/>
<color r="0.160784" g="0.545098" b="0.290196" a="1.0"/>
<color r="0.152941" g="0.533333" b="0.274510" a="1.0"/>
<color r="0.145098" g="0.525490" b="0.262745" a="1.0"/>
<color r="0.141176" g="0.513725" b="0.247059" a="1.0"/>
<color r="0.133333" g="0.505882" b="0.235294" a="1.0"/>
<color r="0.125490" g="0.494118" b="0.219608" a="1.0"/>
<color r="0.121569" g="0.486275" b="0.207843" a="1.0"/>
<color r="0.113725" g="0.474510" b="0.192157" a="1.0"/>
<color r="0.105882" g="0.466667" b="0.180392" a="1.0"/>
<color r="0.101961" g="0.458824" b="0.164706" a="1.0"/>
<color r="0.094118" g="0.447059" b="0.152941" a="1.0"/>
<color r="0.086275" g="0.439216" b="0.137255" a="1.0"/>
<color r="0.082353" g="0.427451" b="0.125490" a="1.0"/>
<color r="0.074510" g="0.419608" b="0.109804" a="1.0"/>
<color r="0.066667" g="0.407843" b="0.098039" a="1.0"/>
<color r="0.062745" g="0.400000" b="0.082353" a="1.0"/>
<color r="0.054902" g="0.388235" b="0.070588" a="1.0"/>
<color r="0.039216" g="0.368627" b="0.039216" a="1.0"/>
<color r="0.082353" g="0.388235" b="0.039216" a="1.0"/>
<color r="0.129412" g="0.407843" b="0.039216" a="1.0"/>
<color r="0.176471" g="0.431373" b="0.035294" a="1.0"/>
<color r="0.219608" g="0.450980" b="0.035294" a="1.0"/>
<color r="0.266667" g="0.474510" b="0.031373" a="1.0"/>
<color r="0.313725" g="0.494118" b="0.031373" a="1.0"/>
<color r="0.356863" g="0.517647" b="0.027451" a="1.0"/>
<color r="0.403922" g="0.537255" b="0.027451" a="1.0"/>
<color r="0.450980" g="0.556863" b="0.023529" a="1.0"/>
<color r="0.494118" g="0.580392" b="0.023529" a="1.0"/>
<color r="0.541176" g="0.600000" b="0.019608" a="1.0"/>
<color r="0.588235" g="0.623529" b="0.019608" a="1.0"/>
<color r="0.631373" g="0.643137" b="0.015686" a="1.0"/>
<color r="0.678431" g="0.666667" b="0.015686" a="1.0"/>
<color r="0.725490" g="0.686275" b="0.011765" a="1.0"/>
<color r="0.768627" g="0.705882" b="0.011765" a="1.0"/>
<color r="0.815686" g="0.729412" b="0.007843" a="1.0"/>
<color r="0.862745" g="0.749020" b="0.007843" a="1.0"/>
<color r="0.905882" g="0.772549" b="0.003922" a="1.0"/>
<color r="0.949020" g="0.776471" b="0.000000" a="1.0"/>
<color r="0.949020" g="0.768627" b="0.000000" a="1.0"/>
<color r="0.949020" g="0.756863" b="0.000000" a="1.0"/>
<color r="0.952941" g="0.745098" b="0.000000" a="1.0"/>
<color r="0.952941" g="0.737255" b="0.000000" a="1.0"/>
<color r="0.956863" g="0.725490" b="0.000000" a="1.0"/>
<color r="0.956863" g="0.713725" b="0.000000" a="1.0"/>
<color r="0.960784" g="0.705882" b="0.000000" a="1.0"/>
<color r="0.960784" g="0.694118" b="0.000000" a="1.0"/>
<color r="0.964706" g="0.682353" b="0.000000" a="1.0"/>
<color r="0.964706" g="0.674510" b="0.000000" a="1.0"/>
<color r="0.968627" g="0.662745" b="0.000000" a="1.0"/>
<color r="0.968627" g="0.650980" b="0.000000" a="1.0"/>
<color r="0.972549" g="0.643137" b="0.000000" a="1.0"/>
<color r="0.972549" g="0.631373" b="0.000000" a="1.0"/>
<color r="0.972549" g="0.619608" b="0.000000" a="1.0"/>
<color r="0.976471" g="0.611765" b="0.000000" a="1.0"/>
<color r="0.976471" g="0.600000" b="0.000000" a="1.0"/>
<color r="0.980392" g="0.588235" b="0.000000" a="1.0"/>
<color r="0.980392" g="0.580392" b="0.000000" a="1.0"/>
<color r="0.984314" g="0.568627" b="0.000000" a="1.0"/>
<color r="0.984314" g="0.556863" b="0.000000" a="1.0"/>
<color r="0.988235" g="0.549020" b="0.000000" a="1.0"/>
<color r="0.988235" g="0.537255" b="0.000000" a="1.0"/>
<color r="0.992157" g="0.525490" b="0.000000" a="1.0"/>
<color r="0.992157" g="0.517647" b="0.000000" a="1.0"/>
<color r="0.996078" g="0.505882" b="0.000000" a="1.0"/>
<color r="0.996078" g="0.494118" b="0.000000" a="1.0"/>
<color r="0.968627" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.952941" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.937255" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.921569" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.905882" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.886275" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.870588" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.854902" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.839216" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.823529" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.803922" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.788235" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.772549" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.756863" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.737255" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.721569" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.705882" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.690196" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.674510" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.654902" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.639216" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.623529" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.607843" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.588235" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.572549" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.556863" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.541176" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.525490" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.505882" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.490196" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.474510" g="0.000000" b="0.000000" a="1.0"/>
<color r="0.458824" g="0.000000" b="0.000000" a="1.0"/>
<color r="1.000000" g="1.000000" b="1.000000" a="1.0"/>
<color r="1.000000" g="0.972549" b="1.000000" a="1.0"/>
<color r="1.000000" g="0.941176" b="0.996078" a="1.0"/>
<color r="1.000000" g="0.909804" b="0.992157" a="1.0"/>
<color r="1.000000" g="0.878431" b="0.988235" a="1.0"/>
<color r="1.000000" g="0.847059" b="0.984314" a="1.0"/>
<color r="1.000000" g="0.815686" b="0.980392" a="1.0"/>
<color r="1.000000" g="0.784314" b="0.976471" a="1.0"/>
<color r="1.000000" g="0.752941" b="0.972549" a="1.0"/>
<color r="1.000000" g="0.721569" b="0.968627" a="1.0"/>
<color r="1.000000" g="0.690196" b="0.964706" a="1.0"/>
<color r="1.000000" g="0.658824" b="0.960784" a="1.0"/>
<color r="1.000000" g="0.627451" b="0.956863" a="1.0"/>
<color r="1.000000" g="0.596078" b="0.952941" a="1.0"/>
<color r="1.000000" g="0.564706" b="0.949020" a="1.0"/>
<color r="1.000000" g="0.533333" b="0.945098" a="1.0"/>
<color r="1.000000" g="0.501961" b="0.945098" a="1.0"/>
<color r="1.000000" g="0.470588" b="0.941176" a="1.0"/>
<color r="1.000000" g="0.439216" b="0.937255" a="1.0"/>
<color r="1.000000" g="0.407843" b="0.933333" a="1.0"/>
<color r="1.000000" g="0.376471" b="0.929412" a="1.0"/>
<color r="1.000000" g="0.345098" b="0.925490" a="1.0"/>
<color r="1.000000" g="0.313725" b="0.921569" a="1.0"/>
<color r="1.000000" g="0.282353" b="0.917647" a="1.0"/>
<color r="1.000000" g="0.250980" b="0.913725" a="1.0"/>
<color r="1.000000" g="0.219608" b="0.909804" a="1.0"/>
<color r="1.000000" g="0.188235" b="0.905882" a="1.0"/>
<color r="1.000000" g="0.156863" b="0.901961" a="1.0"/>
<color r="1.000000" g="0.125490" b="0.898039" a="1.0"/>
<color r="1.000000" g="0.094118" b="0.894118" a="1.0"/>
<color r="1.000000" g="0.062745" b="0.890196" a="1.0"/>
<color r="0.701961" g="0.000000" b="1.000000" a="1.0"/>
<color r="0.686275" g="0.000000" b="0.992157" a="1.0"/>
<color r="0.666667" g="0.000000" b="0.984314" a="1.0"/>
<color r="0.650980" g="0.000000" b="0.972549" a="1.0"/>
<color r="0.631373" g="0.000000" b="0.964706" a="1.0"/>
<color r="0.611765" g="0.000000" b="0.952941" a="1.0"/>
<color r="0.596078" g="0.000000" b="0.945098" a="1.0"/>
<color r="0.576471" g="0.000000" b="0.937255" a="1.0"/>
<color r="0.556863" g="0.000000" b="0.925490" a="1.0"/>
<color r="0.541176" g="0.000000" b="0.917647" a="1.0"/>
<color r="0.521569" g="0.000000" b="0.905882" a="1.0"/>
<color r="0.501961" g="0.000000" b="0.898039" a="1.0"/>
<color r="0.486275" g="0.000000" b="0.890196" a="1.0"/>
<color r="0.466667" g="0.000000" b="0.878431" a="1.0"/>
<color r="0.447059" g="0.000000" b="0.870588" a="1.0"/>
<color r="0.431373" g="0.000000" b="0.858824" a="1.0"/>
<color r="0.411765" g="0.000000" b="0.850980" a="1.0"/>
<color r="0.019608" g="0.925490" b="0.941176" a="1.0"/>
<color r="0.019608" g="0.866667" b="0.878431" a="1.0"/>
<color r="0.019608" g="0.803922" b="0.815686" a="1.0"/>
<color r="0.015686" g="0.741176" b="0.752941" a="1.0"/>
<color r="0.015686" g="0.682353" b="0.690196" a="1.0"/>
<color r="0.015686" g="0.619608" b="0.627451" a="1.0"/>
<color r="0.011765" g="0.556863" b="0.564706" a="1.0"/>
<color r="0.011765" g="0.494118" b="0.501961" a="1.0"/>
<color r="0.011765" g="0.435294" b="0.439216" a="1.0"/>
<color r="0.007843" g="0.372549" b="0.376471" a="1.0"/>
<color r="0.007843" g="0.309804" b="0.313725" a="1.0"/>
<color r="0.007843" g="0.247059" b="0.250980" a="1.0"/>
<color r="0.003922" g="0.188235" b="0.188235" a="1.0"/>
<color r="0.003922" g="0.125490" b="0.125490" a="1.0"/>
<color r="0.227451" g="0.403922" b="0.709804" a="1.0"/>
<color r="1.0" g="1.0" b="1.0" a="1.0"/>
</colorMap>

View file

@ -61,6 +61,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
* Apr 24, 2013 1943 jsanchez Marked areaConfig as Deprecated.
* Oct 22, 2013 2361 njensen Removed ISerializableObject
* Apr 28, 2014 3033 jsanchez Properly handled back up configuration (*.xml) files.
* Aug 28, 2014 ASM #15658 D. Friedman Add marine zone watch wording option.
* </pre>
*
* @author chammack
@ -103,6 +104,9 @@ public class WarngenConfiguration {
@XmlElement(name = "includedWatch")
private String[] includedWatches;
@XmlElement
private boolean includeMarineAreasInWatches;
@XmlElementWrapper(name = "durations")
@XmlElement(name = "duration")
private int[] durations;
@ -392,6 +396,14 @@ public class WarngenConfiguration {
return includedWatches;
}
public boolean isIncludeMarineAreasInWatches() {
return includeMarineAreasInWatches;
}
public void setIncludeMarineAreasInWatches(boolean includeMarineAreasInWatches) {
this.includeMarineAreasInWatches = includeMarineAreasInWatches;
}
public boolean getEnableRestart() {
return enableRestart;
}

View file

@ -12,6 +12,8 @@
##### Evan Bookbinder 09-20-2013 Fixed rural area otherPoints in pathcast section, added rural phrase
##### Qinglu Lin 03-17-2014 DR 16309. Updated inserttorwatches and insertsvrwatches.
##### Qinglu Lin 05-21-2014 DR 16309. Updated inserttorwatches and insertsvrwatches by changing 'FOR##' to 'FOR ##'.
##### D. Friedman 08-28-2014 ASM #15658. Add marine watch wording.
##### Qinglu Lin 08-29-2014 ASM #15551. Overhauled inserttorwatches and insertsvrwatches.
####################################################################################################
#*
Mile Marker Test Code
@ -189,94 +191,111 @@ ${drainage.name}##
########END MACRO
#macro(inserttorwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($keys = [])
#set($mymap = {})
#set($tornadoWatches = [])
#set($ALSO = "")
#foreach(${watch} in ${watches})
#if(${watch.getPhenSig()} == 'TO.A')
#set($key = ${watch.action} + ${watch.etn} + ${watch.startTime} + ${watch.endTime})
#if (${list.contains(${keys}, $key)})
#set($value = ${mymap.get($key)})
#set($success = $tornadoWatches.add($watch))
#end
#end
#set($lastEtn = "")
#set($lastEndTime = "")
#foreach(${watch} in ${tornadoWatches})
#if($lastEtn != "" && ${watch.etn} != ${lastEtn})
. ##
#end
#set($endTime = ${watch.endTime})
#if(${watch.etn} == ${lastEtn})
#if(${endTime} == ${lastEndTime})
...##
#else
#set($value = [])
#set($success = $keys.add($key))
...UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#end
#set($success = $value.add($watch))
#set($success = ${mymap.put($key,$value)})
#else
A TORNADO WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#set($ALSO = " ALSO")
#end
#end
#set($torWatchAlso = "")
#foreach(${key} in ${keys})
#set($tornadoWatches = ${mymap.get($key)})
#set($tornadoWatch = ${tornadoWatches.get(0)})
A TORNADO WATCH ${torWatchAlso}REMAINS IN EFFECT UNTIL ${dateUtil.format(${tornadoWatch.endTime}, ${timeFormat.plain}, 15, ${localtimezone})}##
${dateUtil.period(${tornadoWatch.endTime},${timeFormat.plain}, 15, ${localtimezone})}##
#if(${secondtimezone})
/${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
#end
FOR ##
#set($numPortions = ${list.size(${tornadoWatches})})
#set($count = 0)
#foreach(${watch} in ${tornadoWatches})
#set($count = $count + 1)
#if(!${watch.marineAreas})
#areaFormat(${watch.partOfState} true false true)${watch.state}##
#if($count == $numPortions - 1)
AND ##
#elseif($count < $numPortions)
...##
#else
#formatMarineAreas(${watch.marineAreas})
#end
#set($lastEtn = ${watch.etn})
#set($lastEndTime = ${watch.endTime})
#end
#set($torWatchAlso = "ALSO ")
. ##
#if(${lastEtn} != "")
.
#end
#end
########END MACRO
#macro(insertsvrwatches $watches $list $secondtimezone $dateUtil $timeFormat)
#set($keys = [])
#set($mymap = {})
#set($svrWatches = [])
#set($ALSO = "")
#foreach(${watch} in ${watches})
#if(${watch.getPhenSig()} == 'SV.A')
#set($key = ${watch.action} + ${watch.etn} + ${watch.startTime} + ${watch.endTime})
#if (${list.contains(${keys}, $key)})
#set($value = ${mymap.get($key)})
#set($success = $svrWatches.add($watch))
#end
#end
#set($lastEtn = "")
#set($lastEndTime = "")
#foreach(${watch} in ${svrWatches})
#if($lastEtn != "" && ${watch.etn} != ${lastEtn})
. ##
#end
#set($endTime = ${watch.endTime})
#if(${watch.etn} == ${lastEtn})
#if(${endTime} == ${lastEndTime})
...##
#else
#set($value = [])
#set($success = $keys.add($key))
...UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#end
#set($success = $value.add($watch))
#set($success = ${mymap.put($key,$value)})
#else
A SEVERE THUNDERSTORM WATCH${ALSO} REMAINS IN EFFECT UNTIL ${dateUtil.format(${endTime}, ${timeFormat.plain}, 15, ${localtimezone})} FOR ##
#set($ALSO = " ALSO")
#end
#end
#set($svrWatchAlso = "")
#foreach(${key} in ${keys})
#set($severeWatches = ${mymap.get($key)})
#set($svrWatch = ${severeWatches.get(0)})
A SEVERE THUNDERSTORM WATCH ${svrWatchAlso}REMAINS IN EFFECT UNTIL ${dateUtil.format(${svrWatch.endTime}, ${timeFormat.plain}, 15, ${localtimezone})}##
${dateUtil.period(${svrWatch.endTime},${timeFormat.plain}, 15, ${localtimezone})}##
#if(${secondtimezone})
/${dateUtil.format(${watch.getEndTime()}, ${timeFormat.plain}, 15, ${secondtimezone})}/##
#end
FOR ##
#set($numPortions = ${list.size(${severeWatches})})
#set($count = 0)
#foreach(${watch} in ${severeWatches})
#set($count = $count + 1)
#if(!${watch.marineAreas})
#areaFormat(${watch.partOfState} true false true)${watch.state}##
#if($count == $numPortions - 1)
#else
#formatMarineAreas(${watch.marineAreas})
#end
#set($lastEtn = ${watch.etn})
#set($lastEndTime = ${watch.endTime})
#end
#if(${lastEtn} != "")
.
#end
#end
########END MACRO
#macro(formatMarineAreas $marineAreas)
#set($macount = 0)
#set($numMarineAreas = ${list.size(${marineAreas})})
#foreach(${marineArea} in ${marineAreas})
#set($macount = $macount + 1)
#if(${marineArea}=="THE ADJACENT COASTAL WATERS" && $macount > 1)
OTHER ADJACENT COASTAL WATERS##
#else
${marineArea}##
#end
#if($macount == $numMarineAreas - 1)
AND ##
#elseif($count < $numPortions)
#elseif($macount < $numMarineAreas)
...##
#end
#end
#set($svrWatchAlso = "ALSO ")
. ##
#end
#end
########END
########END MACRO
#macro(printcoords $coordinates $list)
#set($count = 0)

View file

@ -58,6 +58,9 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<includedWatch>SV.A</includedWatch>
</includedWatches>
<!-- Include references to marine zones for watches. See marineZoneWording.xml -->
<includeMarineAreasInWatches>true</includeMarineAreasInWatches>
<!-- durations: the list of possible durations -->
<defaultDuration>60</defaultDuration>
<durations>

View file

@ -0,0 +1,24 @@
<!--
This file defines grouping and replacement text for marine zones in the watch
wording of the template.
For each entry, the "match" attribute defines a regular expression that is
used to match marine zone UGCs. The "replace" attribute defines the text to
pass to the template. If the replacement text is empty, the marine zone
will not be used. If the "replace" attribute is not present, the marine
zone's original name is used.
Marine zone UGCs are matched against entries in their given order; the first
match is used. The order of the entries also determines the order of the
values passed to the template.
-->
<zoneWordingConfig>
<entry match="^LEZ.*" replace="THE ADJACENT COASTAL WATERS OF LAKE ERIE" />
<entry match="^LHZ.*" replace="THE ADJACENT COASTAL WATERS OF LAKE HURON" />
<entry match="^LMZ.*" replace="THE ADJACENT COASTAL WATERS OF LAKE MICHIGAN" />
<entry match="^LOZ.*" replace="THE ADJACENT COASTAL WATERS OF LAKE ONTARIO" />
<entry match="^LSZ.*" replace="THE ADJACENT COASTAL WATERS OF LAKE SUPERIOR" />
<entry match="^LCZ.*" replace="THE ADJACENT COASTAL WATERS OF LAKE SAINT CLAIRE" />
<entry match="^SLZ.*" replace="" /> <!-- Saint Lawrence River -->
<entry match="^.*" replace="THE ADJACENT COASTAL WATERS" />
</zoneWordingConfig>

View file

@ -61,6 +61,9 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<includedWatch>SV.A</includedWatch>
</includedWatches>
<!-- Include references to marine zones for watches. See marineZoneWording.xml. -->
<includeMarineAreasInWatches>true</includeMarineAreasInWatches>
<!-- durations: the list of possible durations of the warning -->
<defaultDuration>30</defaultDuration>
<durations>

View file

@ -63,6 +63,9 @@ turned on unless the corresponding .vm file is turned on in a given template's .
<includedWatch>SV.A</includedWatch>
</includedWatches>
<!-- Include references to marine zones for watches. See marineZoneWording.xml. -->
<includeMarineAreasInWatches>true</includeMarineAreasInWatches>
<!-- durations: the list of possible durations of the svs -->
<!-- THIS REALLY SERVES NO PURPOSE BUT WILL CRASH WARNGEN IF REMVOED -->
<defaultDuration>30</defaultDuration>