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
[formerly14f23d4227
] [formerlya16ac7819c
] [formerly6c6b53679b
[formerlya16ac7819c
[formerly 873c1773504d6dd9421b92f6193c32e477e4533c]]] Former-commit-id:6c6b53679b
Former-commit-id: 5a2f1703799bcf7b130380bb73001e518a88ee6d [formerly28ddc9bad8
] Former-commit-id:48a0ffda4d
This commit is contained in:
commit
63b36d8670
70 changed files with 1922 additions and 509 deletions
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
source.. = src/
|
source.. = src/
|
||||||
output.. = bin/
|
output.. = bin/
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.
|
.,\
|
||||||
|
localization/
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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}" />
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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())) {
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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.
|
||||||
*
|
*
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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), "" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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: "
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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){
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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
|
||||||
|
|
|
@ -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
|
|
@ -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>
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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 ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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 &&
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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()]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue