Merge pull request #16 from tiffanycmeyer13/unidata_20.3.2-WWAupdates

WWA Updates for Unidata specific changes (manually merged v18.2.1 cha…
This commit is contained in:
srcarter3 2023-02-06 11:28:19 -07:00 committed by GitHub
commit 5c7510f04e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 2053 additions and 342 deletions

View file

@ -0,0 +1,192 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="true"/>
<capabilities>
<capability xsi:type="magnificationCapability" magnification="1.0"/>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="wwaResourceData" name="Flood Watches, Warnings, Advisories" hideSampling="false" isRequeryNecessaryOnTimeMatch="true" isUpdatingOnMetadataOnly="false" retrieveData="false">
<metadataMap>
<mapping key="phensig">
<constraint constraintType="IN" constraintValue="FA.A,FL.A,FF.A,FA.W,FA.Y,FF.S,FF.W,FL.W,HY.S,FL.S,FL.Y"/>
</mapping>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="act">
<constraint constraintType="IN" constraintValue="NEW,CON,CAN,EXT,EXP"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="wwaResourceData" name="Wind Watches, Warnings, Advisories" hideSampling="false" isRequeryNecessaryOnTimeMatch="true" isUpdatingOnMetadataOnly="false" retrieveData="false">
<metadataMap>
<mapping key="phensig">
<constraint constraintType="IN" constraintValue="EW.W,HW.A,HW.W,SI.Y,WI.Y"/>
</mapping>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="act">
<constraint constraintType="IN" constraintValue="NEW,CON,CAN,EXP"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="wwaResourceData" name="Convective Watches, Warnings, Advisories" hideSampling="false" isRequeryNecessaryOnTimeMatch="true" isUpdatingOnMetadataOnly="false" retrieveData="false">
<metadataMap>
<mapping key="phensig">
<constraint constraintType="IN" constraintValue="TO.W,SV.W,TO.A,SV.A,SV.S"/>
</mapping>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="act">
<constraint constraintType="IN" constraintValue="NEW,CON,CAN,EXP"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="wwaResourceData" name="Winter Watches, Warnings, Advisories" hideSampling="false" isRequeryNecessaryOnTimeMatch="true" isUpdatingOnMetadataOnly="false" retrieveData="false">
<metadataMap>
<mapping key="phensig">
<constraint constraintType="IN" constraintValue="BZ.A,BZ.W,WS.A,WS.W,WW.Y,SQ.W,EC.A,EC.W,FR.Y,FZ.A,FZ.W,HZ.A,HZ.W,IS.W,WC.A,WC.W,WC.Y,ZF.Y,ZR.Y"/>
</mapping>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="act">
<constraint constraintType="IN" constraintValue="NEW,CON,CAN,EXP"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="magnificationCapability" magnification="1.0"/>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="wwaResourceData" name="Tropical/Marine Watches, Warnings, Advisories" hideSampling="false" isRequeryNecessaryOnTimeMatch="true" isUpdatingOnMetadataOnly="false" retrieveData="false">
<metadataMap>
<mapping key="phensig">
<constraint constraintType="IN" constraintValue="BH.S,BW.Y,CF.A,CF.S,CF.W,CF.Y,GL.A,GL.W,HF.A,HF.W,HU.A,HU.S,HU.W,LE.A,LE.W,LE.Y,LO.Y,LS.A,LS.S,LS.W,LS.Y,LW.Y,MA.A,MA.S,MA.W,RB.Y,RP.S,SC.Y,SE.A,SE.W,SR.A,SR.W,SS.A,SS.W,SU.W,SU.Y,SW.Y,TR.A,TR.W,TS.A,TS.W,TS.Y,TY.A,TY.W,UP.A,UP.W,UP.Y"/>
</mapping>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="act">
<constraint constraintType="IN" constraintValue="NEW,CON,CAN,EXP"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="magnificationCapability" magnification="1.0"/>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="wwaResourceData" name="Other Watches, Warnings, Advisories" hideSampling="false" isRequeryNecessaryOnTimeMatch="true" isUpdatingOnMetadataOnly="false" retrieveData="false">
<metadataMap>
<mapping key="phensig">
<constraint constraintType="IN" constraintValue="AQ.Y,AS.O,AS.Y,DS.W,DU.Y,EH.A,EH.W,FG.Y,FW.A,FW.W,HT.Y,MF.Y,MH.W,MH.Y,MS.Y,SM.Y"/>
</mapping>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="act">
<constraint constraintType="IN" constraintValue="NEW,CON,CAN,EXP"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="cwaspsResourceData" name="Special Weather Statements" hideSampling="false" isRequeryNecessaryOnTimeMatch="false" isUpdatingOnMetadataOnly="false" retrieveData="true">
<metadataMap>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="pil">
<constraint constraintType="IN" constraintValue="SPS"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
<timeMatcher xsi:type="d2DTimeMatcher" forecastFilter="0" deltaFilter="0" loadMode="VALID_TIME_SEQ"/>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,60 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Convective Watches, Warnings and Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="TO.A,SV.A,TO.W,SV.W,EW.W,SV.S" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<resourceType>PLAN_VIEW</resourceType>
<perspectiveProperty xsi:type="d2dLoadProperties" loadMode="VALID_TIME_SEQ" timeMatchBasis="false"/>
<capabilities>
<capability xsi:type="colorableCapability" colorAsString="white"/>
<capability xsi:type="outlineCapability" outlineWidth="4" outlineOn="true" lineStyle="SOLID"/>
</capabilities>
</loadProperties>
<properties isVisible="true" isMapLayer="false" isBlinking="false" isSystemResource="false" renderingOrderId="UNKNOWN">
<pdProps minDisplayWidth="0" maxDisplayWidth="100000000"/>
</properties>
<resourceData xsi:type="cwaspsResourceData" name="Special Weather Statements" hideSampling="false" isRequeryNecessaryOnTimeMatch="false" isUpdatingOnMetadataOnly="false" retrieveData="true">
<metadataMap>
<mapping key="pluginName">
<constraint constraintType="EQUALS" constraintValue="warning"/>
</mapping>
<mapping key="pil">
<constraint constraintType="IN" constraintValue="SPS"/>
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,37 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Fire Watches, Warnings, Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="FW.A,FW.W" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,37 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Flood Watches, Warnings, Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXT,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="FA.A,FL.A,FF.A,LS.A,CF.A,CF.W,CF.Y,CF.S,FA.W,FA.Y,FF.S,FF.W,FL.W,HY.S,FL.S,FL.Y,LS.S,LS.W,LS.Y" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,38 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Tropical/Marine Watches, Warnings, Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="BH.S,BW.Y,CF.A,CF.S,CF.W,CF.Y,GL.A,GL.W,HF.A,HF.W,HU.A,HU.S,HU.W,LE.A,LE.W,LE.Y,LO.Y,LS.A,LS.S,LS.W,LS.Y,LW.Y,MA.A,MA.S,MA.W,RB.Y,RP.S,SC.Y,SE.A,SE.W,SR.A,SR.W,SS.A,SS.W,SU.W,SU.Y,SW.Y,TR.A,TR.W,TS.A,TS.W,TS.Y,TY.A,TY.W,UP.A,UP.W,UP.Y" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,38 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Other Watches, Warnings, Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="AQ.Y,AS.O,AS.Y,DS.W,DU.Y,EC.A,EC.W,EH.A,EH.W,FG.Y,FW.A,FW.W,HT.Y,MF.Y,MH.W,MH.Y,MS.Y,SM.Y,WC.A,WC.W,WC.Y,ZF.Y,ZR.Y" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,34 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="cwaspsResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="true"
isRequeryNecessaryOnTimeMatch="false" name="Special Weather Statements">
<metadataMap>
<mapping key="pil">
<constraint constraintValue="SPS" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,37 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Wind Watches, Warnings, Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="BW.Y,EW.W,HF.A,HF.W,HW.A,HW.W,LW.Y,SI.Y,GL.A,GL.W,WC.A,WC.W,WC.Y,WI.Y,DS.W,DU.Y,SM.Y" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,37 @@
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="outlineCapability" lineStyle="SOLID" outlineOn="true"
outlineWidth="4" />
<capability xsi:type="colorableCapability" colorAsString="#ffffff" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="wwaResourceData"
isUpdatingOnMetadataOnly="false"
retrieveData="false"
isRequeryNecessaryOnTimeMatch="true" name="Winter Watches, Warnings, Advisories">
<metadataMap>
<mapping key="act">
<constraint constraintValue="NEW,CON,CAN,EXP" constraintType="IN" />
</mapping>
<mapping key="phensig">
<constraint constraintValue="BZ.A,BZ.W,WS.A,WS.W,WW.Y,SQ.W,EC.A,EC.W,FR.Y,FZ.A,FZ.W,HZ.A,LE.A,LE.W,LE.Y,HZ.W,IS.W,WC.A,WC.W,WC.Y,ZF.Y,ZR.Y" constraintType="IN" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="warning" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -1,172 +1,120 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?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.
-->
<!--
This is an absolute override file, indicating that a higher priority
version of the file will completely replace a lower priority version
of the file.
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="bundleItem" file="bundles/LocalCWAWarnings.xml" menuText="Local CWA Convective Warnings"
id="localCWAWarnings" /> <contribute xsi:type="titleItem" titleText="------ Watch / Warning / Advisory ------"
<contribute xsi:type="bundleItem" file="bundles/LocalCWAFloodWarnings.xml" menuText="Local CWA Flood Warnings" id="sfcMenuWarning" />
id="localCWAFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/LocalCWASPS.xml" menuText="Local CWA Sig Wx Advisories (SPS)" <contribute xsi:type="bundleItem" file="bundles/AllWWA.xml"
id="localCWASPS" /> menuText="All Weather Statements" id="warnings">
<contribute xsi:type="bundleItem" file="bundles/LocalMarineWarnings.xml" menuText="Local CWA Marine Warnings"
id="localmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/LocalLocalizedExtremeWeatherWarnings.xml" menuText="Local Localized Extreme Weather Warnings"
id="localLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllLocalWarnings.xml" menuText="All Local CWA Warnings"
id="alllLocalWarings" />
<contribute xsi:type="subMenu" menuText="Other Regional Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/LocalRegionalWarnings.xml"
menuText="Regional Convective Warnings" id="localRegionalWarnings" />
<contribute xsi:type="bundleItem" file="bundles/LocalRegionalFloodWarnings.xml"
menuText="Regional Flood Warnings" id="localRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/LocalRegionalSPS.xml" menuText="Regional Sig Wx Advisories (SPS)"
id="localRegionalSPS" />
<contribute xsi:type="bundleItem" file="bundles/LocalRegionalMarineWarning.xml"
menuText="Regional Marine Warnings" id="marineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/LocalRegionalLocalizedExtremeWeatherWarnings.xml"
menuText="Regional Localized Extreme Weather Warnings" id="extremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings.xml"
menuText="All Regional Warnings" id="allRegionalWarnings" />
</contribute> </contribute>
<contribute xsi:type="subMenu" menuText="National Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/NationalConvWarnings.xml" <!-- <contribute xsi:type="bundleItem" file="bundles/AllWarnings.xml"
menuText="National Convective Warnings" id="nationalWarnings" /> menuText="All Warnings" id="warnings">
<contribute xsi:type="bundleItem" file="bundles/NationalFloodWarnings.xml"
menuText="National Flood Warnings" id="nationalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllCWASPS.xml" menuText="National Sig Wx Advisories (SPS)"
id="allCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/AllMarineWarnings.xml" menuText="National Marine Warnings"
id="marineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/NationalLocalizedExtremeWeatherWarnings.xml" menuText="National Localized Extreme Weather Warnings"
id="localizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllNationalWarnings.xml"
menuText="All National Warnings" id="allNationalWarnings" />
</contribute> </contribute>
<contribute xsi:type="subMenu" menuText="NWS Regional Warning Displays"> <contribute xsi:type="bundleItem" file="bundles/ncepHydro/ConvectiveWatchPlot.xml"
<contribute xsi:type="subMenu" menuText="Alaska Region Warning Displays"> menuText="Convective Watches" id="convectiveWatches">
<contribute xsi:type="bundleItem" file="bundles/RegionalWarnings-AR.xml"
menuText="Alaska Region Convective Warnings" id="AlaskaRegionWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalFloodWarnings-AR.xml"
menuText="Alaska Region Flood Warnings" id="AlaskaRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalSPS-AR.xml"
menuText="Alaska Region Sig Wx Advisories (SPS)" id="AlaskaCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/RegionalMarineWarning-AR.xml"
menuText="Alaska Region Marine Warnings" id="ARmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalLocalizedExtremeWeatherWarnings-AR.xml"
menuText="Alaska Region Localized Extreme Weather Warnings" id="ARLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings-AR.xml"
menuText="All Alaska Region Warnings" id="allARRegionalWarnings" />
</contribute>
<contribute xsi:type="subMenu" menuText="Central Region Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/RegionalWarnings-CR.xml"
menuText="Central Region Convective Warnings" id="CentralRegionWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalFloodWarnings-CR.xml"
menuText="Central Region Flood Warnings" id="CentralRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalSPS-CR.xml"
menuText="Central Region Sig Wx Advisories (SPS)" id="CentralCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/RegionalMarineWarning-CR.xml"
menuText="Central Region Marine Warnings" id="CRmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalLocalizedExtremeWeatherWarnings-CR.xml"
menuText="Central Region Localized Extreme Weather Warnings" id="CRLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings-CR.xml"
menuText="All Central Region Warnings" id="allCRRegionalWarnings" />
</contribute>
<contribute xsi:type="subMenu" menuText="Eastern Region Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/RegionalWarnings-ER.xml"
menuText="Eastern Region Convective Warnings" id="EasternRegionWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalFloodWarnings-ER.xml"
menuText="Eastern Region Flood Warnings" id="EasternRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalSPS-ER.xml"
menuText="Eastern Region Sig Wx Advisories (SPS)" id="EasternCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/RegionalMarineWarning-ER.xml"
menuText="Eastern Region Marine Warnings" id="ERmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalLocalizedExtremeWeatherWarnings-ER.xml"
menuText="Eastern Region Localized Extreme Weather Warnings" id="ERLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings-ER.xml"
menuText="All Eastern Region Warnings" id="allERRegionalWarnings" />
</contribute>
<contribute xsi:type="subMenu" menuText="Pacific Region Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/RegionalWarnings-PR.xml"
menuText="Pacific Region Convective Warnings" id="PacificRegionWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalFloodWarnings-PR.xml"
menuText="Pacific Region Flood Warnings" id="PacificRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalSPS-PR.xml"
menuText="Pacific Region Sig Wx Advisories (SPS)" id="PacificCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/RegionalMarineWarning-PR.xml"
menuText="Pacific Region Marine Warnings" id="PRmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalLocalizedExtremeWeatherWarnings-PR.xml"
menuText="Pacific Region Localized Extreme Weather Warnings" id="PRLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings-PR.xml"
menuText="All Pacific Region Warnings" id="allPRRegionalWarnings" />
</contribute>
<contribute xsi:type="subMenu" menuText="Southern Region Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/RegionalWarnings-SR.xml"
menuText="Southern Region Convective Warnings" id="SouthernRegionWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalFloodWarnings-SR.xml"
menuText="Southern Region Flood Warnings" id="SouthernRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalSPS-SR.xml"
menuText="Southern Region Sig Wx Advisories (SPS)" id="SouthernCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/RegionalMarineWarning-SR.xml"
menuText="Southern Region Marine Warnings" id="SRmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalLocalizedExtremeWeatherWarnings-SR.xml"
menuText="Southern Region Localized Extreme Weather Warnings" id="SRLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings-SR.xml"
menuText="All Southern Region Warnings" id="allSRRegionalWarnings" />
</contribute>
<contribute xsi:type="subMenu" menuText="Western Region Warning Displays">
<contribute xsi:type="bundleItem" file="bundles/RegionalWarnings-WR.xml"
menuText="Western Region Convective Warnings" id="WesternRegionWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalFloodWarnings-WR.xml"
menuText="Western Region Flood Warnings" id="WesternRegionalFloodWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalSPS-WR.xml"
menuText="Western Region Sig Wx Advisories (SPS)" id="WesternCWASPS" />
<contribute xsi:type="bundleItem" file="bundles/RegionalMarineWarning-WR.xml"
menuText="Western Region Marine Warnings" id="WRmarineWarnings" />
<contribute xsi:type="bundleItem" file="bundles/RegionalLocalizedExtremeWeatherWarnings-WR.xml"
menuText="Western Region Localized Extreme Weather Warnings" id="WRLocalizedExtremeWeatherWarnings" />
<contribute xsi:type="bundleItem" file="bundles/AllRegionalWarnings-WR.xml"
menuText="All Western Region Warnings" id="allWRRegionalWarnings" />
</contribute>
</contribute> </contribute>
<!-- There is no support in the backend for these reports --> <contribute xsi:type="bundleItem" file="bundles/ConvWarn.xml"
<contribute xsi:type="subMenu" menuText="Local Storm Reports"> menuText="Convective Warnings" id="convWarnings">
<contribute xsi:type="bundleItem" file="bundles/LocalStormReportsOffice.xml" </contribute>-->
menuText="Office" id="office">
<substitute key="title" value="Local Storm Reports" /> <contribute xsi:type="separator" id="separator4"/>
</contribute> <contribute xsi:type="bundleItem" file="bundles/ConvWWA.xml"
<contribute xsi:type="bundleItem" file="bundles/LocalStormReportsLocal.xml" menuText="Convective Watches, Warnings, Advisories" id="ConvWarnings">
menuText="Local" id="local">
<substitute key="title" value="Local Storm Reports" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LocalStormReportsRegion.xml"
menuText="Region" id="region">
<substitute key="title" value="Local Storm Reports" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/LocalStormReportsNational.xml"
menuText="National" id="national">
<substitute key="title" value="Local Storm Reports" />
</contribute>
</contribute> </contribute>
<contribute xsi:type="bundleItem" file="bundles/FireWWA.xml"
menuText="Fire Watches, Warnings, Advisories" id="fireWarnings">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/FloodWWA.xml"
menuText="Flood Watches, Warnings, Advisories" id="FloodWarnings">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/MarineWWA.xml"
menuText="Tropical/Marine Watches, Warnings, Advisories" id="marineWarnings">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/WindWWA.xml"
menuText="Wind Watches, Warnings, Advisories" id="windWarnings">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/WinterWWA.xml"
menuText="Winter Watches, Warnings, Advisories" id="winterWarnings">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/OtherWWA.xml"
menuText="Other Watches, Warnings, Advisories" id="otherWarnings">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/SPS.xml"
menuText="Special Weather Statements" id="SPS">
</contribute>
<contribute xsi:type="separator" id="separator4"/>
<contribute xsi:type="bundleItem" file="bundles/ncepHydro/SvrWxPlot.xml"
menuText="SPC Svr Wx Plot" id="spcWxPlot">
</contribute>
<contribute xsi:type="subMenu" menuText="SIGMET/AIRMET">
<contribute xsi:type="bundleItem" file="bundles/ConvSigmet.xml"
menuText="Convective SIGMET" id="ConvSigmet">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/IntlSigmet.xml"
menuText="International SIGMETs" id="INTLSIGMET">
</contribute>
<contribute xsi:type="bundleItem" file="bundles/NonConvSigmet.xml"
menuText="SIGMET Turbulence" id="SIGMETTURB">
<substitute key="hazardType" value="TURBULENCE" />
<substitute key="color" value="#FF4444" />
<substitute key="name" value="Turbulence SIGMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/NonConvSigmet.xml"
menuText="SIGMET Tropical Cyclone" id="SIGMETTTOPCYCLONE">
<substitute key="hazardType" value="TROPICAL CYCLONE" />
<substitute key="color" value="#00FFFF" />
<substitute key="name" value="Tropical Cyclone SIGMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/NonConvSigmet.xml"
menuText="SIGMET Icing" id="SIGMETICING">
<substitute key="hazardType" value="ICING" />
<substitute key="color" value="#FFFFFF" />
<substitute key="name" value="Icing SIGMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/Airmet.xml"
menuText="AIRMET Icing" id="AIRMETICING">
<substitute key="hazardType" value="ICING" />
<substitute key="color" value="#0000FF" />
<substitute key="name" value="Icing AIRMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/Airmet.xml"
menuText="AIRMET Turbulence" id="AIRMETTURB">
<substitute key="hazardType" value="TURBULENCE" />
<substitute key="color" value="#00FF00" />
<substitute key="name" value="Turbulence AIRMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/Airmet.xml"
menuText="AIRMET Instrument Flight Rules (IFR)" id="AIRMETIFR">
<substitute key="hazardType" value="INSTRUMENT FLIGHT RULES" />
<substitute key="color" value="#00FFFF" />
<substitute key="name" value="IFR AIRMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/Airmet.xml"
menuText="AIRMET Mountain Obstruction" id="AIRMETMTNOBSC">
<substitute key="hazardType" value="MOUNTAIN OBSCURATION" />
<substitute key="color" value="#FF0088" />
<substitute key="name" value="Mtn Obscn AIRMET" />
</contribute>
<contribute xsi:type="bundleItem" file="bundles/NonConvSigmet.xml"
menuText="SIGMET Volcanic Ash" id="SIGMETVOLCANICASH">
<substitute key="hazardType" value="VOLCANIC ASH CLOUD" />
<substitute key="color" value="#00FF00" />
<substitute key="name" value="Volcanic Ash SIGMET" />
</contribute>
</contribute>
</menuTemplate> </menuTemplate>

View file

@ -37,4 +37,12 @@
name="Warnings"> name="Warnings">
</command> </command>
</extension> </extension>
<extension
point="com.raytheon.viz.ui.contextualMenu">
<contextualMenu
actionClass="com.raytheon.viz.warnings.ui.WWADrawingPropertiesAction"
name="Drawing Properties"
sortID="1">
</contextualMenu>
</extension>
</plugin> </plugin>

View file

@ -20,6 +20,7 @@ import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.EmergencyType; import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
import com.raytheon.uf.common.dataplugin.warning.PracticeWarningRecord; import com.raytheon.uf.common.dataplugin.warning.PracticeWarningRecord;
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction; import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
import com.raytheon.uf.common.dataplugin.warning.util.WarningLookups;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType;
import com.raytheon.uf.common.geospatial.ReferencedCoordinate; import com.raytheon.uf.common.geospatial.ReferencedCoordinate;
@ -32,6 +33,7 @@ import com.raytheon.uf.common.time.TimeRange;
import com.raytheon.uf.common.time.util.TimeUtil; import com.raytheon.uf.common.time.util.TimeUtil;
import com.raytheon.uf.viz.core.DrawableString; import com.raytheon.uf.viz.core.DrawableString;
import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.RGBColors;
import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment; import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment;
import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle; import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle;
import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment;
@ -51,6 +53,7 @@ import com.raytheon.uf.viz.core.rsc.capabilities.MagnificationCapability;
import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability; import com.raytheon.uf.viz.core.rsc.capabilities.OutlineCapability;
import com.raytheon.uf.viz.datacube.DataCubeContainer; import com.raytheon.uf.viz.datacube.DataCubeContainer;
import com.raytheon.viz.core.mode.CAVEMode; import com.raytheon.viz.core.mode.CAVEMode;
import com.raytheon.viz.warnings.ui.DrawingPropertiesDialog;
import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.GeometryFactory;
@ -91,6 +94,10 @@ import org.locationtech.jts.geom.prep.PreparedGeometryFactory;
* Oct 16, 2015 4971 bsteffen Do not reverse order of text. * Oct 16, 2015 4971 bsteffen Do not reverse order of text.
* Nov 05, 2015 5070 randerso Adjust font sizes for dpi scaling * Nov 05, 2015 5070 randerso Adjust font sizes for dpi scaling
* Aug 22, 2016 5842 dgilling Remove dependency on viz.texteditor plugin. * Aug 22, 2016 5842 dgilling Remove dependency on viz.texteditor plugin.
* Dec 19, 2018 ---- mjames@ucar Added phensig color table lookup.
* Mar 15, 2022 srcarter@ucar Add support for display settings for outline, fill, text and time displays
* Jun 24, 2022 srcarter@ucar Add 'statement/other' display settings, set enabled for only relevant WWA types
* Jun 28, 2022 srcarter@ucar Display sampling based on new 'sampling' settings
* *
* </pre> * </pre>
* *
@ -132,6 +139,72 @@ public abstract class AbstractWWAResource extends
} }
/** Whether to display warning outlines by default */
public static final boolean WARN_OUTLINE_DEFAULT = true;
/** Whether to display warning fill by default */
public static final boolean WARN_FILL_DEFAULT = false;
/** Whether to display warning text by default */
public static final boolean WARN_TEXT_DEFAULT = true;
/** Whether to display warning times by default */
public static final boolean WARN_TIME_DEFAULT = true;
/** Whether to display watch outlines by default */
public static final boolean WATCH_OUTLINE_DEFAULT = false;
/** Whether to display watch fill by default */
public static final boolean WATCH_FILL_DEFAULT = true;
/** Whether to display watch text by default */
public static final boolean WATCH_TEXT_DEFAULT = true;
/** Whether to display watch time by default */
public static final boolean WATCH_TIME_DEFAULT = true;
/** Whether to display advisory outlines by default */
public static final boolean ADV_OUTLINE_DEFAULT = true;
/** Whether to display advisory fill by default */
public static final boolean ADV_FILL_DEFAULT = false;
/** Whether to display advisory text by default */
public static final boolean ADV_TEXT_DEFAULT = true;
/** Whether to display advisory time by default */
public static final boolean ADV_TIME_DEFAULT = true;
/** Whether to display statements/other outlines by default */
public static final boolean OTHER_OUTLINE_DEFAULT = true;
/** Whether to display statements/other fill by default */
public static final boolean OTHER_FILL_DEFAULT = true;
/** Whether to display statements/other text by default */
public static final boolean OTHER_TEXT_DEFAULT = true;
/** Whether to display statements/other time by default */
public static final boolean OTHER_TIME_DEFAULT = true;
//gui display variables
private boolean warnOutline = WARN_OUTLINE_DEFAULT;
private boolean warnFill = WARN_FILL_DEFAULT;
private boolean warnText = WARN_TEXT_DEFAULT;
private boolean warnTime = WARN_TIME_DEFAULT;
private boolean warnSample = true;
private boolean watchOutline = WATCH_OUTLINE_DEFAULT;
private boolean watchFill = WATCH_FILL_DEFAULT;
private boolean watchText = WATCH_TEXT_DEFAULT;
private boolean watchTime = WATCH_TIME_DEFAULT;
private boolean watchSample = true;
private boolean advOutline = ADV_OUTLINE_DEFAULT;
private boolean advFill = ADV_FILL_DEFAULT;
private boolean advText = ADV_TEXT_DEFAULT;
private boolean advTime = ADV_TIME_DEFAULT;
private boolean advSample = true;
private boolean otherOutline = OTHER_OUTLINE_DEFAULT;
private boolean otherFill = OTHER_FILL_DEFAULT;
private boolean otherText = OTHER_TEXT_DEFAULT;
private boolean otherTime = OTHER_TIME_DEFAULT;
private boolean otherSample = true;
private boolean enableWarnDisplay = false;
private boolean enableWatchDisplay = false;
private boolean enableAdvisoryDisplay = false;
private boolean enableOtherDisplay = false;
// The significance values for WWAs
private static final String WARN_SIG = "W";
private static final String WATCH_SIG = "A";
private static final String ADVISORY_SIG = "Y";
/** The dialog used to change display properties */
private DrawingPropertiesDialog drawingDialog;
protected static GeometryFactory gf = new GeometryFactory(); protected static GeometryFactory gf = new GeometryFactory();
protected static PreparedGeometryFactory pgf = new PreparedGeometryFactory(); protected static PreparedGeometryFactory pgf = new PreparedGeometryFactory();
@ -227,7 +300,33 @@ public abstract class AbstractWWAResource extends
WarningEntry entry = entryMap.get(key); WarningEntry entry = entryMap.get(key);
AbstractWarningRecord record = entry.record; AbstractWarningRecord record = entry.record;
if (matchesFrame(entry, time, framePeriod, lastFrame) String sig = record.getSig();
boolean samplingOn = false;
if(sig !=null){
if(sig.equals(WATCH_SIG)){
if(showWatchSampling()){
samplingOn = true;
}
}else if(sig.equals(WARN_SIG)){
if(showWarnSampling()){
samplingOn = true;
}
}else if(sig.equals(ADVISORY_SIG)){
if(showAdvisorySampling()){
samplingOn = true;
}
}else{
if(showOtherSampling()){
samplingOn = true;
}
}
}else{
if(showOtherSampling()){
samplingOn = true;
}
}
if (samplingOn && matchesFrame(entry, time, framePeriod, lastFrame)
&& record.getGeometry() != null) { && record.getGeometry() != null) {
Geometry recordGeom = record.getGeometry(); Geometry recordGeom = record.getGeometry();
@ -244,6 +343,9 @@ public abstract class AbstractWWAResource extends
} }
sb.append(text); sb.append(text);
} }
sb.append("\n\n");
sb.append(record.getOverviewText());
sb.append(record.getSegText());
return sb.toString(); return sb.toString();
} }
} }
@ -254,7 +356,7 @@ public abstract class AbstractWWAResource extends
} }
} }
return "NO DATA"; return null;
} }
protected void disposeEntry(final WarningEntry entry) { protected void disposeEntry(final WarningEntry entry) {
@ -360,6 +462,47 @@ public abstract class AbstractWWAResource extends
} }
for (WarningEntry entry : candidates.values()) { for (WarningEntry entry : candidates.values()) {
AbstractWarningRecord record = entry.record; AbstractWarningRecord record = entry.record;
boolean drawShape = true;
boolean drawOutline = true;
boolean drawText = true;
boolean drawTime = true;
String sig = record.getSig();
boolean sigRecognized = false;
if(record != null && record.getSig() != null){
//warning
if(sig.equalsIgnoreCase(WARN_SIG)){
drawShape = warnFill;
drawOutline = warnOutline;
drawText = warnText;
drawTime = warnTime;
sigRecognized = true;
}
//watch
else if(sig.equalsIgnoreCase(WATCH_SIG)){
drawShape = watchFill;
drawOutline = watchOutline;
drawText = watchText;
drawTime = watchTime;
sigRecognized = true;
}
//advisory
else if(sig.equals(ADVISORY_SIG)){
drawShape = advFill;
drawOutline = advOutline;
drawText = advText;
drawTime = advTime;
sigRecognized = true;
}
}
if(sig == null || !sigRecognized){
drawShape = otherFill;
drawOutline = otherOutline;
drawText = otherText;
drawTime = otherTime;
}
// check shapes // check shapes
if (entry.project) { if (entry.project) {
@ -367,26 +510,31 @@ public abstract class AbstractWWAResource extends
entry.project = false; entry.project = false;
} }
if (entry != null && entry.wireframeShape != null) { RGB displaycolor = color;
LineStyle lineStyle = LineStyle.SOLID; if ( ! record.getPil().equals("SPS")) {
if (record.getProductClass() != null displaycolor = RGBColors.getRGBColor(getPhensigColor(record.getPhensig()));
&& record.getProductClass().equals("T")) { }
lineStyle = LineStyle.DASHED;
}
int outlineWidth = getCapability(OutlineCapability.class) if(entry != null){
.getOutlineWidth(); //draw shape
// Make wire frame outline thicker for EMERGENCY warnings if(drawShape && entry.shadedShape != null){
if (EmergencyType.isEmergency(record.getRawmessage())) { target.drawShadedShape(entry.shadedShape, 1);
outlineWidth *= 3; }
} //draw outline
if(drawOutline && entry.wireframeShape != null){
OutlineCapability oc = getCapability(OutlineCapability.class);
LineStyle lineStyle = oc.getLineStyle();
int outlineWidth = oc.getOutlineWidth();
// Make wire frame outline thicker for EMERGENCY warnings
if (EmergencyType.isEmergency(record.getRawmessage())) {
outlineWidth *= 3;
}
target.drawWireframeShape( target.drawWireframeShape(
entry.wireframeShape, entry.wireframeShape,
getCapability(ColorableCapability.class).getColor(), displaycolor,
outlineWidth, lineStyle); outlineWidth, lineStyle);
} else if (entry != null && entry.shadedShape != null) { }
target.drawShadedShape(entry.shadedShape, 1);
} }
if (record != null && record.getGeometry() != null) { if (record != null && record.getGeometry() != null) {
@ -405,7 +553,16 @@ public abstract class AbstractWWAResource extends
double mapWidth = descriptor.getMapWidth() double mapWidth = descriptor.getMapWidth()
* paintProps.getZoomLevel() / 1000; * paintProps.getZoomLevel() / 1000;
String[] textToPrint = getText(record, mapWidth); String[] fullText = getText(record, mapWidth);
String[] textToPrint = {"",""};
if(drawText){
textToPrint[0] = fullText[0];
}
if(drawTime){
textToPrint[1] = fullText[1];
}
if (warningsFont == null) { if (warningsFont == null) {
warningsFont = target.initializeFont(target warningsFont = target.initializeFont(target
.getDefaultFont().getFontName(), 9, .getDefaultFont().getFontName(), 9,
@ -414,8 +571,7 @@ public abstract class AbstractWWAResource extends
12); 12);
} }
DrawableString params = new DrawableString(textToPrint, DrawableString params = new DrawableString(textToPrint, displaycolor);
color);
params.font = warningsFont; params.font = warningsFont;
params.setCoordinates(d[0], d[1]); params.setCoordinates(d[0], d[1]);
params.horizontalAlignment = HorizontalAlignment.RIGHT; params.horizontalAlignment = HorizontalAlignment.RIGHT;
@ -428,7 +584,7 @@ public abstract class AbstractWWAResource extends
// moves over text to add EMER in a different font // moves over text to add EMER in a different font
textToPrint[1] = String.format("%1$-23" + "s", textToPrint[1] = String.format("%1$-23" + "s",
textToPrint[1]); textToPrint[1]);
params.setText(textToPrint, color); params.setText(textToPrint, displaycolor);
DrawableString emergencyString = new DrawableString( DrawableString emergencyString = new DrawableString(
params); params);
@ -436,7 +592,7 @@ public abstract class AbstractWWAResource extends
d[1] + (paintProps.getZoomLevel()) * 90); d[1] + (paintProps.getZoomLevel()) * 90);
emergencyString.font = emergencyFont; emergencyString.font = emergencyFont;
emergencyString.setText(new String[] { "", "", emergencyString.setText(new String[] { "", "",
" " + EmergencyType.EMER, "" }, color); " " + EmergencyType.EMER, "" }, displaycolor);
target.drawStrings(emergencyString); target.drawStrings(emergencyString);
} }
@ -539,7 +695,38 @@ public abstract class AbstractWWAResource extends
if (!resourceData.getMetadataMap().containsKey("officeid") if (!resourceData.getMetadataMap().containsKey("officeid")
|| resourceData.getMetadataMap().get("officeid") || resourceData.getMetadataMap().get("officeid")
.getConstraintValue().contains(officeid)) { .getConstraintValue().contains(officeid)) {
this.recordsToLoad.add((AbstractWarningRecord) pdo);
AbstractWarningRecord rec = (AbstractWarningRecord) pdo;
this.recordsToLoad.add(rec);
//set the drawing display for the corresponding significance types
// if all settings are on, no need to keep doing it
if(rec !=null && (!enableWatchDisplay || !enableWarnDisplay || !enableAdvisoryDisplay || !enableOtherDisplay)){
String sig = rec.getSig();
boolean sigRecognized = false;
if(sig!=null){
if(sig.equals(WARN_SIG)){
enableWarnDisplay = true;
sigRecognized = true;
}
else if(sig.equals(WATCH_SIG)){
enableWatchDisplay = true;
sigRecognized = true;
}
else if(sig.equals(ADVISORY_SIG)){
enableAdvisoryDisplay = true;
sigRecognized = true;
}
}
if(sig == null || !sigRecognized){
enableOtherDisplay = true;
}
}
//update display if it already exists
if(drawingDialog != null && !drawingDialog.isDisposed()){
drawingDialog.updateControlsEnabled(enableWatchDisplay, enableWarnDisplay, enableAdvisoryDisplay, enableOtherDisplay);
}
} }
} }
} }
@ -591,19 +778,26 @@ public abstract class AbstractWWAResource extends
addRecord(sort(pdos)); addRecord(sort(pdos));
} }
protected String[] getText(AbstractWarningRecord record, double mapWidth) { protected String getPhensigColor(String phensig){
String vid = record.getPhensig(); WarningLookups lookup = new WarningLookups();
String phen = record.getPhen(); System.out.println("Phensig"+ phensig);
String[] textToPrint = new String[] { "", "", "", "" }; return lookup.getPhensig(phensig).color;
}
textToPrint[0] = record.getProductClass(); protected String getPhensigName(String phensig){
if ((vid != null && phen != null) WarningLookups lookup = new WarningLookups();
&& (vid.equals("TO.A") || vid.equals("SV.A") return lookup.getPhensig(phensig).name;
|| phen.equals("FL") || phen.equals("FA"))) { }
textToPrint[0] += "." + vid;
protected String[] getText(AbstractWarningRecord record, double mapWidth) {
String[] textToPrint = new String[] { "", "" };
if ( ! record.getPil().equals("SPS")) {
textToPrint[0] = getPhensigName(record.getPhensig());
} else {
textToPrint[0] = "Special Weather Statement";
} }
textToPrint[0] += "." + record.getEtn();
textToPrint[1] = record.getPil();
String startFormatString = DEFAULT_FORMAT; String startFormatString = DEFAULT_FORMAT;
String endFormatString = DEFAULT_FORMAT; String endFormatString = DEFAULT_FORMAT;
@ -616,14 +810,14 @@ public abstract class AbstractWWAResource extends
} }
DateFormat startFormat = new SimpleDateFormat(startFormatString); DateFormat startFormat = new SimpleDateFormat(startFormatString);
startFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE);
textToPrint[2] = "Valid "
+ startFormat.format(record.getStartTime().getTime());
DateFormat endFormat = new SimpleDateFormat(endFormatString); DateFormat endFormat = new SimpleDateFormat(endFormatString);
startFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE);
endFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE); endFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE);
textToPrint[3] = "Thru "
+ endFormat.format(record.getEndTime().getTime()); textToPrint[1] = startFormat.format(record.getStartTime().getTime())
+ "-" + endFormat.format(record.getEndTime().getTime());;
return textToPrint; return textToPrint;
} }
@ -724,5 +918,369 @@ public abstract class AbstractWWAResource extends
// set font to null for recycle safety // set font to null for recycle safety
emergencyFont = null; emergencyFont = null;
} }
if(drawingDialog != null){
drawingDialog.hide();
drawingDialog = null;
}
} }
/**
* Set whether or not to display the outline for warnings
* @param warnOutline If true, will draw warning outlines
*/
public void setWarnOutlineDisplay(boolean warnOutline) {
this.warnOutline = warnOutline;
}
/**
* Set whether or not to display the fill (shaded shape)
* for warnings
* @param warnFill If true, will draw the warning fill
*/
public void setWarnFillDisplay(boolean warnFill) {
this.warnFill = warnFill;
}
/**
* Set whether or not to display the text for warnings
* @param warnText If true, will draw the warning title
*/
public void setWarnTextDisplay(boolean warnText) {
this.warnText = warnText;
}
/**
* Set whether or not to display the time for warnings
* @param warnTime If true, will draw the warning time
*/
public void setWarnTimeDisplay(boolean warnTime) {
this.warnTime = warnTime;
}
/**
* Set whether or not to display the sampling for warnings
* @param warnSample If true, will show the sampling output
* for warnings, when sampling is enabled
*/
public void setWarnSampleDisplay(boolean warnSample) {
this.warnSample = warnSample;
}
/**
* Set whether or not to display the outline for watches
* @param watchOutline If true, will draw the watch outline
*/
public void setWatchOutlineDisplay(boolean watchOutline) {
this.watchOutline = watchOutline;
}
/**
* Set whether or not to display the fill (shaded shape) for watches
* @param watchFill If true, will draw the watch fill
*/
public void setWatchFillDisplay(boolean watchFill) {
this.watchFill = watchFill;
}
/**
* Set whether or not to display the text for watches
* @param watchText If true, will draw the watch title
*/
public void setWatchTextDisplay(boolean watchText) {
this.watchText = watchText;
}
/**
* Set whether or not to display the time for watches
* @param watchTime If true, will draw the watch time
*/
public void setWatchTimeDisplay(boolean watchTime) {
this.watchTime = watchTime;
}
/**
* Set whether or not to display the sampling for watches
* @param watchSample If true, will show the sampling output
* for watches, when sampling is enabled
*/
public void setWatchSampleDisplay(boolean watchSample) {
this.watchSample = watchSample;
}
/**
* Set whether or not to display the outline for advisories
* @param advOutline If true, will draw the advisory outline
*/
public void setAdvisoryOutlineDisplay(boolean advOutline) {
this.advOutline = advOutline;
}
/**
* Set whether or not to display the fill (shaded shape) for
* advisories
* @param advFill If true, will draw the advisory fill
*/
public void setAdvisoryFillDisplay(boolean advFill) {
this.advFill = advFill;
}
/**
* Set whether or not to display the text for advisories
* @param advText If true, will draw the advisory title
*/
public void setAdvisoryTextDisplay(boolean advText) {
this.advText = advText;
}
/**
* Set whether or not to display the time for advisories
* @param advTime If true, will draw the advisory time
*/
public void setAdvisoryTimeDisplay(boolean advTime) {
this.advTime = advTime;
}
/**
* Set whether or not to display the sampling for advisories
* @param advSample If true, will show the sampling output
* for advisories, when sampling is enabled
*/
public void setAdvisorySampleDisplay(boolean advSample) {
this.advSample = advSample;
}
/**
* Set whether or not to display the outline for statements
* and other records
* @param advOutline If true, will draw the outline
*/
public void setOtherOutlineDisplay(boolean otherOutline) {
this.otherOutline = otherOutline;
}
/**
* Set whether or not to display the fill (shaded shape) for
* statements and other records
* @param otherFill If true, will draw the fill
*/
public void setOtherFillDisplay(boolean otherFill) {
this.otherFill = otherFill;
}
/**
* Set whether or not to display the text for statements
* and other records
* @param otherText If true, will draw the title
*/
public void setOtherTextDisplay(boolean otherText) {
this.otherText = otherText;
}
/**
* Set whether or not to display the time for statements
* and other records
* @param otherTime If true, will draw the time
*/
public void setOtherTimeDisplay(boolean otherTime) {
this.otherTime = otherTime;
}
/**
* Set whether or not to display the sampling for statements/
* other records
* @param otherSample If true, will show the sampling output
* for statements/other records, when sampling is enabled
*/
public void setOtherSampleDisplay(boolean otherSample) {
this.otherSample = otherSample;
}
/**
* @return True if the warning outline is displayed
*/
public boolean showWarnOutline(){
return warnOutline;
}
/**
* @return True if the warning fill is displayed
*/
public boolean showWarnFill(){
return warnFill;
}
/**
* @return True if the warning text is displayed
*/
public boolean showWarnText(){
return warnText;
}
/**
* @return True if the warning time is displayed
*/
public boolean showWarnTime(){
return warnTime;
}
/**
* @return True if the warning sampling is to be displayed
*/
public boolean showWarnSampling(){
return warnSample;
}
/**
* @return True if the watch outline is displayed
*/
public boolean showWatchOutline(){
return watchOutline;
}
/**
* @return True if the watch fill is displayed
*/
public boolean showWatchFill(){
return watchFill;
}
/**
* @return True if the watch text is displayed
*/
public boolean showWatchText(){
return watchText;
}
/**
* @return True if the watch time is displayed
*/
public boolean showWatchTime(){
return watchTime;
}
/**
* @return True if the watch sampling is to be displayed
*/
public boolean showWatchSampling(){
return watchSample;
}
/**
* @return True if the advisory outline is displayed
*/
public boolean showAdvisoryOutline(){
return advOutline;
}
/**
* @return True if the advisory fill is displayed
*/
public boolean showAdvisoryFill(){
return advFill;
}
/**
* @return True if the advisory text is displayed
*/
public boolean showAdvisoryText(){
return advText;
}
/**
* @return True if the advisory time is displayed
*/
public boolean showAdvisoryTime(){
return advTime;
}
/**
* @return True if the advisory sampling is to be displayed
*/
public boolean showAdvisorySampling(){
return advSample;
}
/**
* @return True if the statement/other outline is displayed
*/
public boolean showOtherOutline(){
return otherOutline;
}
/**
* @return True if the statement/other fill is displayed
*/
public boolean showOtherFill(){
return otherFill;
}
/**
* @return True if the statement/other text is displayed
*/
public boolean showOtherText(){
return otherText;
}
/**
* @return True if the statement/other time is displayed
*/
public boolean showOtherTime(){
return otherTime;
}
/**
* @return True if the other/statement sampling is to be displayed
*/
public boolean showOtherSampling(){
return otherSample;
}
/**
* @return True if the warning display settings are to
* be enabled
*/
public boolean enableWarnDisplay() {
return enableWarnDisplay;
}
/**
* @return True if the watch display settings are to
* be enabled
*/
public boolean enableWatchDisplay() {
return enableWatchDisplay;
}
/**
* @return True if the advisory display settings are
* to be enabled
*/
public boolean enableAdvisoryDisplay() {
return enableAdvisoryDisplay;
}
/**
* @return True if the warning statement/other settings
* are to be enabled
*/
public boolean enableOtherDisplay(){
return enableOtherDisplay;
}
/**
* Set the associated DrawingPropertiesDialog
* @param dialog
*/
public void setDrawingDialog(DrawingPropertiesDialog dialog){
drawingDialog = dialog;
}
/**
* @return The dialog used to set the display (drawing) properties
*/
public DrawingPropertiesDialog getDrawingDialog(){
return drawingDialog;
}
} }

View file

@ -37,6 +37,8 @@ import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.catalog.DirectDbQuery; import com.raytheon.uf.viz.core.catalog.DirectDbQuery;
import com.raytheon.uf.viz.core.catalog.DirectDbQuery.QueryLanguage; import com.raytheon.uf.viz.core.catalog.DirectDbQuery.QueryLanguage;
import com.raytheon.uf.viz.core.drawables.FillPatterns; import com.raytheon.uf.viz.core.drawables.FillPatterns;
import com.raytheon.uf.viz.core.drawables.IShadedShape;
import com.raytheon.uf.viz.core.drawables.IWireframeShape;
import com.raytheon.uf.viz.core.drawables.JTSCompiler; import com.raytheon.uf.viz.core.drawables.JTSCompiler;
import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData; import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData;
import com.raytheon.uf.viz.core.drawables.JTSCompiler.PointStyle; import com.raytheon.uf.viz.core.drawables.JTSCompiler.PointStyle;
@ -65,6 +67,7 @@ import org.locationtech.jts.io.WKTReader;
* Aug 22, 2016 5842 dgilling Remove dependency on viz.texteditor plugin. * Aug 22, 2016 5842 dgilling Remove dependency on viz.texteditor plugin.
* Sep 14, 2016 3241 bsteffen Update deprecated JTSCompiler method calls * Sep 14, 2016 3241 bsteffen Update deprecated JTSCompiler method calls
* Mar 15, 2018 7047 dgilling Fix order of display of SPS metadata. * Mar 15, 2018 7047 dgilling Fix order of display of SPS metadata.
* Jun 24, 2022 srcarter@ucar Always create outline (wireshapes) and fill (shadedshapes)
* </pre> * </pre>
* *
* @author rjpeter * @author rjpeter
@ -180,81 +183,46 @@ public class CWASPSResource extends WatchesResource {
entryMap.put(record.getDataURI(), entry); entryMap.put(record.getDataURI(), entry);
} }
// default to a wireframe shape if (!record.getUgcZones().isEmpty()) {
boolean isShaded = false; // if the geometry is null get a geometry based on the county
// list
if (entry.shadedShape != null) { if (record.getGeometry() == null) {
// if the shape was in the shadedShape map then create a shaded record.setGeometry(getGeometry(record));
// shape
isShaded = true;
} else if ((entry.wireframeShape == null)
&& (record.getGeometry() == null)) {
// if it is not in the wireframeShape map and the geometry is null
// then create a shaded shape
isShaded = true;
}
if (isShaded) {
if (!record.getUgcZones().isEmpty()) {
// if the geometry is null get a geometry based on the county
// list
if (record.getGeometry() == null) {
record.setGeometry(getGeometry(record));
}
if (record.getGeometry() != null) {
// dispose old shape
if (entry.shadedShape != null) {
entry.shadedShape.dispose();
}
entry.shadedShape = target.createShadedShape(false,
descriptor.getGridGeometry());
try {
geo = wktr.read(record.getGeometry().toString());
JTSCompiler jtsCompiler = new JTSCompiler(
entry.shadedShape, null, this.descriptor);
JTSGeometryData jtsData = jtsCompiler
.createGeometryData();
jtsData.setPointStyle(PointStyle.CROSS);
jtsData.setGeometryColor(color);
try {
jtsCompiler.handle(geo, jtsData);
} catch (VizException e) {
statusHandler.handle(Priority.PROBLEM,
e.getLocalizedMessage(), e);
entryMap.remove(entry.record.getDataURI());
return;
}
entry.shadedShape.setFillPattern(FillPatterns
.getGLPattern("VERTICAL_DOTTED"));
entry.shadedShape.compile();
} catch (ParseException e) {
statusHandler.handle(Priority.PROBLEM,
e.getLocalizedMessage(), e);
}
}
} }
} else { if (record.getGeometry() != null) {
try {
//give every entry a fill and outline
//add fill (shadedshape)
IShadedShape ss = target.createShadedShape(false, descriptor.getGridGeometry());
geo = wktr.read(record.getGeometry().toString());
JTSCompiler jtsCompiler = new JTSCompiler(ss, null, this.descriptor);
JTSGeometryData geoData = jtsCompiler.createGeometryData();
geoData.setGeometryColor(color);
geoData.setPointStyle(PointStyle.CROSS);
jtsCompiler.handle(geo, geoData);
ss.setFillPattern(FillPatterns.getGLPattern("VERTICAL_DOTTED"));
ss.compile();
try { entry.shadedShape = ss;
// dispose old shape
if (entry.wireframeShape != null) { //add outline (wireshape)
entry.wireframeShape.dispose(); IWireframeShape wfs = entry.wireframeShape;
if (wfs != null) {
wfs.dispose();
}
wfs = target.createWireframeShape(false, descriptor);
jtsCompiler = new JTSCompiler(null, wfs, descriptor);
jtsCompiler.handle(geo);
wfs.compile();
entry.wireframeShape = wfs;
} catch (Exception e) {
statusHandler.handle(Priority.ERROR,
"Error creating wireframe", e);
} }
entry.wireframeShape = target.createWireframeShape(false,
descriptor);
geo = wktr.read(record.getGeometry().toString());
JTSCompiler jtsCompiler = new JTSCompiler(null,
entry.wireframeShape, descriptor);
jtsCompiler.handle(geo);
entry.wireframeShape.compile();
} catch (Exception e) {
statusHandler.handle(Priority.ERROR,
"Error creating wireframe", e);
} }
} }
} }

