Merge branch 'ss_builds' (13.2.1-5) into 13.2.1_delivery

Conflicts:
	cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenLayer.java

Former-commit-id: 44a4287812 [formerly 14f23d4227] [formerly a16ac7819c] [formerly 6c6b53679b [formerly a16ac7819c [formerly 873c1773504d6dd9421b92f6193c32e477e4533c]]]
Former-commit-id: 6c6b53679b
Former-commit-id: 5a2f1703799bcf7b130380bb73001e518a88ee6d [formerly 28ddc9bad8]
Former-commit-id: 48a0ffda4d
This commit is contained in:
Steve Harris 2013-02-06 11:08:53 -06:00
commit 63b36d8670
70 changed files with 1922 additions and 509 deletions

View file

@ -85,7 +85,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation1}" <constraint constraintValue="${elevation1}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -119,7 +119,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation1}" <constraint constraintValue="${elevation1}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -173,7 +173,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation2}" <constraint constraintValue="${elevation2}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -207,7 +207,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation2}" <constraint constraintValue="${elevation2}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -256,7 +256,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation4}" <constraint constraintValue="${elevation4}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -290,7 +290,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation4}" <constraint constraintValue="${elevation4}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -344,7 +344,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation3}" <constraint constraintValue="${elevation3}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>
@ -378,7 +378,7 @@
</mapping> </mapping>
<mapping key="primaryElevationAngle"> <mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation3}" <constraint constraintValue="${elevation3}"
constraintType="BETWEEN" /> constraintType="IN" />
</mapping> </mapping>
</metadataMap> </metadataMap>
</resourceData> </resourceData>

View file

@ -0,0 +1,392 @@
<?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.
-->
<!-- blends two sets of up to 4 radar products displaying only the best res
ones on each side in four panels, each panel is a different elevation
substitution keys:
product1 the productCode of the highest resolution data on the left
product2 the productCode of the next highest resolution data on the left
product3 the productCode of the next highest resolution data on the left, or empty string for none
product4 the productCode of the lowesr resolution data on the left, or empty string for none
product5 the productCode of the highest resolution data on the right
product6 the productCode of the next highest resolution data on the right
product7 the productCode of the next highest resolution data on the right, or empty string for none
product8 the productCode of the lowesr resolution data on the right, or empty string for none
mode1 the special mode for the resource on the left, most of the time an empty string
mode2 the special mode for the resource on the right, most of the time an empty string
icao the icao, kxxx or something like that
elev2 the elevation to load in the upper left panel
elev3 the elevation to load in the upper right panel
elev4 the elevation to load in the lower right panel
elev4 the elevation to load in the lower left panel
-->
<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="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="blendedResourceData">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode1}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product1},${product2},${product3},${product4}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation1}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode2}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true" >
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product5},${product6},${product7},${product8}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation1}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
<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="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="blendedResourceData">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode1}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product1},${product2},${product3},${product4}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation2}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode2}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true" >
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product5},${product6},${product7},${product8}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation2}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays><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="imagingCapability" interpolationState="false" brightness="1.0" contrast="1.0" alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false" isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="blendedResourceData">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode1}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product1},${product2},${product3},${product4}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation4}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode2}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true" >
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product5},${product6},${product7},${product8}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation4}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
<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="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="blendedResourceData">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode1}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true">
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product1},${product2},${product3},${product4}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation3}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="imagingCapability"
interpolationState="false" brightness="1.0" contrast="1.0"
alpha="1.0" />
<capability xsi:type="rangeRingsOverlayCapability" />
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false" isVisible="true">
</properties>
<resourceData xsi:type="radarResourceData" mode="${mode2}"
isUpdatingOnMetadataOnly="false"
isRequeryNecessaryOnTimeMatch="true" >
<metadataMap>
<mapping key="productCode">
<constraint constraintValue="${product5},${product6},${product7},${product8}"
constraintType="IN" />
</mapping>
<mapping key="icao">
<constraint constraintValue="${icao}"
constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="radar" constraintType="EQUALS" />
</mapping>
<mapping key="primaryElevationAngle">
<constraint constraintValue="${elevation3}"
constraintType="BETWEEN" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -297,12 +297,8 @@ class SmartScript(BaseTool.BaseTool):
#SendISCOnSave is enabled, then this routine will fail as grids are #SendISCOnSave is enabled, then this routine will fail as grids are
#sent when saved and the manual operation is not allowed. The #sent when saved and the manual operation is not allowed. The
#overall isc send state must also be True for this command to work. #overall isc send state must also be True for this command to work.
req = [] req = ArrayList()
parms = self.__parmMgr.getAllAvailableParms(); req.add(SendISCRequest())
for parm in parms:
pid = parm.getParmID()
tr = parm.getParmTimeRange()
req.append(SendISCRequest(pid,tr))
self.__parmOp.sendISC(req) self.__parmOp.sendISC(req)
def manualSendISC_manualMode(self, requests): def manualSendISC_manualMode(self, requests):
@ -310,13 +306,12 @@ class SmartScript(BaseTool.BaseTool):
#SendISCOnSave is enabled, then this routine will fail as grids are #SendISCOnSave is enabled, then this routine will fail as grids are
#sent when saved and the manual operation is not allowed. #sent when saved and the manual operation is not allowed.
#The requests are tuples of (parmName, parmLevel, timeRange). The #The requests are tuples of (parmName, parmLevel, timeRange). The
#TimeRange is an AFPS.TimeRange() instance. The overall isc #TimeRange is an TimeRange() instance. The overall isc
#send state must also be True for this command to work. #send state must also be True for this command to work.
req = [] req = ArrayList()
for parmName, parmLevel, tr in requests: for parmName, parmLevel, tr in requests:
pid = ParmID.ParmID(parmName, self.mutableID(), pid = ParmID.ParmID(name=parmName, dbid=self.mutableID(), level=parmLevel).toJavaObj()
parmLevel).toJavaObj() req.add(SendISCRequest(pid, tr.toJavaObj()))
req.append(SendISCRequest(pid, tr))
self.__parmOp.sendISC(req) self.__parmOp.sendISC(req)

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=cmc GDFILE=cmc
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=hireswNmmE GDFILE=hireswNmmE
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast</filterLabels> <filterLabels>Forecast</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=ecmwf GDFILE=ecmwf
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=ecmwfg GDFILE=ecmwfg
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=ecmwft GDFILE=ecmwft
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=fnmocwave GDFILE=fnmocwave
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=gfs GDFILE=gfs
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -8,7 +8,6 @@
<resourceParameters> <resourceParameters>
GDFILE=nam GDFILE=nam
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>
<subTypeGenerator></subTypeGenerator> <subTypeGenerator></subTypeGenerator>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=nogaps GDFILE=nogaps
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=nww3 GDFILE=nww3
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -6,7 +6,6 @@
<resourceParameters> <resourceParameters>
GDFILE=rap GDFILE=rap
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Regional</filterLabels> <filterLabels>Forecast,Regional</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -7,7 +7,6 @@
<resourceParameters> <resourceParameters>
GDFILE=ukmet GDFILE=ukmet
pluginName=grid pluginName=grid
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast,Global</filterLabels> <filterLabels>Forecast,Global</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -6,7 +6,6 @@
<resourceParameters> <resourceParameters>
GDFILE=westnmm GDFILE=westnmm
pluginName=ncgrib pluginName=ncgrib
eventName=%
</resourceParameters> </resourceParameters>
<filterLabels>Forecast</filterLabels> <filterLabels>Forecast</filterLabels>
<rscImplementation>ModelFcstGridContours</rscImplementation> <rscImplementation>ModelFcstGridContours</rscImplementation>

View file

@ -1,4 +1,5 @@
source.. = src/ source.. = src/
output.. = bin/ output.. = bin/
bin.includes = META-INF/,\ bin.includes = META-INF/,\
. .,\
localization/

View file

@ -67,6 +67,8 @@ import com.vividsolutions.jts.geom.MultiPolygon;
* 05Aug2008 #1383 ebabin Fix for time shift not working. * 05Aug2008 #1383 ebabin Fix for time shift not working.
* 06Nov2008 #1591 wdougherty Fix isValid() so it can return true * 06Nov2008 #1591 wdougherty Fix isValid() so it can return true
* Tweak doSet() for filtered grids, fix bugs * Tweak doSet() for filtered grids, fix bugs
* 30Jan2013 #15719 jdynina Fixed allowed field size to accept more
* than 128 characters
* *
* </pre> * </pre>
* *
@ -154,7 +156,7 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
for (int newy = j - ss; newy <= j + ss; newy++) { for (int newy = j - ss; newy <= j + ss; newy++) {
// if inside grid limits, make a smoothed value // if inside grid limits, make a smoothed value
if (originalGrid.isValid(newx, newy)) { if (originalGrid.isValid(newx, newy)) {
histo[originalGrid.get(newx, newy)]++; histo[0xFF & originalGrid.get(newx, newy)]++;
} }
} }
} }
@ -251,7 +253,7 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
public WxValue getWxValue(int x, int y) { public WxValue getWxValue(int x, int y) {
// throw new UnsupportedOperationException("Attempt to getWxValue: "); // throw new UnsupportedOperationException("Attempt to getWxValue: ");
populate(); populate();
int index = getGrid().get(x, y); int index = 0xFF & getGrid().get(x, y);
DiscreteWxValue tmpDiscreteWxValue = new DiscreteWxValue( DiscreteWxValue tmpDiscreteWxValue = new DiscreteWxValue(
getKey()[index], getParm()); getKey()[index], getParm());
@ -584,8 +586,8 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
// fancy code in here to prevent lots of repeated combining // fancy code in here to prevent lots of repeated combining
// for efficiency. // for efficiency.
// Make an array of byte...init to MAX_VALUE // Make an array of byte...init to MAX_VALUE
byte newValues[] = new byte[Byte.MAX_VALUE]; byte newValues[] = new byte[255];
Arrays.fill(newValues, Byte.MAX_VALUE); Arrays.fill(newValues, (byte)-1);
byte[] gridA = discreteGrid.getBuffer().array(); byte[] gridA = discreteGrid.getBuffer().array();
byte[] pToSetA = pointsToSet.getBuffer().array(); byte[] pToSetA = pointsToSet.getBuffer().array();
@ -596,18 +598,19 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
if ((byte) 1 == pToSetA[rowOffset + col]) { if ((byte) 1 == pToSetA[rowOffset + col]) {
// pointsToSet selects this grid point // pointsToSet selects this grid point
byte dataPoint = gridA[rowOffset + col]; byte dataPoint = gridA[rowOffset + col];
int dataPointIdx = 0xFF & dataPoint;
if (dataPoint != index) { if (dataPoint != index) {
// value needs to change // value needs to change
if (newValues[dataPoint] == Byte.MAX_VALUE) { if (newValues[dataPointIdx] == (byte)-1) {
// new key hasn't been found // new key hasn't been found
DiscreteKey combinedKey = DiscreteKey.combine( DiscreteKey combinedKey = DiscreteKey.combine(
dk, getKey()[dataPoint]); dk, getKey()[dataPointIdx]);
// Store new key index in lookup table // Store new key index in lookup table
newValues[dataPoint] = lookupKeyValue(combinedKey); newValues[dataPointIdx] = lookupKeyValue(combinedKey);
} }
// Update the grid // Update the grid
gridA[rowOffset + col] = newValues[dataPoint]; gridA[rowOffset + col] = newValues[dataPointIdx];
} }
} }
} }
@ -676,7 +679,7 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
} }
// set up translation matrix // set up translation matrix
byte translate[] = new byte[128]; byte translate[] = new byte[255];
Arrays.fill(translate, (byte) -1); Arrays.fill(translate, (byte) -1);
// get the grid // get the grid
@ -715,7 +718,8 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
// if inside grid limits, copy value to new position // if inside grid limits, copy value to new position
// of working grid. // of working grid.
if (sliceGrid.isValid(newx, newy)) { if (sliceGrid.isValid(newx, newy)) {
byte og = originalGrid.get(i, j); //byte og = originalGrid.get(i, j);
int og = 0xFF & originalGrid.get(i, j);
byte v = translate[og]; byte v = translate[og];
if (v == -1) { if (v == -1) {
v = lookupKeyValue(originalKey[og]); v = lookupKeyValue(originalKey[og]);
@ -895,7 +899,7 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
int numValues = values.getXdim() * values.getYdim(); int numValues = values.getXdim() * values.getYdim();
byte[] bp = values.getBuffer().array(); byte[] bp = values.getBuffer().array();
for (int i = 0; i < numValues; i++) { for (int i = 0; i < numValues; i++) {
if (bp[i] + 1 > key.size()) { if ((0xFF & bp[i]) > key.size() -1) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Illegal discrete grid (bad values) in gridSet()"); "Illegal discrete grid (bad values) in gridSet()");
} }
@ -918,7 +922,7 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
for (int i = 0; i < dim.x; i++) { for (int i = 0; i < dim.x; i++) {
for (int j = 0; j < dim.y; j++) { for (int j = 0; j < dim.y; j++) {
if (points.get(i, j) == 1) { if (points.get(i, j) == 1) {
grid.set(i, j, remap[values.get(i, j)]); grid.set(i, j, remap[0xFF & values.get(i, j)]);
} }
} }
} }
@ -942,7 +946,8 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
protected DiscreteKey doGetDiscreteValue(int x, int y) { protected DiscreteKey doGetDiscreteValue(int x, int y) {
byte gridValue = getGrid().get(x, y); byte gridValue = getGrid().get(x, y);
return getKey()[gridValue]; int gridValueIdx = 0xFF & gridValue;
return getKey()[gridValueIdx];
} }
/* /*
@ -1049,12 +1054,14 @@ public class DiscreteGridData extends AbstractGridData implements INumpyable {
// check data values // check data values
byte[] data = grid.getBuffer().array(); byte[] data = grid.getBuffer().array();
DiscreteKey[] keys = getKey(); DiscreteKey[] keys = getKey();
byte keySize = (byte) keys.length; //byte keySize = (byte) keys.length;
int keySize = keys.length;
for (int j = 0; j < data.length; j++) { for (int j = 0; j < data.length; j++) {
if (data[j] > keySize) { int value = 0xFF & data[j];
if (value > keySize) {
statusHandler.handle(Priority.PROBLEM, emsg + "Data=" statusHandler.handle(Priority.PROBLEM, emsg + "Data="
+ (int) data[j] + " Min=0 Max=" + (int) keySize); + (int) value + " Min=0 Max=" + (int) keySize);
return false; return false;
} }
} }

View file

@ -63,6 +63,8 @@ import com.vividsolutions.jts.geom.MultiPolygon;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 15, 2011 randerso Initial creation * Mar 15, 2011 randerso Initial creation
* Jan 30, 2013 #15719 jdynina Allowed more than 128 chars in wx
* strings
* *
* </pre> * </pre>
* *
@ -150,7 +152,7 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
// if inside grid limits, make a // if inside grid limits, make a
// smoothed value // smoothed value
if (originalGrid.isValid(newx, newy)) { if (originalGrid.isValid(newx, newy)) {
histo[originalGrid.get(newx, newy)]++; histo[0xFF & originalGrid.get(newx, newy)]++;
} }
} }
} }
@ -240,7 +242,7 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
public WxValue getWxValue(int x, int y) { public WxValue getWxValue(int x, int y) {
// throw new UnsupportedOperationException("Attempt to getWxValue: "); // throw new UnsupportedOperationException("Attempt to getWxValue: ");
populate(); populate();
int index = getGrid().get(x, y); int index = 0xFF & getGrid().get(x, y);
WeatherWxValue tmpWeatherWxValue = new WeatherWxValue(getKeys()[index], WeatherWxValue tmpWeatherWxValue = new WeatherWxValue(getKeys()[index],
getParm()); getParm());
@ -564,8 +566,8 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
// fancy code in here to prevent lots of repeated combining // fancy code in here to prevent lots of repeated combining
// for efficiency. // for efficiency.
// Make an array of byte...init to MAX_VALUE // Make an array of byte...init to MAX_VALUE
byte newValues[] = new byte[Byte.MAX_VALUE]; byte newValues[] = new byte[255];
Arrays.fill(newValues, Byte.MAX_VALUE); Arrays.fill(newValues, (byte)-1);
byte[] gridA = weatherGrid.getBuffer().array(); byte[] gridA = weatherGrid.getBuffer().array();
byte[] pToSetA = pointsToSet.getBuffer().array(); byte[] pToSetA = pointsToSet.getBuffer().array();
@ -577,18 +579,19 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
if ((byte) 1 == pToSetA[rowOffset + col]) { if ((byte) 1 == pToSetA[rowOffset + col]) {
// pointsToSet selects this grid point // pointsToSet selects this grid point
byte dataPoint = gridA[rowOffset + col]; byte dataPoint = gridA[rowOffset + col];
int dataPointIdx = 0xFF & dataPoint;
if (dataPoint != index) { if (dataPoint != index) {
// value needs to change // value needs to change
if (newValues[dataPoint] == Byte.MAX_VALUE) { if (newValues[dataPointIdx] == (byte)-1) {
// new key hasn't been found // new key hasn't been found
WeatherKey combinedKey = new WeatherKey(wk); WeatherKey combinedKey = new WeatherKey(wk);
combinedKey.addAll(getKeys()[dataPoint]); combinedKey.addAll(getKeys()[dataPointIdx]);
// Store new key index in lookup table // Store new key index in lookup table
newValues[dataPoint] = lookupKeyValue(combinedKey); newValues[dataPointIdx] = lookupKeyValue(combinedKey);
} }
// Update the grid // Update the grid
gridA[rowOffset + col] = newValues[dataPoint]; gridA[rowOffset + col] = newValues[dataPointIdx];
} }
} }
} }
@ -718,7 +721,8 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
} }
// set up translation matrix // set up translation matrix
byte translate[] = new byte[128]; //byte translate[] = new byte[128];
byte translate[] = new byte[255];
Arrays.fill(translate, (byte) -1); Arrays.fill(translate, (byte) -1);
// get the grid // get the grid
@ -757,7 +761,8 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
// if inside grid limits, copy value to new position // if inside grid limits, copy value to new position
// of working grid. // of working grid.
if (sliceGrid.isValid(newx, newy)) { if (sliceGrid.isValid(newx, newy)) {
byte og = originalGrid.get(i, j); //byte og = originalGrid.get(i, j);
int og = 0xFF & originalGrid.get(i, j);
byte v = translate[og]; byte v = translate[og];
if (v == -1) { if (v == -1) {
v = lookupKeyValue(originalKey[og]); v = lookupKeyValue(originalKey[og]);
@ -871,7 +876,7 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
int numValues = values.getXdim() * values.getYdim(); int numValues = values.getXdim() * values.getYdim();
byte[] bp = values.getBuffer().array(); byte[] bp = values.getBuffer().array();
for (int i = 0; i < numValues; i++) { for (int i = 0; i < numValues; i++) {
if (bp[i] + 1 > key.size()) { if ((0xFF & bp[i]) > key.size() -1) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Illegal weather grid (bad values) in gridSet()"); "Illegal weather grid (bad values) in gridSet()");
} }
@ -888,7 +893,7 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
for (int i = 0; i < dim.x; i++) { for (int i = 0; i < dim.x; i++) {
for (int j = 0; j < dim.y; j++) { for (int j = 0; j < dim.y; j++) {
if (points.get(i, j) == 1) { if (points.get(i, j) == 1) {
grid.set(i, j, remap[values.get(i, j)]); grid.set(i, j, remap[0xFF & values.get(i, j)]);
} }
} }
} }
@ -912,7 +917,8 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
protected WeatherKey doGetWeatherValue(int x, int y) { protected WeatherKey doGetWeatherValue(int x, int y) {
byte gridValue = getGrid().get(x, y); byte gridValue = getGrid().get(x, y);
return getKeys()[gridValue]; int gridValueIdx = 0xFF & gridValue;
return getKeys()[gridValueIdx];
} }
/* /*
@ -1019,12 +1025,14 @@ public class WeatherGridData extends AbstractGridData implements INumpyable {
// check data values // check data values
byte[] data = grid.getBuffer().array(); byte[] data = grid.getBuffer().array();
WeatherKey[] keys = getKeys(); WeatherKey[] keys = getKeys();
byte keySize = (byte) keys.length; //byte keySize = (byte) keys.length;
int keySize = keys.length;
for (int j = 0; j < data.length; j++) { for (int j = 0; j < data.length; j++) {
if (data[j] > keySize) { int value = 0xFF & data[j];
if (value > keySize) {
statusHandler.handle(Priority.PROBLEM, emsg + "Data=" statusHandler.handle(Priority.PROBLEM, emsg + "Data="
+ (int) data[j] + " Min=0 Max=" + (int) keySize); + (int) value + " Min=0 Max=" + (int) keySize);
return false; return false;
} }
} }

View file

@ -19,7 +19,6 @@
**/ **/
package com.raytheon.viz.gfe.dialogs; package com.raytheon.viz.gfe.dialogs;
import java.awt.Toolkit;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
@ -75,7 +74,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Jun 20, 2008 #875 bphillip Implemented Dialog functionality * Jun 20, 2008 #875 bphillip Implemented Dialog functionality
* Sep 20, 2012 #1190 dgilling Use new WsId.getHostName() method. * Sep 20, 2012 #1190 dgilling Use new WsId.getHostName() method.
* Nov 12, 2012 #1298 rferrel Code cleanup for non-blocking dialog. * Nov 12, 2012 #1298 rferrel Code cleanup for non-blocking dialog.
* Jan 10, 2013 #DR15572 jzeng add getWindowMax() and getMaxWidth(String str) * Jan 10, 2013 #DR15572 jzeng add getMaxWidth(String str)
* and adjustDlg(String str), * and adjustDlg(String str),
* change gridInfoText from Label to Text * change gridInfoText from Label to Text
* to make sure the info get displayed inside the screen * to make sure the info get displayed inside the screen
@ -107,15 +106,9 @@ public class GridInfoDialog extends CaveJFACEDialog implements
// set gridInfoText to be Text // set gridInfoText to be Text
private Text gridInfoText; private Text gridInfoText;
// width of the screen
private int WidthofScreen;
// width of the grouplist
private final int WidthofGroup = 240;
private SimpleDateFormat gmtFormatter; private SimpleDateFormat gmtFormatter;
public GridInfoDialog(Shell parent, Parm parm, Date clickTime) { public GridInfoDialog(Shell parent, Parm parm, Date clickTime) {
super(parent); super(parent);
this.setShellStyle(SWT.DIALOG_TRIM | SWT.MODELESS); this.setShellStyle(SWT.DIALOG_TRIM | SWT.MODELESS);
@ -127,8 +120,6 @@ public class GridInfoDialog extends CaveJFACEDialog implements
gmtFormatter = new SimpleDateFormat("MMM dd yy HH:mm:ss zzz"); gmtFormatter = new SimpleDateFormat("MMM dd yy HH:mm:ss zzz");
gmtFormatter.setTimeZone(TimeZone.getTimeZone("GMT")); gmtFormatter.setTimeZone(TimeZone.getTimeZone("GMT"));
//make sure there is enough space for the group list
WidthofScreen = this.getWindowMax() - WidthofGroup;
} }
@Override @Override
@ -153,34 +144,30 @@ public class GridInfoDialog extends CaveJFACEDialog implements
b.setText(gridInfoElements[i]); b.setText(gridInfoElements[i]);
b.addSelectionListener(this); b.addSelectionListener(this);
} }
// Composite composite2 = new Composite(top, SWT.NONE); // Composite composite2 = new Composite(top, SWT.NONE);
// layoutData = new GridData(SWT.DEFAULT, SWT.FILL, false, true); // layoutData = new GridData(SWT.DEFAULT, SWT.FILL, false, true);
// composite2.setLayoutData(layoutData); // composite2.setLayoutData(layoutData);
// composite2.setLayout(new GridLayout(1, true)); // composite2.setLayout(new GridLayout(1, true));
gridInfoText = new Text(top, SWT.NONE | SWT.H_SCROLL); gridInfoText = new Text(top, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.READ_ONLY);
layoutData = new GridData(SWT.FILL, SWT.FILL, true, true); layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridInfoText.setEditable(false);
gridInfoText.setBackground(group.getBackground()); gridInfoText.setBackground(group.getBackground());
gridInfoText.setLayoutData(layoutData); gridInfoText.setLayoutData(layoutData);
} }
/*
* To get the width of the screen
*/
private int getWindowMax(){
Toolkit toolkit = Toolkit.getDefaultToolkit();
return toolkit.getScreenSize().width;
}
/* /*
* adjust the width of the dialog * adjust the width of the dialog
*/ */
private void adjustDlg(String infoText){ private void adjustDlg(String infoText){
int screenWidth = this.getParentShell().getDisplay().
getPrimaryMonitor().getBounds().width;
int maxWidth = (int)Math.round(screenWidth * 0.75);
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
int maxLength = getMaxWidth(infoText); int maxLength = getMaxWidth(infoText);
if ( maxLength > WidthofScreen ) { if ( maxLength > maxWidth ) {
gd.widthHint = WidthofScreen; gd.widthHint = maxWidth;
gridInfoText.setLayoutData(gd); gridInfoText.setLayoutData(gd);
} else { } else {
gridInfoText.setLayoutData(gd); gridInfoText.setLayoutData(gd);

View file

@ -24,7 +24,7 @@
<contribute xsi:type="titleItem" titleText="------ Z/V ------" <contribute xsi:type="titleItem" titleText="------ Z/V ------"
id="${icao}Terminal4panelZV" /> id="${icao}Terminal4panelZV" />
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev6} ${elev8}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev6} ${elev8}"
id="${icao}${elev1}${elev2}${elev6}${elev8}Terminal4panelZV" id="${icao}${elev1}${elev2}${elev6}${elev8}Terminal4panelZV"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -44,7 +44,7 @@
<substitute key="elevation4" value="${elev8}--${elev8}" /> <substitute key="elevation4" value="${elev8}--${elev8}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev1} ${elev3} ${elev5} ${elev6}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev1} ${elev3} ${elev5} ${elev6}"
id="${icao}${elev1}${elev3}${elev5}${elev6}Terminal4panelZV" id="${icao}${elev1}${elev3}${elev5}${elev6}Terminal4panelZV"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -64,7 +64,7 @@
<substitute key="elevation4" value="${elev6}--${elev6}" /> <substitute key="elevation4" value="${elev6}--${elev6}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev3} ${elev4}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev3} ${elev4}"
id="${icao}${elev1}${elev2}${elev3}${elev4}Terminal4panelZV" id="${icao}${elev1}${elev2}${elev3}${elev4}Terminal4panelZV"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -84,7 +84,7 @@
<substitute key="elevation4" value="${elev4}--${elev4}" /> <substitute key="elevation4" value="${elev4}--${elev4}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev3} ${elev7} ${elev8} ${elev9}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev3} ${elev7} ${elev8} ${elev9}"
id="${icao}${elev3}${elev7}${elev8}${elev9}Terminal4panelZV" id="${icao}${elev3}${elev7}${elev8}${elev9}Terminal4panelZV"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -104,7 +104,7 @@
<substitute key="elevation4" value="${elev9}--${elev9}" /> <substitute key="elevation4" value="${elev9}--${elev9}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev8} ${elev9} ${elev10} ${elev12}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev8} ${elev9} ${elev10} ${elev12}"
id="${icao}${elev8}${elev9}${elev10}${elev12}Terminal4panelZV" id="${icao}${elev8}${elev9}${elev10}${elev12}Terminal4panelZV"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -127,7 +127,7 @@
<contribute xsi:type="titleItem" titleText="------ Z/SRM8 ------" <contribute xsi:type="titleItem" titleText="------ Z/SRM8 ------"
id="${icao}Terminal4panelZSRM8" /> id="${icao}Terminal4panelZSRM8" />
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev6} ${elev8}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev6} ${elev8}"
id="${icao}${elev1}${elev2}${elev6}${elev8}Terminal4panelZSRM8" id="${icao}${elev1}${elev2}${elev6}${elev8}Terminal4panelZSRM8"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -147,7 +147,7 @@
<substitute key="elevation4" value="${elev8}--${elev8}" /> <substitute key="elevation4" value="${elev8}--${elev8}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev1} ${elev3} ${elev5} ${elev6}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev1} ${elev3} ${elev5} ${elev6}"
id="${icao}${elev1}${elev3}${elev5}${elev6}Terminal4panelZSRM8" id="${icao}${elev1}${elev3}${elev5}${elev6}Terminal4panelZSRM8"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -167,7 +167,7 @@
<substitute key="elevation4" value="${elev6}--${elev6}" /> <substitute key="elevation4" value="${elev6}--${elev6}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev3} ${elev4}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev1} ${elev2} ${elev3} ${elev4}"
id="${icao}${elev1}${elev2}${elev3}${elev4}Terminal4panelZSRM8" id="${icao}${elev1}${elev2}${elev3}${elev4}Terminal4panelZSRM8"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -187,7 +187,7 @@
<substitute key="elevation4" value="${elev4}--${elev4}" /> <substitute key="elevation4" value="${elev4}--${elev4}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev3} ${elev7} ${elev8} ${elev9}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev3} ${elev7} ${elev8} ${elev9}"
id="${icao}${elev3}${elev7}${elev8}${elev9}Terminal4panelZSRM8" id="${icao}${elev3}${elev7}${elev8}${elev9}Terminal4panelZSRM8"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />
@ -207,7 +207,7 @@
<substitute key="elevation4" value="${elev9}--${elev9}" /> <substitute key="elevation4" value="${elev9}--${elev9}" />
</contribute> </contribute>
<contribute xsi:type="bundleItem" <contribute xsi:type="bundleItem"
file="bundles/DefaultRadarFourPanelBlendedBestRes.xml" menuText="${elev8} ${elev9} ${elev10} ${elev12}" file="bundles/DefaultTerminalRadar4PanelBlendedBestRes.xml" menuText="${elev8} ${elev9} ${elev10} ${elev12}"
id="${icao}${elev8}${elev9}${elev10}${elev12}Terminal4panelZSRM8" id="${icao}${elev8}${elev9}${elev10}${elev12}Terminal4panelZSRM8"
suppressErrors="${suppressErrors3}"> suppressErrors="${suppressErrors3}">
<substitute key="icao" value="${icao}" /> <substitute key="icao" value="${icao}" />

View file

@ -152,11 +152,27 @@ public class PrintDisplay {
*/ */
int lineWidthPixels = gc.stringExtent(aBuffer.toString()).x; int lineWidthPixels = gc.stringExtent(aBuffer.toString()).x;
int deviceWidthPixels = rightMargin - leftMargin; int deviceWidthPixels = rightMargin - leftMargin;
printerFont.dispose();
/* /*
* Scale the original font size; * Scale the original font size;
*/ */
float fontSize = (float)deviceWidthPixels / (float)lineWidthPixels * (float)origFontSize; float fontSize = (float)deviceWidthPixels / (float)lineWidthPixels * (float)origFontSize;
/*
* Validate that the line width in scaled font does not exceed the deviceWidthPixelx
*/
boolean isValidated = false;
while (!isValidated) {
printerFontData.setHeight((int) (fontSize));
gc.setFont(new Font(printer, printerFontData));
lineWidthPixels = gc.stringExtent(aBuffer.toString()).x;
if (lineWidthPixels < deviceWidthPixels) {
isValidated = true;
} else {
fontSize--;
}
}
printerFont.dispose();
/* /*
* Set the printerFont Data font to the scaled font * Set the printerFont Data font to the scaled font
*/ */

View file

@ -129,6 +129,7 @@ import com.vividsolutions.jts.geom.Polygon;
* and in updateListSelected(). * and in updateListSelected().
* Dec 20, 2012 DR 15537 Qinglu Lin Changed the assigned value to trackEditable from false * Dec 20, 2012 DR 15537 Qinglu Lin Changed the assigned value to trackEditable from false
* to true in boxSelected(). * to true in boxSelected().
* Jan 24, 2013 DR 15723 Qinglu Lin Invoked WarngenLayer's initRemovedGids().
* *
* </pre> * </pre>
* *
@ -1572,6 +1573,7 @@ public class WarngenDialog extends CaveSWTDialog implements
warngenLayer.getStormTrackState().endTime = null; warngenLayer.getStormTrackState().endTime = null;
WarningAction action = WarningAction.valueOf(data.getAct()); WarningAction action = WarningAction.valueOf(data.getAct());
warngenLayer.setWarningAction(action); warngenLayer.setWarningAction(action);
warngenLayer.initRemovedGids();
if (action == WarningAction.CON) { if (action == WarningAction.CON) {
oldWarning = conSelected(data); oldWarning = conSelected(data);
} else if (action == WarningAction.COR) { } else if (action == WarningAction.COR) {
@ -1827,7 +1829,7 @@ public class WarngenDialog extends CaveSWTDialog implements
* @param selected * @param selected
*/ */
private AbstractWarningRecord conSelected(FollowupData data) { private AbstractWarningRecord conSelected(FollowupData data) {
CurrentWarnings cw = CurrentWarnings.getInstance(warngenLayer CurrentWarnings cw = CurrentWarnings.getInstance(warngenLayer
.getLocalizedSite()); .getLocalizedSite());
AbstractWarningRecord newWarn = null; AbstractWarningRecord newWarn = null;
if (WarningAction.COR == WarningAction.valueOf(data.getAct())) { if (WarningAction.COR == WarningAction.valueOf(data.getAct())) {

View file

@ -158,6 +158,8 @@ import com.vividsolutions.jts.io.WKTReader;
* 12/17/2012 DR 15571 Qinglu Lin For hydro products,futurePoints is null. Resolved an issue caused by trying to get * 12/17/2012 DR 15571 Qinglu Lin For hydro products,futurePoints is null. Resolved an issue caused by trying to get
* Coordinate[] from futurePoints. * Coordinate[] from futurePoints.
* 12/18/2012 DR 15571 Qinglu Lin Resolved coordinate issue in TML line caused by clicking Restart button. * 12/18/2012 DR 15571 Qinglu Lin Resolved coordinate issue in TML line caused by clicking Restart button.
* 01/24/2013 DR 15723 Qinglu Lin Added initRemovedGids() and updated updateWarnedAreas() to prevent the removed
* counties from being re-hatched.
* *
* </pre> * </pre>
* *
@ -299,6 +301,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
private WarningAction warningAction = WarningAction.NEW; private WarningAction warningAction = WarningAction.NEW;
private Set<String> removedGids = new HashSet<String>();
static { static {
for (int i = 0; i < 128; i++) { for (int i = 0; i < 128; i++) {
if (i % 32 == 0) { if (i % 32 == 0) {
@ -1277,12 +1281,22 @@ public class WarngenLayer extends AbstractStormTrackResource {
Geometry oldArea = oldWarningArea.getGeometryN(n); Geometry oldArea = oldWarningArea.getGeometryN(n);
Geometry geom = GeometryUtil.intersection(warningPolygon, Geometry geom = GeometryUtil.intersection(warningPolygon,
oldArea); oldArea);
if (geom.isEmpty() == false) { String[] gids = GeometryUtil.getGID(geom);
if (intersection == null) { boolean flag = false;
intersection = geom; for (String gid: gids) {
} else { if (removedGids.contains(gid)) {
intersection = GeometryUtil.union(intersection, flag = true;
geom); break;
}
}
if (!flag) {
if (geom.isEmpty() == false) {
if (intersection == null) {
intersection = geom;
} else {
intersection = GeometryUtil.union(intersection,
geom);
}
} }
} }
} }
@ -2125,6 +2139,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
for (GeospatialData f : geoData.features) { for (GeospatialData f : geoData.features) {
Geometry geom = f.geometry; Geometry geom = f.geometry;
if (f.prepGeom.contains(point)) { if (f.prepGeom.contains(point)) {
String[] gids = GeometryUtil.getGID(geom);
if (GeometryUtil.contains(state.getWarningArea(), point)) { if (GeometryUtil.contains(state.getWarningArea(), point)) {
// remove county // remove county
Geometry tmp = GeometryUtil.difference( Geometry tmp = GeometryUtil.difference(
@ -2134,6 +2149,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
} }
state.setWarningArea(tmp); state.setWarningArea(tmp);
for (String gid: gids) {
removedGids.add(gid);
}
} else { } else {
if (oldWarningArea != null) { if (oldWarningArea != null) {
// for a CON, prevents extra areas to be added // for a CON, prevents extra areas to be added
@ -2156,6 +2174,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
} }
state.setWarningArea(GeometryUtil.union( state.setWarningArea(GeometryUtil.union(
state.getWarningArea(), geom)); state.getWarningArea(), geom));
for (String gid: gids) {
removedGids.remove(gid);
}
} }
} else { } else {
// add county // add county
@ -2372,4 +2393,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
public void setWarningAction(WarningAction warningAction) { public void setWarningAction(WarningAction warningAction) {
this.warningAction = warningAction; this.warningAction = warningAction;
} }
public void initRemovedGids() {
removedGids.clear();
}
} }

View file

@ -59,6 +59,8 @@ import com.vividsolutions.jts.geom.Polygon;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* May 7, 2010 mschenke Initial creation * May 7, 2010 mschenke Initial creation
* Jan 29, 2013 15723 Qinglu Lin Called warngenLayer.initRemovedGids() in move() and in run() of
* AddVertexAction, DeleteVertextAction and MoveElementAction inner classes.
* *
* </pre> * </pre>
* *
@ -356,6 +358,7 @@ public class WarngenUIManager extends InputAdapter {
} }
private void move(int x, int y) { private void move(int x, int y) {
warngenLayer.initRemovedGids();
IDisplayPaneContainer container = warngenLayer.getResourceContainer(); IDisplayPaneContainer container = warngenLayer.getResourceContainer();
WarngenUIState state = warngenLayer.getWarngenState(); WarngenUIState state = warngenLayer.getWarngenState();
@ -409,6 +412,7 @@ public class WarngenUIManager extends InputAdapter {
return; return;
} }
warngenLayer.initRemovedGids();
Coordinate[] coords = warngenLayer.getPolygon().getCoordinates(); Coordinate[] coords = warngenLayer.getPolygon().getCoordinates();
int idx = StormTrackUIManager.getCoordinateIndex(warngenLayer, int idx = StormTrackUIManager.getCoordinateIndex(warngenLayer,
@ -511,6 +515,7 @@ public class WarngenUIManager extends InputAdapter {
private class MoveElementAction extends AbstractRightClickAction { private class MoveElementAction extends AbstractRightClickAction {
@Override @Override
public void run() { public void run() {
warngenLayer.initRemovedGids();
moveType = MoveType.ALL_POINTS; moveType = MoveType.ALL_POINTS;
movePointIndex = StormTrackUIManager.getCoordinateIndex( movePointIndex = StormTrackUIManager.getCoordinateIndex(
warngenLayer, warngenLayer.getPolygon().getCoordinates(), warngenLayer, warngenLayer.getPolygon().getCoordinates(),
@ -540,6 +545,7 @@ public class WarngenUIManager extends InputAdapter {
return; return;
} }
warngenLayer.initRemovedGids();
Coordinate c = new Coordinate(lastMouseX, lastMouseY); Coordinate c = new Coordinate(lastMouseX, lastMouseY);
Polygon poly = warngenLayer.getPolygon(); Polygon poly = warngenLayer.getPolygon();

View file

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NcInventoryDefinition xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType"> <NcInventoryDefinition xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType">
<inventoryName>AVIATION</inventoryName> <inventoryName>AVIATION</inventoryName>
<inventoryParameters>pluginName,eventName,dataTime</inventoryParameters> <inventoryParameters>pluginName,info.ensembleId,dataTime</inventoryParameters>
<baseConstraints> <baseConstraints>
<mapping key="modelName"> <mapping key="info.datasetId">
<constraint constraintValue="aviation" constraintType="EQUALS"/> <constraint constraintValue="aviation" constraintType="EQUALS"/>
</mapping> </mapping>
<mapping key="pluginName"> <mapping key="pluginName">
<constraint constraintValue="ncgrib" constraintType="EQUALS"/> <constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping> </mapping>
<mapping key="eventName"> <mapping key="info.ensembleId">
<constraint constraintValue="%" constraintType="LIKE"/> <constraint constraintValue="%" constraintType="LIKE"/>
</mapping> </mapping>
</baseConstraints> </baseConstraints>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NcInventoryDefinition xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType"> <NcInventoryDefinition xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType">
<inventoryName>GFS</inventoryName> <inventoryName>GFS</inventoryName>
<inventoryParameters>pluginName,info.secondaryId,dataTime</inventoryParameters> <inventoryParameters>pluginName,dataTime</inventoryParameters>
<baseConstraints> <baseConstraints>
<mapping key="info.datasetId"> <mapping key="info.datasetId">
<constraint constraintValue="gfs" constraintType="EQUALS"/> <constraint constraintValue="gfs" constraintType="EQUALS"/>
@ -9,8 +9,5 @@
<mapping key="pluginName"> <mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/> <constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping> </mapping>
<mapping key="info.secondaryId">
<constraint constraintValue="%" constraintType="LIKE"/>
</mapping>
</baseConstraints> </baseConstraints>
</NcInventoryDefinition> </NcInventoryDefinition>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NcInventoryDefinition xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType"> <NcInventoryDefinition xmlns:ns2="group" xmlns:ns3="http://www.example.org/productType">
<inventoryName>NAM</inventoryName> <inventoryName>NAM</inventoryName>
<inventoryParameters>pluginName,info.secondaryId,dataTime</inventoryParameters> <inventoryParameters>pluginName,dataTime</inventoryParameters>
<baseConstraints> <baseConstraints>
<mapping key="info.datasetId"> <mapping key="info.datasetId">
<constraint constraintValue="nam" constraintType="EQUALS"/> <constraint constraintValue="nam" constraintType="EQUALS"/>
@ -9,8 +9,5 @@
<mapping key="pluginName"> <mapping key="pluginName">
<constraint constraintValue="grid" constraintType="EQUALS"/> <constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping> </mapping>
<mapping key="info.secondaryId">
<constraint constraintValue="%" constraintType="LIKE"/>
</mapping>
</baseConstraints> </baseConstraints>
</NcInventoryDefinition> </NcInventoryDefinition>

View file

@ -3,11 +3,11 @@
<inventoryName>NAM_00</inventoryName> <inventoryName>NAM_00</inventoryName>
<inventoryParameters>pluginName,dataTime</inventoryParameters> <inventoryParameters>pluginName,dataTime</inventoryParameters>
<baseConstraints> <baseConstraints>
<mapping key="modelName"> <mapping key="info.datasetId">
<constraint constraintValue="nam" constraintType="EQUALS"/> <constraint constraintValue="nam" constraintType="EQUALS"/>
</mapping> </mapping>
<mapping key="pluginName"> <mapping key="pluginName">
<constraint constraintValue="ncgrib" constraintType="EQUALS"/> <constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping> </mapping>
</baseConstraints> </baseConstraints>
</NcInventoryDefinition> </NcInventoryDefinition>

View file

@ -3,10 +3,10 @@
<inventoryName>NcGridSoundingInventory</inventoryName> <inventoryName>NcGridSoundingInventory</inventoryName>
<!-- Do we want to store level information in here???? --> <!-- Do we want to store level information in here???? -->
<!-- Alternatively could store dataTime.refTime,dataTime.forecasttime --> <!-- Alternatively could store dataTime.refTime,dataTime.forecasttime -->
<inventoryParameters>pluginName,modelName,eventName,dataTime</inventoryParameters> <inventoryParameters>pluginName,info.datasetId,info.secondaryId,dataTime</inventoryParameters>
<baseConstraints> <baseConstraints>
<mapping key="pluginName"> <mapping key="pluginName">
<constraint constraintValue="ncgribxxx" constraintType="EQUALS"/> <constraint constraintValue="grid" constraintType="EQUALS"/>
</mapping> </mapping>
<!-- any other needed constraints. ie parameters, levels.... --> <!-- any other needed constraints. ie parameters, levels.... -->
</baseConstraints> </baseConstraints>

View file

@ -307,7 +307,12 @@ public class GribSpatialCache {
referenceCoverage); referenceCoverage);
double shiftX = 0; double shiftX = 0;
if (shiftSubGridWest == true && modelName != "TPCSurgeProb")
// Check whether 'shiftWest' flag is set in subgrid definition xml file
if (subGridDef.getShiftWest() != null)
shiftSubGridWest = subGridDef.getShiftWest();
if (shiftSubGridWest == true)
shiftX = subGridDef.getNx() / 5; shiftX = subGridDef.getNx() / 5;
double xCenterPoint = subGridCenterGridCoord.x - shiftX; double xCenterPoint = subGridCenterGridCoord.x - shiftX;

View file

@ -65,7 +65,9 @@ public class SubGridDef implements ISerializableObject {
@XmlElement(required = true) @XmlElement(required = true)
private double ny; private double ny;
@XmlElement
private Boolean shiftWest;
// annotation on setter to enforce data constraints // annotation on setter to enforce data constraints
private Double centerLatitude; private Double centerLatitude;
@ -96,6 +98,13 @@ public class SubGridDef implements ISerializableObject {
this.ny = ny; this.ny = ny;
} }
public Boolean getShiftWest() {
return shiftWest;
}
public void setShiftWest(Boolean shiftWest) {
this.shiftWest = shiftWest;
}
/** /**
* a model may have more than one grid so use reference grid instead. * a model may have more than one grid so use reference grid instead.
* *

View file

@ -23,6 +23,7 @@
<referenceGrid>374</referenceGrid> <referenceGrid>374</referenceGrid>
<nx>1300</nx> <nx>1300</nx>
<ny>1200</ny> <ny>1200</ny>
<shiftWest>false</shiftWest>
<!-- <!--
<centerLatitude>46.0</centerLatitude> <centerLatitude>46.0</centerLatitude>
<centerLongitude>-95.5</centerLongitude> <centerLongitude>-95.5</centerLongitude>

View file

@ -54,6 +54,8 @@ import com.raytheon.uf.common.time.TimeRange;
* 01/29/2008 chammack Initial Creation. * 01/29/2008 chammack Initial Creation.
* 02/13/2008 879 rbell Legacy conversion * 02/13/2008 879 rbell Legacy conversion
* 06/10/2009 2159 rjpeter Updated checkDims to check grid for null * 06/10/2009 2159 rjpeter Updated checkDims to check grid for null
* 01/30/2013 15719 jdynina Allowed more than 128 char width wx
* string
* </pre> * </pre>
* *
* @author chammack * @author chammack
@ -233,8 +235,8 @@ public class DiscreteGridSlice extends AbstractGridSlice implements Cloneable {
byte[] thisData = grid.getBuffer().array(); byte[] thisData = grid.getBuffer().array();
byte[] rhsData = rhsGrid.getBuffer().array(); byte[] rhsData = rhsGrid.getBuffer().array();
for (int i = 0; i < thisData.length; i++) { for (int i = 0; i < thisData.length; i++) {
if (!this.key[thisData[i]] if (!this.key[0xFF & thisData[i]]
.equals(rhsDiscreteGridSlice.key[rhsData[i]])) { .equals(rhsDiscreteGridSlice.key[0xFF & rhsData[i]])) {
return false; return false;
} }
} }
@ -254,10 +256,11 @@ public class DiscreteGridSlice extends AbstractGridSlice implements Cloneable {
Grid2DByte discreteGrid = getDiscreteGrid(); Grid2DByte discreteGrid = getDiscreteGrid();
byte[] b = discreteGrid.getBuffer().array(); byte[] b = discreteGrid.getBuffer().array();
for (int i = 0; i < b.length; i++) { for (int i = 0; i < b.length; i++) {
if (b[i] >= keyLength) { int index = 0xFF & b[i];
if (index >= keyLength) {
return "Data Values Exceeded in Grid at coordinate: " return "Data Values Exceeded in Grid at coordinate: "
+ (i % discreteGrid.getXdim()) + "," + (i % discreteGrid.getXdim()) + ","
+ (i / discreteGrid.getXdim()) + " Value=" + b[i] + (i / discreteGrid.getXdim()) + " Value=" + index
+ " MinAllowed=0 MaxAllowed=" + (keyLength - 1); + " MinAllowed=0 MaxAllowed=" + (keyLength - 1);
} }
} }
@ -365,7 +368,7 @@ public class DiscreteGridSlice extends AbstractGridSlice implements Cloneable {
if (editArea.get(i, j) != 0) { if (editArea.get(i, j) != 0) {
// Get the DiscreteKey from the source grid // Get the DiscreteKey from the source grid
byte dByte = gsDiscreteGrid.get(i, j); byte dByte = gsDiscreteGrid.get(i, j);
DiscreteKey dKey = gs.key[dByte]; DiscreteKey dKey = gs.key[0xFF & dByte];
// See if this key already exists in target grid // See if this key already exists in target grid
boolean found = false; boolean found = false;
byte keyIndex = 0; byte keyIndex = 0;
@ -445,9 +448,9 @@ public class DiscreteGridSlice extends AbstractGridSlice implements Cloneable {
List<DiscreteKey> currentKeys = new ArrayList<DiscreteKey>( List<DiscreteKey> currentKeys = new ArrayList<DiscreteKey>(
Arrays.asList(this.key)); Arrays.asList(this.key));
byte[] data = discreteGrid.getBuffer().array(); byte[] data = discreteGrid.getBuffer().array();
byte thisB; int thisB;
for (int i = 0; i < data.length; i++) { for (int i = 0; i < data.length; i++) {
thisB = data[i]; thisB = 0xFF & data[i];
byte keyIndex; byte keyIndex;
if ((keyIndex = (byte) currentKeys.indexOf(gs.key[thisB])) != -1) { if ((keyIndex = (byte) currentKeys.indexOf(gs.key[thisB])) != -1) {
data[i] = keyIndex; data[i] = keyIndex;
@ -599,7 +602,7 @@ public class DiscreteGridSlice extends AbstractGridSlice implements Cloneable {
byte[] rhsB = gs.getDiscreteGrid().getBuffer().array(); byte[] rhsB = gs.getDiscreteGrid().getBuffer().array();
byte[] b = bits.getBuffer().array(); byte[] b = bits.getBuffer().array();
for (int i = 0; i < thisB.length; i++) { for (int i = 0; i < thisB.length; i++) {
if (key[thisB[i]].equals(gs.key[rhsB[i]])) { if (key[0xFF & thisB[i]].equals(gs.key[0xFF & rhsB[i]])) {
b[i] = (byte) 1; b[i] = (byte) 1;
} }
} }
@ -659,9 +662,9 @@ public class DiscreteGridSlice extends AbstractGridSlice implements Cloneable {
DiscreteKey newKey[] = new DiscreteKey[usedKeys.size()]; DiscreteKey newKey[] = new DiscreteKey[usedKeys.size()];
for (Iterator<Byte> usedKeysI = usedKeys.iterator(); usedKeysI for (Iterator<Byte> usedKeysI = usedKeys.iterator(); usedKeysI
.hasNext(); keyIndex++) { .hasNext(); keyIndex++) {
Byte thisByte = usedKeysI.next(); byte thisByte = usedKeysI.next();
discreteGrid.setAllOfValue(thisByte, (byte) keyIndex); discreteGrid.setAllOfValue(thisByte, (byte) keyIndex);
newKey[keyIndex] = key[thisByte.intValue()]; newKey[keyIndex] = key[0xFF & thisByte];
} }
setDiscreteGrid(discreteGrid); setDiscreteGrid(discreteGrid);

View file

@ -53,6 +53,7 @@ import com.raytheon.uf.common.time.TimeRange;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* Mar 15, 2011 randerso Initial creation * Mar 15, 2011 randerso Initial creation
* Jan 30, 2013 15719 jdynina Allowed more than 128 char wx string
* *
* </pre> * </pre>
* *
@ -235,7 +236,8 @@ public class WeatherGridSlice extends AbstractGridSlice {
byte[] thisData = grid.getBuffer().array(); byte[] thisData = grid.getBuffer().array();
byte[] rhsData = rhsGrid.getBuffer().array(); byte[] rhsData = rhsGrid.getBuffer().array();
for (int i = 0; i < thisData.length; i++) { for (int i = 0; i < thisData.length; i++) {
if (!this.keys[thisData[i]].equals(slice.keys[rhsData[i]])) { if (!this.keys[0xFF & thisData[i]]
.equals(slice.keys[0xFF & rhsData[i]])) {
return false; return false;
} }
} }
@ -255,10 +257,11 @@ public class WeatherGridSlice extends AbstractGridSlice {
Grid2DByte weatherGrid = getWeatherGrid(); Grid2DByte weatherGrid = getWeatherGrid();
byte[] b = weatherGrid.getBuffer().array(); byte[] b = weatherGrid.getBuffer().array();
for (int i = 0; i < b.length; i++) { for (int i = 0; i < b.length; i++) {
if (b[i] >= keyLength) { int index = 0xFF & b[i];
if (index >= keyLength) {
return "Data Values Exceeded in Grid at coordinate: " return "Data Values Exceeded in Grid at coordinate: "
+ (i % weatherGrid.getXdim()) + "," + (i % weatherGrid.getXdim()) + ","
+ (i / weatherGrid.getXdim()) + " Value=" + b[i] + (i / weatherGrid.getXdim()) + " Value=" + index
+ " MinAllowed=0 MaxAllowed=" + (keyLength - 1); + " MinAllowed=0 MaxAllowed=" + (keyLength - 1);
} }
} }
@ -366,7 +369,7 @@ public class WeatherGridSlice extends AbstractGridSlice {
if (editArea.get(i, j) != 0) { if (editArea.get(i, j) != 0) {
// Get the WeatherKey from the source grid // Get the WeatherKey from the source grid
byte dByte = gsWeatherGrid.get(i, j); byte dByte = gsWeatherGrid.get(i, j);
WeatherKey dKey = gs.keys[dByte]; WeatherKey dKey = gs.keys[0xFF & dByte];
// See if this key already exists in target grid // See if this key already exists in target grid
boolean found = false; boolean found = false;
byte keyIndex = 0; byte keyIndex = 0;
@ -445,14 +448,16 @@ public class WeatherGridSlice extends AbstractGridSlice {
List<WeatherKey> currentKeys = new ArrayList<WeatherKey>( List<WeatherKey> currentKeys = new ArrayList<WeatherKey>(
Arrays.asList(this.keys)); Arrays.asList(this.keys));
byte[] b = weatherGrid.getBuffer().array(); byte[] data = weatherGrid.getBuffer().array();
for (int i = 0; i < b.length; i++) { int thisB;
for (int i = 0; i < data.length; i++) {
thisB = 0xFF & data[i];
byte keyIndex; byte keyIndex;
if ((keyIndex = (byte) currentKeys.indexOf(gs.keys[b[i]])) != -1) { if ((keyIndex = (byte) currentKeys.indexOf(gs.keys[thisB])) != -1) {
b[i] = keyIndex; data[i] = keyIndex;
} else { } else {
b[i] = (byte) currentKeys.size(); data[i] = (byte) currentKeys.size();
currentKeys.add(new WeatherKey(gs.keys[b[i]])); currentKeys.add(new WeatherKey(gs.keys[thisB]));
} }
} }
@ -601,7 +606,7 @@ public class WeatherGridSlice extends AbstractGridSlice {
byte[] rhsB = gs.getWeatherGrid().getBuffer().array(); byte[] rhsB = gs.getWeatherGrid().getBuffer().array();
byte[] b = bits.getBuffer().array(); byte[] b = bits.getBuffer().array();
for (int i = 0; i < thisB.length; i++) { for (int i = 0; i < thisB.length; i++) {
if (keys[thisB[i]].equals(gs.keys[rhsB[i]])) { if (keys[0xFF & thisB[i]].equals(gs.keys[0xFF & rhsB[i]])) {
b[i] = (byte) 1; b[i] = (byte) 1;
} }
} }
@ -644,7 +649,7 @@ public class WeatherGridSlice extends AbstractGridSlice {
// process the grid // process the grid
for (int i = 0; i < weatherGrid.getXdim(); i++) { for (int i = 0; i < weatherGrid.getXdim(); i++) {
for (int j = 0; j < weatherGrid.getYdim(); j++) { for (int j = 0; j < weatherGrid.getYdim(); j++) {
used[weatherGrid.get(i, j)] = true; used[0xFF & weatherGrid.get(i, j)] = true;
} }
} // indicate used } // indicate used
@ -681,7 +686,8 @@ public class WeatherGridSlice extends AbstractGridSlice {
// now remap the data // now remap the data
for (int i = 0; i < weatherGrid.getXdim(); i++) { for (int i = 0; i < weatherGrid.getXdim(); i++) {
for (int j = 0; j < weatherGrid.getYdim(); j++) { for (int j = 0; j < weatherGrid.getYdim(); j++) {
weatherGrid.set(i, j, (byte) invMapping[weatherGrid.get(i, j)]); weatherGrid.set(i, j,
(byte) invMapping[0xFF & weatherGrid.get(i, j)]);
} }
} }

View file

@ -24,8 +24,7 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import junit.framework.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory; import com.raytheon.uf.common.dataplugin.gfe.GridDataHistory;
@ -53,6 +52,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* 02/27/2008 879 rbell Initial Creation. * 02/27/2008 879 rbell Initial Creation.
* 01/30/2013 15719 jdynina Allowed more than 128 chars in wx string
* *
* </pre> * </pre>
* *
@ -65,10 +65,149 @@ public class DiscreteGridSliceTest {
List<DiscreteKeyDef> dkd = new ArrayList<DiscreteKeyDef>(); List<DiscreteKeyDef> dkd = new ArrayList<DiscreteKeyDef>();
{ {
dkd.add(new DiscreteKeyDef("<NoData>", "No Data")); dkd.add(new DiscreteKeyDef("<NoData>", "No Data"));
dkd.add(new DiscreteKeyDef("A", "Alpha")); dkd.add(new DiscreteKeyDef("A", "Alfa"));
dkd.add(new DiscreteKeyDef("B", "Beta")); dkd.add(new DiscreteKeyDef("B", "Bravo"));
dkd.add(new DiscreteKeyDef("C", "Charlie")); dkd.add(new DiscreteKeyDef("C", "Charlie"));
dkd.add(new DiscreteKeyDef("D", "Delta")); dkd.add(new DiscreteKeyDef("D", "Delta"));
dkd.add(new DiscreteKeyDef("E", "Echo"));
dkd.add(new DiscreteKeyDef("F", "Foxtrot"));
dkd.add(new DiscreteKeyDef("G", "Golf"));
dkd.add(new DiscreteKeyDef("H", "Hotel"));
dkd.add(new DiscreteKeyDef("I", "India"));
dkd.add(new DiscreteKeyDef("J", "Juliet"));
dkd.add(new DiscreteKeyDef("K", "Kilo"));
dkd.add(new DiscreteKeyDef("L", "Lima"));
dkd.add(new DiscreteKeyDef("M", "Mike"));
dkd.add(new DiscreteKeyDef("N", "November"));
dkd.add(new DiscreteKeyDef("O", "Oscar"));
dkd.add(new DiscreteKeyDef("P", "Papa"));
dkd.add(new DiscreteKeyDef("Q", "Quebec"));
dkd.add(new DiscreteKeyDef("R", "Romeo"));
dkd.add(new DiscreteKeyDef("S", "Sierra"));
dkd.add(new DiscreteKeyDef("T", "Tango"));
dkd.add(new DiscreteKeyDef("U", "Uniform"));
dkd.add(new DiscreteKeyDef("V", "Victor"));
dkd.add(new DiscreteKeyDef("W", "Whiskey"));
dkd.add(new DiscreteKeyDef("X", "Xray"));
dkd.add(new DiscreteKeyDef("Y", "Yankee"));
dkd.add(new DiscreteKeyDef("Z", "Zulu"));
dkd.add(new DiscreteKeyDef("AA", "Alfa Alfa"));
dkd.add(new DiscreteKeyDef("AB", "Alfa Bravo"));
dkd.add(new DiscreteKeyDef("AC", "Alfa Charlie"));
dkd.add(new DiscreteKeyDef("AD", "Alfa Delta"));
dkd.add(new DiscreteKeyDef("AE", "Alfa Echo"));
dkd.add(new DiscreteKeyDef("AF", "Alfa Foxtrot"));
dkd.add(new DiscreteKeyDef("AG", "Alfa Golf"));
dkd.add(new DiscreteKeyDef("AH", "Alfa Hotel"));
dkd.add(new DiscreteKeyDef("AI", "Alfa India"));
dkd.add(new DiscreteKeyDef("AJ", "Alfa Juliet"));
dkd.add(new DiscreteKeyDef("AK", "Alfa Kilo"));
dkd.add(new DiscreteKeyDef("AL", "Alfa Lima"));
dkd.add(new DiscreteKeyDef("AM", "Alfa Mike"));
dkd.add(new DiscreteKeyDef("AN", "Alfa November"));
dkd.add(new DiscreteKeyDef("AO", "Alfa Oscar"));
dkd.add(new DiscreteKeyDef("AP", "Alfa Papa"));
dkd.add(new DiscreteKeyDef("AQ", "Alfa Quebec"));
dkd.add(new DiscreteKeyDef("AR", "Alfa Romeo"));
dkd.add(new DiscreteKeyDef("AS", "Alfa Sierra"));
dkd.add(new DiscreteKeyDef("AT", "Alfa Tango"));
dkd.add(new DiscreteKeyDef("AU", "Alfa Uniform"));
dkd.add(new DiscreteKeyDef("AV", "Alfa Victor"));
dkd.add(new DiscreteKeyDef("AW", "Alfa Whiskey"));
dkd.add(new DiscreteKeyDef("AX", "Alfa Xray"));
dkd.add(new DiscreteKeyDef("AY", "Alfa Yankee"));
dkd.add(new DiscreteKeyDef("AZ", "Alfa Zulu"));
dkd.add(new DiscreteKeyDef("BA", "Bravo Alfa"));
dkd.add(new DiscreteKeyDef("BB", "Bravo Bravo"));
dkd.add(new DiscreteKeyDef("BC", "Bravo Charlie"));
dkd.add(new DiscreteKeyDef("BD", "Bravo Delta"));
dkd.add(new DiscreteKeyDef("BE", "Bravo Echo"));
dkd.add(new DiscreteKeyDef("BF", "Bravo Foxtrot"));
dkd.add(new DiscreteKeyDef("BG", "Bravo Golf"));
dkd.add(new DiscreteKeyDef("BH", "Bravo Hotel"));
dkd.add(new DiscreteKeyDef("BI", "Bravo India"));
dkd.add(new DiscreteKeyDef("BJ", "Bravo Juliet"));
dkd.add(new DiscreteKeyDef("BK", "Bravo Kilo"));
dkd.add(new DiscreteKeyDef("BL", "Bravo Lima"));
dkd.add(new DiscreteKeyDef("BM", "Bravo Mike"));
dkd.add(new DiscreteKeyDef("BN", "Bravo November"));
dkd.add(new DiscreteKeyDef("BO", "Bravo Oscar"));
dkd.add(new DiscreteKeyDef("BP", "Bravo Papa"));
dkd.add(new DiscreteKeyDef("BQ", "Bravo Quebec"));
dkd.add(new DiscreteKeyDef("BR", "Bravo Romeo"));
dkd.add(new DiscreteKeyDef("BS", "Bravo Sierra"));
dkd.add(new DiscreteKeyDef("BT", "Bravo Tango"));
dkd.add(new DiscreteKeyDef("BU", "Bravo Uniform"));
dkd.add(new DiscreteKeyDef("BV", "Bravo Victor"));
dkd.add(new DiscreteKeyDef("BW", "Bravo Whiskey"));
dkd.add(new DiscreteKeyDef("BX", "Bravo Xray"));
dkd.add(new DiscreteKeyDef("BY", "Bravo Yankee"));
dkd.add(new DiscreteKeyDef("BZ", "Bravo Zulu"));
dkd.add(new DiscreteKeyDef("CA", "Charlie Alfa"));
dkd.add(new DiscreteKeyDef("CB", "Charlie Bravo"));
dkd.add(new DiscreteKeyDef("CC", "Charlie Charlie"));
dkd.add(new DiscreteKeyDef("CD", "Charlie Delta"));
dkd.add(new DiscreteKeyDef("CE", "Charlie Echo"));
dkd.add(new DiscreteKeyDef("CF", "Charlie Foxtrot"));
dkd.add(new DiscreteKeyDef("CG", "Charlie Golf"));
dkd.add(new DiscreteKeyDef("CH", "Charlie Hotel"));
dkd.add(new DiscreteKeyDef("CI", "Charlie India"));
dkd.add(new DiscreteKeyDef("CJ", "Charlie Juliet"));
dkd.add(new DiscreteKeyDef("CK", "Charlie Kilo"));
dkd.add(new DiscreteKeyDef("CL", "Charlie Lima"));
dkd.add(new DiscreteKeyDef("CM", "Charlie Mike"));
dkd.add(new DiscreteKeyDef("CN", "Charlie November"));
dkd.add(new DiscreteKeyDef("CO", "Charlie Oscar"));
dkd.add(new DiscreteKeyDef("CP", "Charlie Papa"));
dkd.add(new DiscreteKeyDef("CQ", "Charlie Quebec"));
dkd.add(new DiscreteKeyDef("CR", "Charlie Romeo"));
dkd.add(new DiscreteKeyDef("CS", "Charlie Sierra"));
dkd.add(new DiscreteKeyDef("CT", "Charlie Tango"));
dkd.add(new DiscreteKeyDef("CU", "Charlie Uniform"));
dkd.add(new DiscreteKeyDef("CV", "Charlie Victor"));
dkd.add(new DiscreteKeyDef("CW", "Charlie Whiskey"));
dkd.add(new DiscreteKeyDef("CX", "Charlie Xray"));
dkd.add(new DiscreteKeyDef("CY", "Charlie Yankee"));
dkd.add(new DiscreteKeyDef("CZ", "Charlie Zulu"));
dkd.add(new DiscreteKeyDef("DA", "Delta Alfa"));
dkd.add(new DiscreteKeyDef("DB", "Delta Bravo"));
dkd.add(new DiscreteKeyDef("DC", "Delta Charlie"));
dkd.add(new DiscreteKeyDef("DD", "Delta Delta"));
dkd.add(new DiscreteKeyDef("DE", "Delta Echo"));
dkd.add(new DiscreteKeyDef("DF", "Delta Foxtrot"));
dkd.add(new DiscreteKeyDef("DG", "Delta Golf"));
dkd.add(new DiscreteKeyDef("DH", "Delta Hotel"));
dkd.add(new DiscreteKeyDef("DI", "Delta India"));
dkd.add(new DiscreteKeyDef("DJ", "Delta Juliet"));
dkd.add(new DiscreteKeyDef("DK", "Delta Kilo"));
dkd.add(new DiscreteKeyDef("DL", "Delta Lima"));
dkd.add(new DiscreteKeyDef("DM", "Delta Mike"));
dkd.add(new DiscreteKeyDef("DN", "Delta November"));
dkd.add(new DiscreteKeyDef("DO", "Delta Oscar"));
dkd.add(new DiscreteKeyDef("DP", "Delta Papa"));
dkd.add(new DiscreteKeyDef("DQ", "Delta Quebec"));
dkd.add(new DiscreteKeyDef("DR", "Delta Romeo"));
dkd.add(new DiscreteKeyDef("DS", "Delta Sierra"));
dkd.add(new DiscreteKeyDef("DT", "Delta Tango"));
dkd.add(new DiscreteKeyDef("DU", "Delta Uniform"));
dkd.add(new DiscreteKeyDef("DV", "Delta Victor"));
dkd.add(new DiscreteKeyDef("DW", "Delta Whiskey"));
dkd.add(new DiscreteKeyDef("DX", "Delta Xray"));
dkd.add(new DiscreteKeyDef("DY", "Delta Yankee"));
dkd.add(new DiscreteKeyDef("DZ", "Delta Zulu"));
dkd.add(new DiscreteKeyDef("EA", "Echo Alfa"));
dkd.add(new DiscreteKeyDef("EB", "Echo Bravo"));
dkd.add(new DiscreteKeyDef("EC", "Echo Charlie"));
dkd.add(new DiscreteKeyDef("ED", "Echo Delta"));
dkd.add(new DiscreteKeyDef("EE", "Echo Echo"));
dkd.add(new DiscreteKeyDef("EF", "Echo Foxtrot"));
dkd.add(new DiscreteKeyDef("EG", "Echo Golf"));
dkd.add(new DiscreteKeyDef("EH", "Echo Hotel"));
dkd.add(new DiscreteKeyDef("EI", "Echo India"));
dkd.add(new DiscreteKeyDef("EJ", "Echo Juliet"));
dkd.add(new DiscreteKeyDef("EK", "Echo Kilo"));
dkd.add(new DiscreteKeyDef("EL", "Echo Lima"));
dkd.add(new DiscreteKeyDef("EM", "Echo Mike"));
} }
String siteId = "XXX"; String siteId = "XXX";
@ -127,8 +266,8 @@ public class DiscreteGridSliceTest {
private final DiscreteKey testDKA1[] = { this.testDK2 }; private final DiscreteKey testDKA1[] = { this.testDK2 };
// ///////////////////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////////////////////
private final byte testBA2[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, private final byte testBA2[] = { -128, -127, -126, -125, -124, -123, -122,
13, 14, 15 }; -121, -120, -119, -118, -117, -116, -115, -114, -113 };
private final Grid2DByte testG2DB2 = new Grid2DByte(4, 4, this.testBA2); private final Grid2DByte testG2DB2 = new Grid2DByte(4, 4, this.testBA2);
@ -142,6 +281,38 @@ public class DiscreteGridSliceTest {
private final GridDataHistory testGDHA2[] = new GridDataHistory[1]; private final GridDataHistory testGDHA2[] = new GridDataHistory[1];
private final DiscreteKey testDKA2[] = { this.testDK2, this.testDK2, private final DiscreteKey testDKA2[] = { this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2,
this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2, this.testDK2,
@ -259,11 +430,13 @@ public class DiscreteGridSliceTest {
public final void testCheckKeyAndData() { public final void testCheckKeyAndData() {
DiscreteGridSlice test1 = new DiscreteGridSlice(this.testTR2, DiscreteGridSlice test1 = new DiscreteGridSlice(this.testTR2,
this.testGPI2, this.testGDHA2, this.testG2DB2, this.testDKA2); this.testGPI2, this.testGDHA2, this.testG2DB2, this.testDKA2);
Assert.assertNull(test1.checkKeyAndData()); String result = test1.checkKeyAndData();
Assert.assertNull(result);
DiscreteGridSlice test2 = new DiscreteGridSlice(this.testTR2, DiscreteGridSlice test2 = new DiscreteGridSlice(this.testTR2,
this.testGPI2, this.testGDHA2, this.testG2DB2, this.testGPI2, this.testGDHA2, this.testG2DB2,
new DiscreteKey[15]); new DiscreteKey[15]);
Assert.assertNotNull(test2.checkKeyAndData()); result = test2.checkKeyAndData();
Assert.assertNotNull(result);
} }
/** /**

View file

@ -0,0 +1,135 @@
<?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.
-->
<aliasList namespace="GEMPAK">
<alias base="0DEG">FRZL</alias>
<alias base="ADCL">LCLV</alias>
<alias base="AMSL">HGHT</alias>
<alias base="BCBL">BCBL</alias>
<alias base="BCLY">BCLY</alias>
<alias base="BCTL">BCTL</alias>
<alias base="BCY">BCLY</alias>
<alias base="BLD">PLBL</alias>
<alias base="BLS">DPTH</alias>
<alias base="BSS">DPTH</alias>
<alias base="CBL">CLDL</alias>
<alias base="CCBL">CCBL</alias>
<alias base="CCL">CCLY</alias>
<alias base="CCLY">CCLY</alias>
<alias base="CCTL">CCTL</alias>
<alias base="CCY">CCLY</alias>
<alias base="CEIL">CEIL</alias>
<alias base="CLG">CEIL</alias>
<alias base="CTL">CLDT</alias>
<alias base="DBLL">DPTH</alias>
<alias base="DBSL">DPTH</alias>
<alias base="DCBL">DCCBL</alias>
<alias base="DCCBL">DCCBL</alias>
<alias base="DCCTL">DCCTL</alias>
<alias base="DCTL">DCCTL</alias>
<alias base="EA">NONE</alias>
<alias base="EATM">NONE</alias>
<alias base="EHLT">EHLT</alias>
<alias base="EL">EHLT</alias>
<alias base="ELYR">ELYR</alias>
<alias base="EOCN">NONE</alias>
<alias base="ETA">ELVL</alias>
<alias base="ETAL">ELVL</alias>
<alias base="FH">HGHT</alias>
<alias base="FHAG">HGHT</alias>
<alias base="FRZ">FRZL</alias>
<alias base="GCBL">GSCBL</alias>
<alias base="GCTL">GSCTL</alias>
<alias base="GSCBL">GSCBL</alias>
<alias base="GSCTL">GSCTL</alias>
<alias base="HCBL">HCBL</alias>
<alias base="HCL">HCLY</alias>
<alias base="HCLY">HCLY</alias>
<alias base="HCTL">HCTL</alias>
<alias base="HCY">HCLY</alias>
<alias base="HSCLW">HTSLW</alias>
<alias base="HTFL">HTFL</alias>
<alias base="HTGL">HGHT</alias>
<alias base="HTSLW">HTSLW</alias>
<alias base="HYB">HYBL</alias>
<alias base="HYBL">HYBL</alias>
<alias base="ISBL">PRES</alias>
<alias base="K">THTA</alias>
<alias base="Ke">THTA</alias>
<alias base="LBSLW">LBSLW</alias>
<alias base="LBTHL">HYBL</alias>
<alias base="LCBL">LCBL</alias>
<alias base="LCL">LCLV</alias>
<alias base="LCLY">LCLY</alias>
<alias base="LCTL">LCTL</alias>
<alias base="LCY">LCLY</alias>
<alias base="LLTW">LWBZ</alias>
<alias base="LSCLW">LBSLW</alias>
<alias base="LWBZ">LWBZ</alias>
<alias base="LYRBL">PRES</alias>
<alias base="LYRFHAG">HGHT</alias>
<alias base="LYRK">THTA</alias>
<alias base="LYRKe">THTA</alias>
<alias base="LYRMB">PRES</alias>
<alias base="LYRSIG">SGMA</alias>
<alias base="MAXW">MWSL</alias>
<alias base="MB">PRES</alias>
<alias base="MCBL">MCBL</alias>
<alias base="MCLY">MCLY</alias>
<alias base="MCTL">MCTL</alias>
<alias base="MCY">MCLY</alias>
<alias base="MEPT">MTHE</alias>
<alias base="MLD">DPTH</alias>
<alias base="MSL">NONE</alias>
<alias base="MTHE">MTHE</alias>
<alias base="MWSL">MWSL</alias>
<alias base="NONE">NONE</alias>
<alias base="NTAT">TOPA</alias>
<alias base="OBIL">OBIL</alias>
<alias base="OBML">OBML</alias>
<alias base="OITL">OITL</alias>
<alias base="OLYR">OLYR</alias>
<alias base="OML">OML</alias>
<alias base="OSD">OSEQ</alias>
<alias base="OSEQ">OSEQ</alias>
<alias base="OSEQD">OSEQ</alias>
<alias base="PBL">PLBL</alias>
<alias base="PDLY">PDLY</alias>
<alias base="PLBL">PLBL</alias>
<alias base="PV">POTV</alias>
<alias base="PVL">POTV</alias>
<alias base="SCBL">SCCBT</alias>
<alias base="SCCBT">SCCBT</alias>
<alias base="SCCTL">SCCTL</alias>
<alias base="SCTL">SCCTL</alias>
<alias base="SEAB">SEAB</alias>
<alias base="SFC">NONE</alias>
<alias base="SIG">SGMA</alias>
<alias base="SIGL">SGMA</alias>
<alias base="SPDL">PDLV</alias>
<alias base="TEMP">TEMP</alias>
<alias base="THEL">THTA</alias>
<alias base="TILT">TILT</alias>
<alias base="TMPL">TMPL</alias>
<alias base="TRO">TROP</alias>
<alias base="TROP">TROP</alias>
<alias base="VPT">POTV</alias>
<alias base="WBZ">LWBZ</alias>
</aliasList>

View file

@ -19,77 +19,248 @@
further_licensing_information. further_licensing_information.
--> -->
<aliasList namespace="GEMPAK"> <aliasList namespace="GEMPAK">
<alias base="WGH">HGHT5</alias> <alias base="5WAVA">HGHT5</alias>
<alias base="ALBDO">ALBD</alias>
<alias base="ALBDO1hr">ALBD01</alias>
<alias base="ALBDO3hr">ALBD03</alias>
<alias base="ALBDO6hr">ALBD06</alias>
<alias base="ALBDO9hr">ALBD09</alias>
<alias base="ALBD12hr">ALBD12</alias>
<alias base="ALBD18hr">ALBD18</alias>
<alias base="ALBD24hr">ALBD24</alias>
<alias base="ALBD48hr">ALBD48</alias>
<alias base="AV">AVOR</alias> <alias base="AV">AVOR</alias>
<alias base="CRAIN">WXTR</alias> <alias base="BLI">LFT4</alias>
<alias base="CFRZR">WXTZ</alias>
<alias base="CICEP">WXTP</alias>
<alias base="CSNOW">WXTS</alias>
<alias base="CWAT">CWTR</alias>
<alias base="CAPE">CAPE</alias> <alias base="CAPE">CAPE</alias>
<alias base="CIn">CINH</alias>
<alias base="CDCON">CCLD</alias> <alias base="CDCON">CCLD</alias>
<alias base="CFRZR">WXTZ</alias>
<alias base="CFRZR1hr">WXTZ01</alias>
<alias base="CFRZR3hr">WXTZ03</alias>
<alias base="CFRZR6hr">WXTZ06</alias>
<alias base="CFRZR9hr">WXTZ09</alias>
<alias base="CFRZR12hr">WXTZ12</alias>
<alias base="CFRZR18hr">WXTZ18</alias>
<alias base="CFRZR24hr">WXTZ24</alias>
<alias base="CFRZR48hr">WXTZ48</alias>
<alias base="CICEP">WXTP</alias>
<alias base="CICEP1hr">WXTP01</alias>
<alias base="CICEP3hr">WXTP03</alias>
<alias base="CICEP6hr">WXTP06</alias>
<alias base="CICEP9hr">WXTP09</alias>
<alias base="CICEP12hr">WXTP12</alias>
<alias base="CICEP18hr">WXTP18</alias>
<alias base="CICEP24hr">WXTP24</alias>
<alias base="CICEP48hr">WXTP48</alias>
<alias base="CIn">CINH</alias>
<alias base="CLWMR">CLWMR</alias>
<alias base="CP">ACPCP</alias>
<alias base="CP1hr">C01M</alias> <alias base="CP1hr">C01M</alias>
<alias base="CP3hr">C03M</alias> <alias base="CP3hr">C03M</alias>
<alias base="CP6hr">C06M</alias> <alias base="CP6hr">C06M</alias>
<alias base="CP9hr">C09M</alias> <alias base="CP9hr">C09M</alias>
<alias base="CP12hr">C12M</alias> <alias base="CP12hr">C12M</alias>
<alias base="CPRAT">C12M</alias> <alias base="CP18hr">C18M</alias>
<alias base="CP24hr">C24M</alias>
<alias base="CP48hr">C48M</alias>
<alias base="CPOFP">POPZ</alias>
<alias base="CPOZP">POPF</alias>
<alias base="CPRAT1hr">C01M</alias>
<alias base="CPRAT3hr">C03M</alias>
<alias base="CPRAT6hr">C06M</alias>
<alias base="CPRAT9hr">C09M</alias>
<alias base="CPRAT12hr">C12M</alias>
<alias base="CPRAT18hr">C18M</alias>
<alias base="CPRAT24hr">C24M</alias>
<alias base="CPRAT48hr">C48M</alias>
<alias base="CRAIN">WXTR</alias>
<alias base="CRAIN1hr">WXTR01</alias>
<alias base="CRAIN3hr">WXTR03</alias>
<alias base="CRAIN6hr">WXTR06</alias>
<alias base="CRAIN9hr">WXTR09</alias>
<alias base="CRAIN12hr">WXTR12</alias>
<alias base="CRAIN18hr">WXTR18</alias>
<alias base="CRAIN24hr">WXTR24</alias>
<alias base="CRAIN48hr">WXTR48</alias>
<alias base="CSNOW">WXTS</alias>
<alias base="CSNOW1hr">WXTS01</alias>
<alias base="CSNOW3hr">WXTS03</alias>
<alias base="CSNOW6hr">WXTS06</alias>
<alias base="CSNOW9hr">WXTS09</alias>
<alias base="CSNOW12hr">WXTS12</alias>
<alias base="CSNOW18hr">WXTS18</alias>
<alias base="CSNOW24hr">WXTS24</alias>
<alias base="CSNOW48hr">WXTS48</alias>
<alias base="CWAT">CWTR</alias>
<alias base="CWORK">CWRK</alias>
<alias base="CWORK1hr">CWRK01</alias>
<alias base="CWORK3hr">CWRK03</alias>
<alias base="CWORK6hr">CWRK06</alias>
<alias base="CWORK9hr">CWRK09</alias>
<alias base="CWORK12hr">CWRK12</alias>
<alias base="CWORK18hr">CWRK18</alias>
<alias base="CWORK24hr">CWRK24</alias>
<alias base="CWORK48hr">CWRK48</alias>
<alias base="DIRPW">DRCTPW</alias>
<alias base="DIRSW">DRCTSW</alias>
<alias base="DLWRF">LWRD</alias>
<alias base="DLWRF1hr">LWRD01</alias>
<alias base="DLWRF3hr">LWRD03</alias>
<alias base="DLWRF6hr">LWRD06</alias>
<alias base="DLWRF9hr">LWRD09</alias>
<alias base="DLWRF12hr">LWRD12</alias>
<alias base="DLWRF18hr">LWRD18</alias>
<alias base="DLWRF24hr">LWRD24</alias>
<alias base="DLWRF48hr">LWRD48</alias>
<alias base="DpT">DWPK</alias> <alias base="DpT">DWPK</alias>
<alias base="DpD">DPDK</alias> <alias base="DpD">DPDK</alias>
<alias base="WVDIR">DRCTWW</alias> <alias base="DSWRF">SWRD</alias>
<alias base="SWDIR">DRCTSW</alias> <alias base="DSWRF1hr">SWRD01</alias>
<alias base="DSWRF3hr">SWRD03</alias>
<alias base="DSWRF6hr">SWRD06</alias>
<alias base="DSWRF9hr">SWRD09</alias>
<alias base="DSWRF12hr">SWRD12</alias>
<alias base="DSWRF18hr">SWRD18</alias>
<alias base="DSWRF24hr">SWRD24</alias>
<alias base="DSWRF48hr">SWRD48</alias>
<alias base="EMSP">EMSL</alias>
<alias base="EPT">THTE</alias> <alias base="EPT">THTE</alias>
<alias base="EVP">EVAP</alias> <alias base="EVP">EVAP</alias>
<alias base="GH">HGHT</alias> <alias base="FLDCP">FLDCP</alias>
<alias base="GeH">DIST</alias> <alias base="GeH">DIST</alias>
<alias base="HIdx">HEAT</alias> <alias base="GFLUX">GHFX</alias>
<alias base="GFLUX1hr">GHFX01</alias>
<alias base="GFLUX3hr">GHFX03</alias>
<alias base="GFLUX6hr">GHFX06</alias>
<alias base="GFLUX9hr">GHFX09</alias>
<alias base="GFLUX12hr">GHFX12</alias>
<alias base="GFLUX18hr">GHFX18</alias>
<alias base="GFLUX24hr">GHFX24</alias>
<alias base="GFLUX48hr">GHFX48</alias>
<alias base="GH">HGHT</alias>
<alias base="GHa">HGHTA</alias>
<alias base="HCDC">CLDH</alias> <alias base="HCDC">CLDH</alias>
<alias base="Heli">HLCY</alias>
<alias base="HIdx">HEAT</alias>
<alias base="HINDEX">HINDEX</alias>
<alias base="HPBL">ZPBL</alias>
<alias base="ICAHT">ICAHT</alias>
<alias base="ICEC">ICEC</alias>
<alias base="ICETK">ICET</alias> <alias base="ICETK">ICET</alias>
<alias base="MIXR">MIXR</alias> <alias base="LAND">LAND</alias>
<alias base="LAPR">LAPS</alias> <alias base="LAPR">LAPS</alias>
<alias base="LCDC">CLDL</alias> <alias base="LCDC">CLDL</alias>
<alias base="LgSP">NCPCP</alias>
<alias base="LgSP1hr">S01M</alias> <alias base="LgSP1hr">S01M</alias>
<alias base="LgSP3hr">S03M</alias> <alias base="LgSP3hr">S03M</alias>
<alias base="LgSP6hr">S06M</alias>
<alias base="LgSP9hr">S09M</alias>
<alias base="LgSP12hr">S12M</alias>
<alias base="LgSP18hr">S18M</alias>
<alias base="LgSP24hr">S24M</alias>
<alias base="LgSP48hr">S48M</alias>
<alias base="LHF">FXLH</alias> <alias base="LHF">FXLH</alias>
<alias base="MnT">TMNK</alias> <alias base="LHF1hr">FXLH01</alias>
<alias base="WVPER">PERDWW</alias> <alias base="LHF3hr">FXLH03</alias>
<alias base="SWPER">PERDSW</alias> <alias base="LHF6hr">FXLH06</alias>
<alias base="LHF9hr">FXLH09</alias>
<alias base="LHF12hr">FXLH12</alias>
<alias base="LHF18hr">FXLH18</alias>
<alias base="LHF24hr">FXLH24</alias>
<alias base="LHF48hr">FXLH48</alias>
<alias base="MCDC">CLDM</alias> <alias base="MCDC">CLDM</alias>
<alias base="MxT">TMXK</alias> <alias base="MIXR">MIXR</alias>
<alias base="PLI">LIFT</alias>
<alias base="P">PRES</alias>
<alias base="PMSL">PMSL</alias>
<alias base="EMSP">EMSL</alias>
<alias base="MMSP">MMSL</alias> <alias base="MMSP">MMSL</alias>
<alias base="PoT">THTA</alias> <alias base="MnT">TMNK</alias>
<alias base="PR">PCPR</alias> <alias base="MnT1hr">TMNK01</alias>
<alias base="PRESA">PRESA</alias> <alias base="MnT3hr">TMNK03</alias>
<alias base="DIRPW">DRCTPW</alias> <alias base="MnT6hr">TMNK06</alias>
<alias base="MnT9hr">TMNK09</alias>
<alias base="MnT12hr">TMNK12</alias>
<alias base="MnT18hr">TMNK18</alias>
<alias base="MnT24hr">TMNK24</alias>
<alias base="MnT48hr">TMNK48</alias>
<alias base="MxT">TMXK</alias>
<alias base="MxT1hr">TMXK01</alias>
<alias base="MxT3hr">TMXK03</alias>
<alias base="MxT6hr">TMXK06</alias>
<alias base="MxT9hr">TMXK09</alias>
<alias base="MxT12hr">TMXK12</alias>
<alias base="MxT18hr">TMXK18</alias>
<alias base="MxT24hr">TMXK24</alias>
<alias base="MxT48hr">TMXK48</alias>
<alias base="O3MR">OZMR</alias>
<alias base="P">PRES</alias>
<alias base="P1hr">PRES01</alias>
<alias base="P3hr">PRES03</alias>
<alias base="P6hr">PRES06</alias>
<alias base="P9hr">PRES09</alias>
<alias base="P12hr">PRES12</alias>
<alias base="P18hr">PRES18</alias>
<alias base="P24hr">PRES24</alias>
<alias base="P48hr">PRES48</alias>
<alias base="PERPW">PERDPW</alias> <alias base="PERPW">PERDPW</alias>
<alias base="CPOFP">POPZ</alias> <alias base="PERSW">PERDSW</alias>
<alias base="CPOZP">POPF</alias>
<alias base="PVORT">PVOR</alias>
<alias base="PEVAP">PEVAP</alias> <alias base="PEVAP">PEVAP</alias>
<alias base="PEVPR">PEVP</alias> <alias base="PEVPR">PEVP</alias>
<alias base="PLI">LIFT</alias>
<alias base="PLPL">PLPL</alias>
<alias base="PMSL">PMSL</alias>
<alias base="PoT">THTA</alias>
<alias base="PR">PRATE</alias>
<alias base="PR1hr">PR01</alias>
<alias base="PR3hr">PR03</alias>
<alias base="PR6hr">PR06</alias>
<alias base="PR9hr">PR09</alias>
<alias base="PR12hr">PR12</alias>
<alias base="PR18hr">PR18</alias>
<alias base="PR24hr">PR24</alias>
<alias base="PR48hr">PR48</alias>
<alias base="PRESA">PRESA</alias>
<alias base="PVORT">PVOR</alias>
<alias base="PVV">OMEG</alias>
<alias base="PW">PWTR</alias> <alias base="PW">PWTR</alias>
<alias base="RH">RELH</alias> <alias base="RH">RELH</alias>
<alias base="SATD">SATD</alias> <alias base="SATD">SATD</alias>
<alias base="DIRSW">DRCTSW</alias>
<alias base="PERSW">PERDSW</alias>
<alias base="SWELL">HGHTSW</alias>
<alias base="WVHGT">HGHTWW</alias>
<alias base="SCP">SCVR</alias> <alias base="SCP">SCVR</alias>
<alias base="SnD">SNDM</alias>
<alias base="SH">SPFH</alias> <alias base="SH">SPFH</alias>
<alias base="SHF">FXSH</alias> <alias base="SHF">FXSH</alias>
<alias base="TSOIL">SLTK</alias> <alias base="SHF1hr">FXSH01</alias>
<alias base="Heli">HLCY</alias> <alias base="SHF3hr">FXSH03</alias>
<alias base="SHF6hr">FXSH06</alias>
<alias base="SHF9hr">FXSH09</alias>
<alias base="SHF12hr">FXSH12</alias>
<alias base="SHF18hr">FXSH18</alias>
<alias base="SHF24hr">FXSH24</alias>
<alias base="SHF48hr">FXSH48</alias>
<alias base="SLI">LIFT</alias> <alias base="SLI">LIFT</alias>
<alias base="SnD">SNDM</alias>
<alias base="SOILW">SOIM</alias>
<alias base="SUNSD">SUNSD</alias>
<alias base="SWDIR">DRCTSW</alias>
<alias base="SWELL">HGHTSW</alias>
<alias base="SWPER">PERDSW</alias>
<alias base="T">TMPK</alias> <alias base="T">TMPK</alias>
<alias base="T1hr">TMPK01</alias>
<alias base="T3hr">TMPK03</alias>
<alias base="T6hr">TMPK06</alias>
<alias base="T9hr">TMPK09</alias>
<alias base="T12hr">TMPK12</alias>
<alias base="T18hr">TMPK18</alias>
<alias base="T24hr">TMPK24</alias>
<alias base="T48hr">TMPK48</alias>
<alias base="Ta">TMPKA</alias> <alias base="Ta">TMPKA</alias>
<alias base="ThP">TSTM</alias>
<alias base="TCC">CLD</alias> <alias base="TCC">CLD</alias>
<alias base="TCC1hr">CLD01</alias>
<alias base="TCC3hr">CLD03</alias>
<alias base="TCC6hr">CLD06</alias>
<alias base="TCC9hr">CLD09</alias>
<alias base="TCC12hr">CLD12</alias>
<alias base="TCC18hr">CLD18</alias>
<alias base="TCC24hr">CLD24</alias>
<alias base="TCC48hr">CLD48</alias>
<alias base="ThP">TSTM</alias>
<alias base="TOZNE">TOZO</alias>
<alias base="TP">APCP</alias>
<alias base="TP1hr">P01M</alias> <alias base="TP1hr">P01M</alias>
<alias base="TP3hr">P03M</alias> <alias base="TP3hr">P03M</alias>
<alias base="TP6hr">P06M</alias> <alias base="TP6hr">P06M</alias>
@ -98,19 +269,89 @@
<alias base="TP18hr">P18M</alias> <alias base="TP18hr">P18M</alias>
<alias base="TP24hr">P24M</alias> <alias base="TP24hr">P24M</alias>
<alias base="TP48hr">P48M</alias> <alias base="TP48hr">P48M</alias>
<alias base="TSOIL">SLTK</alias>
<alias base="U-GWD">UGWD</alias>
<alias base="U-GWD1hr">UGWD01</alias>
<alias base="U-GWD3hr">UGWD03</alias>
<alias base="U-GWD6hr">UGWD06</alias>
<alias base="U-GWD9hr">UGWD09</alias>
<alias base="U-GWD12hr">UGWD12</alias>
<alias base="U-GWD18hr">UGWD18</alias>
<alias base="U-GWD24hr">UGWD24</alias>
<alias base="U-GWD48hr">UGWD48</alias>
<alias base="UFLX">URELFX</alias>
<alias base="UFLX1hr">URELFX01</alias>
<alias base="UFLX3hr">URELFX03</alias>
<alias base="UFLX6hr">URELFX06</alias>
<alias base="UFLX9hr">URELFX09</alias>
<alias base="UFLX12hr">URELFX12</alias>
<alias base="UFLX18hr">URELFX18</alias>
<alias base="UFLX24hr">URELFX24</alias>
<alias base="UFLX48hr">URELFX48</alias>
<alias base="ULWRF">LWRU</alias>
<alias base="ULWRF1hr">LWRU01</alias>
<alias base="ULWRF3hr">LWRU03</alias>
<alias base="ULWRF6hr">LWRU06</alias>
<alias base="ULWRF9hr">LWRU09</alias>
<alias base="ULWRF12hr">LWRU12</alias>
<alias base="ULWRF18hr">LWRU18</alias>
<alias base="ULWRF24hr">LWRU24</alias>
<alias base="ULWRF48hr">LWRU48</alias>
<alias base="USTM">USTRM</alias> <alias base="USTM">USTRM</alias>
<alias base="VSTM">VSTRM</alias> <alias base="VSTM">VSTRM</alias>
<alias base="USWRF">SWRU</alias>
<alias base="USWRF1hr">SWRU01</alias>
<alias base="USWRF3hr">SWRU03</alias>
<alias base="USWRF6hr">SWRU06</alias>
<alias base="USWRF9hr">SWRU09</alias>
<alias base="USWRF12hr">SWRU12</alias>
<alias base="USWRF18hr">SWRU18</alias>
<alias base="USWRF24hr">SWRU24</alias>
<alias base="USWRF48hr">SWRU48</alias>
<alias base="uW">UREL</alias> <alias base="uW">UREL</alias>
<alias base="vW">VREL</alias> <alias base="vW">VREL</alias>
<alias base="VAPP">VAPR</alias> <alias base="VAPP">VAPR</alias>
<alias base="VWSH">VWSH</alias> <alias base="VFLX">VRELFX</alias>
<alias base="PVV">OMEG</alias> <alias base="VFLX1hr">VRELFX01</alias>
<alias base="VFLX3hr">VRELFX03</alias>
<alias base="VFLX6hr">VRELFX06</alias>
<alias base="VFLX9hr">VRELFX09</alias>
<alias base="VFLX12hr">VRELFX12</alias>
<alias base="VFLX18hr">VRELFX18</alias>
<alias base="VFLX24hr">VRELFX24</alias>
<alias base="VFLX48hr">VRELFX48</alias>
<alias base="V-GWD">VGWD</alias>
<alias base="V-GWD1hr">VGWD01</alias>
<alias base="V-GWD3hr">VGWD03</alias>
<alias base="V-GWD6hr">VGWD06</alias>
<alias base="V-GWD9hr">VGWD09</alias>
<alias base="V-GWD12hr">VGWD12</alias>
<alias base="V-GWD18hr">VGWD18</alias>
<alias base="V-GWD24hr">VGWD24</alias>
<alias base="V-GWD48hr">VGWD48</alias>
<alias base="Vis">VSBY</alias> <alias base="Vis">VSBY</alias>
<alias base="VPT">THTV</alias> <alias base="VPT">THTV</alias>
<alias base="VRATE">VRATE</alias>
<alias base="VSS">VWSH</alias>
<alias base="VTMP">TVRK</alias> <alias base="VTMP">TVRK</alias>
<alias base="WEASD">SWEM</alias> <alias base="VWSH">VWSH</alias>
<alias base="WMIXE">ENRG</alias> <alias base="WATR">WATR</alias>
<alias base="WATR1hr">WATR01</alias>
<alias base="WATR3hr">WATR03</alias>
<alias base="WATR6hr">WATR06</alias>
<alias base="WATR9hr">WATR09</alias>
<alias base="WATR12hr">WATR12</alias>
<alias base="WATR18hr">WATR18</alias>
<alias base="WATR24hr">WATR24</alias>
<alias base="WATR48hr">WATR48</alias>
<alias base="WD">DRCT</alias> <alias base="WD">DRCT</alias>
<alias base="WS">SPED</alias> <alias base="WEASD">SWEM</alias>
<alias base="WGH">HGHT5</alias>
<alias base="WGS">GUST</alias> <alias base="WGS">GUST</alias>
<alias base="WILT">WILT</alias>
<alias base="WMIXE">ENRG</alias>
<alias base="WS">SPED</alias>
<alias base="WVDIR">DRCTWW</alias>
<alias base="WVHGT">HGHTWW</alias>
<alias base="WVPER">PERDWW</alias>
</aliasList> </aliasList>

View file

@ -54,6 +54,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* 19Nov 2011 dhladky Initial creation * 19Nov 2011 dhladky Initial creation
* 29 Jan 2013 15729 wkwock fix the algorithm
* *
* </pre> * </pre>
* *
@ -122,11 +123,9 @@ public class FreezingLevel {
try { try {
resultPoint = PointUtil.determineExactIndex( resultPoint = PointUtil.determineExactIndex(
coor, crs, mapGeometry); coor, crs, mapGeometry);
System.out.println("Freezing level -- lat,lon:"+coor+" = "+resultPoint);
return resultPoint; return resultPoint;
} catch (Exception e) { } catch (Exception e) {
System.out.println("Error: Freezing level -- unable to find x,y coordinate for lat,lon:"+coor); logger.error("Error: Freezing level -- unable to find x,y coordinate for lat,lon:"+coor);
e.printStackTrace();
} }
return null; return null;
} }
@ -138,12 +137,12 @@ public class FreezingLevel {
* @return bi-linear interpolation amount the nearest 4 points * @return bi-linear interpolation amount the nearest 4 points
* @throws VizException * @throws VizException
*/ */
public double getValue(String modelName, String prodType, Coordinate coor) { public Double getValue(String modelName, String prodType, Coordinate coor) {
double value = -99999.0; double value = -99999.0;
try { try {
//xyLoc is the location in x,y //xyLoc is the location in x,y
DirectPosition2D xyLoc = findXYloc(coor, prodType); DirectPosition2D xyLoc = findXYloc(coor, prodType);
//data from hdf5 //data from hdf5
ScanDataCache cache = ScanDataCache.getInstance(); ScanDataCache cache = ScanDataCache.getInstance();
GridRecord gribRec = cache.getModelData().getGridRecord(modelName, prodType); GridRecord gribRec = cache.getModelData().getGridRecord(modelName, prodType);
@ -151,9 +150,11 @@ public class FreezingLevel {
//dimension of the record from hdf5, recNx =151 and recNy=113 during development //dimension of the record from hdf5, recNx =151 and recNy=113 during development
int recNx = gribRec.getSpatialObject().getNx(); int recNx = gribRec.getSpatialObject().getNx();
int recNy = gribRec.getSpatialObject().getNy();
//get four nearest points/values form the record around xyLoc //get four nearest points/values form the record around xyLoc
xyLoc.y=xyLoc.y * 0.9941; //A special adjustment due to PointUtil.determineExactIndex
xyLoc.x=xyLoc.x * 0.9983; // is not as accurate as A1
int x0=(int)(xyLoc.x); int x0=(int)(xyLoc.x);
int x1=x0+1; int x1=x0+1;
int y0=(int)(xyLoc.y); int y0=(int)(xyLoc.y);
@ -164,19 +165,19 @@ public class FreezingLevel {
double p3=xyLoc.y-y0; double p3=xyLoc.y-y0;
double p4=1-p3; double p4=1-p3;
double value2 = rec.getFloatData()[(recNx * y0) + x0]; double value0 = rec.getFloatData()[(recNx * y0) + x0];
double value3 = rec.getFloatData()[(recNx * y0) + x1]; double value1 = rec.getFloatData()[(recNx * y0) + x1];
double value0 = rec.getFloatData()[(recNx * y1) + x0]; double value2 = rec.getFloatData()[(recNx * y1) + x0];
double value1 = rec.getFloatData()[(recNx * y1) + x1]; double value3 = rec.getFloatData()[(recNx * y1) + x1];
//do a bi-linear interpolation amount the nearest 4 points //do a bi-linear interpolation amount the nearest 4 points
value = (p1*p4*value1)+(p2*p4*value0)+(p1*p3*value3)+(p2*p3*value2); value = (p1*p4*value1)+(p2*p4*value0)+(p1*p3*value3)+(p2*p3*value2);
logger.info("bi-linear interpolation value: "+value+" "+value0+" "+value1+ logger.info("bi-linear interpolation: "+value+"-->("+value0+","+value1+
" "+value2+" "+value3+" for coor:"+coor+" "+recNx+","+recNy); ","+value2+","+value3+") at "+xyLoc);
} catch (Exception e) { } catch (Exception e) {
logger.error("No Grib value available....." + modelName + " " logger.error("No Grib value available....." + modelName + " "
+ prodType+" lat,lon:"+coor); + prodType+" lat,lon:"+coor);
e.printStackTrace(); return null;
} }
return value; return value;
} }
@ -219,9 +220,6 @@ public class FreezingLevel {
int foundValFlag=-1;//-1=all ghValue and tValue are null, int foundValFlag=-1;//-1=all ghValue and tValue are null,
//0=all ghValue<=-9000 and tValue<=273.16, 1=found a fLevel //0=all ghValue<=-9000 and tValue<=273.16, 1=found a fLevel
System.out
.println("********** Starting Freezing Level Calculations *****************");
TreeSet<Integer> ts= new TreeSet<Integer>(ghValues.keySet());//want an asc sorted list TreeSet<Integer> ts= new TreeSet<Integer>(ghValues.keySet());//want an asc sorted list
Iterator<Integer> it = ts.iterator(); Iterator<Integer> it = ts.iterator();
@ -231,8 +229,6 @@ public class FreezingLevel {
Double tValue = tValues.get(level); Double tValue = tValues.get(level);
Double ghValue = ghValues.get(level); Double ghValue = ghValues.get(level);
System.out.println("GH Value: " + ghValue + " TValue: "
+ tValue);
if (ghValue != null && tValue != null && foundValFlag ==-1){ if (ghValue != null && tValue != null && foundValFlag ==-1){
foundValFlag=0; foundValFlag=0;
@ -245,14 +241,13 @@ public class FreezingLevel {
.get(ktopLevel) - ghValue) * ((273.16 - tValues .get(ktopLevel) - ghValue) * ((273.16 - tValues
.get(jtopLevel)) / (tValue - tValues .get(jtopLevel)) / (tValue - tValues
.get(jtopLevel))))) * .00328; .get(jtopLevel))))) * .00328;
System.out.println("Formula:"); logger.error("***Freezing level: "+fLevel+"="
System.out.println("(" + ghValues.get(ktopLevel) + "(" + ghValues.get(ktopLevel)
+ " - ((" + ghValues.get(ktopLevel) + " - " + " - ((" + ghValues.get(ktopLevel) + " - "
+ ghValue + ") * ((273.16 - " + ghValue + ") * ((273.16 - "
+ tValues.get(jtopLevel) + ") / (" + tValue + tValues.get(jtopLevel) + ") / (" + tValue
+ " - " + tValues.get(jtopLevel) + " - " + tValues.get(jtopLevel)
+ ")))) * .00328"); + ")))) * .00328");
System.out.println("*** FreezingLevel = " + fLevel);
foundValFlag=1; foundValFlag=1;
freezingMap.put(coor, fLevel.floatValue()); freezingMap.put(coor, fLevel.floatValue());
break; break;
@ -265,11 +260,8 @@ public class FreezingLevel {
if (foundValFlag==0) {//this means all tValue are <= 273.16 if (foundValFlag==0) {//this means all tValue are <= 273.16
freezingMap.put(coor, 0.0f); freezingMap.put(coor, 0.0f);
System.out.println("*** FreezingLevel = 0.0"); logger.error("*** FreezingLevel = 0.0");
} }
System.out
.println("********** Finished Freezing Level Calculations *****************");
} }
return freezingMap; return freezingMap;
@ -357,7 +349,7 @@ public class FreezingLevel {
paramXML.setModelName(model); paramXML.setModelName(model);
paramXML.setParameterName(param); paramXML.setParameterName(param);
String sql = getSQL(interval, model, param, refTime); String sql = getSQL(interval, model, param, refTime);
System.out.println("Freezing level sql="+sql); logger.info("Freezing level sql="+sql);
GridRecord modelRec = DATUtils.getMostRecentGridRecord(interval, sql, GridRecord modelRec = DATUtils.getMostRecentGridRecord(interval, sql,
paramXML); paramXML);

View file

@ -281,6 +281,7 @@ public class NcInventory {
// get the dao and the record class for this plugin and use them // get the dao and the record class for this plugin and use them
// to create a DatabaseQuery. // to create a DatabaseQuery.
// //
CoreDao dao = PluginFactory.getInstance().getPluginDao( CoreDao dao = PluginFactory.getInstance().getPluginDao(
inventoryDefn.getPluginName() ); inventoryDefn.getPluginName() );
String recordClassStr = PluginFactory.getInstance().getPluginRecordClassName( String recordClassStr = PluginFactory.getInstance().getPluginRecordClassName(
@ -308,7 +309,6 @@ public class NcInventory {
List<?> queryResults = dao.queryByCriteria( dbQuery ); List<?> queryResults = dao.queryByCriteria( dbQuery );
if( !queryResults.isEmpty() ) { if( !queryResults.isEmpty() ) {
for( Object queryRslt : queryResults ) { for( Object queryRslt : queryResults ) {
// if there is only one parameter then the results will be an // if there is only one parameter then the results will be an
// Object, otherwise it will be an array of Objects. // Object, otherwise it will be an array of Objects.
@ -327,7 +327,12 @@ public class NcInventory {
Object rsltArray[] = (Object[])queryRslt; Object rsltArray[] = (Object[])queryRslt;
for( int p=0 ; p<distinctFields.size() ; p++ ) { for( int p=0 ; p<distinctFields.size() ; p++ ) {
rsltMap.put( distinctFields.get(p), rsltArray[p] ); if (rsltArray[p] != null) {
rsltMap.put( distinctFields.get(p), rsltArray[p] );
}
else {
rsltMap.put( distinctFields.get(p), "" );
}
} }
} }

View file

@ -26,6 +26,7 @@ import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.common.localization.IPathManager; import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext; import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel; import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.PathManagerFactory; import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.edex.decodertools.time.TimeTools; import com.raytheon.uf.edex.decodertools.time.TimeTools;
@ -40,6 +41,8 @@ import com.raytheon.uf.edex.decodertools.time.TimeTools;
* *
* This code has been developed by the SIB for use in the AWIPS2 system. * This code has been developed by the SIB for use in the AWIPS2 system.
* *
* 01/19/13 # Greg hull Use getStaticLocalizationFile to get mosaicInfo file
*
* @author L. Lin * @author L. Lin
* @version 1.0 * @version 1.0
*/ */
@ -50,33 +53,32 @@ public class MosaicDecoder extends AbstractDecoder {
private String traceId = ""; private String traceId = "";
public static final String MOSAIC_INFO_FILE = "ncep"+File.separator+"dictionary"+
File.separator+"mosaicInfo.txt";
private MosaicInfoDict infoDict; private MosaicInfoDict infoDict;
private byte[] headerBlock = new byte[120]; private byte[] headerBlock = new byte[120];
public MosaicDecoder() throws DecoderException { public MosaicDecoder() throws DecoderException {
final String NCEP_DIR = "ncep";
final String dictDir = "dictionary";
IPathManager manager = PathManagerFactory.getPathManager(); IPathManager manager = PathManagerFactory.getPathManager();
LocalizationContext baseContext = null; LocalizationFile lf = manager.getStaticLocalizationFile( MOSAIC_INFO_FILE );
File baseDir = null;
baseContext = manager.getContext(EDEX_STATIC, LocalizationLevel.BASE);
baseContext.setContextName(NCEP_DIR);
baseDir = manager.getFile(baseContext, "");
infoDict = MosaicInfoDict.getInstance(baseDir + File.separator
+ dictDir + File.separator);
if( lf == null ) {
theLogger.error("Error finding "+ MOSAIC_INFO_FILE );
}
else {
infoDict = MosaicInfoDict.getInstance( lf.getFile() );
}
} }
public PluginDataObject[] decode(byte[] messageData, Headers headers) public PluginDataObject[] decode(byte[] messageData, Headers headers)
throws DecoderException { throws DecoderException {
String prodName = null; String prodName = null;
if (headers != null) { if ( headers != null) {
/* /*
* traceId equals to the file name * traceId equals to the file name
*/ */
@ -109,6 +111,7 @@ public class MosaicDecoder extends AbstractDecoder {
if (prodName == null) { if (prodName == null) {
prodName = "unknown"; prodName = "unknown";
} }
MosaicInfo info = infoDict.getInfo(prodCode); MosaicInfo info = infoDict.getInfo(prodCode);
if (info == null) { if (info == null) {
theLogger.error(traceId + "-Unknown mosaic product code: " theLogger.error(traceId + "-Unknown mosaic product code: "

View file

@ -16,6 +16,8 @@ import java.util.Map;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* 09/2009 143 L. Lin Initial coding * 09/2009 143 L. Lin Initial coding
* 01/19/13 # Greg hull pass in File instead of path
*
* </pre> * </pre>
* *
* This code has been developed by the SIB for use in the AWIPS2 system. * This code has been developed by the SIB for use in the AWIPS2 system.
@ -23,25 +25,22 @@ import java.util.Map;
* @version 1.0 * @version 1.0
*/ */
public class MosaicInfoDict implements Iterable<MosaicInfo> { public class MosaicInfoDict implements Iterable<MosaicInfo> {
public static final String MOSAIC_INFO_FILE = "mosaicInfo.txt";
private static MosaicInfoDict instance = null; private static MosaicInfoDict instance = null;
private Map<Integer, MosaicInfo> dict; private Map<Integer, MosaicInfo> dict;
private MosaicInfoDict(String dir) { private MosaicInfoDict(File midf) {
dict = new LinkedHashMap<Integer, MosaicInfo>(); dict = new LinkedHashMap<Integer, MosaicInfo>();
// file points to $AWIPS/edex/data/utility/common_static/base/mosaicInfo.txt
File file = new File(dir + File.separator + MOSAIC_INFO_FILE);
try { try {
//read the mosaicInfo.txt to pointer in //read the mosaicInfo.txt to pointer in
BufferedReader in = new BufferedReader(new FileReader(file)); BufferedReader in = new BufferedReader(new FileReader(midf));
String s = in.readLine(); String s = in.readLine();
//read in line by line and put into mosaic information dictionary //read in line by line and put into mosaic information dictionary
while (s != null) { while (s != null) {
if ((s.length() > 0) && (s.charAt(0) != '#')) { if ((s.length() > 0) && (s.charAt(0) != '#')) {
@ -69,7 +68,7 @@ public class MosaicInfoDict implements Iterable<MosaicInfo> {
* @return * @return
*/ */
public MosaicInfo getInfo(int productCode) { public MosaicInfo getInfo(int productCode) {
return dict.get(productCode); return dict.get(productCode);
} }
/* /*
@ -82,9 +81,9 @@ public class MosaicInfoDict implements Iterable<MosaicInfo> {
return Collections.unmodifiableCollection(dict.values()).iterator(); return Collections.unmodifiableCollection(dict.values()).iterator();
} }
public static synchronized MosaicInfoDict getInstance(String dir) { public static synchronized MosaicInfoDict getInstance(File midf ) {
if (instance == null) { if (instance == null) {
instance = new MosaicInfoDict(dir); instance = new MosaicInfoDict(midf);
} }
return instance; return instance;
@ -100,6 +99,7 @@ public class MosaicInfoDict implements Iterable<MosaicInfo> {
} }
public static void main(String[] args) { public static void main(String[] args) {
MosaicInfoDict dict = MosaicInfoDict.getInstance(args[0]); File f = new File( args[0]);
MosaicInfoDict dict = MosaicInfoDict.getInstance( f );
} }
} }

View file

@ -4,17 +4,13 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.regex.Pattern; import java.util.regex.Pattern;
// TODO this logic could probably be included in the ncgribFileNameProcessor rather than in a singleton
public class GridLookupFileName { public class GridLookupFileName {
/** The singleton instance of GridLookupFileName **/ /** The singleton instance of GridLookupFileName **/
private static GridLookupFileName instance; private static GridLookupFileName instance;
// TODO modelname needs to be infered from filename since the file name
// processing happens before decode.
private String[] modelNames = { "cmce", "gefs", "gww", "naefsBC", private String[] modelNames = { "cmce", "gefs", "gww", "naefsBC",
"naefsUS", "naefsAK", "sref" }; "naefsUS", "naefsAK", "sref" };
// TODO this should be read from a configureable xml file, not hardcoded
private String[] template = { private String[] template = {
"cmc_gep.*|cmce;cmc_gec.*|cmcec;cmc_geavg.*|cmceMean;cmc_gespr.*|cmceSpread", "cmc_gep.*|cmce;cmc_gec.*|cmcec;cmc_geavg.*|cmceMean;cmc_gespr.*|cmceSpread",
"gec00.*bc.*|gefscBC;gec00.*anl|gefscAnal;gec00.*[0-9]|gefsc;gep.*anl|gefsAnal;gep.*bc.*|gefsBC;geavg.*bc.*|gefsMeanBC;gespr.*bc.*|gefsSpreadBC;gespr.*|gefsSpread", "gec00.*bc.*|gefscBC;gec00.*anl|gefscAnal;gec00.*[0-9]|gefsc;gep.*anl|gefsAnal;gep.*bc.*|gefsBC;geavg.*bc.*|gefsMeanBC;gespr.*bc.*|gefsSpreadBC;gespr.*|gefsSpread",
@ -40,9 +36,6 @@ public class GridLookupFileName {
} }
private void initModels() { private void initModels() {
// TODO instead of just building this map, all parsing should be
// happening here and regexes should be built into Pattern object so
// that we aren'y constantly reprocessing regexes
for (int i = 0; i < modelNames.length; i++) { for (int i = 0; i < modelNames.length; i++) {
models.put(modelNames[i].toUpperCase(), template[i]); models.put(modelNames[i].toUpperCase(), template[i]);
} }
@ -51,24 +44,18 @@ public class GridLookupFileName {
public String getModelName(String filename) { public String getModelName(String filename) {
String modelname = null; String modelname = null;
// this was commented out because file name processing should happen
// before decode so there is no pre-existing model name.
// if (model.equalsIgnoreCase("gww") && gridId.equalsIgnoreCase("229")) // if (model.equalsIgnoreCase("gww") && gridId.equalsIgnoreCase("229"))
// { // {
// return modelname; // return modelname;
// } // }
// //
// String template = models.get(model.toUpperCase()); // String template = models.get(model.toUpperCase());
// since we don't know the model name, we must process all templates.
for (String template : this.template) { for (String template : this.template) {
// TODO do not split this for every filename, split in init
String[] tokens = template.split(";"); String[] tokens = template.split(";");
// System.out.println ( " CMC ensemble " + "!!!\n"); // System.out.println ( " CMC ensemble " + "!!!\n");
for (String token : tokens) { for (String token : tokens) {
// TODO do not split this for every filename, split in init
String[] alias = token.split("\\|"); String[] alias = token.split("\\|");
// TODO compile and reuse patterns.
if (Pattern.matches(alias[0], filename)) { if (Pattern.matches(alias[0], filename)) {
modelname = alias[1]; modelname = alias[1];
@ -81,9 +68,6 @@ public class GridLookupFileName {
break; break;
} }
} }
if (modelname != null) {
break;
}
} }
return modelname; return modelname;
} }

View file

@ -27,11 +27,9 @@ import org.apache.camel.Processor;
/** /**
* *
* Based off a file name for a grib file, determine the modelName, secondaryId, * Processor for ncep grib files, this processor has lots of hard coded
* and ensembleId. It is ok not to set any headers because the decoder can find * assumptions about file naming that need to be more generic based off ncep
* the modelName and ensembleId. Those fields should only be set if the filename * file names.
* has information beyond what is in the actual grib file.The grib decoder will
* not set a secondary id so if it isn't set here it will be null.
* *
* <pre> * <pre>
* *
@ -48,25 +46,20 @@ import org.apache.camel.Processor;
*/ */
public class NcgribFileNameProcessor implements Processor { public class NcgribFileNameProcessor implements Processor {
// TODO does this actually match all ensemble patterns?
// grab all known ensemble ids // grab all known ensemble ids
private static final Pattern ENSEMBLE_ID_PATTERN = Pattern private static final Pattern ENSEMBLE_ID_PATTERN = Pattern
.compile("^(p|n|ctl)\\d{0,2}$"); .compile("^(p|n|ctl)\\d{0,2}$");
// TODO merge this pattern in with the patterns in GridLookupFileName
// anything that ends in nest is assumed to be a nested grid identifier // anything that ends in nest is assumed to be a nested grid identifier
private static final Pattern FIREWXNEST_ID_PATTERN = Pattern private static final Pattern FIREWXNEST_ID_PATTERN = Pattern
.compile("^firewxnest$"); .compile("^firewxnest$");
// TODO merge this pattern in with the patterns in GridLookupFileName
// anything that ends in nest is assumed to be a nested grid identifier // anything that ends in nest is assumed to be a nested grid identifier
private static final Pattern NEST_ID_PATTERN = Pattern.compile("^.*nest$"); private static final Pattern NEST_ID_PATTERN = Pattern.compile("^.*nest$");
// TODO merge this pattern in with the patterns in GridLookupFileName
// SREF gets special handling, does this apply to other models? // SREF gets special handling, does this apply to other models?
private static final Pattern SREF_PATTERN = Pattern.compile("^sref_.*$"); private static final Pattern SREF_PATTERN = Pattern.compile("^sref_.*$");
// TODO merge this pattern in with the patterns in GridLookupFileName
// This is the least generic pattern ever, are there any constraints on // This is the least generic pattern ever, are there any constraints on
// event names, who knows? // event names, who knows?
private static final Pattern HURRICANE_PATTERN = Pattern private static final Pattern HURRICANE_PATTERN = Pattern
@ -108,13 +101,14 @@ public class NcgribFileNameProcessor implements Processor {
} }
} }
} }
datasetid = GridLookupFileName.getInstance().getModelName(flName); // datasetid = GridLookupFileName.getInstance().getModelName(flName);
if (datasetid != null) { if (datasetid != null) {
exchange.getIn().setHeader("datasetid", datasetid); exchange.getIn().setHeader("datasetid", datasetid);
} }
else {
datasetid = GridLookupFileName.getInstance().getModelName(flName);
}
if (secondaryid == null) { if (secondaryid == null) {
// TODO does everything really need secondaryid or should this only
// be set for events?
secondaryid = nameTokens[0]; secondaryid = nameTokens[0];
} }
exchange.getIn().setHeader("secondaryid", secondaryid); exchange.getIn().setHeader("secondaryid", secondaryid);

View file

@ -101,7 +101,7 @@ DisposeListener, IPartListener{
private static NsharpConstants.SPCGraph leftGraph = NsharpConstants.SPCGraph.EBS; private static NsharpConstants.SPCGraph leftGraph = NsharpConstants.SPCGraph.EBS;
private static NsharpConstants.SPCGraph rightGraph = NsharpConstants.SPCGraph.STP; private static NsharpConstants.SPCGraph rightGraph = NsharpConstants.SPCGraph.STP;
private boolean spcGpCreated = false; private boolean spcGpCreated = false;
public static NsharpPaletteWindow getInstance() { public static NsharpPaletteWindow getInstance() {
if( VizPerspectiveListener.getCurrentPerspectiveManager()!= null){ if( VizPerspectiveListener.getCurrentPerspectiveManager()!= null){
if(VizPerspectiveListener.getCurrentPerspectiveManager().getPerspectiveId().equals(D2D5Pane.ID_PERSPECTIVE)) if(VizPerspectiveListener.getCurrentPerspectiveManager().getPerspectiveId().equals(D2D5Pane.ID_PERSPECTIVE))
return d2dInstance; return d2dInstance;
@ -279,7 +279,7 @@ DisposeListener, IPartListener{
if(rsc!= null && rsc.getSpcGraphsPaneRsc()!=null) { if(rsc!= null && rsc.getSpcGraphsPaneRsc()!=null) {
rsc.getSpcGraphsPaneRsc().setGraphs(leftGraph, rightGraph); rsc.getSpcGraphsPaneRsc().setGraphs(leftGraph, rightGraph);
} }
} }
public void setAndOpenMb(String msg) { public void setAndOpenMb(String msg) {
if (mb != null) { if (mb != null) {
@ -312,12 +312,12 @@ DisposeListener, IPartListener{
NsharpConfigStore configStore = configMgr.retrieveNsharpConfigStoreFromFs(); NsharpConfigStore configStore = configMgr.retrieveNsharpConfigStoreFromFs();
NsharpGraphProperty graphConfigProperty = configStore.getGraphProperty(); NsharpGraphProperty graphConfigProperty = configStore.getGraphProperty();
paneConfigurationName = graphConfigProperty.getPaneConfigurationName(); paneConfigurationName = graphConfigProperty.getPaneConfigurationName();
try { /*try {
NsharpGridInventory.getInstance().initInventory(false); // NsharpGridInventory.getInstance().initInventory(false);
} catch (VizException e) { } catch (VizException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }*/
} }
@ -1048,7 +1048,7 @@ DisposeListener, IPartListener{
} }
} }
} ); } );
if(paneConfigurationName.equals(NsharpConstants.PANE_SPCWS_CFG_STR)) if(paneConfigurationName.equals(NsharpConstants.PANE_SPCWS_CFG_STR))
createSPCGp(); createSPCGp();
@ -1082,7 +1082,7 @@ DisposeListener, IPartListener{
} }
else{ else{
effBulkShearBtn.setEnabled( false ); effBulkShearBtn.setEnabled( false );
} }
effBulkShearBtn.addListener( SWT.MouseUp, new Listener() { effBulkShearBtn.addListener( SWT.MouseUp, new Listener() {
public void handleEvent(Event event) { public void handleEvent(Event event) {
if(leftGraph != NsharpConstants.SPCGraph.EBS && rightGraph != NsharpConstants.SPCGraph.EBS){ if(leftGraph != NsharpConstants.SPCGraph.EBS && rightGraph != NsharpConstants.SPCGraph.EBS){

View file

@ -4,6 +4,8 @@ Bundle-Name: Gempak Plug-in
Bundle-SymbolicName: gov.noaa.nws.ncep.viz.gempak;singleton:=true Bundle-SymbolicName: gov.noaa.nws.ncep.viz.gempak;singleton:=true
Bundle-Version: 1.0.0.qualifier Bundle-Version: 1.0.0.qualifier
Bundle-Activator: gov.noaa.nws.ncep.viz.gempak.Activator Bundle-Activator: gov.noaa.nws.ncep.viz.gempak.Activator
Eclipse-BuddyPolicy: registered, ext, global
Eclipse-RegisterBuddy: com.raytheon.uf.common.serialization
Require-Bundle: org.eclipse.ui, Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime, org.eclipse.core.runtime,
com.raytheon.viz.core;bundle-version="1.12.1142", com.raytheon.viz.core;bundle-version="1.12.1142",
@ -13,6 +15,8 @@ Require-Bundle: org.eclipse.ui,
com.raytheon.viz.alerts, com.raytheon.viz.alerts,
com.raytheon.uf.common.dataplugin.grid;bundle-version="1.0.0", com.raytheon.uf.common.dataplugin.grid;bundle-version="1.0.0",
com.raytheon.uf.common.gridcoverage;bundle-version="1.0.0", com.raytheon.uf.common.gridcoverage;bundle-version="1.0.0",
com.raytheon.uf.common.parameter;bundle-version="1.0.0",
com.raytheon.uf.common.dataplugin.level;bundle-version="1.12.1174",
com.sun.jna, com.sun.jna,
org.geotools;bundle-version="2.6.4", org.geotools;bundle-version="2.6.4",
org.apache.log4j;bundle-version="1.0.0" org.apache.log4j;bundle-version="1.0.0"
@ -21,6 +25,10 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Export-Package: gov.noaa.nws.ncep.viz.gempak, Export-Package: gov.noaa.nws.ncep.viz.gempak,
gov.noaa.nws.ncep.viz.gempak.grid.jna, gov.noaa.nws.ncep.viz.gempak.grid.jna,
gov.noaa.nws.ncep.viz.gempak.grid.inv, gov.noaa.nws.ncep.viz.gempak.grid.inv,
gov.noaa.nws.ncep.viz.gempak.grid.mapper,
gov.noaa.nws.ncep.viz.gempak.grid.units,
gov.noaa.nws.ncep.viz.gempak.util gov.noaa.nws.ncep.viz.gempak.util
Import-Package: com.raytheon.uf.common.derivparam.tree, Import-Package: com.raytheon.uf.common.derivparam.tree,
gov.noaa.nws.ncep.edex.common.ncinventory gov.noaa.nws.ncep.edex.common.ncinventory,
gov.noaa.nws.ncep.common.log.logger,
com.raytheon.uf.common.serialization

View file

@ -0,0 +1,4 @@
gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridParmInfo
gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridParmInfoSet
gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridVcrdInfo
gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridVcrdInfoSet

View file

@ -98,7 +98,7 @@
</vcordinfo> </vcordinfo>
<vcordinfo> <vcordinfo>
<name>Pressure difference layer</name> <name>Pressure difference layer</name>
<units>hPa</units> <units>Pa</units>
<gnam>PDLY</gnam> <gnam>PDLY</gnam>
<scale>-2</scale> <scale>-2</scale>
</vcordinfo> </vcordinfo>

View file

@ -0,0 +1,20 @@
package gov.noaa.nws.ncep.viz.gempak.grid.mapper;
import com.raytheon.uf.common.dataplugin.grid.mapping.DatasetIdMapper;
import com.raytheon.uf.common.dataplugin.level.mapping.LevelMapper;
import com.raytheon.uf.common.parameter.mapping.ParameterMapper;
public class GridMapper {
public GridMapper () {
}
public static void GridMapperInit () {
initlize ();
}
private static void initlize () {
DatasetIdMapper.getInstance();
LevelMapper.getInstance();
ParameterMapper.getInstance();
}
}

View file

@ -0,0 +1,55 @@
package gov.noaa.nws.ncep.viz.gempak.grid.units;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import com.raytheon.uf.common.serialization.ISerializableObject;
@XmlAccessorType(XmlAccessType.NONE)
public class GempakGridParmInfo implements ISerializableObject{
@XmlElement
private String name;
@XmlElement
private String units;
@XmlElement
private String gnam;
@XmlElement
private int scale;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUnits() {
return units;
}
public void setUnits(String units) {
this.units = units;
}
public String getGnam() {
return gnam;
}
public void setGnam(String gnam) {
this.gnam = gnam;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
}
}

View file

@ -0,0 +1,117 @@
package gov.noaa.nws.ncep.viz.gempak.grid.units;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.raytheon.uf.common.localization.FileUpdatedMessage;
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
import com.raytheon.uf.common.localization.IPathManager;
import com.raytheon.uf.common.localization.LocalizationContext;
import com.raytheon.uf.common.localization.LocalizationFile;
import com.raytheon.uf.common.localization.PathManagerFactory;
import com.raytheon.uf.common.localization.FileUpdatedMessage.FileChangeType;
import com.raytheon.uf.common.serialization.SerializationUtil;
import gov.noaa.nws.ncep.common.log.logger.NcepLogger;
import gov.noaa.nws.ncep.common.log.logger.NcepLoggerManager;
import gov.noaa.nws.ncep.viz.localization.NcPathManager;
public class GempakGridParmInfoLookup implements ILocalizationFileObserver {
public static final String GRID_GEMPAK_PARM_FILE = "ncep"+File.separator +
"GempakGridUnits" + File.separator +
"gempakGridParmeterUnits.xml";
/** The logger */
private static NcepLogger logger = NcepLoggerManager.getNcepLogger(GempakGridParmInfoLookup.class);
/** The singleton instance of GridLookupFileName **/
private static GempakGridParmInfoLookup instance;
private final Map<String, GempakGridParmInfo> parmInfo;
public static GempakGridParmInfoLookup getInstance () {
if (instance == null) {
instance = new GempakGridParmInfoLookup ();
}
return instance;
}
private GempakGridParmInfoLookup () {
parmInfo = new HashMap <String,GempakGridParmInfo>();
try {
initParmInfo ();
}catch (IOException e) {
logger.error("Unable to initialize gempak parameter information list!", e);
}
}
private void initParmInfo () throws IOException {
// logger.info("Initial Gempak Parameter information===");
File gempakParmInfo =
NcPathManager.getInstance().getStaticFile(GRID_GEMPAK_PARM_FILE);
GempakGridParmInfoSet parmInfoList = null;
try {
if ( gempakParmInfo.exists()) {
parmInfoList = (GempakGridParmInfoSet) SerializationUtil
.jaxbUnmarshalFromXmlFile(gempakParmInfo.getPath());
} else {
ArrayList<GempakGridParmInfo> emptyList = new ArrayList<GempakGridParmInfo>();
parmInfoList = new GempakGridParmInfoSet();
parmInfoList.setParmeterinfo(emptyList);
}
for (GempakGridParmInfo parm : parmInfoList.getParmeterinfo()) {
parmInfo.put(parm.getGnam(), parm);
}
} catch (Exception e) {
throw new IOException ("Unable to unmarshal ncep gempak parm info file");
}
}
public String getParmUnit ( String parm ) {
String units = null;
GempakGridParmInfo pInfo = parmInfo.get(parm);
if ( pInfo != null ) {
units = pInfo.getUnits();
}
return units;
}
public int getParmScale ( String parm ) {
int scale = 0;
GempakGridParmInfo pInfo = parmInfo.get(parm);
if ( pInfo != null ) {
scale = pInfo.getScale();
}
return scale;
}
public void display () {
int cnt = 1;
logger.info ("Size of parm table:" + parmInfo.size());
for (GempakGridParmInfo parm: parmInfo.values() ) {
logger.info("No." + cnt + " name:" + parm.getName() + " gname:" + parm.getGnam() + " units:" + parm.getUnits() + " scale:" + parm.getScale());
cnt ++;
}
}
@Override
public void fileUpdated( FileUpdatedMessage fumsg) {
String fName = fumsg.getFileName();
LocalizationFile lFile;
logger.info("======fileUpdated:" + fumsg.getChangeType());
// if the file had been deleted
if( fumsg.getChangeType() == FileChangeType.DELETED ) {
}
else {
}
}
}

View file

@ -0,0 +1,29 @@
package gov.noaa.nws.ncep.viz.gempak.grid.units;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import com.raytheon.uf.common.serialization.ISerializableObject;
@XmlRootElement(name = "gempakGridParmUnitSet")
@XmlAccessorType(XmlAccessType.NONE)
public class GempakGridParmInfoSet implements ISerializableObject{
/**
* List of parameter for/from the XML.
*/
@XmlElements( { @XmlElement(name = "parmeterinfo", type = GempakGridParmInfo.class) })
private ArrayList<GempakGridParmInfo> parmeterinfo;
public ArrayList<GempakGridParmInfo> getParmeterinfo() {
return parmeterinfo;
}
public void setParmeterinfo(ArrayList<GempakGridParmInfo> parmeterinfo) {
this.parmeterinfo = parmeterinfo;
}
}

View file

@ -0,0 +1,55 @@
package gov.noaa.nws.ncep.viz.gempak.grid.units;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import com.raytheon.uf.common.serialization.ISerializableObject;
@XmlAccessorType(XmlAccessType.NONE)
public class GempakGridVcrdInfo implements ISerializableObject{
@XmlElement
private String name;
@XmlElement
private String units;
@XmlElement
private String gnam;
@XmlElement
private int scale;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUnits() {
return units;
}
public void setUnits(String units) {
this.units = units;
}
public String getGnam() {
return gnam;
}
public void setGnam(String gnam) {
this.gnam = gnam;
}
public int getScale() {
return scale;
}
public void setScale(int scale) {
this.scale = scale;
}
}

View file

@ -0,0 +1,95 @@
package gov.noaa.nws.ncep.viz.gempak.grid.units;
import gov.noaa.nws.ncep.common.log.logger.NcepLogger;
import gov.noaa.nws.ncep.common.log.logger.NcepLoggerManager;
import gov.noaa.nws.ncep.viz.localization.NcPathManager;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import com.raytheon.uf.common.serialization.SerializationUtil;
public class GempakGridVcrdInfoLookup {
public static final String GRID_GEMPAK_VCORD_FILE = "ncep"+File.separator +
"GempakGridUnits" + File.separator +
"gempakGridVcrdUnits.xml";
/** The logger */
private static NcepLogger logger = NcepLoggerManager.getNcepLogger(GempakGridVcrdInfoLookup.class);
/** The singleton instance of GridLookupFileName **/
private static GempakGridVcrdInfoLookup instance;
private final Map<String, GempakGridVcrdInfo> vcrdInfo;
public static GempakGridVcrdInfoLookup getInstance () {
if (instance == null) {
instance = new GempakGridVcrdInfoLookup ();
}
return instance;
}
private GempakGridVcrdInfoLookup () {
vcrdInfo = new HashMap <String,GempakGridVcrdInfo>();
try {
initVcordInfo ();
}catch (IOException e) {
logger.error("Unable to initialize gempak vcord information list!", e);
}
}
private void initVcordInfo () throws IOException {
// logger.info("Initial Gempak VCORD information===");
File gempakVcrdInfo =
NcPathManager.getInstance().getStaticFile(GRID_GEMPAK_VCORD_FILE);
GempakGridVcrdInfoSet vcrdInfoList = null;
try {
if ( gempakVcrdInfo.exists()) {
vcrdInfoList = (GempakGridVcrdInfoSet) SerializationUtil
.jaxbUnmarshalFromXmlFile(gempakVcrdInfo.getPath());
} else {
ArrayList<GempakGridVcrdInfo> emptyList = new ArrayList<GempakGridVcrdInfo>();
vcrdInfoList = new GempakGridVcrdInfoSet();
vcrdInfoList.setVcordinfo(emptyList);
}
for (GempakGridVcrdInfo vcrd : vcrdInfoList.getVcordinfo()) {
vcrdInfo.put(vcrd.getGnam(), vcrd);
}
} catch (Exception e) {
throw new IOException ("Unable to unmarshal ncep gempak vcrd info file");
}
}
public String getVcrdUnit ( String parm ) {
String units = null;
GempakGridVcrdInfo pInfo = vcrdInfo.get(parm);
if ( pInfo != null ) {
units = pInfo.getUnits();
}
return units;
}
public int getParmScale ( String parm ) {
int scale = 0;
GempakGridVcrdInfo pInfo = vcrdInfo.get(parm);
if ( pInfo != null ) {
scale = pInfo.getScale();
}
return scale;
}
public void display () {
int cnt = 1;
logger.info ("Size of vcrd table:" + vcrdInfo.size());
for (GempakGridVcrdInfo parm: vcrdInfo.values() ) {
logger.info("No." + cnt + " name:" + parm.getName() + " gname:" + parm.getGnam() + " units:" + parm.getUnits() + " scale:" + parm.getScale());
cnt ++;
}
}
}

View file

@ -0,0 +1,30 @@
package gov.noaa.nws.ncep.viz.gempak.grid.units;
import java.util.ArrayList;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import com.raytheon.uf.common.serialization.ISerializableObject;
@XmlRootElement(name = "gempakGridVcordUnitSet")
@XmlAccessorType(XmlAccessType.NONE)
public class GempakGridVcrdInfoSet implements ISerializableObject{
/**
* List of vcord for/from the XML.
*/
@XmlElements( { @XmlElement(name = "vcordinfo", type = GempakGridVcrdInfo.class) })
private ArrayList<GempakGridVcrdInfo> vcordinfo;
public ArrayList<GempakGridVcrdInfo> getVcordinfo() {
return vcordinfo;
}
public void setVcordinfo(ArrayList<GempakGridVcrdInfo> vcordinfo) {
this.vcordinfo = vcordinfo;
}
}

View file

@ -79,8 +79,8 @@ import gov.noaa.nws.ncep.edex.common.ncinventory.NcInventoryRequestMsg;
* 09/05/12 #860 Greg Hull Add this to the URICatalog for storing the latest time. * 09/05/12 #860 Greg Hull Add this to the URICatalog for storing the latest time.
* 09/13/12 #860 Greg Hull set default for inventoryEnabled to false. * 09/13/12 #860 Greg Hull set default for inventoryEnabled to false.
* 11/2012 #885 T. Lee Set unmapped satellite projection resolution to "native" * 11/2012 #885 T. Lee Set unmapped satellite projection resolution to "native"
* 01/02/2013 X. Guo Added codes to get Extpoint constraint name * 01/2013 Greg Hull Don't create wildcard inventory constraints
* *
* </pre> * </pre>
* *
* @author ghull * @author ghull
@ -111,7 +111,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
// must match the name in an extention point which defines the java class // must match the name in an extention point which defines the java class
// that implementes the resource. // that implementes the resource.
@XmlElement @XmlElement
private String rscImplementation; private String rscImplementation;
// the name of a column in the DB used to generated dynamic Resources. // the name of a column in the DB used to generated dynamic Resources.
// (Note: this must be defined as a parameter for the resource implementation.) // (Note: this must be defined as a parameter for the resource implementation.)
@ -166,13 +166,13 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
// Default to disnabled so it must be explicitly enabled. // Default to disnabled so it must be explicitly enabled.
@XmlElement @XmlElement
private Boolean inventoryEnabled = false; private Boolean inventoryEnabled = false;
private String inventoryAlias = null; private String inventoryAlias = null;
// the names of the parameters which are stored in the inventory for this RD; // the names of the parameters which are stored in the inventory for this RD;
// //
private ArrayList<String> inventoryParamNames = new ArrayList<String>(); private ArrayList<String> inventoryParamNames = new ArrayList<String>();
// a map from the resource Constraints to a cache of the availableTimes and the // a map from the resource Constraints to a cache of the availableTimes and the
@ -245,7 +245,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
rscImplementation = rscDefn.rscImplementation; rscImplementation = rscDefn.rscImplementation;
setLocalizationFile( rscDefn.getLocalizationFile() ); setLocalizationFile( rscDefn.getLocalizationFile() );
inventoryAlias = null; inventoryAlias = null;
availTimesCache = new HashMap<Map<String,RequestConstraint>,DataTimesCacheEntry>(); availTimesCache = new HashMap<Map<String,RequestConstraint>,DataTimesCacheEntry>();
@ -298,6 +298,9 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
return prmsList; return prmsList;
} }
// TODO : Need to change this to return the constraint field instead of the
// generator parameter. Til then all parameters that generate
// a type or sub type must be the same name as the request constraint.
public String getRscTypeGenerator() { public String getRscTypeGenerator() {
return (rscTypeGenerator == null ? "" : rscTypeGenerator ); return (rscTypeGenerator == null ? "" : rscTypeGenerator );
} }
@ -606,18 +609,27 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
// //
// (most of the time the paramName and constraint name are the same except for // (most of the time the paramName and constraint name are the same except for
// GDFILE where the constraint is 'modelName') So for this case we need to // GDFILE where the constraint is 'modelName') So for this case we need to
// //
for( ResourceParamInfo prmInfo : rscImplParams.values() ) { for( ResourceParamInfo prmInfo : rscImplParams.values() ) {
// if this parameter is defined as a request constraint and
// if it has a non-wildcard value, then create a inventory constraint for it
//
if( prmInfo.getParamType() == ResourceParamType.REQUEST_CONSTRAINT ) { if( prmInfo.getParamType() == ResourceParamType.REQUEST_CONSTRAINT ) {
String prmName = prmInfo.getParamName(); String prmName = prmInfo.getParamName();
String cnstrName = prmInfo.getConstraintName(); String cnstrName = prmInfo.getConstraintName();
if( paramValues.containsKey( prmName ) ) { if( paramValues.containsKey( prmName ) ) {
String prmValue = paramValues.get( prmName ); // if the constraint value is a wildcard then don't add this
// to the list since it will fail in the case where the
inventoryConstraints.put( cnstrName, // db value is a null.
getConstraintFromParamValue( prmValue ) ); RequestConstraint reqConstr = getConstraintFromParamValue(
paramValues.get( prmName ) );
if( reqConstr != RequestConstraint.WILDCARD ) {
inventoryConstraints.put( cnstrName, reqConstr );
}
} }
// else { // else {
// 'LIKE' doesn't work for integers. Just leave this out. // 'LIKE' doesn't work for integers. Just leave this out.
@ -1018,6 +1030,10 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
NcInventoryRequestMsg reqMsg = NcInventoryRequestMsg.makeQueryRequest(); NcInventoryRequestMsg reqMsg = NcInventoryRequestMsg.makeQueryRequest();
reqMsg.setInventoryName( inventoryAlias ); reqMsg.setInventoryName( inventoryAlias );
reqMsg.setReqConstraintsMap( searchConstraints ); reqMsg.setReqConstraintsMap( searchConstraints );
// TODO : Need to change this to return the constraint field instead of the
// generator parameter. Til then all parameters that generate
// a type or sub type must be the same name as the request constraint.
String genType = getRscTypeGenerator(); String genType = getRscTypeGenerator();
String cnstrName = null; String cnstrName = null;
if ( genType != null ) { if ( genType != null ) {
@ -1068,7 +1084,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
public ArrayList<String> generatedSubTypesList() throws VizException { public ArrayList<String> generatedSubTypesList() throws VizException {
// Grids, Satellite, Radar, etc all are dynamically updated when new alert updates // Grids, Satellite, Radar, etc all are dynamically updated when new alert updates
// are received (when new data is ingested). PGEN doesn't have alert updates and so // are received (when new data is ingested). PGEN doesn't have alert updates and so
// we need to always check for new products. // we need to always check for new products.
if( isPgenResource() ) { if( isPgenResource() ) {
return getPgenProducts(); return getPgenProducts();
@ -1161,14 +1177,14 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
subType = queryResults[1] + "_native"; subType = queryResults[1] + "_native";
} else { } else {
subType = queryResults[1] + "_"+ // note that the 'km' here will make the code subType = queryResults[1] + "_"+ // note that the 'km' here will make the code
queryResults[2] + "km"; // to parse the subType non-generic so we might want to change it. queryResults[2] + "km"; // to parse the subType non-generic so we might want to change it.
} }
if( !generatedSubTypesList.contains( subType ) ) { if( !generatedSubTypesList.contains( subType ) ) {
generatedSubTypesList.add( subType ); generatedSubTypesList.add( subType );
} }
else out.println("subType already in the list?"); // shouldn't happen else out.println("subType already in the list?"); // shouldn't happen
} }
} }
return generatedSubTypesList; return generatedSubTypesList;
@ -1277,7 +1293,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
else if( availTimesCache.size() > 4 ) { else if( availTimesCache.size() > 4 ) {
availTimesCache.get( resourceConstraints ).addToUriCatalog(); availTimesCache.get( resourceConstraints ).addToUriCatalog();
} }
} }
// Return the latest time or if there either is NoData or if the time hasn't been // Return the latest time or if there either is NoData or if the time hasn't been
// set yet, return a Null DataTime. // set yet, return a Null DataTime.
@ -1285,9 +1301,9 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
public DataTime getLatestDataTime( ResourceName rscName ) throws VizException { public DataTime getLatestDataTime( ResourceName rscName ) throws VizException {
if( !isRequestable() ) { if( !isRequestable() ) {
return null; return null;
} }
Map<String, RequestConstraint> resourceConstraints = Map<String, RequestConstraint> resourceConstraints =
getInventoryConstraintsFromParameters( getInventoryConstraintsFromParameters(
ResourceDefnsMngr.getInstance().getAllResourceParameters( rscName ) ); ResourceDefnsMngr.getInstance().getAllResourceParameters( rscName ) );
@ -1357,7 +1373,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
// if times are cached for these constraints, and if the times haven't expired, // if times are cached for these constraints, and if the times haven't expired,
// then just return the cached times. // then just return the cached times.
// //
if( availTimesCache.containsKey( resourceConstraints ) ) { if( availTimesCache.containsKey( resourceConstraints ) ) {
DataTimesCacheEntry cachedTimesEntry = availTimesCache.get( resourceConstraints ); DataTimesCacheEntry cachedTimesEntry = availTimesCache.get( resourceConstraints );
@ -1365,7 +1381,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
if( availTimes != null ) { if( availTimes != null ) {
return availTimes; return availTimes;
} }
// (Do not remove the entry in the cache since this may be being refreshed // (Do not remove the entry in the cache since this may be being refreshed
// with the latestTimes from the URICatalog. // with the latestTimes from the URICatalog.
} }
@ -1382,7 +1398,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
// //
if( inventoryEnabled ) { if( inventoryEnabled ) {
NcInventoryRequestMsg reqMsg = NcInventoryRequestMsg.makeQueryRequest(); NcInventoryRequestMsg reqMsg = NcInventoryRequestMsg.makeQueryRequest();
reqMsg.setInventoryName( inventoryAlias ); reqMsg.setInventoryName( inventoryAlias );
reqMsg.setRequestedParam( "dataTime" ); reqMsg.setRequestedParam( "dataTime" );
reqMsg.setReqConstraintsMap( reqMsg.setReqConstraintsMap(
@ -1393,7 +1409,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
long t01 = System.currentTimeMillis(); long t01 = System.currentTimeMillis();
rslts = ThriftClient.sendRequest( reqMsg ); rslts = ThriftClient.sendRequest( reqMsg );
if( !(rslts instanceof String[]) ) { if( !(rslts instanceof String[]) ) {
out.println("Inventory Request Failed:"+rslts.toString() ); out.println("Inventory Request Failed:"+rslts.toString() );
@ -1425,7 +1441,7 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
} }
} }
else { // if the inventory is not enabled else { // if the inventory is not enabled
// //
LayerProperty property = new LayerProperty(); LayerProperty property = new LayerProperty();
property.setDesiredProduct( ResourceType.PLAN_VIEW ); property.setDesiredProduct( ResourceType.PLAN_VIEW );
@ -1577,8 +1593,8 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
if ( satRec.getResolution() == 0 && getSubTypeGenParamsList()[1].equals("resolution") ) { if ( satRec.getResolution() == 0 && getSubTypeGenParamsList()[1].equals("resolution") ) {
subType = satRec.getAreaName() + "_native"; subType = satRec.getAreaName() + "_native";
} else { } else {
subType = satRec.getAreaName() + "_" + subType = satRec.getAreaName() + "_" +
satRec.getResolution().toString() + "km"; satRec.getResolution().toString() + "km";
} }
attrSetKey = satRec.getImageType(); attrSetKey = satRec.getImageType();
} }
@ -1704,8 +1720,8 @@ public class ResourceDefinition implements ISerializableObject, IAlertObserver,
subType = subType+"_native"; subType = subType+"_native";
} }
else { else {
subType = subType+"_"+uriAttrValues.get( genPrm2 ).toString() + "km"; subType = subType+"_"+uriAttrValues.get( genPrm2 ).toString() + "km";
} }
} }
if( subType != null && if( subType != null &&

View file

@ -35,7 +35,7 @@
<constraint constraintValue="${pluginName}" constraintType="EQUALS" /> <constraint constraintValue="${pluginName}" constraintType="EQUALS" />
</mapping> </mapping>
<!-- <mapping key="prodName"> <!-- <mapping key="prodName">
<constraint constraintValue="${prodName}" constraintType="EQUALS" /> <constraint constraintValue="$ { prodName}" constraintType="EQUALS" />
</mapping> </mapping>
--> -->
</metadataMap> </metadataMap>

View file

@ -66,4 +66,6 @@ Import-Package: com.raytheon.edex.meteoLib,
com.sun.jna, com.sun.jna,
com.sun.jna.ptr, com.sun.jna.ptr,
gov.noaa.nws.ncep.common.log.logger, gov.noaa.nws.ncep.common.log.logger,
gov.noaa.nws.ncep.viz.gempak.grid.inv gov.noaa.nws.ncep.viz.gempak.grid.inv,
gov.noaa.nws.ncep.viz.gempak.grid.mapper,
gov.noaa.nws.ncep.viz.gempak.grid.units

View file

@ -1,7 +1,3 @@
gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcgridResourceData gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcgridResourceData
gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcEnsembleResourceData gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcEnsembleResourceData
gov.noaa.nws.ncep.edex.common.dataRecords.NcFloatDataRecord gov.noaa.nws.ncep.edex.common.dataRecords.NcFloatDataRecord
gov.noaa.nws.ncep.viz.rsc.ncgrid.util.GempakGridParmInfo
gov.noaa.nws.ncep.viz.rsc.ncgrid.util.GempakGridParmInfoSet
gov.noaa.nws.ncep.viz.rsc.ncgrid.util.GempakGridVcrdInfo
gov.noaa.nws.ncep.viz.rsc.ncgrid.util.GempakGridVcrdInfoSet

View file

@ -62,8 +62,9 @@ import gov.noaa.nws.ncep.common.log.logger.NcepLogger;
import gov.noaa.nws.ncep.common.log.logger.NcepLoggerManager; import gov.noaa.nws.ncep.common.log.logger.NcepLoggerManager;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcEnsembleResourceData; import gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcEnsembleResourceData;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcgridResourceData; import gov.noaa.nws.ncep.viz.rsc.ncgrid.rsc.NcgridResourceData;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.util.GempakGridParmInfoLookup; import gov.noaa.nws.ncep.viz.gempak.grid.mapper.GridMapper;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.util.GempakGridVcrdInfoLookup; import gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridParmInfoLookup;
import gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridVcrdInfoLookup;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.customCoverage.CustomLatLonCoverage; import gov.noaa.nws.ncep.viz.rsc.ncgrid.customCoverage.CustomLatLonCoverage;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.customCoverage.CustomLambertConformalCoverage; import gov.noaa.nws.ncep.viz.rsc.ncgrid.customCoverage.CustomLambertConformalCoverage;
import gov.noaa.nws.ncep.viz.rsc.ncgrid.customCoverage.CustomMercatorCoverage; import gov.noaa.nws.ncep.viz.rsc.ncgrid.customCoverage.CustomMercatorCoverage;
@ -141,9 +142,9 @@ public class Dgdriv {
private static Connector conn; private static Connector conn;
private NcgridDataCache cacheData; private NcgridDataCache cacheData;
private static NcgribLogger ncgribLogger = NcgribLogger.getInstance();; private static NcgribLogger ncgribLogger = NcgribLogger.getInstance();;
public static final int LLMXGD = 1000000; //Max # grid points public static final int LLMXGD = 1000000; //Max # grid points
/* /*
@ -329,7 +330,7 @@ public class Dgdriv {
byte [] prjbuf = new byte [BUFRLENGTH]; byte [] prjbuf = new byte [BUFRLENGTH];
boolean proces = true; boolean proces = true;
Map<Integer, String> hm = new HashMap<Integer, String>(); Map<Integer, String> hm = new HashMap<Integer, String>();
// private String eventName; // private String eventName;
DiagnosticsCallback diagCallback=null; DiagnosticsCallback diagCallback=null;
ReturnFileNameCallback flnmCallback = null; ReturnFileNameCallback flnmCallback = null;
ReturnCycleForecastHoursCallback fhrsCallback = null; ReturnCycleForecastHoursCallback fhrsCallback = null;
@ -413,15 +414,16 @@ public class Dgdriv {
long t1 = System.currentTimeMillis(); long t1 = System.currentTimeMillis();
int rDataSize = rData.length; int rDataSize = rData.length;
IntByReference datSize = new IntByReference(rDataSize); IntByReference datSize = new IntByReference(rDataSize);
logger.debug("retrieve data nx=" + nx +" ny=" + ny + " rDataSize=" + rDataSize);
// logger.info("retrieve data nx=" + nx +" ny=" + ny + " rDataSize=" + rDataSize);
if ( (nx*ny) == rDataSize ) { if ( (nx*ny) == rDataSize ) {
if ( addData ) { if ( addData ) {
cacheData.addGridData(dataURI, nx, ny, rData); cacheData.addGridData(dataURI, nx, ny, rData);
} }
if ( flip ) { if ( flip ) {
// logger.info ("*****flip grid data*****"); // logger.info ("*****flip grid data*****");
gd.gem.db_returndata(flipData(rData, nx, ny),datSize); gd.gem.db_returndata(flipData(rData, nx, ny),datSize);
} }
else else
gd.gem.db_returndata(checkMissingData(rData),datSize); gd.gem.db_returndata(checkMissingData(rData),datSize);
} }
@ -502,8 +504,8 @@ public class Dgdriv {
if ( ncgribLogger.enableDiagnosticLogs() ) { if ( ncgribLogger.enableDiagnosticLogs() ) {
logger.info("Rcv'd new subg:" + msg); logger.info("Rcv'd new subg:" + msg);
} }
createNewISpatialObj ( msg ); createNewISpatialObj ( msg );
return true; return true;
} }
} }
@ -815,7 +817,7 @@ public class Dgdriv {
} }
if ( flop ) { if ( flop ) {
// logger.info ("====flop grid data 1====="); // logger.info ("====flop grid data 1=====");
fds.setXdata(flopData(ugrid, igx.getValue(), igy.getValue())); fds.setXdata(flopData(ugrid, igx.getValue(), igy.getValue()));
} }
else else
fds.setXdata( revertGempakData2CAVE(ugrid) ); fds.setXdata( revertGempakData2CAVE(ugrid) );
@ -829,7 +831,7 @@ public class Dgdriv {
} }
if ( flop ) { if ( flop ) {
// logger.info ("====flop grid data ====="); // logger.info ("====flop grid data =====");
fds.setYdata(flopData(vgrid, igx.getValue(), igy.getValue())); fds.setYdata(flopData(vgrid, igx.getValue(), igy.getValue()));
} }
else else
fds.setYdata( revertGempakData2CAVE(vgrid) ); fds.setYdata( revertGempakData2CAVE(vgrid) );
@ -871,7 +873,7 @@ public class Dgdriv {
private void prepareGridDTInfo() { private void prepareGridDTInfo() {
String alias = this.gdfile; String alias = this.gdfile;
String path = "A2DB_GRID"; String path = "A2DB_GRID";
logger.debug("prepareGridDTInfo-- alias:" + alias + " gdfileOriginal:" + this.gdfileOriginal); logger.debug ("prepareGridDTInfo-- alias:" + alias + " gdfileOriginal:" + this.gdfileOriginal);
String template = this.gdfileOriginal + "_db"; String template = this.gdfileOriginal + "_db";
if ( this.gdfileOriginal.contains(":")) { if ( this.gdfileOriginal.contains(":")) {
template = this.gdfileOriginal.substring(0, this.gdfileOriginal.indexOf(":")) + "_db"; template = this.gdfileOriginal.substring(0, this.gdfileOriginal.indexOf(":")) + "_db";
@ -1327,7 +1329,7 @@ public class Dgdriv {
return outGridFlipped; return outGridFlipped;
} }
/* /*
* Changes the missing data value from * Changes the missing data value from
* CAVE -999999.0f to GEMPAK -9999.0f * CAVE -999999.0f to GEMPAK -9999.0f
@ -1388,7 +1390,7 @@ public class Dgdriv {
outGridFlopped[ii] = inGrid[ii]; outGridFlopped[ii] = inGrid[ii];
} }
} }
return outGridFlopped; return outGridFlopped;
} }
private String getEnsTimes () { private String getEnsTimes () {
@ -1474,12 +1476,12 @@ public class Dgdriv {
//setWorldWrapColumns (1); //setWorldWrapColumns (1);
//check its return value/exception and decide to update coverage or not //check its return value/exception and decide to update coverage or not
GridDataRetriever dataRetriever = new GridDataRetriever (dataURI); GridDataRetriever dataRetriever = new GridDataRetriever (dataURI);
boolean isWorldWrap = false; // boolean isWorldWrap = false;
try { // try {
isWorldWrap = dataRetriever.setWorldWrapColumns (1); // isWorldWrap = dataRetriever.setWorldWrapColumns (1);
} catch (GridCoverageException e) { // } catch (GridCoverageException e) {
//ignore setWorldWrapColumns exception. // //ignore setWorldWrapColumns exception.
} // }
try { try {
String gempakParm = cacheData.getGempakParam(dataURI); String gempakParm = cacheData.getGempakParam(dataURI);
if ( gempakParm != null ) { if ( gempakParm != null ) {
@ -1497,12 +1499,14 @@ public class Dgdriv {
t001 = System.currentTimeMillis(); t001 = System.currentTimeMillis();
FloatDataRecord dataRecord = dataRetriever.getDataRecord(); FloatDataRecord dataRecord = dataRetriever.getDataRecord();
float[] data = dataRecord.getFloatData(); float[] data = dataRecord.getFloatData();
if ( isWorldWrap ) { // if ( isWorldWrap ) {
setSubgSpatialObj ( (ISpatialObject)dataRetriever.getCoverage()); // if ( ncgribLogger.enableDiagnosticLogs() )
} // logger.info("===new coverage nx:"+dataRetriever.getCoverage().getNx() + " ny:"+dataRetriever.getCoverage().getNy());
// setSubgSpatialObj ( (ISpatialObject)dataRetriever.getCoverage());
// }
t002 = System.currentTimeMillis(); t002 = System.currentTimeMillis();
if ( ncgribLogger.enableDiagnosticLogs() ) if ( ncgribLogger.enableDiagnosticLogs() )
logger.info("***Reading " + dataURI + " from hdf5 took: " + (t002-t001)); logger.info("***Reading " + dataURI + " from hdf5 took: " + (t002-t001) + ", return size:" + data.length);
return data; return data;
} catch (StorageException s) { } catch (StorageException s) {
if ( ncgribLogger.enableDiagnosticLogs() ) if ( ncgribLogger.enableDiagnosticLogs() )
@ -1738,7 +1742,7 @@ public class Dgdriv {
request.addRequestField(GridDBConstants.FORECAST_TIME_QUERY); request.addRequestField(GridDBConstants.FORECAST_TIME_QUERY);
request.setDistinct(true); request.setDistinct(true);
request.setConstraints(rcMap); request.setConstraints(rcMap);
long t0 = System.currentTimeMillis(); long t0 = System.currentTimeMillis();
String retFileNames = ""; String retFileNames = "";
try { try {
DbQueryResponse response = (DbQueryResponse) ThriftClient DbQueryResponse response = (DbQueryResponse) ThriftClient
@ -1767,7 +1771,7 @@ public class Dgdriv {
if ( retFileNames.length() > 0 ) retFileNames = retFileNames + "|"; if ( retFileNames.length() > 0 ) retFileNames = retFileNames + "|";
retFileNames = retFileNames + prefix+dt + hh + "f" + forecastHourFormat.format(fhr); retFileNames = retFileNames + prefix+dt + hh + "f" + forecastHourFormat.format(fhr);
} }
} }
} catch (VizException e) { } catch (VizException e) {
@ -1824,7 +1828,7 @@ public class Dgdriv {
else { else {
if ( gridRscData.getEnsembelMember() != null ) { if ( gridRscData.getEnsembelMember() != null ) {
rcMap.put( GridDBConstants.ENSEMBLE_ID_QUERY, new RequestConstraint( parmList[1] ) ); rcMap.put( GridDBConstants.ENSEMBLE_ID_QUERY, new RequestConstraint( parmList[1] ) );
} }
else { else {
rcMap.put( GridDBConstants.EVENT_NAME_QUERY, new RequestConstraint( parmList[1] ) ); rcMap.put( GridDBConstants.EVENT_NAME_QUERY, new RequestConstraint( parmList[1] ) );
} }
@ -1934,7 +1938,7 @@ public class Dgdriv {
if ( ncgribLogger.enableDiagnosticLogs() ) { if ( ncgribLogger.enableDiagnosticLogs() ) {
long t00 = System.currentTimeMillis(); long t00 = System.currentTimeMillis();
logger.info("++++ getDataURIFromAssembler for("+parameters+") from cache took: " + (t00-t0)); logger.info("++++ getDataURIFromAssembler for("+parameters+") from cache took: " + (t00-t0));
} }
return datauri; return datauri;
} }
Map<String, RequestConstraint> rcMap = getRequestConstraint (parameters); Map<String, RequestConstraint> rcMap = getRequestConstraint (parameters);
@ -1948,7 +1952,7 @@ public class Dgdriv {
DbQueryRequest request = new DbQueryRequest(); DbQueryRequest request = new DbQueryRequest();
request.addRequestField(GridDBConstants.DATA_URI_QUERY); request.addRequestField(GridDBConstants.DATA_URI_QUERY);
request.setConstraints(rcMap); request.setConstraints(rcMap);
DbQueryResponse response = (DbQueryResponse) ThriftClient DbQueryResponse response = (DbQueryResponse) ThriftClient
.sendRequest(request); .sendRequest(request);
// extract list of results // extract list of results
@ -2109,8 +2113,8 @@ public class Dgdriv {
if (spatialObj != null && spatialObj instanceof ISpatialObject) { if (spatialObj != null && spatialObj instanceof ISpatialObject) {
cov = (ISpatialObject) spatialObj; cov = (ISpatialObject) spatialObj;
} }
} }
if ( cov != null ) { if ( cov != null ) {
navStr = getGridNavigationContent ( cov); navStr = getGridNavigationContent ( cov);
} }
@ -2190,6 +2194,7 @@ public class Dgdriv {
} }
qAssembler.setParameterAbbreviation(parmList[2]); qAssembler.setParameterAbbreviation(parmList[2]);
qAssembler.setMasterLevelName (parmList[3]); qAssembler.setMasterLevelName (parmList[3]);
// qAssembler.setMasterLevelName ("MB");
String ll1 = null, ll2 = null; String ll1 = null, ll2 = null;
if ( parmList[4].contains(":")) { if ( parmList[4].contains(":")) {
@ -2219,7 +2224,7 @@ public class Dgdriv {
qAssembler.setLevelTwoValue(level2); qAssembler.setLevelTwoValue(level2);
} }
else { else {
qAssembler.setLevelTwoValue(-9999.0); qAssembler.setLevelTwoValue(-999999.0);
} }
qAssembler.setLevelUnits(gempakVcordInfo.getVcrdUnit(parmList[3])); qAssembler.setLevelUnits(gempakVcordInfo.getVcrdUnit(parmList[3]));
@ -2240,6 +2245,9 @@ public class Dgdriv {
rcMap.put(GridDBConstants.REF_TIME_QUERY, new RequestConstraint(refTime)); rcMap.put(GridDBConstants.REF_TIME_QUERY, new RequestConstraint(refTime));
rcMap.put(GridDBConstants.FORECAST_TIME_QUERY, new RequestConstraint(fcstTime)); rcMap.put(GridDBConstants.FORECAST_TIME_QUERY, new RequestConstraint(fcstTime));
if ( ncgribLogger.enableDiagnosticLogs() ) {
logger.info ("exit getRequestConstraint - rcMap:"+ rcMap.toString());
}
return rcMap; return rcMap;
} }
} }

View file

@ -4,5 +4,5 @@
<sourceType>BOUNDED_AREA</sourceType> <sourceType>BOUNDED_AREA</sourceType>
<dbName>ncep</dbName> <dbName>ncep</dbName>
<dbTableName>bounds.mzcntybnds</dbTableName> <dbTableName>bounds.mzcntybnds</dbTableName>
<dbFieldName>area</dbFieldName> <dbFieldName>name</dbFieldName>
</LocatorDataSource> </LocatorDataSource>

View file

@ -4,5 +4,5 @@
<sourceType>BOUNDED_AREA</sourceType> <sourceType>BOUNDED_AREA</sourceType>
<dbName>ncep</dbName> <dbName>ncep</dbName>
<dbTableName>bounds.statebnds</dbTableName> <dbTableName>bounds.statebnds</dbTableName>
<dbFieldName>area</dbFieldName> <dbFieldName>name</dbFieldName>
</LocatorDataSource> </LocatorDataSource>

View file

@ -4,5 +4,5 @@
<sourceType>BOUNDED_AREA</sourceType> <sourceType>BOUNDED_AREA</sourceType>
<dbName>ncep</dbName> <dbName>ncep</dbName>
<dbTableName>bounds.statebnds</dbTableName> <dbTableName>bounds.statebnds</dbTableName>
<dbFieldName>area</dbFieldName> <dbFieldName>name</dbFieldName>
</LocatorDataSource> </LocatorDataSource>

View file

@ -4,5 +4,5 @@
<sourceType>BOUNDED_AREA</sourceType> <sourceType>BOUNDED_AREA</sourceType>
<dbName>ncep</dbName> <dbName>ncep</dbName>
<dbTableName>bounds.tzbnds</dbTableName> <dbTableName>bounds.tzbnds</dbTableName>
<dbFieldName>timezone</dbFieldName> <dbFieldName>time_zone</dbFieldName>
</LocatorDataSource> </LocatorDataSource>

View file

@ -28,6 +28,8 @@ Export-Package: gov.noaa.nws.ncep.viz.ui.perspectives;uses:="org.eclipse.ui,org.
Import-Package: com.raytheon.uf.viz.core.maps.display, Import-Package: com.raytheon.uf.viz.core.maps.display,
com.raytheon.viz.alerts.observers, com.raytheon.viz.alerts.observers,
gov.noaa.nws.ncep.viz.gempak.grid.inv, gov.noaa.nws.ncep.viz.gempak.grid.inv,
gov.noaa.nws.ncep.viz.gempak.grid.mapper,
gov.noaa.nws.ncep.viz.gempak.grid.units,
gov.noaa.nws.ncep.viz.resourceManager, gov.noaa.nws.ncep.viz.resourceManager,
gov.noaa.nws.ncep.viz.resources, gov.noaa.nws.ncep.viz.resources,
gov.noaa.nws.ncep.viz.rsc.ncgrid, gov.noaa.nws.ncep.viz.rsc.ncgrid,

View file

@ -5,6 +5,9 @@ import gov.noaa.nws.ncep.ui.pgen.controls.PgenFileNameDisplay;
import gov.noaa.nws.ncep.viz.common.AbstractNcEditor; import gov.noaa.nws.ncep.viz.common.AbstractNcEditor;
import gov.noaa.nws.ncep.viz.common.ui.NmapCommon; import gov.noaa.nws.ncep.viz.common.ui.NmapCommon;
import gov.noaa.nws.ncep.viz.gempak.grid.inv.NcGridInventory; import gov.noaa.nws.ncep.viz.gempak.grid.inv.NcGridInventory;
import gov.noaa.nws.ncep.viz.gempak.grid.mapper.GridMapper;
import gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridParmInfoLookup;
import gov.noaa.nws.ncep.viz.gempak.grid.units.GempakGridVcrdInfoLookup;
import gov.noaa.nws.ncep.viz.localization.NcPathManager; import gov.noaa.nws.ncep.viz.localization.NcPathManager;
import gov.noaa.nws.ncep.viz.resourceManager.ui.ResourceManagerDialog; import gov.noaa.nws.ncep.viz.resourceManager.ui.ResourceManagerDialog;
import gov.noaa.nws.ncep.viz.resources.manager.RbdBundle; import gov.noaa.nws.ncep.viz.resources.manager.RbdBundle;
@ -83,34 +86,34 @@ import com.vividsolutions.jts.geom.Coordinate;
* 06/01/2012 #815 G. Hull Create DESK Level for Localization. * 06/01/2012 #815 G. Hull Create DESK Level for Localization.
* 06/13/2012 #817 G. Hull for -spf arg, create one rbdLoader and call initTimeline on the rbds. * 06/13/2012 #817 G. Hull for -spf arg, create one rbdLoader and call initTimeline on the rbds.
* 12/12/1212 #630 G. Hull rm check for suspendZoom in displayChangeLister. code moved to refreshGUIElements * 12/12/1212 #630 G. Hull rm check for suspendZoom in displayChangeLister. code moved to refreshGUIElements
* *
* </pre> * </pre>
* *
* @author * @author
* @version 1.0 * @version 1.0
*/ */
public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager { public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager {
/** The National Centers Perspective Class */ /** The National Centers Perspective Class */
// put this in common to avoid dependencies on this project // put this in common to avoid dependencies on this project
public static final String NC_PERSPECTIVE = NmapCommon.NatlCntrsPerspectiveID; public static final String NC_PERSPECTIVE = NmapCommon.NatlCntrsPerspectiveID;
private boolean gridInventoryInited = false; private boolean gridInventoryInited = false;
private IVizEditorChangedListener displayChangeListener=null; private IVizEditorChangedListener displayChangeListener = null;
@Override @Override
protected void open() { protected void open() {
// force DESK level to be created. // force DESK level to be created.
NcPathManager.getInstance(); NcPathManager.getInstance();
if ( !gridInventoryInited ) { if (!gridInventoryInited) {
long t0 = System.currentTimeMillis(); long t0 = System.currentTimeMillis();
try { try {
NcGridInventory.getInstance().initInventory(false); // don't NcGridInventory.getInstance().initInventory(false); // don't
// re-init // re-init
// NcGridInventory.getInstance().dumpNcGribInventory(); // NcGridInventory.getInstance().dumpNcGribInventory();
} catch (final VizException e) { } catch (final VizException e) {
VizApp.runAsync(new Runnable() { VizApp.runAsync(new Runnable() {
@Override @Override
@ -125,26 +128,28 @@ public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager {
}); });
// System.out.println("NcGridInventory failed : "+e.getMessage() // System.out.println("NcGridInventory failed : "+e.getMessage()
// ); // );
} }
GridMapper.GridMapperInit();
long t1 = System.currentTimeMillis(); GempakGridParmInfoLookup.getInstance();
System.out.println("NcGridInventory Init took: " + (t1-t0)); GempakGridVcrdInfoLookup.getInstance();
gridInventoryInited = true; long t1 = System.currentTimeMillis();
} System.out.println("NcGridInventory Init took: " + (t1 - t0));
gridInventoryInited = true;
}
displayChangeListener = new IVizEditorChangedListener() { displayChangeListener = new IVizEditorChangedListener() {
@Override @Override
public void editorChanged(IDisplayPaneContainer container) { public void editorChanged(IDisplayPaneContainer container) {
if(container==null) if(container==null)
return; return;
if( container instanceof AbstractNcEditor ) { if (container instanceof AbstractNcEditor) {
((AbstractNcEditor)container).refreshGUIElements(); ((AbstractNcEditor) container).refreshGUIElements();
} }
} }
}; };
// Add an observer to process the dataURI Notification msgs from edex. // Add an observer to process the dataURI Notification msgs from edex.
// //
ProductAlertObserver.addObserver(null, new NcAutoUpdater()); ProductAlertObserver.addObserver(null, new NcAutoUpdater());
// NatlCntrs uses a different equation to compute the Temperature values // NatlCntrs uses a different equation to compute the Temperature values
@ -153,137 +158,137 @@ public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager {
// by satellite // by satellite
// images and will create our Units and UnitConverter class to do the // images and will create our Units and UnitConverter class to do the
// conversion. // conversion.
// //
NcSatelliteUnits.register(); NcSatelliteUnits.register();
// Force the RBDs to read from localization to save time // Force the RBDs to read from localization to save time
// bringing up the RBD manager // bringing up the RBD manager
// //
SpfsManager.getInstance(); SpfsManager.getInstance();
// Initialize the NcInventory. This cache is stored on the server side // Initialize the NcInventory. This cache is stored on the server side
// and will only // and will only
// need initialization for the first instance of cave. // need initialization for the first instance of cave.
try { try {
ResourceDefnsMngr.getInstance(); // force reading in of the resource ResourceDefnsMngr.getInstance(); // force reading in of the resource
// definitions // definitions
if (!ResourceDefnsMngr.getInstance().getBadResourceDefnsErrors() if (!ResourceDefnsMngr.getInstance().getBadResourceDefnsErrors()
.isEmpty()) { .isEmpty()) {
final StringBuffer errBuf = new StringBuffer( final StringBuffer errBuf = new StringBuffer(
"There were errors creating the following Resource Defintions:\n\n"); "There were errors creating the following Resource Defintions:\n\n");
int numErrs = 0; int numErrs = 0;
for (VizException vizex : ResourceDefnsMngr.getInstance() for (VizException vizex : ResourceDefnsMngr.getInstance()
.getBadResourceDefnsErrors()) { .getBadResourceDefnsErrors()) {
errBuf.append( " -- "+ vizex.getMessage()+"\n" ); errBuf.append(" -- " + vizex.getMessage() + "\n");
if( ++numErrs > 20 ) { if (++numErrs > 20) {
errBuf.append( " .....and more...."); errBuf.append(" .....and more....");
} }
} }
VizApp.runAsync(new Runnable() { VizApp.runAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
MessageDialog errDlg = new MessageDialog( MessageDialog errDlg = new MessageDialog(
perspectiveWindow.getShell(), "Error", null, perspectiveWindow.getShell(), "Error", null,
errBuf.toString(), MessageDialog.ERROR, errBuf.toString(), MessageDialog.ERROR,
new String[] { "OK" }, 0); new String[] { "OK" }, 0);
errDlg.open(); errDlg.open();
} }
}); });
} }
// ResourceDefnsMngr.getInstance().createInventory(); // ResourceDefnsMngr.getInstance().createInventory();
} catch( VizException el ) { } catch (VizException el) {
MessageDialog errDlg = new MessageDialog( MessageDialog errDlg = new MessageDialog(
perspectiveWindow.getShell(), "Error", null, perspectiveWindow.getShell(), "Error", null,
"Error Initializing NcInventory:\n\n"+el.getMessage(), "Error Initializing NcInventory:\n\n" + el.getMessage(),
MessageDialog.ERROR, new String[]{"OK"}, 0); MessageDialog.ERROR, new String[] { "OK" }, 0);
errDlg.open(); errDlg.open();
} }
// Load either the default RBD or RBDs in the command line spf // Load either the default RBD or RBDs in the command line spf
// //
List<RbdBundle> rbdsToLoad = new ArrayList<RbdBundle>(); List<RbdBundle> rbdsToLoad = new ArrayList<RbdBundle>();
String spfName = ProgramArguments.getInstance().getString("-spf"); String spfName = ProgramArguments.getInstance().getString("-spf");
if( spfName != null && !spfName.isEmpty() ) { if (spfName != null && !spfName.isEmpty()) {
String[] grpAndSpf = spfName.split( File.separator ); String[] grpAndSpf = spfName.split(File.separator);
// the name of the spf should include a group name // the name of the spf should include a group name
// TODO : check that there is a group and if not use a default. // TODO : check that there is a group and if not use a default.
if( grpAndSpf.length != 2 ) { if (grpAndSpf.length != 2) {
System.out System.out
.println("The -spf argument is specified without an spf group (ex spfGroupName/spfName."); .println("The -spf argument is specified without an spf group (ex spfGroupName/spfName.");
// load the default rbd... // load the default rbd...
MessageDialog errDlg = new MessageDialog( MessageDialog errDlg = new MessageDialog(
perspectiveWindow.getShell(), perspectiveWindow.getShell(),
"Error", "Error",
null, null,
"The -spf arguement is missing an SPF group name.\nEx. \"SpfGroupName/SpfName\"", "The -spf arguement is missing an SPF group name.\nEx. \"SpfGroupName/SpfName\"",
MessageDialog.WARNING, new String[]{"OK"}, 0); MessageDialog.WARNING, new String[] { "OK" }, 0);
errDlg.open(); errDlg.open();
} else { } else {
try { try {
rbdsToLoad = SpfsManager.getInstance().getRbdsFromSpf( rbdsToLoad = SpfsManager.getInstance().getRbdsFromSpf(
grpAndSpf[0], grpAndSpf[1], true); // resolve Latest grpAndSpf[0], grpAndSpf[1], true); // resolve Latest
// Cycle times // Cycle times
} catch (VizException e) { } catch (VizException e) {
MessageDialog errDlg = new MessageDialog( MessageDialog errDlg = new MessageDialog(
perspectiveWindow.getShell(), "Error", null, perspectiveWindow.getShell(), "Error", null,
"The -spf arguement, " + spfName "The -spf arguement, " + spfName
+ " doen't exist\n", MessageDialog.WARNING, + " doen't exist\n", MessageDialog.WARNING,
new String[] { "OK" }, 0); new String[] { "OK" }, 0);
errDlg.open(); errDlg.open();
} }
} }
} }
if( rbdsToLoad.isEmpty() ) { if (rbdsToLoad.isEmpty()) {
try { try {
RbdBundle dfltRbd = RbdBundle.getDefaultRBD(); RbdBundle dfltRbd = RbdBundle.getDefaultRBD();
rbdsToLoad.add( dfltRbd ); rbdsToLoad.add(dfltRbd);
} catch (Exception ve) { } catch (Exception ve) {
System.out.println("Could not load rbd: " + ve.getMessage()); System.out.println("Could not load rbd: " + ve.getMessage());
ve.printStackTrace(); ve.printStackTrace();
} }
} }
//start data provider before creating ncmapeditor
StaticDataProvider.start();
ResourceBndlLoader rbdLoader = new ResourceBndlLoader( "Loading SPF: " ); // start data provider before creating ncmapeditor
StaticDataProvider.start();
// loop thru the rbds and load them into a new editor. ResourceBndlLoader rbdLoader = new ResourceBndlLoader("Loading SPF: ");
for( RbdBundle rbd: rbdsToLoad ) {
rbd.initTimeline(); // loop thru the rbds and load them into a new editor.
for (RbdBundle rbd : rbdsToLoad) {
rbd.initTimeline();
NCMapEditor editor = NmapUiUtils.createNatlCntrsEditor(rbd NCMapEditor editor = NmapUiUtils.createNatlCntrsEditor(rbd
.getRbdName()); .getRbdName());
rbdLoader.addRBD( rbd, editor );
}
VizApp.runAsync( rbdLoader ); rbdLoader.addRBD(rbd, editor);
} }
@Override VizApp.runAsync(rbdLoader);
}
@Override
public void activate() { public void activate() {
super.activate(); super.activate();
// add an EditorChangedListener
VizWorkbenchManager.getInstance().addListener( displayChangeListener );
// Experiment. // add an EditorChangedListener
// statusLine.setErrorMessage("Status Line ERROR MSG B"); VizWorkbenchManager.getInstance().addListener(displayChangeListener);
// statusLine.setMessage("Status Line MESSAGE B");
// Experiment.
// statusLine.setErrorMessage("Status Line ERROR MSG B");
// statusLine.setMessage("Status Line MESSAGE B");
// relayout the shell since we added widgets // relayout the shell since we added widgets
perspectiveWindow.getShell().layout(true, true); perspectiveWindow.getShell().layout(true, true);
@ -291,42 +296,42 @@ public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager {
NcSatelliteUnits.register(); NcSatelliteUnits.register();
} }
@Override @Override
public void deactivate() { public void deactivate() {
super.deactivate(); super.deactivate();
VizWorkbenchManager.getInstance().removeListener( displayChangeListener ); VizWorkbenchManager.getInstance().removeListener(displayChangeListener);
SatelliteUnits.register(); SatelliteUnits.register();
// would rather do this another way, preferably by having // would rather do this another way, preferably by having
// ResourceManagerDialog extend CaveSWTDialog (do this later) or // ResourceManagerDialog extend CaveSWTDialog (do this later) or
// by implementing a perspective closed listener (cyclical dependency // by implementing a perspective closed listener (cyclical dependency
// problem) // problem)
ResourceManagerDialog.close(); ResourceManagerDialog.close();
} }
@Override @Override
protected List<ContributionItem> getStatusLineItems() { protected List<ContributionItem> getStatusLineItems() {
List<ContributionItem> stsLineDisplays = new ArrayList<ContributionItem>(); List<ContributionItem> stsLineDisplays = new ArrayList<ContributionItem>();
// in reverse order // in reverse order
stsLineDisplays.add( new FadeDisplay() ); stsLineDisplays.add(new FadeDisplay());
stsLineDisplays.add( PgenFileNameDisplay.getInstance() ); stsLineDisplays.add(PgenFileNameDisplay.getInstance());
stsLineDisplays.add( FrameDataDisplay.createInstance() ); stsLineDisplays.add(FrameDataDisplay.createInstance());
return stsLineDisplays; return stsLineDisplays;
} }
@Override @Override
public void close() { public void close() {
super.close(); super.close();
VizWorkbenchManager.getInstance().removeListener( displayChangeListener ); VizWorkbenchManager.getInstance().removeListener(displayChangeListener);
displayChangeListener = null; displayChangeListener = null;
ResourceManagerDialog.close(); ResourceManagerDialog.close();
} }
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
@ -337,7 +342,7 @@ public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager {
@Override @Override
public IInputHandler[] getPerspectiveInputHandlers( public IInputHandler[] getPerspectiveInputHandlers(
final AbstractEditor editor) { final AbstractEditor editor) {
// currently only implementing handleMouseWheel which is now done below. // currently only implementing handleMouseWheel which is now done below.
IInputHandler[] superHandlers = super IInputHandler[] superHandlers = super
.getPerspectiveInputHandlers(editor); .getPerspectiveInputHandlers(editor);
@ -345,43 +350,43 @@ public class NCPerspectiveManager extends AbstractCAVEPerspectiveManager {
// abstractEditors handlers // abstractEditors handlers
// (this won't last long since the perspective will remove/save off the // (this won't last long since the perspective will remove/save off the
// editors. // editors.
if( !(editor instanceof NCMapEditor ) ) { if (!(editor instanceof NCMapEditor)) {
return superHandlers; return superHandlers;
} }
// No-Ops for doubleClick, keyUp/Down, mouseDown, mouseHover and mouseUp // No-Ops for doubleClick, keyUp/Down, mouseDown, mouseHover and mouseUp
IInputHandler handler = new InputAdapter() { IInputHandler handler = new InputAdapter() {
private boolean isShiftDown = false; private boolean isShiftDown = false;
@Override @Override
public boolean handleMouseDownMove(int x, int y, int mouseButton) { public boolean handleMouseDownMove(int x, int y, int mouseButton) {
// Set mouse position // Set mouse position
Coordinate ll = editor.translateClick(x, y); Coordinate ll = editor.translateClick(x, y);
gov.noaa.nws.ncep.viz.common.CoorBean.getInstance().setCoor(ll); gov.noaa.nws.ncep.viz.common.CoorBean.getInstance().setCoor(ll);
return false; return false;
} }
@Override @Override
public boolean handleMouseMove(int x, int y) { public boolean handleMouseMove(int x, int y) {
// Set mouse position // Set mouse position
Coordinate ll = ((NCMapEditor)editor).translateClick( x, y); Coordinate ll = ((NCMapEditor) editor).translateClick(x, y);
gov.noaa.nws.ncep.viz.common.CoorBean.getInstance().setCoor(ll); gov.noaa.nws.ncep.viz.common.CoorBean.getInstance().setCoor(ll);
return false; return false;
} }
private void toggleVisibility(ResourcePair rp) { private void toggleVisibility(ResourcePair rp) {
AbstractVizResource<?, ?> rsc = rp.getResource(); AbstractVizResource<?, ?> rsc = rp.getResource();
if (rsc != null) { if (rsc != null) {
rp.getProperties().setVisible( rp.getProperties().setVisible(
!rp.getProperties().isVisible()); !rp.getProperties().isVisible());
} }
} }
}; };
ArrayList<IInputHandler> handlers = new ArrayList<IInputHandler>(); ArrayList<IInputHandler> handlers = new ArrayList<IInputHandler>();
// handlers.addAll(Arrays.asList(superHandlers)); // handlers.addAll(Arrays.asList(superHandlers));
handlers.add(handler); handlers.add(handler);
return handlers.toArray(new IInputHandler[handlers.size()]); return handlers.toArray(new IInputHandler[handlers.size()]);
} }