View file

@ -46,6 +46,8 @@ import com.raytheon.viz.core.mode.CAVEMode;
* Apr 28, 2014 DR 17310 D. Friedman Handle null VTEC fields. * Apr 28, 2014 DR 17310 D. Friedman Handle null VTEC fields.
* Aug 28, 2014 ASM #15682 D. Friedman Refactor for WouWcnWatchesResourceData. * Aug 28, 2014 ASM #15682 D. Friedman Refactor for WouWcnWatchesResourceData.
* Apr 09, 2018 #6963 dgilling Support Practice mode. * Apr 09, 2018 #6963 dgilling Support Practice mode.
* Oct 21, 2021 srcarter Simplified the construct method to always return WarningsResource
* Mar 15, 2022 srcarter Added a getter for the resource name
* *
* </pre> * </pre>
* *
@ -66,28 +68,17 @@ public class WWAResourceData extends AbstractRequestableResourceData {
protected Collection<AbstractWarningRecord> records; protected Collection<AbstractWarningRecord> records;
/*
* (non-Javadoc)
*
* @seecom.raytheon.uf.viz.core.rsc.AbstractRequestableResourceData#
* constructResource(com.raytheon.uf.viz.core.comm.LoadProperties,
* com.raytheon.edex.db.objects.PluginDataObject[])
*/
@Override @Override
protected AbstractVizResource<?, ?> constructResource( protected AbstractVizResource<?, ?> constructResource(
LoadProperties loadProperties, PluginDataObject[] objects) LoadProperties loadProperties, PluginDataObject[] objects)
throws VizException { throws VizException {
boolean watchResource = false;
records = new ArrayList<>(objects.length);
if (objects.length > 0) {
for (int i = 0; i < objects.length; i++) {
records.add((AbstractWarningRecord) objects[i]);
}
watchResource = "A".equals(((AbstractWarningRecord) objects[0])
.getSig());
} else if (loadProperties.isLoadWithoutData()) {
// I must be trying to load without data, Ill try.
RequestConstraint phenSig = getMetadataMap().get("phensig");
watchResource = phenSig != null
&& phenSig.getConstraintValue().contains(".A");
}
if (watchResource) {
return new WatchesResource(this, loadProperties);
}
return new WarningsResource(this, loadProperties); return new WarningsResource(this, loadProperties);
} }
@ -218,20 +209,11 @@ public class WWAResourceData extends AbstractRequestableResourceData {
return false; return false;
} }
@Override /**
public HashMap<String, RequestConstraint> getMetadataMap() { * @return The resource name (similar to what's displayed
HashMap<String, RequestConstraint> metadataMap = super.getMetadataMap(); * in the resource stack, except without the timestamp)
*/
if (metadataMap.containsKey("pluginName")) { public String getName(){
metadataMap = new HashMap<>(metadataMap); return name;
CAVEMode caveMode = CAVEMode.getMode();
String pluginName = (CAVEMode.OPERATIONAL.equals(caveMode)
|| CAVEMode.TEST.equals(caveMode)) ? "warning"
: "practicewarning";
metadataMap.replace("pluginName",
new RequestConstraint(pluginName));
}
return metadataMap;
} }
} }

View file

@ -37,6 +37,9 @@ import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.AbstractTimeMatcher; import com.raytheon.uf.viz.core.AbstractTimeMatcher;
import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.drawables.IDescriptor.FramesInfo; import com.raytheon.uf.viz.core.drawables.IDescriptor.FramesInfo;
import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData;
import com.raytheon.uf.viz.core.drawables.FillPatterns;
import com.raytheon.uf.viz.core.drawables.IShadedShape;
import com.raytheon.uf.viz.core.drawables.IWireframeShape; import com.raytheon.uf.viz.core.drawables.IWireframeShape;
import com.raytheon.uf.viz.core.drawables.JTSCompiler; import com.raytheon.uf.viz.core.drawables.JTSCompiler;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
@ -70,6 +73,9 @@ import org.locationtech.jts.geom.Geometry;
* Apr 14, 2014 DR 17257 D. Friedman Redo time matching on per-minute refresh. * Apr 14, 2014 DR 17257 D. Friedman Redo time matching on per-minute refresh.
* Apr 28, 2015 ASM #15008 D. Friedman Create polygon for EXTs even if original product is not found. * Apr 28, 2015 ASM #15008 D. Friedman Create polygon for EXTs even if original product is not found.
* Aug 22, 2016 #5842 dgilling Remove dependency on viz.texteditor plugin. * Aug 22, 2016 #5842 dgilling Remove dependency on viz.texteditor plugin.
* Oct 21, 2021 srcarter modified initShape to set the shape on watches, and wireframe on warnings and advisories
* Mar 15, 2022 srcarter@ucar Change initshape() to add a shadedshape and wireframeshape to every entry
*
* *
* </pre> * </pre>
* *
@ -179,26 +185,38 @@ public class WarningsResource extends AbstractWWAResource {
entry.record = record; entry.record = record;
entryMap.put(record.getDataURI(), entry); entryMap.put(record.getDataURI(), entry);
} }
WarningAction act = WarningAction.valueOf(record.getAct());
//give every entry a fill and outline
//add fill (shadedshape)
IShadedShape ss = target.createShadedShape(false, descriptor.getGridGeometry());
geo = record.getGeometry();
JTSCompiler jtsCompiler = new JTSCompiler(ss, null, this.descriptor);
JTSGeometryData geoData = jtsCompiler.createGeometryData();
geoData.setGeometryColor(color);
jtsCompiler.handle(geo, geoData);
ss.setFillPattern(FillPatterns.getGLPattern(record.getPhen()
.equals("TO") ? "VERTICAL" : "HORIZONTAL"));
ss.compile();
entry.shadedShape = ss;
//add outline (wireshape)
IWireframeShape wfs = entry.wireframeShape; IWireframeShape wfs = entry.wireframeShape;
if (wfs != null) { if (wfs != null) {
wfs.dispose(); wfs.dispose();
} }
WarningAction act = WarningAction.valueOf(record.getAct());
// Do not paint a wire frame shape for a CAN
if (act != WarningAction.CAN) {
wfs = target.createWireframeShape(false, descriptor);
geo = record.getGeometry();
JTSCompiler jtsCompiler = new JTSCompiler(null, wfs, wfs = target.createWireframeShape(false, descriptor);
descriptor); geo = record.getGeometry();
jtsCompiler.handle(geo);
wfs.compile(); jtsCompiler = new JTSCompiler(null, wfs, descriptor);
entry.wireframeShape = wfs; jtsCompiler.handle(geo);
} else { wfs.compile();
// Prevents sampling and a label to be painted entry.wireframeShape = wfs;
entry.record.setGeometry(null);
}
} catch (Exception e) { } catch (Exception e) {
statusHandler.handle(Priority.ERROR, statusHandler.handle(Priority.ERROR,
"Error creating wireframe", e); "Error creating wireframe", e);

View file

@ -27,6 +27,7 @@ import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.drawables.FillPatterns; import com.raytheon.uf.viz.core.drawables.FillPatterns;
import com.raytheon.uf.viz.core.drawables.IShadedShape; import com.raytheon.uf.viz.core.drawables.IShadedShape;
import com.raytheon.uf.viz.core.drawables.IWireframeShape;
import com.raytheon.uf.viz.core.drawables.JTSCompiler; import com.raytheon.uf.viz.core.drawables.JTSCompiler;
import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData; import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
@ -56,6 +57,7 @@ import org.locationtech.jts.geom.GeometryFactory;
* Mar 04, 2014 2832 njensen Moved disposeInternal() to abstract class * Mar 04, 2014 2832 njensen Moved disposeInternal() to abstract class
* Apr 07, 2014 2959 njensen Correct handling of color change * Apr 07, 2014 2959 njensen Correct handling of color change
* Jan 16, 2017 5976 bsteffen Update shaded shape constructor. * Jan 16, 2017 5976 bsteffen Update shaded shape constructor.
* Mar 15, 2022 srcarter@ucar Change initshape() to add a shadedshape and wireframeshape to every entry
* *
* </pre> * </pre>
* *
@ -169,11 +171,10 @@ public class WatchesResource extends AbstractWWAResource {
if (!record.getUgcZones().isEmpty()) { if (!record.getUgcZones().isEmpty()) {
setGeometry(record); setGeometry(record);
if ((record.getGeometry() != null) && (record.getPhen() != null)) { if ((record.getGeometry() != null) && (record.getPhen() != null)) {
IShadedShape ss = target.createShadedShape(false, //add fill (shadedshape)
descriptor.getGridGeometry()); IShadedShape ss = target.createShadedShape(false, descriptor.getGridGeometry());
geo = record.getGeometry(); geo = record.getGeometry();
JTSCompiler jtsCompiler = new JTSCompiler(ss, null, JTSCompiler jtsCompiler = new JTSCompiler(ss, null, this.descriptor);
this.descriptor);
JTSGeometryData geoData = jtsCompiler.createGeometryData(); JTSGeometryData geoData = jtsCompiler.createGeometryData();
geoData.setGeometryColor(color); geoData.setGeometryColor(color);
jtsCompiler.handle(geo, geoData); jtsCompiler.handle(geo, geoData);
@ -187,6 +188,21 @@ public class WatchesResource extends AbstractWWAResource {
entryMap.put(record.getDataURI(), entry); entryMap.put(record.getDataURI(), entry);
} }
entry.shadedShape = ss; entry.shadedShape = ss;
//add outline (wireshape)
IWireframeShape wfs = entry.wireframeShape;
if (wfs != null) {
wfs.dispose();
}
wfs = target.createWireframeShape(false, descriptor);
geo = record.getGeometry();
jtsCompiler = new JTSCompiler(null, wfs, descriptor);
jtsCompiler.handle(geo);
wfs.compile();
entry.wireframeShape = wfs;
} }
} }
} }

View file

@ -20,6 +20,7 @@ import com.raytheon.uf.common.time.SimulatedTime;
import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.drawables.FillPatterns; import com.raytheon.uf.viz.core.drawables.FillPatterns;
import com.raytheon.uf.viz.core.drawables.IShadedShape; import com.raytheon.uf.viz.core.drawables.IShadedShape;
import com.raytheon.uf.viz.core.drawables.IWireframeShape;
import com.raytheon.uf.viz.core.drawables.JTSCompiler; import com.raytheon.uf.viz.core.drawables.JTSCompiler;
import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData; import com.raytheon.uf.viz.core.drawables.JTSCompiler.JTSGeometryData;
import com.raytheon.uf.viz.core.drawables.JTSCompiler.PointStyle; import com.raytheon.uf.viz.core.drawables.JTSCompiler.PointStyle;
@ -38,6 +39,7 @@ import org.locationtech.jts.geom.Geometry;
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* 2014-08-28 ASM #15682 D. Friemdan Initial creation * 2014-08-28 ASM #15682 D. Friemdan Initial creation
* 2016-09-14 3241 bsteffen Update deprecated JTSCompiler method calls * 2016-09-14 3241 bsteffen Update deprecated JTSCompiler method calls
* 2022-03-15 srcarter@ucar Changed initshape() to draw a shadedshape and wireframeshape for every entry
* </pre> * </pre>
* *
*/ */
@ -242,11 +244,10 @@ public class WouWcnWatchesResource extends WatchesResource implements ISimulated
} }
AbstractWarningRecord record = entry.record; AbstractWarningRecord record = entry.record;
if (record.getGeometry() != null) { if (record.getGeometry() != null) {
IShadedShape ss = target.createShadedShape(false, //added fill (shadedshape)
descriptor.getGridGeometry()); IShadedShape ss = target.createShadedShape(false, descriptor.getGridGeometry());
Geometry geo = (Geometry) record.getGeometry().clone(); Geometry geo = (Geometry) record.getGeometry().clone();
JTSCompiler jtsCompiler = new JTSCompiler(ss, null, JTSCompiler jtsCompiler = new JTSCompiler(ss, null, this.descriptor);
this.descriptor);
JTSGeometryData jtsData = jtsCompiler.createGeometryData(); JTSGeometryData jtsData = jtsCompiler.createGeometryData();
jtsData.setPointStyle(PointStyle.CROSS); jtsData.setPointStyle(PointStyle.CROSS);
jtsData.setGeometryColor(color); jtsData.setGeometryColor(color);
@ -255,6 +256,21 @@ public class WouWcnWatchesResource extends WatchesResource implements ISimulated
.equals("TO") ? "VERTICAL" : "HORIZONTAL")); .equals("TO") ? "VERTICAL" : "HORIZONTAL"));
ss.compile(); ss.compile();
entry.shadedShape = ss; entry.shadedShape = ss;
//added outline (wireshape)
IWireframeShape wfs = entry.wireframeShape;
if (wfs != null) {
wfs.dispose();
}
wfs = target.createWireframeShape(false, descriptor);
geo = record.getGeometry();
jtsCompiler = new JTSCompiler(null, wfs, descriptor);
jtsCompiler.handle(geo);
wfs.compile();
entry.wireframeShape = wfs;
} }
} }

View file

@ -0,0 +1,364 @@
package com.raytheon.viz.warnings.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
import com.raytheon.viz.warnings.rsc.AbstractWWAResource;
/**
* Dialog with options for displaying the outline, fill, text, and time,
* individually, for each warnings, watches, and advisories.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ---------------- --------------------------
* Mar 15, 2022 srcarter@ucar Initial creation
* Mar 21, 2022 srcarter@ucar Set the current values every time initializeComponents is called (also called from .Open)
* Jun 24, 2022 srcarter@ucar Move Watches to top, add section for Other/Statement, add 'enabled' functionality
* Jun 28, 2022 srcarter@ucar Add 'Sampling' options
*
* </pre>
*
* @author srcarter
*/
public class DrawingPropertiesDialog extends CaveSWTDialog {
//gui components
private Button warnOutlineChk;
private Button warnFillChk;
private Button warnTextChk;
private Button warnTimeChk;
private Button warnSampleChk;
private Button watchOutlineChk;
private Button watchFillChk;
private Button watchTextChk;
private Button watchTimeChk;
private Button watchSampleChk;
private Button advOutlineChk;
private Button advFillChk;
private Button advTextChk;
private Button advTimeChk;
private Button advSampleChk;
private Button otherOutlineChk;
private Button otherFillChk;
private Button otherTextChk;
private Button otherTimeChk;
private Button otherSampleChk;
/**
* The WWA Resource associated with this properties dialog
*/
private AbstractWWAResource myResource;
/**
* Creates a dialog with drawing options for all the warning, watches and
* advisories drawn in the resource
* @param parent The parent gui component to associate this dialog with
* @param rsc The WWA resource associated with this dialog
*/
protected DrawingPropertiesDialog(Shell parent, AbstractWWAResource rsc) {
super(parent, SWT.RESIZE | SWT.CLOSE);
myResource = rsc;
setText("WWA Drawing Properties");
}
@Override
// Create and initialize all gui components for controlling the drawing
// displays for the WWAs.
protected void initializeComponents(Shell shell) {
// --- Sub title ---
Composite subComp = new Composite(shell, SWT.NONE);
subComp.setLayout(new GridLayout(1, true));
subComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
Label layerName = new Label(subComp, SWT.NONE);
layerName.setText(myResource.getResourceData().getName());
// --- Watches ---
Group watchComp = new Group(shell, SWT.NONE);
watchComp.setText("Watches");
watchComp.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true));
watchComp.setLayout(new GridLayout(2, true));
//outline and fill
watchOutlineChk = createButton(watchComp, "Show Outline");
watchFillChk = createButton(watchComp, "Thatched Fill");
//text and time
watchTextChk = createButton(watchComp, "Show Text");
watchTimeChk = createButton(watchComp, "Show Time");
//sample
watchSampleChk = createButton(watchComp, "Show Sampling");
// --- end Watches ---
// --- Warnings ---
Group warnComp = new Group(shell, SWT.NONE);
warnComp.setText("Warnings");
warnComp.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true));
warnComp.setLayout(new GridLayout(2, true));
//outline and fill
warnOutlineChk = createButton(warnComp, "Show Outline");
warnFillChk = createButton(warnComp, "Thatched Fill");
//text and time
warnTextChk = createButton(warnComp, "Show Text");
warnTimeChk = createButton(warnComp, "Show Time");
//sample
warnSampleChk = createButton(warnComp, "Show Sampling");
// --- end Warnings ---
// --- Advisories ---
Group advComp = new Group(shell, SWT.NONE);
advComp.setText("Advisories");
advComp.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true));
advComp.setLayout(new GridLayout(2, true));
//outline and fill
advOutlineChk = createButton(advComp, "Show Outline");
advFillChk = createButton(advComp, "Thatched Fill");
//text and time
advTextChk = createButton(advComp, "Show Text");
advTimeChk = createButton(advComp, "Show Time");
//sample
advSampleChk = createButton(advComp, "Show Sampling");
// --- end Advisories ---
// --- Other ---
Group otherComp = new Group(shell, SWT.NONE);
otherComp.setText("Statements/Other");
otherComp.setLayoutData(new GridData(SWT.CENTER, SWT.FILL, true, true));
otherComp.setLayout(new GridLayout(2, true));
//outline and fill
otherOutlineChk = createButton(otherComp, "Show Outline");
otherFillChk = createButton(otherComp, "Thatched Fill");
//text and time
otherTextChk = createButton(otherComp, "Show Text");
otherTimeChk = createButton(otherComp, "Show Time");
//sample
otherSampleChk = createButton(otherComp, "Show Sampling");
// --- end Other ---
// --- Bottom Buttons ---
Composite btnComp = new Composite(shell, SWT.NONE);
btnComp.setLayout(new GridLayout(1, true));
btnComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
// Reset Button
Button resetBtn = new Button(btnComp, SWT.PUSH);
resetBtn.setText("Reset Defaults");
GridData gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
resetBtn.setLayoutData(gd);
resetBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event){
resetDefaults();
updateDisplay();
}
});
// Close Button
Button closeBtn = new Button(btnComp, SWT.PUSH);
closeBtn.setText("Close");
gd = new GridData(SWT.CENTER, SWT.DEFAULT, true, false);
gd.widthHint = 70;
closeBtn.setLayoutData(gd);
closeBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
shell.setVisible(false);
}
});
// --- end Buttons ---
//set all the values
setToCurrentValues();
//set visibility from resource
setWarningControlsEnabled(myResource.enableWarnDisplay());
setWatchControlsEnabled(myResource.enableWatchDisplay());
setAdvisoryControlsEnabled(myResource.enableAdvisoryDisplay());
setOtherControlsEnabled(myResource.enableOtherDisplay());
}
public void updateControlsEnabled(boolean enableWatch, boolean enableWarn, boolean enableAdv, boolean enableOther){
setWatchControlsEnabled(enableWatch);
setWarningControlsEnabled(enableWarn);
setAdvisoryControlsEnabled(enableAdv);
setOtherControlsEnabled(enableOther);
}
private void setWarningControlsEnabled(boolean isEnabled){
warnOutlineChk.setEnabled(isEnabled);
warnFillChk.setEnabled(isEnabled);
warnTextChk.setEnabled(isEnabled);
warnTimeChk.setEnabled(isEnabled);
warnSampleChk.setEnabled(isEnabled);
}
private void setWatchControlsEnabled(boolean isEnabled){
watchOutlineChk.setEnabled(isEnabled);
watchFillChk.setEnabled(isEnabled);
watchTextChk.setEnabled(isEnabled);
watchTimeChk.setEnabled(isEnabled);
watchSampleChk.setEnabled(isEnabled);
}
private void setAdvisoryControlsEnabled(boolean isEnabled){
advOutlineChk.setEnabled(isEnabled);
advFillChk.setEnabled(isEnabled);
advTextChk.setEnabled(isEnabled);
advTimeChk.setEnabled(isEnabled);
advSampleChk.setEnabled(isEnabled);
}
private void setOtherControlsEnabled(boolean isEnabled){
otherOutlineChk.setEnabled(isEnabled);
otherFillChk.setEnabled(isEnabled);
otherTextChk.setEnabled(isEnabled);
otherTimeChk.setEnabled(isEnabled);
otherSampleChk.setEnabled(isEnabled);
}
/**
* Creates a checkbox button used for defining the display
* properties of a given option for the WWA resource. Adds
* the selection listener to the button so it functions
* properly as well.
* @param parent The parent gui component to associate this
* button with
* @param title The text displayed next to the checkbox
* @return A Checkbox style button
*/
private Button createButton(Composite parent, String title){
Button btn = new Button(parent, SWT.CHECK);
btn.setText(title);
btn.addSelectionListener(checkboxListener);
return btn;
}
/**
* The listener used on all the display checkbox buttons
*/
private SelectionAdapter checkboxListener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event){
updateDisplay();
}
};
/**
* Updates all the display settings on the resource based on the
* current button selections in this dialog. Then issues a
* refresh on the resource so it updates the display.
*/
private void updateDisplay(){
myResource.setWarnOutlineDisplay(warnOutlineChk.getSelection());
myResource.setWarnFillDisplay(warnFillChk.getSelection());
myResource.setWarnTextDisplay(warnTextChk.getSelection());
myResource.setWarnTimeDisplay(warnTimeChk.getSelection());
myResource.setWarnSampleDisplay(warnSampleChk.getSelection());
myResource.setWatchOutlineDisplay(watchOutlineChk.getSelection());
myResource.setWatchFillDisplay(watchFillChk.getSelection());
myResource.setWatchTextDisplay(watchTextChk.getSelection());
myResource.setWatchTimeDisplay(watchTimeChk.getSelection());
myResource.setWatchSampleDisplay(watchSampleChk.getSelection());
myResource.setAdvisoryOutlineDisplay(advOutlineChk.getSelection());
myResource.setAdvisoryFillDisplay(advFillChk.getSelection());
myResource.setAdvisoryTextDisplay(advTextChk.getSelection());
myResource.setAdvisoryTimeDisplay(advTimeChk.getSelection());
myResource.setAdvisorySampleDisplay(advSampleChk.getSelection());
myResource.setOtherOutlineDisplay(otherOutlineChk.getSelection());
myResource.setOtherFillDisplay(otherFillChk.getSelection());
myResource.setOtherTextDisplay(otherTextChk.getSelection());
myResource.setOtherTimeDisplay(otherTimeChk.getSelection());
myResource.setOtherSampleDisplay(otherSampleChk.getSelection());
myResource.issueRefresh();
}
/**
* Reset all the button selections in this dialog to the default
* values defined in the @AbstractWWAResource class
*/
private void resetDefaults(){
warnOutlineChk.setSelection(AbstractWWAResource.WARN_OUTLINE_DEFAULT);
warnFillChk.setSelection(AbstractWWAResource.WARN_FILL_DEFAULT);
warnTextChk.setSelection(AbstractWWAResource.WARN_TEXT_DEFAULT);
warnTimeChk.setSelection(AbstractWWAResource.WARN_TIME_DEFAULT);
warnSampleChk.setSelection(true);
watchOutlineChk.setSelection(AbstractWWAResource.WATCH_OUTLINE_DEFAULT);
watchFillChk.setSelection(AbstractWWAResource.WATCH_FILL_DEFAULT);
watchTextChk.setSelection(AbstractWWAResource.WATCH_TEXT_DEFAULT);
watchTimeChk.setSelection(AbstractWWAResource.WATCH_TIME_DEFAULT);
watchSampleChk.setSelection(true);
advOutlineChk.setSelection(AbstractWWAResource.ADV_OUTLINE_DEFAULT);
advFillChk.setSelection(AbstractWWAResource.ADV_FILL_DEFAULT);
advTextChk.setSelection(AbstractWWAResource.ADV_TEXT_DEFAULT);
advTimeChk.setSelection(AbstractWWAResource.ADV_TIME_DEFAULT);
advSampleChk.setSelection(true);
otherOutlineChk.setSelection(AbstractWWAResource.OTHER_OUTLINE_DEFAULT);
otherFillChk.setSelection(AbstractWWAResource.OTHER_FILL_DEFAULT);
otherTextChk.setSelection(AbstractWWAResource.OTHER_TEXT_DEFAULT);
otherTimeChk.setSelection(AbstractWWAResource.OTHER_TIME_DEFAULT);
otherSampleChk.setSelection(true);
}
/**
* Set all the GUI checkboxes to the current boolean values from
* the associated resource
*/
protected void setToCurrentValues(){
warnOutlineChk.setSelection(myResource.showWarnOutline());
warnFillChk.setSelection(myResource.showWarnFill());
warnTextChk.setSelection(myResource.showWarnText());
warnTimeChk.setSelection(myResource.showWarnTime());
warnSampleChk.setSelection(myResource.showWarnSampling());
watchOutlineChk.setSelection(myResource.showWatchOutline());
watchFillChk.setSelection(myResource.showWatchFill());
watchTextChk.setSelection(myResource.showWatchText());
watchTimeChk.setSelection(myResource.showWatchTime());
watchSampleChk.setSelection(myResource.showWatchSampling());
advOutlineChk.setSelection(myResource.showAdvisoryOutline());
advFillChk.setSelection(myResource.showAdvisoryFill());
advTextChk.setSelection(myResource.showAdvisoryText());
advTimeChk.setSelection(myResource.showAdvisoryTime());
advSampleChk.setSelection(myResource.showAdvisorySampling());
otherOutlineChk.setSelection(myResource.showOtherOutline());
otherFillChk.setSelection(myResource.showOtherFill());
otherTextChk.setSelection(myResource.showOtherText());
otherTimeChk.setSelection(myResource.showOtherTime());
otherSampleChk.setSelection(myResource.showOtherSampling());
}
}

View file

@ -0,0 +1,75 @@
package com.raytheon.viz.warnings.ui;
import org.eclipse.ui.PlatformUI;
import com.raytheon.uf.viz.core.rsc.AbstractVizResource;
import com.raytheon.viz.ui.cmenu.AbstractRightClickAction;
import com.raytheon.viz.warnings.rsc.AbstractWWAResource;
import com.raytheon.viz.warnings.rsc.CWASPSResource;
import com.raytheon.viz.warnings.rsc.WarningsResource;
import com.raytheon.viz.warnings.rsc.WatchesResource;
/**
* This action shows an option in the resource menu that opens a new
* dialog which allows the users to specify display properties for
* the WWA resource.
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ---------------- --------------------------
* Mar 15, 2022 srcarter@ucar Initial creation
* Mar 17, 2022 srcarter@ucar Small change to isHidden to only display for proper resources
* Jun 24, 2022 srcarter@ucar Enable for CWASPSResources as well
*
* </pre>
*
* @author srcarter
*/
public class WWADrawingPropertiesAction extends AbstractRightClickAction {
@Override
public String getText() {
return "Open Drawing Properties...";
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.Action#run()
*
* Create and assign a new DrawingPropertiesDialog to the associated
* resource if it does not already have a dialog. If it has a dialog
* proceed with the existing one and show the dialog.
*/
@Override
public void run() {
AbstractWWAResource rsc = (AbstractWWAResource)getSelectedRsc();
DrawingPropertiesDialog dialog = rsc.getDrawingDialog();
if(dialog == null){
dialog = new DrawingPropertiesDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), rsc);
rsc.setDrawingDialog(dialog);
}
dialog.open();
}
/* (non-Javadoc)
* @see com.raytheon.viz.ui.cmenu.AbstractRightClickAction#isHidden()
*
* Only display the drawing properties dialog for WarningsResource and
* WatchesResource, but not for a CWASPS resource.
*/
@Override
public boolean isHidden(){
AbstractVizResource rsc = getSelectedRsc();
if(rsc instanceof WatchesResource || rsc instanceof WarningsResource){
return false;
}
return true;
}
}

View file

@ -0,0 +1,139 @@
package com.raytheon.uf.common.dataplugin.warning.util;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
/**
* Class for looking up phensig info for warnings/advisories.
*
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------- -------- --------- --------------------------------------------
* Dec 19, 2018 mjames Initial creation
*
* </pre>
*
* @author mjames
*/
public class WarningLookups {
private static final IUFStatusHandler theHandler = UFStatus.getHandler(WarningLookups.class);
private static final String LOOKUP_DIR = "warngen";
public static class PhensigValue {
public PhensigValue() {}
public PhensigValue(String name, String color) {
this.name = name;
this.color = color;
}
@XmlAttribute
public String name;
@XmlAttribute
public String color;
}
@XmlAccessorType(XmlAccessType.NONE)
public static abstract class AbstractLookup<K, V> {
public abstract Map<K, V> getMap();
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public static class PhensigColors extends
AbstractLookup<String, PhensigValue> {
public HashMap<String, PhensigValue> map = new HashMap<>();
@Override
public Map<String, PhensigValue> getMap() {
return map;
}
}
private PhensigColors phensigColorLookup;
public WarningLookups() {
try {
init();
} catch (Exception e) {
theHandler.error("Failed to initialize lookups", e);
}
}
private void init() throws Exception {
JAXBContext context = JAXBContext.newInstance(PhensigColors.class);
Unmarshaller u = context.createUnmarshaller();
phensigColorLookup = load(new PhensigColors(), "phensigColors.xml", u);
}
private static <T extends AbstractLookup<K, V>, K, V> T load(
T combinedLookup, String fileName, Unmarshaller u) {
IPathManager pm = PathManagerFactory.getPathManager();
List<LocalizationContext> contexts = Arrays.asList(pm
.getLocalSearchHierarchy(LocalizationType.COMMON_STATIC));
Collections.reverse(contexts);
for (LocalizationContext ctx : contexts) {
File f = pm.getFile(ctx, LOOKUP_DIR + IPathManager.SEPARATOR + fileName);
if (f != null && f.isFile()) {
try {
@SuppressWarnings("unchecked")
T lookup = (T) u.unmarshal(f);
if (!combinedLookup.getClass().isAssignableFrom(
lookup.getClass())) {
throw new Exception(String.format(
"file contains %s' expected %s",
lookup.getClass(), combinedLookup.getClass()));
}
combinedLookup.getMap().putAll(lookup.getMap());
} catch (Exception e) {
theHandler.error(
String.format("%s: %s", f, e.getMessage()), e);
}
}
}
return combinedLookup;
}
public PhensigValue getPhensig(String phensigCode) {
return phensigColorLookup.map.get(phensigCode);
}
private static WarningLookups instance;
public static synchronized WarningLookups getInstance() {
if (instance == null)
instance = new WarningLookups();
return instance;
}
public static synchronized void reload() {
instance = new WarningLookups();
}
}

View file

@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<phensigColors>
<map>
<entry><key>AQ.Y</key><value color="gray" name="Air Quality Alert"></value></entry>
<entry><key>AS.O</key><value color="gray" name="Air Stagnation Outlook"></value></entry>
<entry><key>AS.Y</key><value color="gray" name="Air Stagnation Advisory"></value></entry>
<entry><key>BH.S</key><value color="turquoise" name="Beach Hazards Statement"></value></entry>
<entry><key>BW.Y</key><value color="thistle" name="Brisk Wind Advisory"></value></entry>
<entry><key>BZ.A</key><value color="greenyellow" name="Blizzard Watch"></value></entry>
<entry><key>BZ.W</key><value color="orangered" name="Blizzard Warning"></value></entry>
<entry><key>CF.A</key><value color="mediumaquamarine" name="Coastal Flood Watch"></value></entry>
<entry><key>CF.W</key><value color="forestgreen" name="Coastal Flood Warning"></value></entry>
<entry><key>CF.Y</key><value color="lawngreen" name="Coastal Flood Advisory"></value></entry>
<entry><key>CF.S</key><value color="olivedrab" name="Coastal Flood Statement"></value></entry>
<entry><key>DS.W</key><value color="bisque" name="Dust Storm Warning"></value></entry>
<entry><key>DS.Y</key><value color="darkkhaki" name="Dust Advisory"></value></entry>
<entry><key>DU.Y</key><value color="darkkhaki" name="Blowing Dust Advisory"></value></entry>
<entry><key>EC.A</key><value color="blue" name="Extreme Cold Watch"></value></entry>
<entry><key>EC.W</key><value color="blue" name="Extreme Cold Warning"></value></entry>
<entry><key>EH.A</key><value color="maroon" name="Excessive Heat Watch"></value></entry>
<entry><key>EH.W</key><value color="mediumvioletred" name="Excessive Heat Warning"></value></entry>
<entry><key>EW.W</key><value color="deeppink" name="Excessive Wind Warning"></value></entry>
<entry><key>FA.A</key><value color="seagreen" name="Flood Watch"></value></entry>
<entry><key>FA.W</key><value color="seagreen" name="Areal Flood Warning"></value></entry>
<entry><key>FA.Y</key><value color="seagreen" name="Areal Flood Advisory"></value></entry>
<entry><key>FF.A</key><value color="limegreen" name="Flash Flood Watch"></value></entry>
<entry><key>FF.S</key><value color="yellowgreen" name="Flash Flood Statement"></value></entry>
<entry><key>FF.W</key><value color="darkred" name="Flash Flood Warning"></value></entry>
<entry><key>FG.Y</key><value color="slategray" name="Dense Fog Advisory"></value></entry>
<entry><key>FL.A</key><value color="seagreen" name="Flood Watch"></value></entry>
<entry><key>FL.W</key><value color="green" name="Flood Warning"></value></entry>
<entry><key>HY.S</key><value color="#00ff7f" name="Hydrological Statement"></value></entry>
<entry><key>FL.S</key><value color="#00ff7f" name="Flood Statement"></value></entry>
<entry><key>FL.Y</key><value color="#00ff7f" name="Flood Advisory"></value></entry>
<entry><key>FR.Y</key><value color="cornflowerblue" name="Frost Advisory"></value></entry>
<entry><key>FW.A</key><value color="navajowhite" name="Fire Weather Watch"></value></entry>
<entry><key>FW.W</key><value color="deeppink" name="Red Flag Warning"></value></entry>
<entry><key>FZ.A</key><value color="royalblue" name="Freeze Watch"></value></entry>
<entry><key>FZ.W</key><value color="cyan" name="Freeze Warning"></value></entry>
<entry><key>GL.A</key><value color="pink" name="Gale Watch"></value></entry>
<entry><key>GL.W</key><value color="#dda0dd" name="Gale Warning"></value></entry>
<entry><key>HF.A</key><value color="darkorchid" name="Hurricane Force Wind Watch"></value></entry>
<entry><key>HF.W</key><value color="#cd5c5c" name="Hurricane Force Wind Warning"></value></entry>
<entry><key>HT.Y</key><value color="#ff7f4e" name="Heat Advisory"></value></entry>
<entry><key>HU.A</key><value color="#ff00ff" name="Hurricane Watch"></value></entry>
<entry><key>HU.S</key><value color="yellow" name="Hurricane Statement"></value></entry>
<entry><key>HU.W</key><value color="#dc143c" name="Hurricane Warning"></value></entry>
<entry><key>HW.A</key><value color="darkgoldenrod" name="High Wind Watch"></value></entry>
<entry><key>HW.W</key><value color="goldenrod" name="High Wind Warning"></value></entry>
<entry><key>HZ.A</key><value color="royalblue" name="Hard Freeze Watch"></value></entry>
<entry><key>HZ.W</key><value color="blue" name="Hard Freeze Warning"></value></entry>
<entry><key>SQ.W</key><value color="#EF2B1C" name="Snow Squall Warning"></value></entry>
<entry><key>IS.W</key><value color="darkmagenta" name="Ice Storm Warning"></value></entry>
<entry><key>LE.A</key><value color="LightSkyBlue" name="Lake Effect Snow Watch"></value></entry>
<entry><key>LE.W</key><value color="DarkCyan" name="Lake Effect Snow Warning"></value></entry>
<entry><key>LE.Y</key><value color="MediumTurquoise" name="Lake Effect Snow Advisory"></value></entry>
<entry><key>LO.Y</key><value color="maroon" name="Low Water Advisory"></value></entry>
<entry><key>LS.A</key><value color="MediumAquaMarine" name="Lakeshore Flood Watch"></value></entry>
<entry><key>LS.S</key><value color="lawngreen" name="Lakeshore Flood Statement"></value></entry>
<entry><key>LS.W</key><value color="forestgreen" name="Lakeshore Flood Warning"></value></entry>
<entry><key>LS.Y</key><value color="lawngreen" name="Lakeshore Flood Advisory"></value></entry>
<entry><key>LW.Y</key><value color="tan" name="Lake Wind Advisory"></value></entry>
<entry><key>MA.A</key><value color="peachpuff" name="Special Marine Advisory"></value></entry>
<entry><key>MA.S</key><value color="peachpuff" name="Special Marine Statement"></value></entry>
<entry><key>MA.W</key><value color="palevioletred" name="Special Marine Warning"></value></entry>
<entry><key>MF.Y</key><value color="slategray" name="Dense Fog Advisory"></value></entry>
<entry><key>MH.W</key><value color="darkgray" name="Ashfall Warning"></value></entry>
<entry><key>MH.Y</key><value color="dimgray" name="Ashfall Advisory"></value></entry>
<entry><key>MS.Y</key><value color="khaki" name="Dense Smoke Advisory"></value></entry>
<entry><key>RB.Y</key><value color="thistle" name="Small Craft Advisory for rough bar"></value></entry>
<entry><key>RP.S</key><value color="turquoise" name="High Rip Current Risk"></value></entry>
<entry><key>SC.Y</key><value color="thistle" name="Small Craft Advisory"></value></entry>
<entry><key>SE.A</key><value color="darkslateblue" name="Hazardous Seas Watch"></value></entry>
<entry><key>SE.W</key><value color="thistle" name="Hazardous Seas Warning"></value></entry>
<entry><key>SI.Y</key><value color="thistle" name="Small Craft Advisory for winds"></value></entry>
<entry><key>SM.Y</key><value color="khaki" name="Dense Smoke Advisory"></value></entry>
<entry><key>SR.A</key><value color="violet" name="Storm Watch"></value></entry>
<entry><key>SR.W</key><value color="darkorchid" name="Storm Warning"></value></entry>
<entry><key>SS.A</key><value color="#DB7FF7" name="Storm Surge Watch"></value></entry>
<entry><key>SS.W</key><value color="#B524F7" name="Storm Surge Warning"></value></entry>
<entry><key>SU.W</key><value color="forestgreen" name="High Surf Warning"></value></entry>
<entry><key>SU.Y</key><value color="mediumorchid" name="High Surf Advisory"></value></entry>
<entry><key>SV.A</key><value color="palevioletred" name="Severe Thunderstorm Watch"></value></entry>
<entry><key>SV.S</key><value color="aqua" name="Severe Weather Statement"></value></entry>
<entry><key>SV.W</key><value color="orange" name="Severe Thunderstorm Warning"></value></entry>
<entry><key>SW.Y</key><value color="thistle" name="Small Craft Advisory for hazardous seas"></value></entry>
<entry><key>TO.A</key><value color="yellow" name="Tornado Watch"></value></entry>
<entry><key>TO.W</key><value color="red" name="Tornado Warning"></value></entry>
<entry><key>TR.A</key><value color="#f08080" name="Tropical Storm Watch"></value></entry>
<entry><key>TR.W</key><value color="#b22222" name="Tropical Storm Warning"></value></entry>
<entry><key>TS.A</key><value color="fuchsia" name="Tsunami Watch"></value></entry>
<entry><key>TS.W</key><value color="#FD6347" name="Tsunami Warning"></value></entry>
<entry><key>TS.Y</key><value color="chocolate" name="Tsunami Advisory"></value></entry>
<entry><key>TY.A</key><value color="fuchsia" name="Typhoon Watch"></value></entry>
<entry><key>TY.W</key><value color="#FD6347" name="Typhoon Warning"></value></entry>
<entry><key>UP.A</key><value color="RosyBrown" name="Heavy Freezing Spray Watch"></value></entry>
<entry><key>UP.W</key><value color="#00C0FF" name="Heavy Freezing Spray Warning"></value></entry>
<entry><key>UP.Y</key><value color="#00C0FF" name="Freezing Spray Advisory"></value></entry>
<entry><key>WC.A</key><value color="cadetblue" name="Wind Chill Watch"></value></entry>
<entry><key>WC.W</key><value color="lightsteelblue" name="Wind Chill Warning"></value></entry>
<entry><key>WC.Y</key><value color="paleturquoise" name="Wind Chill Advisory"></value></entry>
<entry><key>WI.Y</key><value color="tan" name="Wind Advisory"></value></entry>
<entry><key>WS.A</key><value color="#4682b4" name="Winter Storm Watch"></value></entry>
<entry><key>WS.W</key><value color="hotpink" name="Winter Storm Warning"></value></entry>
<entry><key>WW.Y</key><value color="#7b68ee" name="Winter Weather Advisory"></value></entry>
<entry><key>ZF.Y</key><value color="teal" name="Freezing Fog Advisory"></value></entry>
<entry><key>ZR.Y</key><value color="orchid" name="Freezing Rain Advisory"></value></entry>
</map>
</phensigColors>