Merge branch 'omaha_13.5.2' (13.5.2-2) into development
Conflicts: cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/DPD/IR2.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/FYC/IR.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/FYC/VIS.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/IR13.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_11.03.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_14.06.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_3.98.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_4.45.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_6.51.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_7.02.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_7.43.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_VIS.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_DMSP/IR.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_DMSP/VIS.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_DMSP/WV.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES12/default.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/IR.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/IR13.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_11.03.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_14.06.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_3.98.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_4.45.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_6.51.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_7.02.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_7.43.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/SND_VIS.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/VIS.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/WV.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GINI_GOES14/default.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GMS/IR.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GMS/WV.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GOES10/WV.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GOES14/IR.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GOES14/IR2.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GOES14/VIS.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/GOES14/WV.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/Global/IR.attr cave/build/static/common/cave/etc/ncep/ResourceDefns/SATELLITE/Global/WV.attr cave/com.raytheon.uf.viz.core/src/com/raytheon/uf/viz/core/drawables/AbstractAWTFont.java cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/rsc/displays/AbstractGriddedDisplay.java cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/rsc/general/GeneralGridData.java cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/RemapGrid.java edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/jaxb/SerializationContextFactory.java edexOsgi/com.raytheon.uf.edex.wfs/com.raytheon.uf.edex.wfs.ecl msi/VizLauncher/VizLauncher.suo msi/VizLauncher/VizLauncher/com/raytheon/viz/launcher/process/AbstractProcessLauncher.cs msi/build/A2Staging/VisualStudio/VizLauncher.exe msi/build/A2Staging/VisualStudio/_DELETE_ME_ ncep/gov.noaa.nws.ncep.common.dataplugin.aww/src/gov/noaa/nws/ncep/common/dataplugin/aww/AwwRecord.java ncep/gov.noaa.nws.ncep.common.dataplugin.geomag/src/gov/noaa/nws/ncep/common/dataplugin/geomag/GeoMagRecord.java ncep/gov.noaa.nws.ncep.common.dataplugin.gpd/gov.noaa.nws.ncep.common.dataplugin.gpd.ecl ncep/gov.noaa.nws.ncep.edex.plugin.aww/src/gov/noaa/nws/ncep/edex/plugin/aww/decoder/AwwDecoder.java ncep/gov.noaa.nws.ncep.edex.plugin.geomag/META-INF/MANIFEST.MF ncep/gov.noaa.nws.ncep.edex.plugin.geomag/src/gov/noaa/nws/ncep/edex/plugin/geomag/GeoMagDecoder.java ncep/gov.noaa.nws.ncep.edex.plugin.mcidas/src/gov/noaa/nws/ncep/edex/plugin/mcidas/decoder/McidasDecoder.java ncep/gov.noaa.nws.ncep.edex.plugin.stormtrack/src/gov/noaa/nws/ncep/edex/plugin/stormtrack/decoder/StormTrackDecoder.java ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/DPD/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/FYC/FYC.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/FYC/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/FYC/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/FYC/SW.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/FYC/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Composite/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/GINI_DMSP.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_DMSP/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/GINI_ERS-QuickSCAT-Scatterometer.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_ERS-QuickSCAT-Scatterometer/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/GINI_GMS.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GMS/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES11/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES12/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES13/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES15/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/GINI_GOES7.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES7/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/GINI_GOES8.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES8/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/GINI_GOES9.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_GOES9/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/GINI_JERS.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_JERS/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/GINI_METEOSAT.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_METEOSAT/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_Miscellaneous/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/GINI_NOAA16.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA16/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/GINI_NOAA17.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA17/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/GINI_NOAA18.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA18/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/GINI_NOAA19.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/RAIN_RATE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_NOAA19/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/CLOUD_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/DERIVED_CAPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/DERIVED_CONV_INH.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/DERIVED_LAND_SEA_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/DERIVED_VOLCANO_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/DERIVED_WINDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/DMPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/GRID_CLOUD_AMT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/GRID_CTOP_PRES_HGHT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/ICE_CONC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/ICE_EDGE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/ICE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/IMG_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/IMG_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/IMG_SRFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/IR13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/LOW_CLOUD_IMG.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/MDPI.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/NORMAL_TPW_PERCENT.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/POLAR_3.7u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/POLAR_3.9u.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/POLAR_IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/POLAR_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SCATTEROMETER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SFC_WETNESS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SFC_WIND_SPD.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_11.03.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_12.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_12.66.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_13.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_13.64.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_14.06.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_14.37.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_14.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_3.74.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_3.98.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_4.13.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_4.45.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_4.52.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_4.57.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_6.51.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_7.02.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_7.43.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_9.71.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_LIFTED_INDEX.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_PRECIP_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_SFC_SKIN_TEMP.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SND_VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SNOW_IND.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SNOW_WATER.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/SURFACE_TYPE.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GINI_POES-NPOESS/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GMS/GMS.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GMS/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GMS/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GMS/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GMS/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GMS/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/GOES10.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES10/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/GOES11.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES11/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES12/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES12/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES13/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES13/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES15/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES15/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES6/GOES6.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES6/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES6/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES6/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES7/GOES7.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES7/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES7/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES7/VISPC.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES7/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/GOES8.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES8/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/GOES9.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/IR2.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/IR4.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/GOES9/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/HRVIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/IR_12.0.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/IR_8.7.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/NIR_1.6.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/VIS_0.8.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT10/WV_7.3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT3/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT3/METEOSAT3.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT3/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT3/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT5/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT5/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT5/METEOSAT5.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT5/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT5/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT6/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT6/METEOSAT6.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT6/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT6/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT7/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT7/IR3.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT7/METEOSAT7.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT7/VIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT7/WV.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/HRVIS.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/IR.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/IR_12.0.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/IR_8.7.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/NIR_1.6.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/VIS_0.8.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/SATELLITE/METEOSAT9/WV_7.3.attr ncep/gov.noaa.nws.ncep.viz.rsc.ffa/META-INF/MANIFEST.MF ncep/gov.noaa.nws.ncep.viz.rsc.wtch/META-INF/MANIFEST.MF Former-commit-id: efae0435f1f12b8e90979a03da9a96a1e1cf600e
This commit is contained in:
commit
d855012cdb
1688 changed files with 40056 additions and 24898 deletions
|
@ -37,15 +37,12 @@ import org.geotools.coverage.grid.GeneralGridEnvelope;
|
|||
import org.geotools.coverage.grid.GeneralGridGeometry;
|
||||
import org.geotools.coverage.grid.GridGeometry2D;
|
||||
import org.geotools.geometry.GeneralEnvelope;
|
||||
import org.geotools.referencing.CRS;
|
||||
import org.geotools.referencing.operation.DefaultMathTransformFactory;
|
||||
import org.opengis.referencing.FactoryException;
|
||||
import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
||||
import org.opengis.referencing.crs.GeneralDerivedCRS;
|
||||
import org.opengis.referencing.datum.PixelInCell;
|
||||
import org.opengis.referencing.operation.MathTransform;
|
||||
import org.opengis.referencing.operation.TransformException;
|
||||
|
||||
import com.raytheon.uf.common.geospatial.TransformFactory;
|
||||
import com.raytheon.uf.common.serialization.adapters.GridGeometryAdapter;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
|
@ -718,18 +715,9 @@ public abstract class AbstractDescriptor extends ResourceGroup implements
|
|||
|
||||
protected void setupTransforms() throws Exception {
|
||||
GeneralGridGeometry gridGeometry = getGridGeometry();
|
||||
MathTransform worldToCRS = getWorldToCRSTransform(gridGeometry);
|
||||
if (worldToCRS != null) {
|
||||
MathTransform crsToPixel = gridGeometry.getGridToCRS(
|
||||
PixelInCell.CELL_CENTER).inverse();
|
||||
worldToPixel = new DefaultMathTransformFactory()
|
||||
.createConcatenatedTransform(worldToCRS, crsToPixel);
|
||||
pixelToWorld = worldToPixel.inverse();
|
||||
|
||||
} else {
|
||||
pixelToWorld = null;
|
||||
worldToPixel = null;
|
||||
}
|
||||
worldToPixel = TransformFactory.worldToGrid(gridGeometry,
|
||||
PixelInCell.CELL_CENTER);
|
||||
pixelToWorld = (worldToPixel != null ? worldToPixel.inverse() : null);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -869,28 +857,4 @@ public abstract class AbstractDescriptor extends ResourceGroup implements
|
|||
false), envelope);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the world to CRS transform used for {@link #worldToPixel(double[])}
|
||||
* and {@link #pixelToWorld(double[])}
|
||||
*
|
||||
* @param gridGeometry
|
||||
* @return The world to gridGeometry CRS transform or null if there is none
|
||||
*/
|
||||
public static MathTransform getWorldToCRSTransform(
|
||||
GeneralGridGeometry gridGeometry) {
|
||||
CoordinateReferenceSystem crs = gridGeometry.getEnvelope()
|
||||
.getCoordinateReferenceSystem();
|
||||
if (crs instanceof GeneralDerivedCRS) {
|
||||
GeneralDerivedCRS projCRS = (GeneralDerivedCRS) crs;
|
||||
CoordinateReferenceSystem worldCRS = projCRS.getBaseCRS();
|
||||
try {
|
||||
return CRS.findMathTransform(worldCRS, crs);
|
||||
} catch (FactoryException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error setting up Math Transforms,"
|
||||
+ " this descriptor may not work properly", e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,6 +42,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
import com.raytheon.uf.common.time.DataTime;
|
||||
import com.raytheon.uf.common.time.SimulatedTime;
|
||||
import com.raytheon.uf.viz.core.AbstractTimeMatcher;
|
||||
import com.raytheon.uf.viz.core.IDisplayPane;
|
||||
import com.raytheon.uf.viz.core.IDisplayPaneContainer;
|
||||
import com.raytheon.uf.viz.core.VizConstants;
|
||||
import com.raytheon.uf.viz.core.comm.PerspectiveSpecificLoadProperties;
|
||||
|
@ -229,8 +230,10 @@ public class D2DTimeMatcher extends AbstractTimeMatcher {
|
|||
@Override
|
||||
public void redoTimeMatching(IDescriptor descriptor) throws VizException {
|
||||
synchronized (this) {
|
||||
if (timeMatchBasis != null && ! validateTimeMatchBasis(descriptor.getResourceList()))
|
||||
timeMatchBasis = null;
|
||||
if (timeMatchBasis != null && timeMatchBasis.getDescriptor() == descriptor &&
|
||||
! validateTimeMatchBasis(descriptor)) {
|
||||
changeTimeMatchBasis(null);
|
||||
}
|
||||
if (timeMatchBasis != null) {
|
||||
IDescriptor tmDescriptor = timeMatchBasis.getDescriptor();
|
||||
if (tmDescriptor != null) {
|
||||
|
@ -1053,6 +1056,33 @@ public class D2DTimeMatcher extends AbstractTimeMatcher {
|
|||
configFactory.resetMultiload();
|
||||
}
|
||||
|
||||
private boolean validateTimeMatchBasis(IDescriptor descriptor ) {
|
||||
/*
|
||||
* If a resource is shared by multiple panels (this can be the case with
|
||||
* tools, at least), then it is necessary to search all of them as
|
||||
* resource.descriptor() may not contain resource. TODO: Don't allow
|
||||
* this condition to occur?
|
||||
*/
|
||||
IRenderableDisplay display = descriptor.getRenderableDisplay();
|
||||
IDisplayPaneContainer container = display != null ?
|
||||
display.getContainer() : null;
|
||||
if (container != null) {
|
||||
for (IDisplayPane pane : container.getDisplayPanes()) {
|
||||
IRenderableDisplay paneDisplay = pane.getRenderableDisplay();
|
||||
IDescriptor paneDescriptor = paneDisplay != null ?
|
||||
paneDisplay.getDescriptor() : null;
|
||||
if (paneDescriptor != null
|
||||
&& validateTimeMatchBasis(paneDescriptor
|
||||
.getResourceList())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return validateTimeMatchBasis(descriptor.getResourceList());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean validateTimeMatchBasis(ResourceList list) {
|
||||
for (ResourcePair rp : list) {
|
||||
AbstractVizResource<?, ?> rsc = rp.getResource();
|
||||
|
|
|
@ -57,15 +57,17 @@ import de.micromata.opengis.kml.v_2_2_0.Style;
|
|||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 1, 2012 bsteffen Initial creation
|
||||
* Jun 1, 2012 bsteffen Initial creation
|
||||
* Aug 27, 2013 #2287 randerso Removed 180 degree adjustment required by error
|
||||
* in Maputil.rotation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bsteffen
|
||||
* @version 1.0
|
||||
*/
|
||||
public class KmlPointImageExtension extends GraphicsExtension<KmlGraphicsTarget>
|
||||
implements IPointImageExtension {
|
||||
public class KmlPointImageExtension extends
|
||||
GraphicsExtension<KmlGraphicsTarget> implements IPointImageExtension {
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(KmlRasterImageExtension.class);
|
||||
|
||||
|
@ -113,7 +115,7 @@ public class KmlPointImageExtension extends GraphicsExtension<KmlGraphicsTarget>
|
|||
|
||||
IconStyle iconStyle = style.createAndSetIconStyle();
|
||||
iconStyle.setScale(options.getPlotIconScale());
|
||||
double heading = 180 + MapUtil.rotation(
|
||||
double heading = MapUtil.rotation(
|
||||
new com.vividsolutions.jts.geom.Coordinate(loc
|
||||
.getLongitude(), loc.getLatitude()),
|
||||
gridGeometry);
|
||||
|
|
|
@ -233,4 +233,11 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.common.dataplugin.gpd"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
|
|
@ -107,13 +107,6 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.ffa"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.ffg"
|
||||
download-size="0"
|
||||
|
@ -205,27 +198,6 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.svrl"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.warn"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.wcn"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.wcp"
|
||||
download-size="0"
|
||||
|
@ -233,13 +205,6 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.wstm"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.tools"
|
||||
download-size="0"
|
||||
|
@ -262,7 +227,7 @@
|
|||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.wou"
|
||||
id="gov.noaa.nws.ncep.viz.rsc.aww"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
|
@ -289,13 +254,6 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.wtch"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.rsc.ncradar"
|
||||
download-size="0"
|
||||
|
@ -356,4 +314,11 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.viz.timeseries"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
</feature>
|
||||
|
|
|
@ -79,6 +79,7 @@ import com.raytheon.uf.viz.core.style.VizStyleException;
|
|||
import com.raytheon.uf.viz.core.style.level.SingleLevel;
|
||||
import com.raytheon.viz.core.contours.rsc.displays.GriddedContourDisplay;
|
||||
import com.raytheon.viz.core.contours.rsc.displays.GriddedVectorDisplay;
|
||||
import com.raytheon.viz.core.contours.util.VectorGraphicsRenderableFactory;
|
||||
import com.raytheon.viz.core.drawables.ColorMapParameterFactory;
|
||||
import com.raytheon.viz.core.rsc.displays.GriddedImageDisplay;
|
||||
import com.raytheon.viz.core.rsc.displays.GriddedImageDisplay.GriddedImagePaintProperties;
|
||||
|
@ -93,8 +94,10 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Nov 5, 2009 randerso Initial creation
|
||||
* Jan 8, 2010 4205 jelkins add equals checking for OA resources
|
||||
* Nov 5, 2009 randerso Initial creation
|
||||
* Jan 8, 2010 4205 jelkins add equals checking for OA resources
|
||||
* Aug 27, 2013 2287 randerso Added new parameters to GriddedVectorDisplay
|
||||
* constructor
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -424,9 +427,10 @@ public class OAResource extends
|
|||
FloatBuffer mag = data;
|
||||
data.position(transformer.getNx() * transformer.getNy());
|
||||
FloatBuffer dir = data.slice();
|
||||
VectorGraphicsRenderableFactory factory = new VectorGraphicsRenderableFactory();
|
||||
GriddedVectorDisplay vector = new GriddedVectorDisplay(mag,
|
||||
dir, descriptor, transformer.getGridGeom(), 80,
|
||||
displayType);
|
||||
dir, descriptor, transformer.getGridGeom(), 80, 0.75,
|
||||
true, displayType, factory);
|
||||
|
||||
renderableMap.put(dataTime, vector);
|
||||
break;
|
||||
|
|
|
@ -55,6 +55,7 @@ import com.raytheon.viz.aviation.monitor.AvnPyUtil;
|
|||
* Nov 11, 2012 1298 rferrel Non-blocking dialog discovered problem
|
||||
* adding dispose listener when not on the
|
||||
* UI thread.
|
||||
* Aug 26, 2013 #2283 lvenable Cleaned up some synchronized code.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -200,7 +201,7 @@ public class PythonCacheGuidanceJob extends
|
|||
*
|
||||
* @param req
|
||||
*/
|
||||
private synchronized void waitAdd(CacheGuidanceRequest req) {
|
||||
private void waitAdd(CacheGuidanceRequest req) {
|
||||
synchronized (waitMonitor) {
|
||||
if (waitList.contains(req) == false) {
|
||||
waitList.add(req);
|
||||
|
@ -213,7 +214,7 @@ public class PythonCacheGuidanceJob extends
|
|||
*
|
||||
* @param req
|
||||
*/
|
||||
private synchronized void waitRemove(CacheGuidanceRequest req) {
|
||||
private void waitRemove(CacheGuidanceRequest req) {
|
||||
synchronized (waitMonitor) {
|
||||
waitList.remove(req);
|
||||
waitMonitor.notify();
|
||||
|
@ -286,11 +287,13 @@ public class PythonCacheGuidanceJob extends
|
|||
* - Unique tag
|
||||
* @return siteObj
|
||||
*/
|
||||
public synchronized String getSiteObj(String siteID, String tag) {
|
||||
public String getSiteObj(String siteID, String tag) {
|
||||
String siteObj = null;
|
||||
Map<String, String> siteObjs = siteObjMaps.get(siteID);
|
||||
if (siteObjs != null) {
|
||||
siteObj = siteObjs.get(tag);
|
||||
synchronized (siteObjMaps) {
|
||||
Map<String, String> siteObjs = siteObjMaps.get(siteID);
|
||||
if (siteObjs != null) {
|
||||
siteObj = siteObjs.get(tag);
|
||||
}
|
||||
}
|
||||
return siteObj;
|
||||
}
|
||||
|
@ -303,10 +306,12 @@ public class PythonCacheGuidanceJob extends
|
|||
* @param tag
|
||||
* - Unique tag
|
||||
*/
|
||||
private synchronized void clearSiteObj(String siteID, String tag) {
|
||||
private void clearSiteObj(String siteID, String tag) {
|
||||
Map<String, String> siteObjs = siteObjMaps.get(siteID);
|
||||
if (siteObjs != null) {
|
||||
siteObjs.remove(tag);
|
||||
synchronized (siteObjMaps) {
|
||||
if (siteObjs != null) {
|
||||
siteObjs.remove(tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -317,7 +322,7 @@ public class PythonCacheGuidanceJob extends
|
|||
* A map with key of stites an array of tags to clear for the
|
||||
* site
|
||||
*/
|
||||
public synchronized void clearSiteObjs(Map<String, ArrayList<String>> tags) {
|
||||
public void clearSiteObjs(Map<String, ArrayList<String>> tags) {
|
||||
for (Object s : tags.keySet().toArray()) {
|
||||
String siteID = s.toString();
|
||||
for (String tag : tags.get(siteID)) {
|
||||
|
@ -336,14 +341,15 @@ public class PythonCacheGuidanceJob extends
|
|||
* @param siteObj
|
||||
* - Pickle string to cache
|
||||
*/
|
||||
private synchronized void setSiteObj(String siteID, String tag,
|
||||
String siteObj) {
|
||||
Map<String, String> siteObjs = siteObjMaps.get(siteID);
|
||||
if (siteObjs == null) {
|
||||
siteObjs = new HashMap<String, String>();
|
||||
siteObjMaps.put(siteID, siteObjs);
|
||||
private void setSiteObj(String siteID, String tag, String siteObj) {
|
||||
synchronized (siteObjMaps) {
|
||||
Map<String, String> siteObjs = siteObjMaps.get(siteID);
|
||||
if (siteObjs == null) {
|
||||
siteObjs = new HashMap<String, String>();
|
||||
siteObjMaps.put(siteID, siteObjs);
|
||||
}
|
||||
siteObjs.put(tag, siteObj);
|
||||
}
|
||||
siteObjs.put(tag, siteObj);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -57,6 +57,9 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 23, 2010 bsteffen Initial creation
|
||||
* Aug 07, 2013 2077 bsteffen Revise pixel size calculations.
|
||||
* Aug 27, 2013 2287 randerso Replaced hard coded constant with densityFactor
|
||||
* parameter to allow application specific density
|
||||
* scaling to better match A1 displays
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -103,6 +106,8 @@ public abstract class AbstractGriddedDisplay<T> implements IRenderable {
|
|||
|
||||
protected final int size;
|
||||
|
||||
protected final double densityFactor;
|
||||
|
||||
protected RGB color;
|
||||
|
||||
protected double density = 1.0;
|
||||
|
@ -120,16 +125,18 @@ public abstract class AbstractGriddedDisplay<T> implements IRenderable {
|
|||
* @param descriptor
|
||||
* @param gridGeometryOfGrid
|
||||
* @param size
|
||||
* @param plotLocations
|
||||
* Pre-configured plot locations. If null, they will be created.
|
||||
* @param densityFactor
|
||||
* adjustment factor to make density match A1
|
||||
*/
|
||||
public AbstractGriddedDisplay(IMapDescriptor descriptor,
|
||||
GeneralGridGeometry gridGeometryOfGrid, int size) {
|
||||
GeneralGridGeometry gridGeometryOfGrid, int size,
|
||||
double densityFactor) {
|
||||
this.calculationQueue = new ConcurrentLinkedQueue<Coordinate>();
|
||||
|
||||
this.descriptor = descriptor;
|
||||
this.gridGeometryOfGrid = gridGeometryOfGrid;
|
||||
this.size = size;
|
||||
this.densityFactor = densityFactor;
|
||||
|
||||
this.gridDims = new int[] {
|
||||
this.gridGeometryOfGrid.getGridRange().getSpan(0),
|
||||
|
@ -211,7 +218,8 @@ public abstract class AbstractGriddedDisplay<T> implements IRenderable {
|
|||
* infinite loops.
|
||||
*/
|
||||
int increment = Math.max(
|
||||
(int) Math.ceil(adjSize * 0.75 / pixelSize / density), 1);
|
||||
(int) Math.ceil(adjSize * densityFactor / pixelSize / density),
|
||||
1);
|
||||
for (int x = 0; x < gridDims[0]; x += increment) {
|
||||
for (int y = 0; y < gridDims[1]; y += increment) {
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ import com.raytheon.uf.viz.core.drawables.PaintProperties;
|
|||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.uf.viz.core.map.IMapDescriptor;
|
||||
import com.raytheon.uf.viz.core.rsc.DisplayType;
|
||||
import com.raytheon.viz.core.contours.util.IVectorGraphicsRenderableFactory;
|
||||
import com.raytheon.viz.core.contours.util.VectorGraphicsRenderable;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
|
||||
|
@ -53,6 +54,13 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Jun 22, 2010 bsteffen Initial creation
|
||||
* Feb 07, 2011 7948 bkowal added a public method to get
|
||||
* the direction.
|
||||
* Aug 27, 2013 2287 randerso Added VectorGraphicsRenderable Factory to allow
|
||||
* application specific rendering of wind barbs and
|
||||
* arrows.
|
||||
* Added densityFactor to allow application specific
|
||||
* adjustment of density.
|
||||
* Added gridRelative flag to indicate whether direction
|
||||
* data is relative to grid or true north
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -69,36 +77,43 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
|
||||
private LineStyle lineStyle;
|
||||
|
||||
private double scale = 0.6;
|
||||
|
||||
private IExtent lastExtent;
|
||||
|
||||
private VectorGraphicsRenderable vectorRenderable;
|
||||
|
||||
private boolean gridRelative;
|
||||
|
||||
private DisplayType displayType;
|
||||
|
||||
private GeodeticCalculator gc;
|
||||
|
||||
private IVectorGraphicsRenderableFactory factory;
|
||||
|
||||
/**
|
||||
* @param magnitude
|
||||
* @param direction
|
||||
* @param mode
|
||||
* @param descriptor
|
||||
* @param gridGeometryOfGrid
|
||||
* @param imageSize
|
||||
* @param gridLocation
|
||||
* @param forceCircle
|
||||
* @param plotLocations
|
||||
* Pre-configured plot locations. If null, they will be created.
|
||||
* @param size
|
||||
* @param densityFactor
|
||||
* adjustment factor to make density match A1
|
||||
* @param gridRelative
|
||||
* true if direction is grid relative, false if relative to true
|
||||
* north
|
||||
* @param displayType
|
||||
* @param factory
|
||||
*/
|
||||
public GriddedVectorDisplay(FloatBuffer magnitude, FloatBuffer direction,
|
||||
IMapDescriptor descriptor, GeneralGridGeometry gridGeometryOfGrid,
|
||||
int size, DisplayType displayType) {
|
||||
super(descriptor, gridGeometryOfGrid, size);
|
||||
int size, double densityFactor, boolean gridRelative,
|
||||
DisplayType displayType, IVectorGraphicsRenderableFactory factory) {
|
||||
super(descriptor, gridGeometryOfGrid, size, densityFactor);
|
||||
this.magnitude = magnitude;
|
||||
this.direction = direction;
|
||||
this.gridRelative = gridRelative;
|
||||
this.displayType = displayType;
|
||||
this.gc = new GeodeticCalculator(descriptor.getCRS());
|
||||
this.factory = factory;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -110,8 +125,8 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
lastExtent = paintProps.getView().getExtent().clone();
|
||||
}
|
||||
if (vectorRenderable == null) {
|
||||
vectorRenderable = new VectorGraphicsRenderable(descriptor, target,
|
||||
this.size, this.scale);
|
||||
vectorRenderable = factory.createRenderable(descriptor, target,
|
||||
this.size);
|
||||
super.paint(target, paintProps);
|
||||
}
|
||||
vectorRenderable.setColor(this.color);
|
||||
|
@ -126,12 +141,13 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
super.issueRefresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paint(Coordinate ijcoord, PaintProperties paintProps,
|
||||
Coordinate plotLoc, double adjSize) throws VizException {
|
||||
int idx = (int) (ijcoord.x + (ijcoord.y * this.gridDims[0]));
|
||||
|
||||
float spd = this.magnitude.get(idx);
|
||||
float dir = this.direction.get(idx) - 180;
|
||||
float dir = this.direction.get(idx);
|
||||
|
||||
if (dir < -999999 || dir > 9999999) {
|
||||
// perhaps this check should limit +/- 180
|
||||
|
@ -161,9 +177,13 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
newWorldLocation[1]);
|
||||
}
|
||||
|
||||
dir = dir
|
||||
+ (float) MapUtil.rotation(latLon,
|
||||
GridGeometry2D.wrap(gridGeometryOfGrid));
|
||||
if (gridRelative) {
|
||||
// rotate data from grid up to true north
|
||||
dir += (float) MapUtil.rotation(latLon,
|
||||
GridGeometry2D.wrap(gridGeometryOfGrid));
|
||||
}
|
||||
|
||||
// rotate dir from true north to display up
|
||||
dir -= this.gc.getAzimuth();
|
||||
} catch (Exception e) {
|
||||
throw new VizException(e);
|
||||
|
@ -185,14 +205,6 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param color
|
||||
*/
|
||||
public void setScale(double scale) {
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
public void setLineWidth(int lineWidth) {
|
||||
this.lineWidth = lineWidth;
|
||||
}
|
||||
|
@ -208,6 +220,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
* @param density
|
||||
* the density to set
|
||||
*/
|
||||
@Override
|
||||
public boolean setDensity(double density) {
|
||||
if (super.setDensity(density)) {
|
||||
disposeResources();
|
||||
|
@ -223,6 +236,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
* @param magnification
|
||||
* the magnification to set
|
||||
*/
|
||||
@Override
|
||||
public boolean setMagnification(double magnification) {
|
||||
if (super.setMagnification(magnification)) {
|
||||
disposeResources();
|
||||
|
@ -245,6 +259,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
return direction;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void disposeResources() {
|
||||
if (vectorRenderable != null) {
|
||||
vectorRenderable.dispose();
|
||||
|
@ -252,6 +267,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Coordinate createResource(Coordinate coord) throws VizException {
|
||||
return coord;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.core.contours.util;
|
||||
|
||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||
|
||||
/**
|
||||
* Interface for factory class to create a VectorGraphicsRenderable for
|
||||
* GriddedVectorDisplay
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 22, 2013 #2287 randerso Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author randerso
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public interface IVectorGraphicsRenderableFactory {
|
||||
public VectorGraphicsRenderable createRenderable(IDescriptor descriptor,
|
||||
IGraphicsTarget target, double size);
|
||||
}
|
|
@ -38,7 +38,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* May 27, 2011 bsteffen Initial creation
|
||||
* May 27, 2011 bsteffen Initial creation
|
||||
* Aug 27, 2013 #2287 randerso Refactored to allow subclassing
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -47,17 +48,17 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
*/
|
||||
public class VectorGraphicsRenderable {
|
||||
|
||||
private IWireframeShape lastShape;
|
||||
protected IWireframeShape lastShape;
|
||||
|
||||
private double size = 80;
|
||||
protected double size = 80;
|
||||
|
||||
private double scale = 1.0;
|
||||
protected double scale = 1.0;
|
||||
|
||||
private RGB color;
|
||||
protected RGB color;
|
||||
|
||||
private float lineWidth = 1.0f;
|
||||
protected float lineWidth = 1.0f;
|
||||
|
||||
private LineStyle lineStyle;
|
||||
protected LineStyle lineStyle;
|
||||
|
||||
public VectorGraphicsRenderable(IDescriptor descriptor,
|
||||
IGraphicsTarget target, double size, double scale) {
|
||||
|
@ -89,36 +90,7 @@ public class VectorGraphicsRenderable {
|
|||
public void paintBarb(Coordinate plotLoc, double adjSize, double spd,
|
||||
double dir) {
|
||||
if (spd < 2.5) {
|
||||
double[][] line = new double[9][2];
|
||||
|
||||
double aa = adjSize * .030;
|
||||
double saa = aa * 0.707;
|
||||
|
||||
line[8][0] = line[0][0] = plotLoc.x + aa;
|
||||
line[8][1] = line[0][1] = plotLoc.y;
|
||||
line[1][0] = plotLoc.x + saa;
|
||||
line[1][1] = plotLoc.y + saa;
|
||||
|
||||
line[2][0] = plotLoc.x;
|
||||
line[2][1] = plotLoc.y + aa;
|
||||
|
||||
line[3][0] = plotLoc.x - saa;
|
||||
line[3][1] = plotLoc.y + saa;
|
||||
|
||||
line[4][0] = plotLoc.x - aa;
|
||||
line[4][1] = plotLoc.y;
|
||||
|
||||
line[5][0] = plotLoc.x - saa;
|
||||
line[5][1] = plotLoc.y - saa;
|
||||
|
||||
line[6][0] = plotLoc.x;
|
||||
line[6][1] = plotLoc.y - aa;
|
||||
|
||||
line[7][0] = plotLoc.x + saa;
|
||||
line[7][1] = plotLoc.y - saa;
|
||||
|
||||
lastShape.addLineSegment(line);
|
||||
|
||||
paintPoint(plotLoc, adjSize);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -198,6 +170,38 @@ public class VectorGraphicsRenderable {
|
|||
}
|
||||
}
|
||||
|
||||
protected void paintPoint(Coordinate plotLoc, double adjSize) {
|
||||
double[][] line = new double[9][2];
|
||||
|
||||
double aa = adjSize * .030;
|
||||
double saa = aa * 0.707;
|
||||
|
||||
line[8][0] = line[0][0] = plotLoc.x + aa;
|
||||
line[8][1] = line[0][1] = plotLoc.y;
|
||||
line[1][0] = plotLoc.x + saa;
|
||||
line[1][1] = plotLoc.y + saa;
|
||||
|
||||
line[2][0] = plotLoc.x;
|
||||
line[2][1] = plotLoc.y + aa;
|
||||
|
||||
line[3][0] = plotLoc.x - saa;
|
||||
line[3][1] = plotLoc.y + saa;
|
||||
|
||||
line[4][0] = plotLoc.x - aa;
|
||||
line[4][1] = plotLoc.y;
|
||||
|
||||
line[5][0] = plotLoc.x - saa;
|
||||
line[5][1] = plotLoc.y - saa;
|
||||
|
||||
line[6][0] = plotLoc.x;
|
||||
line[6][1] = plotLoc.y - aa;
|
||||
|
||||
line[7][0] = plotLoc.x + saa;
|
||||
line[7][1] = plotLoc.y - saa;
|
||||
|
||||
lastShape.addLineSegment(line);
|
||||
}
|
||||
|
||||
public void paintDualArrow(Coordinate plotLoc, double adjSize, double spd,
|
||||
double dir) {
|
||||
if (spd < 4.0) {
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.core.contours.util;
|
||||
|
||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||
|
||||
/**
|
||||
* VectorGraphicsRenderable Factory
|
||||
*
|
||||
* Constructs the VectorGraphicsRenderable for D2D usage of GriddedVectorDisplay
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 22, 2013 #2287 randerso Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author randerso
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class VectorGraphicsRenderableFactory implements
|
||||
IVectorGraphicsRenderableFactory {
|
||||
private double scale;
|
||||
|
||||
public VectorGraphicsRenderableFactory() {
|
||||
this.scale = 0.6;
|
||||
}
|
||||
|
||||
public VectorGraphicsRenderableFactory(double scale) {
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param scale
|
||||
* the scale to set
|
||||
*/
|
||||
public void setScale(double scale) {
|
||||
this.scale = scale;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.viz.core.contours.util.IVectorGraphicsRenderableFactory#
|
||||
* createRenderable()
|
||||
*/
|
||||
@Override
|
||||
public VectorGraphicsRenderable createRenderable(IDescriptor descriptor,
|
||||
IGraphicsTarget target, double size) {
|
||||
return new VectorGraphicsRenderable(descriptor, target, size, scale);
|
||||
}
|
||||
|
||||
}
|
|
@ -20,10 +20,12 @@
|
|||
|
||||
package com.raytheon.viz.gfe.actions;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.core.commands.AbstractHandler;
|
||||
import org.eclipse.core.commands.ExecutionEvent;
|
||||
import org.eclipse.core.commands.ExecutionException;
|
||||
import org.eclipse.jface.window.Window;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.IWorkbenchWindow;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
|
@ -42,8 +44,9 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jan 23, 2008 Eric Babin Initial Creation
|
||||
* Jul 8, 2008 randerso reworked
|
||||
* Jul 8, 2008 randerso reworked
|
||||
* Oct 23, 2012 1287 rferrel Changes for non-blocking AutoSaveIntervalDialog.
|
||||
* Aug 27, 2013 2302 randerso Code clean up for AutoSaveJob changes
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -51,7 +54,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* @version 1.0
|
||||
*/
|
||||
public class ShowAutoSaveIntervalDialog extends AbstractHandler {
|
||||
private AutoSaveIntervalDialog dialog;
|
||||
final private Map<IWorkbenchWindow, AutoSaveIntervalDialog> dialogMap = new HashMap<IWorkbenchWindow, AutoSaveIntervalDialog>();
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -69,47 +72,28 @@ public class ShowAutoSaveIntervalDialog extends AbstractHandler {
|
|||
*/
|
||||
@Override
|
||||
public Object execute(ExecutionEvent arg0) throws ExecutionException {
|
||||
final IWorkbenchWindow window = PlatformUI.getWorkbench()
|
||||
.getActiveWorkbenchWindow();
|
||||
DataManager dm = DataManagerUIFactory.findInstance(window);
|
||||
if (dm == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
AutoSaveIntervalDialog dialog = dialogMap.get(window);
|
||||
|
||||
if (dialog == null || dialog.getShell() == null || dialog.isDisposed()) {
|
||||
final IWorkbenchWindow window = PlatformUI.getWorkbench()
|
||||
.getActiveWorkbenchWindow();
|
||||
Shell shell = window.getShell();
|
||||
|
||||
int interval = AutoSaveJob.getInterval();
|
||||
boolean autoSaveEnabled = interval > 0;
|
||||
if (!autoSaveEnabled) {
|
||||
interval = AutoSaveJob.MAX_INTERVAL;
|
||||
}
|
||||
dialog = new AutoSaveIntervalDialog(shell, interval,
|
||||
autoSaveEnabled);
|
||||
AutoSaveJob autoSaveJob = dm.getAutoSaveJob();
|
||||
|
||||
Shell shell = window.getShell();
|
||||
dialog = new AutoSaveIntervalDialog(shell, autoSaveJob);
|
||||
dialogMap.put(window, dialog);
|
||||
dialog.setBlockOnOpen(false);
|
||||
dialog.setCloseCallback(new ICloseCallback() {
|
||||
|
||||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if (returnValue instanceof Integer) {
|
||||
int returnCode = (Integer) returnValue;
|
||||
if (returnCode == Window.OK) {
|
||||
DataManager dm = DataManagerUIFactory
|
||||
.findInstance(window);
|
||||
// update
|
||||
if (dialog.isAutoSaveEnabled()) {
|
||||
int interval = dialog.getCurrentInterval();
|
||||
AutoSaveJob.setInterval(interval);
|
||||
if (dm != null) {
|
||||
dm.enableAutoSave();
|
||||
}
|
||||
DataManagerUIFactory.findInstance(window)
|
||||
.enableAutoSave();
|
||||
} else {
|
||||
AutoSaveJob.setInterval(0);
|
||||
if (dm != null) {
|
||||
dm.disableAutoSave();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
dialogMap.remove(window);
|
||||
}
|
||||
});
|
||||
dialog.open();
|
||||
|
|
|
@ -96,6 +96,7 @@ import com.raytheon.viz.gfe.textformatter.TextProductManager;
|
|||
* initialized by constructor.
|
||||
* 04/24/2013 1936 dgilling Move initialization of TextProductMgr
|
||||
* to GFE startup.
|
||||
* 08/27/2013 2302 randerso Code cleanup for AutoSaveJob
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -271,18 +272,10 @@ public class DataManager {
|
|||
}
|
||||
|
||||
/**
|
||||
* Start auto save jobs
|
||||
* @return the autoSaveJob
|
||||
*/
|
||||
public void enableAutoSave() {
|
||||
autoSaveJob.cancel();
|
||||
autoSaveJob.reSchedule();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop auto save jobs
|
||||
*/
|
||||
public void disableAutoSave() {
|
||||
autoSaveJob.cancel();
|
||||
public AutoSaveJob getAutoSaveJob() {
|
||||
return autoSaveJob;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -84,6 +84,7 @@ import com.raytheon.viz.gfe.GFEServerException;
|
|||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.griddata.AbstractGridData;
|
||||
import com.raytheon.viz.gfe.core.griddata.IGridData;
|
||||
import com.raytheon.viz.gfe.core.parm.ParmSaveJob.ParmSaveStatus;
|
||||
import com.raytheon.viz.gfe.core.parm.ParmState.InterpMode;
|
||||
import com.raytheon.viz.gfe.core.wxvalue.DiscreteWxValue;
|
||||
import com.raytheon.viz.gfe.core.wxvalue.ScalarWxValue;
|
||||
|
@ -182,6 +183,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Mar 13, 2013 1792 bsteffen Improve performance of gfe parm average
|
||||
* ant time weighted average.
|
||||
* Apr 02, 2013 #1774 randerso Fixed a possible deadlock issue.
|
||||
* Aug 27, 2013 #2302 randerso Fix simultaneous save issue
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -229,6 +232,8 @@ public abstract class Parm implements Comparable<Parm> {
|
|||
|
||||
protected boolean disposed;
|
||||
|
||||
private ParmSaveJob saveJob;
|
||||
|
||||
/**
|
||||
* The create from scratch mode
|
||||
*/
|
||||
|
@ -360,6 +365,7 @@ public abstract class Parm implements Comparable<Parm> {
|
|||
}
|
||||
|
||||
this.disposed = false;
|
||||
this.saveJob = new ParmSaveJob(this);
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
|
@ -708,7 +714,7 @@ public abstract class Parm implements Comparable<Parm> {
|
|||
* Save a parameter
|
||||
*
|
||||
* @param all
|
||||
* @return
|
||||
* @return true if save successful
|
||||
*/
|
||||
public boolean saveParameter(boolean all) {
|
||||
if (inParmEdit) {
|
||||
|
@ -729,14 +735,16 @@ public abstract class Parm implements Comparable<Parm> {
|
|||
/**
|
||||
* Save a parameter
|
||||
*
|
||||
* @param tr
|
||||
* @return
|
||||
* @param times
|
||||
* TimeRanges to be saved
|
||||
* @return true if save successful
|
||||
*/
|
||||
public boolean saveParameter(List<TimeRange> tr) {
|
||||
public boolean saveParameter(List<TimeRange> times) {
|
||||
if (inParmEdit) {
|
||||
return false;
|
||||
} else {
|
||||
return saveParameterSubClass(tr);
|
||||
ParmSaveStatus status = this.saveJob.requestSave(times);
|
||||
return status.isSuccessful();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -744,7 +752,7 @@ public abstract class Parm implements Comparable<Parm> {
|
|||
* Save a parameter
|
||||
*
|
||||
* @param tr
|
||||
* @return
|
||||
* @return true if save successful
|
||||
*/
|
||||
public boolean saveParameter(TimeRange tr) {
|
||||
ArrayList<TimeRange> trs = new ArrayList<TimeRange>();
|
||||
|
@ -756,7 +764,8 @@ public abstract class Parm implements Comparable<Parm> {
|
|||
* Subclass specific save implementation
|
||||
*
|
||||
* @param tr
|
||||
* @return
|
||||
* TimeRanges to be saved
|
||||
* @return true if save successful
|
||||
*/
|
||||
protected abstract boolean saveParameterSubClass(List<TimeRange> tr);
|
||||
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.gfe.core.parm;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.Semaphore;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
|
||||
import com.raytheon.uf.common.time.TimeRange;
|
||||
|
||||
/**
|
||||
* Job to queue up and work of parm save requests
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 27, 2013 #2302 randerso Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author randerso
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class ParmSaveJob extends Job {
|
||||
public static class ParmSaveStatus {
|
||||
boolean successful = false;
|
||||
|
||||
Semaphore complete = new Semaphore(0);
|
||||
|
||||
/**
|
||||
* @return the successful
|
||||
*/
|
||||
public boolean isSuccessful() {
|
||||
try {
|
||||
complete.acquire();
|
||||
return successful;
|
||||
} catch (InterruptedException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param successful
|
||||
* the successful to set
|
||||
*/
|
||||
private void setSuccessful(boolean successful) {
|
||||
this.successful = successful;
|
||||
complete.release();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class ParmSaveRequest {
|
||||
private List<TimeRange> times;
|
||||
|
||||
private ParmSaveStatus status;
|
||||
|
||||
public ParmSaveRequest(List<TimeRange> times) {
|
||||
this.times = times;
|
||||
this.status = new ParmSaveStatus();
|
||||
}
|
||||
}
|
||||
|
||||
private Parm parm;
|
||||
|
||||
private ConcurrentLinkedQueue<ParmSaveRequest> saveQueue;
|
||||
|
||||
/**
|
||||
* @param parm
|
||||
*/
|
||||
public ParmSaveJob(Parm parm) {
|
||||
super("ParmSaveJob");
|
||||
this.setSystem(true);
|
||||
this.parm = parm;
|
||||
this.saveQueue = new ConcurrentLinkedQueue<ParmSaveJob.ParmSaveRequest>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Request save.
|
||||
*
|
||||
* Caller should call isSuccessful on the returned ParmSaveStatus object to
|
||||
* await completion and to determine success
|
||||
*
|
||||
* @param times
|
||||
* @return ParmSaveStatus object
|
||||
*/
|
||||
public ParmSaveStatus requestSave(List<TimeRange> times) {
|
||||
ParmSaveRequest request = new ParmSaveRequest(times);
|
||||
this.saveQueue.add(request);
|
||||
this.schedule();
|
||||
return request.status;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.
|
||||
* IProgressMonitor)
|
||||
*/
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
ParmSaveRequest req = null;
|
||||
while ((req = this.saveQueue.poll()) != null) {
|
||||
boolean successful = parm.saveParameterSubClass(req.times);
|
||||
req.status.setSuccessful(successful);
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
}
|
|
@ -29,20 +29,21 @@ import org.eclipse.swt.widgets.Composite;
|
|||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Scale;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
|
||||
import com.raytheon.viz.gfe.jobs.AutoSaveJob;
|
||||
import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
||||
import com.raytheon.viz.ui.widgets.SpinScale;
|
||||
|
||||
/**
|
||||
* The auto save iterval dialog.
|
||||
* The auto save interval dialog.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jan 30, 2008 Eric Babin Initial Creation
|
||||
* Jan 30, 2008 Eric Babin Initial Creation
|
||||
* Aug 27, 2013 #2302 randerso Code cleanup
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -52,98 +53,26 @@ import com.raytheon.viz.ui.dialogs.CaveJFACEDialog;
|
|||
|
||||
public class AutoSaveIntervalDialog extends CaveJFACEDialog {
|
||||
|
||||
private Composite top = null;
|
||||
|
||||
private Label intervalMinutes;
|
||||
|
||||
private Scale intervalScale;
|
||||
|
||||
private int currentInterval = 1;
|
||||
|
||||
private boolean autoSaveEnabled = false;
|
||||
private AutoSaveJob autoSaveJob;
|
||||
|
||||
private Button offButton;
|
||||
|
||||
private Button onButton;
|
||||
|
||||
public AutoSaveIntervalDialog(Shell parent, int currentInterval,
|
||||
boolean isEnabled) {
|
||||
private Label intervalLabel;
|
||||
|
||||
private SpinScale intervalScale;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param parent
|
||||
* @param currentInterval
|
||||
* @param isEnabled
|
||||
*/
|
||||
public AutoSaveIntervalDialog(Shell parent, AutoSaveJob autoSaveJob) {
|
||||
super(parent);
|
||||
this.setShellStyle(SWT.TITLE | SWT.MODELESS | SWT.CLOSE);
|
||||
this.currentInterval = currentInterval;
|
||||
this.autoSaveEnabled = isEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Control createDialogArea(Composite parent) {
|
||||
top = (Composite) super.createDialogArea(parent);
|
||||
|
||||
top.setLayout(new GridLayout(2, false));
|
||||
loadConfigData();
|
||||
initializeComponents();
|
||||
|
||||
return top;
|
||||
}
|
||||
|
||||
private void initializeComponents() {
|
||||
|
||||
Group g = new Group(top, SWT.NONE);
|
||||
g.setLayout(new GridLayout(2, true));
|
||||
|
||||
offButton = new Button(g, SWT.RADIO);
|
||||
offButton.setText("Off");
|
||||
offButton.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
autoSaveEnabled = false;
|
||||
}
|
||||
});
|
||||
offButton.setSelection(!autoSaveEnabled);
|
||||
|
||||
onButton = new Button(g, SWT.RADIO);
|
||||
onButton.setText("On");
|
||||
onButton.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
autoSaveEnabled = true;
|
||||
}
|
||||
});
|
||||
onButton.setSelection(autoSaveEnabled);
|
||||
|
||||
Composite c = new Composite(top, SWT.NONE);
|
||||
GridLayout layout = new GridLayout(2, false);
|
||||
layout.marginBottom = 10;
|
||||
|
||||
c.setLayout(layout);
|
||||
c.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL));
|
||||
|
||||
Label label = new Label(c, SWT.NONE);
|
||||
label.setText("Save Interval in Minutes");
|
||||
GridData data = new GridData();
|
||||
data.horizontalSpan = 2;
|
||||
label.setLayoutData(data);
|
||||
|
||||
intervalScale = new Scale(c, SWT.HORIZONTAL);
|
||||
intervalScale.setLayoutData(new GridData(120, SWT.DEFAULT));
|
||||
intervalScale.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
autoSaveEnabled = true;
|
||||
currentInterval = intervalScale.getSelection();
|
||||
String s = Integer.toString(currentInterval);
|
||||
intervalMinutes.setText(s);
|
||||
intervalMinutes.setToolTipText(s);
|
||||
onButton.setSelection(autoSaveEnabled);
|
||||
offButton.setSelection(!autoSaveEnabled);
|
||||
}
|
||||
});
|
||||
intervalScale.setMinimum(AutoSaveJob.MIN_INTERVAL);
|
||||
intervalScale.setMaximum(AutoSaveJob.MAX_INTERVAL);
|
||||
intervalScale.setSelection(this.currentInterval);
|
||||
|
||||
intervalMinutes = new Label(c, SWT.NONE);
|
||||
intervalMinutes.setLayoutData(new GridData(20, SWT.DEFAULT));
|
||||
intervalMinutes.setText(String.valueOf(intervalScale.getSelection()));
|
||||
this.autoSaveJob = autoSaveJob;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -154,23 +83,92 @@ public class AutoSaveIntervalDialog extends CaveJFACEDialog {
|
|||
* .Shell)
|
||||
*/
|
||||
@Override
|
||||
protected void configureShell(Shell shell) {
|
||||
super.configureShell(shell);
|
||||
shell.setText("Auto Save Interval Dialog");
|
||||
protected void configureShell(Shell newShell) {
|
||||
super.configureShell(newShell);
|
||||
newShell.setText("Auto Save Interval Dialog");
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for loading the various config data for the dialog.
|
||||
@Override
|
||||
protected Control createDialogArea(Composite parent) {
|
||||
Composite comp = (Composite) super.createDialogArea(parent);
|
||||
GridLayout layout = (GridLayout) comp.getLayout();
|
||||
layout.marginHeight = 0;
|
||||
layout.marginWidth = 0;
|
||||
|
||||
Group group = new Group(comp, SWT.NONE);
|
||||
layout = new GridLayout(2, false);
|
||||
group.setLayout(layout);
|
||||
GridData layoutData = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
group.setLayoutData(layoutData);
|
||||
group.setText("Auto Save");
|
||||
|
||||
int interval = autoSaveJob.getInterval();
|
||||
|
||||
offButton = new Button(group, SWT.RADIO);
|
||||
layoutData = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
offButton.setLayoutData(layoutData);
|
||||
offButton.setText("Off");
|
||||
offButton.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
if (offButton.getSelection()) {
|
||||
intervalLabel.setEnabled(false);
|
||||
intervalScale.setEnabled(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
offButton.setSelection(interval == 0);
|
||||
|
||||
onButton = new Button(group, SWT.RADIO);
|
||||
layoutData = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||
onButton.setLayoutData(layoutData);
|
||||
onButton.setText("On");
|
||||
onButton.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
if (onButton.getSelection()) {
|
||||
intervalLabel.setEnabled(true);
|
||||
intervalScale.setEnabled(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
onButton.setSelection(interval > 0);
|
||||
|
||||
intervalLabel = new Label(group, SWT.CENTER);
|
||||
intervalLabel.setText("Save Interval in Minutes");
|
||||
layoutData = new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1);
|
||||
intervalLabel.setLayoutData(layoutData);
|
||||
|
||||
intervalScale = new SpinScale(group, SWT.HORIZONTAL);
|
||||
layoutData = new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1);
|
||||
layoutData.minimumWidth = 240;
|
||||
intervalScale.setLayoutData(layoutData);
|
||||
intervalScale.setMinimum(AutoSaveJob.MIN_INTERVAL);
|
||||
intervalScale.setMaximum(AutoSaveJob.MAX_INTERVAL);
|
||||
if (interval > 0) {
|
||||
intervalScale.setSelection(interval);
|
||||
} else {
|
||||
intervalLabel.setEnabled(false);
|
||||
intervalScale.setEnabled(false);
|
||||
intervalScale.setSelection(AutoSaveJob.MAX_INTERVAL);
|
||||
}
|
||||
|
||||
return comp;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
|
||||
*/
|
||||
private void loadConfigData() {
|
||||
|
||||
@Override
|
||||
protected void okPressed() {
|
||||
if (offButton.getSelection()) {
|
||||
autoSaveJob.setInterval(0);
|
||||
} else {
|
||||
autoSaveJob.setInterval(intervalScale.getSelection());
|
||||
}
|
||||
super.okPressed();
|
||||
}
|
||||
|
||||
public int getCurrentInterval() {
|
||||
return currentInterval;
|
||||
}
|
||||
|
||||
public boolean isAutoSaveEnabled() {
|
||||
return autoSaveEnabled;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,11 +24,14 @@ import org.eclipse.core.runtime.IStatus;
|
|||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
|
||||
import com.raytheon.viz.gfe.Activator;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.viz.gfe.GFEPreference;
|
||||
import com.raytheon.viz.gfe.PreferenceConstants;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.parm.Parm;
|
||||
import com.raytheon.viz.gfe.ui.HazardUIUtils;
|
||||
|
||||
/**
|
||||
* Job implementing the auto save functionality. Uses user preferences to
|
||||
|
@ -38,7 +41,8 @@ import com.raytheon.viz.gfe.core.parm.Parm;
|
|||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jun 25, 2008 Eric Babin Initial Creation
|
||||
* Jun 25, 2008 Eric Babin Initial Creation
|
||||
* Aug 27, 2013 #2302 randerso Fixed to behave more like A1, code cleanup
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -47,38 +51,34 @@ import com.raytheon.viz.gfe.core.parm.Parm;
|
|||
*/
|
||||
|
||||
public class AutoSaveJob extends Job {
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(AutoSaveJob.class);
|
||||
|
||||
private static final int MILLISECONDS_PER_MINUTE = 60 * 1000;
|
||||
|
||||
/**
|
||||
* Max auto save interval in minutes
|
||||
*/
|
||||
public static final int MAX_INTERVAL = 60;
|
||||
|
||||
/**
|
||||
* Min auto save interval in minutes
|
||||
*/
|
||||
public static final int MIN_INTERVAL = 1;
|
||||
|
||||
/**
|
||||
* auto save interval in minutes, 0 = disabled
|
||||
* auto save interval in milliseconds, 0 = disabled
|
||||
*/
|
||||
private static int interval;
|
||||
static {
|
||||
int i = 0;
|
||||
if (GFEPreference.storeAvailable()) {
|
||||
i = GFEPreference
|
||||
.getIntPreference(PreferenceConstants.GFE_AUTO_SAVE_INTERVAL);
|
||||
}
|
||||
|
||||
interval = i;
|
||||
}
|
||||
private long interval;
|
||||
|
||||
/**
|
||||
* Set the auto save interval
|
||||
*
|
||||
* @param i
|
||||
* @param interval
|
||||
* desired interval in minutes
|
||||
*/
|
||||
public static void setInterval(int i) {
|
||||
interval = i;
|
||||
|
||||
GFEPreference.setPreference(PreferenceConstants.GFE_AUTO_SAVE_INTERVAL,
|
||||
Integer.toString(i));
|
||||
public void setInterval(int interval) {
|
||||
this.interval = interval * TimeUtil.MILLIS_PER_MINUTE;
|
||||
this.cancel();
|
||||
this.reSchedule(this.interval);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -86,8 +86,8 @@ public class AutoSaveJob extends Job {
|
|||
*
|
||||
* @return interval in minutes
|
||||
*/
|
||||
public static int getInterval() {
|
||||
return interval;
|
||||
public int getInterval() {
|
||||
return (int) (interval / TimeUtil.MILLIS_PER_MINUTE);
|
||||
}
|
||||
|
||||
private DataManager dataManager;
|
||||
|
@ -104,17 +104,28 @@ public class AutoSaveJob extends Job {
|
|||
this.dataManager = dataManager;
|
||||
this.disposed = false;
|
||||
this.setSystem(true);
|
||||
int pref = GFEPreference
|
||||
.getIntPreference(PreferenceConstants.GFE_AUTO_SAVE_INTERVAL);
|
||||
if (pref > MAX_INTERVAL) {
|
||||
pref = MAX_INTERVAL;
|
||||
} else if (pref < 0) {
|
||||
pref = 0;
|
||||
}
|
||||
|
||||
reSchedule();
|
||||
this.interval = pref * TimeUtil.MILLIS_PER_MINUTE;
|
||||
reSchedule(this.interval);
|
||||
}
|
||||
|
||||
/**
|
||||
* Schedule this job to run after the desired interval
|
||||
* Schedule this job to run after the desired
|
||||
*
|
||||
* @param delay
|
||||
* interval in milliseconds
|
||||
*/
|
||||
public void reSchedule() {
|
||||
public void reSchedule(long delay) {
|
||||
if (!disposed) {
|
||||
if (interval > 0) {
|
||||
this.schedule(interval * MILLISECONDS_PER_MINUTE);
|
||||
if (delay > 0) {
|
||||
this.schedule(delay);
|
||||
}
|
||||
} else {
|
||||
dataManager = null;
|
||||
|
@ -138,53 +149,51 @@ public class AutoSaveJob extends Job {
|
|||
*/
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
IStatus status = Status.OK_STATUS;
|
||||
try {
|
||||
Parm[] parms = this.dataManager.getParmManager().getModifiedParms();
|
||||
if (parms != null && parms.length != 0) {
|
||||
String autoSaveResult = "GFE Auto Save called. Save of Parms[";
|
||||
for (int i = 0; i < parms.length; i++) {
|
||||
String name = parms[i].getParmID().getParmName();
|
||||
if (name.indexOf("Hazards") == -1) {
|
||||
autoSaveResult += saveParm(parms[i]);
|
||||
} else {
|
||||
if (!tempHazardsExist()) {
|
||||
saveParm(parms[i]);
|
||||
autoSaveResult += saveParm(parms[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
autoSaveResult += "]";
|
||||
long delay = this.interval;
|
||||
if (delay > 0) {
|
||||
String msg = "GFE Auto Save called. ";
|
||||
boolean success = false;
|
||||
try {
|
||||
Parm modifiedParm = getModifiedParm();
|
||||
if (modifiedParm != null) {
|
||||
msg += "Save of Parm "
|
||||
+ modifiedParm.getParmID().getParmName() + " = ";
|
||||
|
||||
Activator.getDefault().getLog().log(
|
||||
new Status(IStatus.INFO, Activator.PLUGIN_ID,
|
||||
autoSaveResult));
|
||||
// save the data
|
||||
success = modifiedParm.saveParameter(false);
|
||||
msg += (success ? "success" : "failure");
|
||||
delay = 1500;
|
||||
} else {
|
||||
msg += "Nothing to save.";
|
||||
}
|
||||
statusHandler.info(msg);
|
||||
} catch (Exception e) {
|
||||
msg += "failure";
|
||||
statusHandler.error(msg, e);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
status = new Status(IStatus.ERROR, Activator.PLUGIN_ID,
|
||||
"GFE auto save failed.", e);
|
||||
reSchedule(delay);
|
||||
}
|
||||
reSchedule();
|
||||
return status;
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
|
||||
/**
|
||||
* If tempHazards exist, then autosave kicked off in the middle of merge
|
||||
* hazard. (which creates a "temp" hazard with "haz" in the name.
|
||||
* Find the first available modified parm. Skip Hazards if temp hazards
|
||||
* exist
|
||||
*
|
||||
* So we will ignore the "Hazard" WE parm save...
|
||||
*
|
||||
* @return if temp haz exists.
|
||||
* @return the first available modified parm or null if none
|
||||
*/
|
||||
private boolean tempHazardsExist() {
|
||||
Parm[] parms = this.dataManager.getParmManager().getDisplayedParms();
|
||||
for (int i = 0; i < parms.length; i++) {
|
||||
if (parms[i].getParmID().getParmName().indexOf("haz") != -1) {
|
||||
return true;
|
||||
private Parm getModifiedParm() {
|
||||
boolean tempHazDisplayed = HazardUIUtils
|
||||
.tempHazardsExist(this.dataManager);
|
||||
for (Parm p : this.dataManager.getParmManager().getModifiedParms()) {
|
||||
if (p.getParmID().getParmName().contains("Hazards")
|
||||
&& tempHazDisplayed) {
|
||||
continue;
|
||||
} else {
|
||||
return p;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -161,6 +161,7 @@ import com.vividsolutions.jts.geom.Envelope;
|
|||
* May 11, 2012 njensen Allow rsc to be recycled
|
||||
* Nov 08, 2012 1298 rferrel Changes for non-blocking FuzzValueDialog.
|
||||
* Mar 04, 2013 1637 randerso Fix time matching for ISC grids
|
||||
* Aug 27, 2013 2287 randerso Fixed scaling and direction of wind arrows
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -617,6 +618,7 @@ public class GFEResource extends
|
|||
}
|
||||
|
||||
clearVectorDisplays();
|
||||
GFEVectorGraphicsRenderableFactory factory;
|
||||
for (VisualizationType type : visTypes) {
|
||||
switch (type) {
|
||||
case WIND_ARROW:
|
||||
|
@ -626,24 +628,31 @@ public class GFEResource extends
|
|||
if (logFactor < 0.0) {
|
||||
logFactor = 0.0;
|
||||
}
|
||||
// TODO: add logFactor to PointWindDisplay,
|
||||
// GriddedVectorDisplay
|
||||
factory = new GFEVectorGraphicsRenderableFactory(
|
||||
logFactor, parm.getGridInfo().getMaxValue());
|
||||
|
||||
this.vectorDisplay.add(new GriddedVectorDisplay(
|
||||
mag, dir, descriptor, MapUtil
|
||||
.getGridGeometry(gs.getGridInfo()
|
||||
.getGridLoc()),
|
||||
getVectorSize("WindArrowDefaultSize"),
|
||||
visTypeToDisplayType(type)));
|
||||
1.36, false, visTypeToDisplayType(type),
|
||||
factory));
|
||||
break;
|
||||
|
||||
case WIND_BARB:
|
||||
this.vectorDisplay.add(new GriddedVectorDisplay(
|
||||
mag, dir, descriptor, MapUtil
|
||||
.getGridGeometry(gs.getGridInfo()
|
||||
.getGridLoc()),
|
||||
getVectorSize("WindBarbDefaultSize"),
|
||||
visTypeToDisplayType(type)));
|
||||
factory = new GFEVectorGraphicsRenderableFactory(
|
||||
0.0, parm.getGridInfo().getMaxValue());
|
||||
this.vectorDisplay
|
||||
.add(new GriddedVectorDisplay(
|
||||
mag,
|
||||
dir,
|
||||
descriptor,
|
||||
MapUtil.getGridGeometry(gs
|
||||
.getGridInfo().getGridLoc()),
|
||||
getVectorSize("WindBarbDefaultSize"),
|
||||
1.36, false,
|
||||
visTypeToDisplayType(type), factory));
|
||||
break;
|
||||
|
||||
case IMAGE:
|
||||
|
@ -1000,8 +1009,6 @@ public class GFEResource extends
|
|||
size = 60;
|
||||
}
|
||||
|
||||
size = (int) (size / 0.8);
|
||||
|
||||
int offset = parm.getDisplayAttributes().getFontOffset()
|
||||
+ Activator.getDefault().getPreferenceStore()
|
||||
.getInt("Contour_font");
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.gfe.rsc;
|
||||
|
||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||
import com.raytheon.viz.core.contours.util.VectorGraphicsRenderable;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
|
||||
/**
|
||||
* GFE version of VectorGraphicsRenderable. Subclassed to better match A1 GFE
|
||||
* behavior
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 22, 2013 #2287 randerso Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author randerso
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class GFEVectorGraphicsRenderable extends VectorGraphicsRenderable {
|
||||
double minLog = 0.0;
|
||||
|
||||
double maxLog = 0.0;
|
||||
|
||||
private double maxLimit;
|
||||
|
||||
/**
|
||||
* @param descriptor
|
||||
* @param target
|
||||
* @param size
|
||||
* @param logFactor
|
||||
* @param maxLimit
|
||||
*/
|
||||
public GFEVectorGraphicsRenderable(IDescriptor descriptor,
|
||||
IGraphicsTarget target, double size, double logFactor,
|
||||
double maxLimit) {
|
||||
super(descriptor, target, size, logFactor);
|
||||
|
||||
this.maxLimit = maxLimit;
|
||||
if (logFactor > 0.0) {
|
||||
minLog = Math.log(logFactor);
|
||||
maxLog = Math.log(logFactor + 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param plotLoc
|
||||
* @param adjSize
|
||||
* @param spd
|
||||
* @param dir
|
||||
* barb direction in radians
|
||||
*/
|
||||
@Override
|
||||
public void paintBarb(Coordinate plotLoc, double adjSize, double spd,
|
||||
double dir) {
|
||||
paintPoint(plotLoc, adjSize);
|
||||
|
||||
int speed = (int) (spd + 2.5);
|
||||
double staff = adjSize * .4;
|
||||
double barb = staff * 0.30;
|
||||
double add = staff * 0.105;
|
||||
// DIRECTIONS
|
||||
double uudd = -spd * Math.sin(dir);
|
||||
double vvff = -spd * Math.cos(dir);
|
||||
double dix = -uudd / spd;
|
||||
double djy = -vvff / spd;
|
||||
double dix1 = Math.cos(Math.toRadians(75)) * dix
|
||||
+ Math.sin(Math.toRadians(75)) * djy;
|
||||
double djy1 = (-1) * Math.sin(Math.toRadians(75)) * dix
|
||||
+ Math.cos(Math.toRadians(75)) * djy;
|
||||
|
||||
// SPEED AND COUNTERS:
|
||||
int n50 = speed / 50;
|
||||
int calcSpd = speed - 50 * n50;
|
||||
int n10 = calcSpd / 10;
|
||||
calcSpd = calcSpd - 10 * n10;
|
||||
int n5 = calcSpd / 5;
|
||||
double sx = ((n50 + n50 + n10 + n5 + 2)) * add;
|
||||
staff = Math.max(adjSize * .4, sx);
|
||||
|
||||
// DRAW STAFF
|
||||
double ix2 = plotLoc.x;
|
||||
double jy2 = plotLoc.y;
|
||||
double ix1 = ix2 + dix * staff;
|
||||
double jy1 = jy2 - djy * staff;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 }, { ix1, jy1 } });
|
||||
|
||||
// PLOT LONE HALF-BARB, IF NECESSARY
|
||||
if (n50 == 0 && n10 == 0) {
|
||||
ix2 = ix1 - dix * add;
|
||||
jy2 = jy1 + djy * add;
|
||||
ix1 = ix2 + dix1 * barb / 2.0;
|
||||
jy1 = jy2 - djy1 * barb / 2.0;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 },
|
||||
{ ix1, jy1 } });
|
||||
return;
|
||||
}
|
||||
|
||||
// PLOT FLAGS, IF NECESSARY
|
||||
for (int i = 0; i < n50; i++) {
|
||||
ix2 = ix1 + dix1 * barb;
|
||||
jy2 = jy1 - djy1 * barb;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 },
|
||||
{ ix1, jy1 } });
|
||||
ix1 = ix1 - dix * add * 2;
|
||||
jy1 = jy1 + djy * add * 2;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 },
|
||||
{ ix1, jy1 } });
|
||||
}
|
||||
if (n50 > 0) {
|
||||
ix1 = ix1 - dix * add / 2.0;
|
||||
jy1 = jy1 + djy * add / 2.0;
|
||||
}
|
||||
|
||||
// PLOT BARB, IF NECESSARY
|
||||
for (int i = 0; i < n10; i++) {
|
||||
ix2 = ix1 + dix1 * barb;
|
||||
jy2 = jy1 - djy1 * barb;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 },
|
||||
{ ix1, jy1 } });
|
||||
ix1 = ix1 - dix * add;
|
||||
jy1 = jy1 + djy * add;
|
||||
}
|
||||
|
||||
// PLOT HALF-BARB, IF NECESSARY
|
||||
if (n5 != 0) {
|
||||
ix2 = ix1 + dix1 * barb / 2.0;
|
||||
jy2 = jy1 - djy1 * barb / 2.0;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 },
|
||||
{ ix1, jy1 } });
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintArrow(Coordinate plotLoc, double adjSize, double mag,
|
||||
double dir) {
|
||||
paintPoint(plotLoc, adjSize);
|
||||
|
||||
double staff = 0.0;
|
||||
|
||||
double logFactor = this.scale;
|
||||
|
||||
// linear scaling
|
||||
if (logFactor == 0.00) {
|
||||
staff = mag * size / maxLimit;
|
||||
} else {
|
||||
double pcentRange = mag / maxLimit;
|
||||
double lg = Math.log(logFactor + pcentRange);
|
||||
double pcentLog = (lg - minLog) / (maxLog - minLog);
|
||||
staff = pcentLog * size;
|
||||
}
|
||||
|
||||
double barb = staff / 7.0;
|
||||
|
||||
// if (staff < barb) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
double ratio = adjSize / size;
|
||||
staff *= ratio;
|
||||
barb *= ratio;
|
||||
|
||||
// DIRECTIONS
|
||||
double uudd = -mag * Math.sin(dir);
|
||||
double vvff = -mag * Math.cos(dir);
|
||||
double dix = uudd / mag;
|
||||
double djy = vvff / mag;
|
||||
double dix1 = -dix - djy;
|
||||
double djy1 = dix - djy;
|
||||
double dix2 = -dix + djy;
|
||||
double djy2 = -dix - djy;
|
||||
|
||||
// DRAW BODY OF ARROW
|
||||
double ix2 = plotLoc.x;
|
||||
double jy2 = plotLoc.y;
|
||||
double ix1 = ix2 + dix * staff;
|
||||
double jy1 = jy2 - djy * staff;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 }, { ix1, jy1 } });
|
||||
// DRAW HEAD OF ARROW.
|
||||
ix2 = ix1 + dix1 * barb;
|
||||
jy2 = jy1 - djy1 * barb;
|
||||
double ix3 = ix1 + dix2 * barb;
|
||||
double jy3 = jy1 - djy2 * barb;
|
||||
lastShape.addLineSegment(new double[][] { { ix2, jy2 }, { ix1, jy1 },
|
||||
{ ix3, jy3 } });
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.gfe.rsc;
|
||||
|
||||
import com.raytheon.uf.viz.core.IGraphicsTarget;
|
||||
import com.raytheon.uf.viz.core.drawables.IDescriptor;
|
||||
import com.raytheon.viz.core.contours.util.IVectorGraphicsRenderableFactory;
|
||||
import com.raytheon.viz.core.contours.util.VectorGraphicsRenderable;
|
||||
|
||||
/**
|
||||
* GFE VectorGraphicsRenderable Factory
|
||||
*
|
||||
* Constructs the VectorGraphicsRenderable for GFE usage of GriddedVectorDisplay
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 22, 2013 #2287 randerso Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author randerso
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class GFEVectorGraphicsRenderableFactory implements
|
||||
IVectorGraphicsRenderableFactory {
|
||||
private double logFactor;
|
||||
|
||||
private double maxLimit;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param logFactor
|
||||
* logFactor scaling value from parm_arrowScaling preference
|
||||
* @param maxLimit
|
||||
* max allowable value for parm
|
||||
*/
|
||||
public GFEVectorGraphicsRenderableFactory(double logFactor, double maxLimit) {
|
||||
this.logFactor = logFactor;
|
||||
this.maxLimit = maxLimit;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.viz.core.contours.util.IVectorGraphicsRenderableFactory#
|
||||
* createRenderable(com.raytheon.uf.viz.core.drawables.IDescriptor,
|
||||
* com.raytheon.uf.viz.core.IGraphicsTarget, double)
|
||||
*/
|
||||
@Override
|
||||
public VectorGraphicsRenderable createRenderable(IDescriptor descriptor,
|
||||
IGraphicsTarget target, double size) {
|
||||
return new GFEVectorGraphicsRenderable(descriptor, target, size,
|
||||
logFactor, maxLimit);
|
||||
}
|
||||
|
||||
}
|
|
@ -62,9 +62,11 @@ import com.raytheon.viz.gfe.actions.SetDiscretePickupAction;
|
|||
import com.raytheon.viz.gfe.actions.SetDiscreteWxPickupAction;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.ISpatialDisplayManager;
|
||||
import com.raytheon.viz.gfe.core.msgs.GridDataChangedMsg;
|
||||
import com.raytheon.viz.gfe.core.msgs.IDisplayModeChangedListener;
|
||||
import com.raytheon.viz.gfe.core.msgs.IDisplayedParmListChangedListener;
|
||||
import com.raytheon.viz.gfe.core.msgs.IPickupValueChangedListener;
|
||||
import com.raytheon.viz.gfe.core.msgs.ISpatialEditorTimeChangedListener;
|
||||
import com.raytheon.viz.gfe.core.msgs.Message;
|
||||
import com.raytheon.viz.gfe.core.msgs.Message.IMessageClient;
|
||||
import com.raytheon.viz.gfe.core.msgs.ShowQuickViewDataMsg;
|
||||
|
@ -100,6 +102,7 @@ import com.raytheon.viz.ui.input.InputAdapter;
|
|||
* Changes for non-blocking SetValueDialog.
|
||||
* 01/23/2013 #1524 randerso Fix error when clicking on discrete color bar when
|
||||
* no grid exists
|
||||
* 08/27/2013 #2287 randerso Fixed fitToDataColorTable for Single Grids
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -110,7 +113,7 @@ public class GFEColorbarResource extends
|
|||
AbstractVizResource<GFEResourceData, IMapDescriptor> implements
|
||||
IContextMenuProvider, IPickupValueChangedListener,
|
||||
IDisplayModeChangedListener, IMessageClient,
|
||||
IDisplayedParmListChangedListener {
|
||||
IDisplayedParmListChangedListener, ISpatialEditorTimeChangedListener {
|
||||
|
||||
public static final double HEIGHT = 25.0;
|
||||
|
||||
|
@ -317,6 +320,8 @@ public class GFEColorbarResource extends
|
|||
dManager.getParmManager().removeDisplayedParmListChangedListener(this);
|
||||
dManager.getSpatialDisplayManager().removeDisplayModeChangedListener(
|
||||
this);
|
||||
dManager.getSpatialDisplayManager()
|
||||
.removeSpatialEditorTimeChangedListener(this);
|
||||
|
||||
IDisplayPaneContainer container = getResourceContainer();
|
||||
if (container != null) {
|
||||
|
@ -324,6 +329,7 @@ public class GFEColorbarResource extends
|
|||
}
|
||||
|
||||
Message.unregisterInterest(this, ShowQuickViewDataMsg.class);
|
||||
Message.unregisterInterest(this, GridDataChangedMsg.class);
|
||||
|
||||
if (colorbarScaleFont != null) {
|
||||
colorbarScaleFont.dispose();
|
||||
|
@ -358,9 +364,12 @@ public class GFEColorbarResource extends
|
|||
@Override
|
||||
protected void initInternal(IGraphicsTarget target) throws VizException {
|
||||
dManager.getSpatialDisplayManager().addDisplayModeChangedListener(this);
|
||||
dManager.getSpatialDisplayManager()
|
||||
.addSpatialEditorTimeChangedListener(this);
|
||||
dManager.getParmManager().addDisplayedParmListChangedListener(this);
|
||||
|
||||
Message.registerInterest(this, ShowQuickViewDataMsg.class);
|
||||
Message.registerInterest(this, GridDataChangedMsg.class);
|
||||
|
||||
colorbarScaleFont = GFEFonts.makeGFEIFont(target, "ColorBarScale_font",
|
||||
1);
|
||||
|
@ -680,6 +689,16 @@ public class GFEColorbarResource extends
|
|||
parm = gridId.getParm();
|
||||
}
|
||||
updateColorbar(parm);
|
||||
} else if (message instanceof GridDataChangedMsg) {
|
||||
GridDataChangedMsg msg = (GridDataChangedMsg) message;
|
||||
if (currentParm != null
|
||||
&& msg.getParmID().equals(currentParm.getParmID())
|
||||
&& msg.getTimeRange().contains(
|
||||
currentParm.getDataManager()
|
||||
.getSpatialDisplayManager()
|
||||
.getSpatialEditorTime())) {
|
||||
checkFitToData();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -689,6 +708,10 @@ public class GFEColorbarResource extends
|
|||
* continuous colorbar range.
|
||||
*/
|
||||
protected void checkFitToData() {
|
||||
if (currentParm == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String parmName = currentParm.getParmID().getParmName();
|
||||
String fitToDataPref = parmName + "_fitToDataColorTable";
|
||||
if (GFEPreference.contains(fitToDataPref)) {
|
||||
|
@ -836,4 +859,9 @@ public class GFEColorbarResource extends
|
|||
updateColorbar(normalParm);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spatialEditorTimeChanged(Date date) {
|
||||
checkFitToData();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,6 +50,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Apr 23, 2010 bsteffen Initial creation
|
||||
* Aug 27, 2013 #2287 randerso Added densityFactor to allow application specific
|
||||
* adjustment of density.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -68,13 +70,17 @@ public class GriddedIconDisplay extends AbstractGriddedDisplay<IImage> {
|
|||
private PointIconFactory iconFactory;
|
||||
|
||||
/**
|
||||
* @param values
|
||||
* @param descriptor
|
||||
* @param gridGeometryOfGrid
|
||||
* @param imageSize
|
||||
* @param densityFactor
|
||||
* adjustment factor to make density match A1
|
||||
*/
|
||||
public GriddedIconDisplay(float[] values, IMapDescriptor descriptor,
|
||||
GeneralGridGeometry gridGeometryOfGrid, int imageSize) {
|
||||
super(descriptor, gridGeometryOfGrid, imageSize);
|
||||
GeneralGridGeometry gridGeometryOfGrid, int imageSize,
|
||||
double densityFactor) {
|
||||
super(descriptor, gridGeometryOfGrid, imageSize, densityFactor);
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
|
@ -126,6 +132,7 @@ public class GriddedIconDisplay extends AbstractGriddedDisplay<IImage> {
|
|||
return (int) values[idx];
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setColor(RGB color) {
|
||||
if (super.setColor(color)) {
|
||||
iconFactory = null;
|
||||
|
@ -166,8 +173,8 @@ public class GriddedIconDisplay extends AbstractGriddedDisplay<IImage> {
|
|||
if (renderable.resource != empty) {
|
||||
PointImage image = new PointImage(renderable.resource,
|
||||
renderable.plotLocation);
|
||||
image.setHeight((double) size * magnification);
|
||||
image.setWidth((double) size * magnification);
|
||||
image.setHeight(size * magnification);
|
||||
image.setWidth(size * magnification);
|
||||
images.add(image);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -87,6 +87,7 @@ import com.raytheon.viz.core.contours.rsc.displays.AbstractGriddedDisplay;
|
|||
import com.raytheon.viz.core.contours.rsc.displays.GriddedContourDisplay;
|
||||
import com.raytheon.viz.core.contours.rsc.displays.GriddedStreamlineDisplay;
|
||||
import com.raytheon.viz.core.contours.rsc.displays.GriddedVectorDisplay;
|
||||
import com.raytheon.viz.core.contours.util.VectorGraphicsRenderableFactory;
|
||||
import com.raytheon.viz.core.drawables.ColorMapParameterFactory;
|
||||
import com.raytheon.viz.core.rsc.displays.GriddedImageDisplay2;
|
||||
import com.raytheon.viz.core.style.arrow.ArrowPreferences;
|
||||
|
@ -111,6 +112,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* May 08, 2013 1980 bsteffen Set paint status in GridResources for
|
||||
* KML.
|
||||
* Jul 15, 2013 2107 bsteffen Fix sampling of grid vector arrows.
|
||||
* Aug 27, 2013 2287 randerso Added new parameters required by GriddedVectorDisplay
|
||||
* and GriddedIconDisplay
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -154,13 +157,14 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
|||
protected AbstractGridResource(T resourceData, LoadProperties loadProperties) {
|
||||
super(resourceData, loadProperties);
|
||||
resourceData.addChangeListener(new IResourceDataChanged() {
|
||||
@Override
|
||||
public void resourceChanged(ChangeType type, Object object) {
|
||||
if (type == ChangeType.DATA_UPDATE) {
|
||||
if (object instanceof PluginDataObject) {
|
||||
addDataObject((PluginDataObject) object);
|
||||
} else if (object instanceof PluginDataObject[]) {
|
||||
for (PluginDataObject pdo : (PluginDataObject[]) object) {
|
||||
addDataObject((PluginDataObject) pdo);
|
||||
addDataObject(pdo);
|
||||
}
|
||||
} else if (object instanceof Object[]) {
|
||||
for (Object obj : (Object[]) object) {
|
||||
|
@ -489,9 +493,10 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
|||
case ARROW:
|
||||
case DUALARROW:
|
||||
convertData(data);
|
||||
VectorGraphicsRenderableFactory factory = new VectorGraphicsRenderableFactory();
|
||||
GriddedVectorDisplay vectorDisplay = new GriddedVectorDisplay(
|
||||
data.getMagnitude(), data.getDirection(), descriptor,
|
||||
gridGeometry, 64, displayType);
|
||||
gridGeometry, 64, 0.75, true, displayType, factory);
|
||||
vectorDisplay.setColor(getCapability(ColorableCapability.class)
|
||||
.getColor());
|
||||
vectorDisplay.setLineStyle(getCapability(OutlineCapability.class)
|
||||
|
@ -504,14 +509,15 @@ public abstract class AbstractGridResource<T extends AbstractResourceData>
|
|||
MagnificationCapability.class).getMagnification());
|
||||
if (stylePreferences != null
|
||||
&& stylePreferences instanceof ArrowPreferences) {
|
||||
vectorDisplay.setScale(((ArrowPreferences) stylePreferences)
|
||||
factory.setScale(((ArrowPreferences) stylePreferences)
|
||||
.getScale());
|
||||
}
|
||||
renderable = vectorDisplay;
|
||||
break;
|
||||
case ICON:
|
||||
GriddedIconDisplay iconDisplay = new GriddedIconDisplay(data
|
||||
.getScalarData().array(), descriptor, gridGeometry, 80);
|
||||
.getScalarData().array(), descriptor, gridGeometry, 80,
|
||||
0.75);
|
||||
iconDisplay.setColor(getCapability(ColorableCapability.class)
|
||||
.getColor());
|
||||
iconDisplay.setDensity(getCapability(DensityCapability.class)
|
||||
|
|
|
@ -79,6 +79,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* constructor to avoid duplicate data
|
||||
* requests.
|
||||
* Jul 15, 2013 2107 bsteffen Fix sampling of grid vector arrows.
|
||||
* Aug 27, 2013 2287 randerso Removed 180 degree adjustment required by error
|
||||
* in Maputil.rotation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -174,7 +176,7 @@ public class D2DGridResource extends GridResource<GridResourceData> implements
|
|||
crs2ll.transform(dp, dp);
|
||||
Coordinate ll = new Coordinate(dp.x, dp.y);
|
||||
float rot = (float) MapUtil.rotation(ll, geom);
|
||||
dir = (dir + rot + 180) % 360;
|
||||
dir = (dir + rot) % 360;
|
||||
data.getScalarData().put(index, dir);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,6 +59,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 09, 2011 bsteffen Initial creation
|
||||
* Jul 17, 2013 2185 bsteffen Cache computed grid reprojections.
|
||||
* Aug 27, 2013 2287 randerso Removed 180 degree adjustment required by error
|
||||
* in Maputil.rotation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -250,8 +252,8 @@ public class GeneralGridData {
|
|||
Coordinate ll = new Coordinate(dp.x, dp.y);
|
||||
double rot = MapUtil.rotation(ll, newGeom);
|
||||
double rot2 = MapUtil.rotation(ll, gridGeometry);
|
||||
double cos = Math.cos(Math.toRadians(180 + rot - rot2));
|
||||
double sin = Math.sin(Math.toRadians(180 + rot - rot2));
|
||||
double cos = Math.cos(Math.toRadians(rot - rot2));
|
||||
double sin = Math.sin(Math.toRadians(rot - rot2));
|
||||
double u = udata[index];
|
||||
double v = vdata[index];
|
||||
udata[index] = (float) (cos * u - sin * v);
|
||||
|
|
|
@ -381,6 +381,7 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
|
|||
final QcPrecipOptionsDialog dialog = new QcPrecipOptionsDialog(
|
||||
getParentShell().getShell());
|
||||
display.asyncExec(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dialog.open();
|
||||
}
|
||||
|
@ -407,6 +408,7 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
|
|||
final QcTempOptionsDialog dialog = new QcTempOptionsDialog(
|
||||
getParentShell().getShell());
|
||||
display.asyncExec(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dialog.open();
|
||||
}
|
||||
|
@ -433,6 +435,7 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
|
|||
final QcFreezeOptionsDialog dialog = new QcFreezeOptionsDialog(
|
||||
getParentShell().getShell());
|
||||
display.asyncExec(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dialog.open();
|
||||
}
|
||||
|
@ -559,7 +562,7 @@ public class ChooseDataPeriodDialog extends CaveJFACEDialog {
|
|||
j = area_names.length();
|
||||
}
|
||||
aList.add(area_names.substring(i, j));
|
||||
i += j + 1;
|
||||
i = j + 1;
|
||||
}
|
||||
} else {
|
||||
aList.add(0, area_names.trim());
|
||||
|
|
|
@ -55,6 +55,8 @@ import com.raytheon.viz.mpe.util.DailyQcUtils.Maps;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 4, 2009 snaples Initial creation
|
||||
* Aug 12, 2013 16490 snaples Fixed mapping of hrap grid to basins
|
||||
* in get_basin_data
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -75,7 +77,6 @@ public class GetBasinData {
|
|||
int ib, l, numpts, ip, x, y, ip2, ip3, ip4, i;
|
||||
int hrap_basin_flag = 1;
|
||||
double lat, lon;
|
||||
int m;
|
||||
int mm;
|
||||
int num_points;
|
||||
File basin_f = new File(basin_file);
|
||||
|
@ -150,20 +151,14 @@ public class GetBasinData {
|
|||
ib++;
|
||||
}
|
||||
|
||||
// mean_areal_precip_global[ib] = dc.new Maps();
|
||||
// mean_areal_precip_global[ib].hb5 = "";
|
||||
maxib = ib;
|
||||
System.out.println("Size of map array is : " + maxib + " basins");
|
||||
s.close();
|
||||
in.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
return false;
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
return false;
|
||||
} catch (NumberFormatException e) {
|
||||
|
@ -192,7 +187,6 @@ public class GetBasinData {
|
|||
mean_areal_precip_global[ib].tmaps_done = new int[200];
|
||||
mean_areal_precip_global[ib].zmaps_done = new int[200];
|
||||
|
||||
// for (m = 0; m < 200; m++) {
|
||||
Arrays.fill(mean_areal_precip_global[ib].gz, -1);
|
||||
Arrays.fill(mean_areal_precip_global[ib].uz, -1);
|
||||
Arrays.fill(mean_areal_precip_global[ib].mz, -1);
|
||||
|
@ -209,30 +203,31 @@ public class GetBasinData {
|
|||
Arrays.fill(mean_areal_precip_global[ib].tmaps_done, -1);
|
||||
Arrays.fill(mean_areal_precip_global[ib].zmaps_done, -1);
|
||||
|
||||
// }
|
||||
}
|
||||
if (hrap_basin_flag == 1) {
|
||||
try {
|
||||
System.out.println("Reading basin data from file.");
|
||||
System.out.println("Reading hrap basin data from file.");
|
||||
long basin_start = System.currentTimeMillis();
|
||||
in = new BufferedReader(new FileReader(hrap_f));
|
||||
char eb[] = new char[100];
|
||||
Scanner s = new Scanner(in);
|
||||
String eb = new String();
|
||||
for (ib = 0; ib < maxib; ib++) {
|
||||
in.read(eb, 0, 80);
|
||||
int p = new String(eb).indexOf('\n');
|
||||
eb = in.readLine(); //(eb, 0, 80);
|
||||
int p = eb.length(); //new String(eb).indexOf('\n');
|
||||
|
||||
if (p != -1) {
|
||||
p = 0;
|
||||
}
|
||||
|
||||
String t = new String(eb);
|
||||
Scanner s = new Scanner(t);
|
||||
eb = eb.trim();
|
||||
s = new Scanner(eb);
|
||||
Pattern pc = Pattern.compile("\\s*[A-Z]+$");
|
||||
|
||||
numpts = s.nextInt();
|
||||
mean_areal_precip_global[ib].hrap_points = numpts;
|
||||
String bchar = "";
|
||||
bchar = s.findInLine("*$");
|
||||
mean_areal_precip_global[ib].bchar = bchar;
|
||||
bchar = s.findInLine(pc);
|
||||
mean_areal_precip_global[ib].bchar = bchar.trim();
|
||||
mean_areal_precip_global[ib].hrap_data = new Hrap_Data[numpts];
|
||||
|
||||
for (mm = 0; mm < 4; mm++) {
|
||||
|
@ -240,42 +235,34 @@ public class GetBasinData {
|
|||
}
|
||||
|
||||
for (l = 0; l < numpts; l++) {
|
||||
Hrap_Data d = dc.new Hrap_Data();
|
||||
mean_areal_precip_global[ib].hrap_data[l] = d;
|
||||
|
||||
for (mm = 0; mm < 4; mm++) {
|
||||
mean_areal_precip_global[ib].hrap_data[l].zone[mm] = -1;
|
||||
}
|
||||
|
||||
p = in.read(eb, 0, 100);
|
||||
eb = in.readLine(); //(eb, 0, 100);
|
||||
eb = eb.trim();
|
||||
p = eb.length();
|
||||
|
||||
if (p == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
t = new String(eb);
|
||||
|
||||
// ier = sscanf (ibuf, "%d %d %d %d %d %d\n", &x, &y,
|
||||
// &ip, &ip2, &ip3,&ip4);
|
||||
|
||||
s = new Scanner(eb);
|
||||
x = s.nextInt();
|
||||
y = s.nextInt();
|
||||
if (s.hasNextInt()) {
|
||||
ip = s.nextInt();
|
||||
|
||||
if (ip < 0 || ip > 4) {
|
||||
System.out
|
||||
.println("HRAP error in read_basin_data routine.\n");
|
||||
return false;
|
||||
}
|
||||
ip2 = s.nextInt();
|
||||
ip3 = s.nextInt();
|
||||
ip4 = s.nextInt();
|
||||
|
||||
mean_areal_precip_global[ib].hrap_data[l].x = x;
|
||||
mean_areal_precip_global[ib].hrap_data[l].y = y;
|
||||
mean_areal_precip_global[ib].hrap_data[l].zone[ip - 1] = 1;
|
||||
mean_areal_precip_global[ib].zones[0] = 1;
|
||||
|
||||
if (s.hasNextInt()) {
|
||||
ip2 = s.nextInt();
|
||||
if (ip2 < 0 || ip2 > 4) {
|
||||
System.out
|
||||
.println("HRAP error in read_basin_data routine.\n");
|
||||
|
@ -288,7 +275,7 @@ public class GetBasinData {
|
|||
}
|
||||
|
||||
if (s.hasNextInt()) {
|
||||
|
||||
ip3 = s.nextInt();
|
||||
if (ip3 < 0 || ip3 > 4) {
|
||||
System.out
|
||||
.println("HRAP error in read_basin_data routine.\n");
|
||||
|
@ -301,7 +288,7 @@ public class GetBasinData {
|
|||
}
|
||||
|
||||
if (s.hasNextInt()) {
|
||||
|
||||
ip4 = s.nextInt();
|
||||
if (ip4 < 0 || ip4 > 4) {
|
||||
System.out
|
||||
.println("HRAP error in read_basin_data routine.\n");
|
||||
|
@ -315,22 +302,18 @@ public class GetBasinData {
|
|||
|
||||
}
|
||||
}
|
||||
System.out
|
||||
.println("Finished reading basin data from file, elapsed time: "
|
||||
+ (System.currentTimeMillis() - basin_start)
|
||||
+ " ms");
|
||||
s.close();
|
||||
in.close();
|
||||
}
|
||||
System.out
|
||||
.println("Finished reading basin data from file, elapsed time: "
|
||||
+ (System.currentTimeMillis() - basin_start)
|
||||
+ " ms");
|
||||
s.close();
|
||||
in.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
return false;
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
return false;
|
||||
|
|
|
@ -47,697 +47,123 @@ import com.raytheon.viz.mpe.util.DailyQcUtils.Station;
|
|||
|
||||
public class RenderPcp {
|
||||
|
||||
private static boolean first = true;
|
||||
|
||||
Pcp pcp = DailyQcUtils.pcp;
|
||||
|
||||
/*
|
||||
* QC codes
|
||||
*/
|
||||
private static final int MISSING = -1;
|
||||
|
||||
private static final int STANDARD = 0;
|
||||
|
||||
private static final int FAILED = 1;
|
||||
|
||||
private static final int MANUAL = 2;
|
||||
|
||||
private static final int QUESTIONABLE = 3;
|
||||
|
||||
private static final int PARTIAL = 4;
|
||||
|
||||
private static final int ESTIMATED = 5;
|
||||
|
||||
private static final int TIMEDISTRIBUTED = 6;
|
||||
|
||||
private static final int VERIFIED = 8;
|
||||
|
||||
/**
|
||||
* Converts point precipitation data in struct pdata to hrap grid. The 20
|
||||
* closest stations are precalculated for each grid point - this speeds
|
||||
* computations for data sets with many precipitation points. If there are
|
||||
* no good precipitation points for a grid point, then a recalculation is
|
||||
* made using all precipitation points. 1/R**2 interpolation is used. If
|
||||
* requested, the final interpolation is scaled using seasonal isohyets. The
|
||||
* grid is saved as a disk file and used later for a raster or vector (HRAP)
|
||||
* plot.
|
||||
*
|
||||
* @param m
|
||||
* @param k
|
||||
* @param mk
|
||||
* @param numPstations
|
||||
* @param precip_stations
|
||||
* @param hrap_grid
|
||||
* @param pdata
|
||||
* @param pcp_in_use
|
||||
*/
|
||||
public void render_pcp(int pcpn_day, int pcpn_time, int pcpn_time_step,
|
||||
int numPstations, ArrayList<Station> precip_stations,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
int isom = DailyQcUtils.isom;
|
||||
int method = DailyQcUtils.method;
|
||||
int mpe_dqc_max_precip_neighbors = DailyQcUtils.mpe_dqc_max_precip_neighbors;
|
||||
int i, j, h, hh, time_pos, htotal;
|
||||
double distance, dist1, dist2, dist, value;
|
||||
double temp;
|
||||
int totals[] = new int[5];
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
totals[i] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pcpn_time_step is a function parameter. It specifies whether to
|
||||
* interpolate 6hr or 24hr HRAP grid
|
||||
*/
|
||||
/*
|
||||
* pcpn_time is a function parameter. It specifies which 6hr HRAP grid
|
||||
* to generate. It takes 0,1,2,or 3 to represent different 6hr period of
|
||||
* a day.
|
||||
*/
|
||||
/*
|
||||
* time_pos is assigned a value of 0,1,2,or 3 (for 6hr data) or 4 (for
|
||||
* 24hr data). This value is used in
|
||||
* pdata[pcpn_day].stn[hh].frain[time_pos].data to control whether to
|
||||
* retrieve 6hr data or 24hr data.
|
||||
*/
|
||||
if (pcpn_time_step == 0) {
|
||||
time_pos = pcpn_time; // for 6 hour data: 0,1,2,3.
|
||||
} else {
|
||||
time_pos = 4; // for 24 hour data
|
||||
|
||||
/*
|
||||
* in case the 24hr grid rendering is required, we check
|
||||
* 24hr_grid_gen_method_token() to determine how to generate the
|
||||
* grid. New Post OB9.2
|
||||
*/
|
||||
|
||||
if (getTokenValue24hrGridGenMeth() == 1) {
|
||||
render24hrPcpUsingFour6hr(pcpn_day, pcpn_time, numPstations,
|
||||
precip_stations, hrap_grid, pdata, pcp_in_use);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* begin to interpolate value for each bin in the HRAP grid */
|
||||
/*
|
||||
* to interpolate, two quantities are needed first: value and distance.
|
||||
* They are calculated by using the neighboring stations.
|
||||
*/
|
||||
for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
/*
|
||||
* Check if the grid cell is covered by an HSA. If not, then do
|
||||
* not estimate precipitation for it.
|
||||
*/
|
||||
if (hrap_grid.owner[i][j] == -1) {
|
||||
pcp.value[i][j] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
value = 0.0;
|
||||
distance = 0.0;
|
||||
htotal = 0;
|
||||
|
||||
/*
|
||||
* the following for loop is to calculate two quantities: value
|
||||
* and distance, which later on, are used to interpret the HRAP
|
||||
* grid.
|
||||
*/
|
||||
/*
|
||||
* It uses neighbor stations of a HRAP grid bin to calculate
|
||||
* value and distance.
|
||||
*/
|
||||
/* for each neighbor station of the grid bin, do the following */
|
||||
|
||||
/* For each of the closest stations. */
|
||||
for (h = 0; h < mpe_dqc_max_precip_neighbors; h++) {
|
||||
hh = hrap_grid.gage[i][j].index[h];
|
||||
// hh is index of stations
|
||||
if (pdata[pcpn_day].stn[hh].frain[time_pos].data < 0) {
|
||||
/* No precip data. */
|
||||
continue;
|
||||
} // frain refers to level 2 data; rrain refers to level 1
|
||||
|
||||
if (method == 2 && precip_stations.get(hh).isoh[isom] <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pdata[pcpn_day].stn[hh].frain[time_pos].qual != 0
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 8
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 6
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 3
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 4
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 2) {
|
||||
/* The station has a bad qc flag. Do not use it. */
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the coordinates of the grid and station in
|
||||
* lat/lon into distance.
|
||||
*/
|
||||
dist1 = (i + (hrap_grid.hrap_minx - precip_stations.get(hh).hrap_x));
|
||||
dist2 = (j + (hrap_grid.hrap_miny - precip_stations.get(hh).hrap_y));
|
||||
|
||||
dist = Math.pow(dist1, 2) + Math.pow(dist2, 2);
|
||||
|
||||
if (dist < .00001) {
|
||||
dist = .00001;
|
||||
}
|
||||
|
||||
dist = 1 / dist;
|
||||
|
||||
temp = pdata[pcpn_day].stn[hh].frain[time_pos].data * dist;
|
||||
|
||||
if (method == 2 && precip_stations.get(hh).isoh[isom] > 0) {
|
||||
temp = temp * hrap_grid.isoh[isom][i][j]
|
||||
/ (precip_stations.get(hh).isoh[isom] * 25.4);
|
||||
}
|
||||
|
||||
value = value + temp;
|
||||
|
||||
distance = distance + dist;
|
||||
|
||||
htotal++;
|
||||
|
||||
if (htotal == 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* end for loop (h = 0; h < mpe_dqc_max_precip_neighbors;h++)
|
||||
* the above for loop is for each neighbor station.
|
||||
*/
|
||||
/*
|
||||
* the above for loop is to calculate value and distance, which
|
||||
* later on, are used to interpret the HRAP grid
|
||||
*/
|
||||
|
||||
/*
|
||||
* the resulting htotal is the valid number of neighbor stations
|
||||
* that are used to calculate value and distance, which later
|
||||
* on, are used to interpret the HRAP grid
|
||||
*/
|
||||
|
||||
/*
|
||||
* if there is not enough valid neighbor station, such as htotal
|
||||
* <4, the code below handle this situation. Basically, the code
|
||||
* recalculate the value and distance using all the stations --
|
||||
* see the for (h = 0; h < max_stations; h++) loop below.
|
||||
*/
|
||||
if (htotal < 4) {
|
||||
|
||||
value = 0.0;
|
||||
distance = 0.0;
|
||||
htotal = 0;
|
||||
|
||||
for (h = 0; h < numPstations; h++) {
|
||||
if (pdata[pcpn_day].stn[h].frain[time_pos].data < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pdata[pcpn_day].stn[h].frain[time_pos].qual != 0
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 8
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 6
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 3
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 4
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (method == 2
|
||||
&& precip_stations.get(h).isoh[isom] <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
dist1 = (i + (hrap_grid.hrap_minx - precip_stations
|
||||
.get(h).hrap_x));
|
||||
dist2 = (j + (hrap_grid.hrap_miny - precip_stations
|
||||
.get(h).hrap_y));
|
||||
|
||||
dist = Math.pow(dist1, 2) + Math.pow(dist2, 2);
|
||||
|
||||
/*
|
||||
* if distance from grid box to station is >
|
||||
* mpe_dqc_grid_max_distbins,
|
||||
*/
|
||||
/* then do not use station */
|
||||
if (dist < .00001) {
|
||||
dist = .00001;
|
||||
}
|
||||
|
||||
else if (Math.sqrt(dist) > DailyQcUtils.mpe_dqc_grid_max_dist) {
|
||||
continue;
|
||||
}
|
||||
dist = 1 / dist;
|
||||
|
||||
temp = pdata[pcpn_day].stn[h].frain[time_pos].data
|
||||
* dist;
|
||||
|
||||
if (method == 2
|
||||
&& precip_stations.get(h).isoh[isom] > 0) {
|
||||
temp = temp
|
||||
* hrap_grid.isoh[isom][i][j]
|
||||
/ (precip_stations.get(h).isoh[isom] * 25.4);
|
||||
}
|
||||
|
||||
value = value + temp;
|
||||
|
||||
distance = distance + dist;
|
||||
|
||||
htotal++;
|
||||
|
||||
}
|
||||
|
||||
}/* end the handling of special case : if (htotal < 4), */
|
||||
/* which means there is no enough neighboring stations */
|
||||
|
||||
if (htotal == 0) {
|
||||
pcp.value[i][j] = 0;
|
||||
} else {
|
||||
pcp.value[i][j] = (int) (value / distance * 100.0);
|
||||
}
|
||||
// if (htotal != 0) {
|
||||
// pcp.value[i][j] += (int) (value / distance * 100);
|
||||
// }
|
||||
if (pcp.value[i][j] < .01) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
}
|
||||
} // end of the ( k = 0; k<4; k++) loop, which interpolates 4 6hr HRAP
|
||||
// grid.
|
||||
|
||||
/* final adjustment of the pcp->value */
|
||||
// for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
// hrap_grid comes from the function parameter
|
||||
// for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
//
|
||||
// if (pcp.value[i][j] < .01) {
|
||||
// pcp.value[i][j] = 0;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (pcpn_time_step == 0) {
|
||||
time_pos = pcpn_day * 4 + 3 - pcpn_time;
|
||||
} else {
|
||||
time_pos = 40 + pcpn_day;
|
||||
}
|
||||
// notice that time_pos is a variable defined inside the function, and
|
||||
// its value do not need to be limited as 0,1,2,3,or 4. Here it is
|
||||
// assigned with bigger numbers.
|
||||
// time_pos = 40 + pcpn_day;
|
||||
|
||||
// pcp_in_use[i] = 1 -- grids rendered via Render button OR Save Level2
|
||||
// option
|
||||
// = -1 --grids for this time period not rendered (initialization value)
|
||||
pcp_in_use[time_pos] = 1;
|
||||
|
||||
ReadQPFGrids rqp = new ReadQPFGrids();
|
||||
rqp.write_file("pcp", time_pos, pcp);
|
||||
}
|
||||
|
||||
/*
|
||||
* get the token value of token mpe_24hr_grid_gen_method. This token will
|
||||
* determine how we generate the 24hr grid. We can either use the 24hr gage
|
||||
* values, which is the old way, or we can use four 6hr gage values and add
|
||||
* them together.
|
||||
*/
|
||||
/* there is some problem with the static */
|
||||
|
||||
/**
|
||||
* @param pcpn_day
|
||||
* @param pcpn_time
|
||||
* @param numPstations
|
||||
* @param precip_stations
|
||||
* @param hrap_grid
|
||||
* @param pdata
|
||||
* @param pcp_in_use
|
||||
*/
|
||||
private void render24hrPcpUsingFour6hr(int pcpn_day, int pcpn_time,
|
||||
int numPstations, ArrayList<Station> precip_stations,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
int i, j, k, h, hh, time_pos, htotal;
|
||||
double distance, dist1, dist2, dist, value;
|
||||
double temp;
|
||||
int isom = DailyQcUtils.isom;
|
||||
int method = DailyQcUtils.method;
|
||||
int totals[] = new int[5];
|
||||
int all_total = 0;
|
||||
int neighbor_total = 0;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
totals[i] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pcpn_time_step is function parameter. It specifies whether to
|
||||
* interpolate 6hr or 24hr HRAP grid
|
||||
*/
|
||||
/*
|
||||
* pcpn_time is a function parameter. It specifies which 6hr HRAP grid
|
||||
* to generate. It takes 0,1,2,or 3 to represent different 6hr period of
|
||||
* a day.
|
||||
*/
|
||||
/*
|
||||
* time_pos is assigned a value of 0,1,2,or 3 (for 6hr data) or 4 (for
|
||||
* 24hr data). This value is used in
|
||||
* pdata[pcpn_day].stn[hh].frain[time_pos].data to control whether to
|
||||
* retrieve 6hr data or 24hr data.
|
||||
*/
|
||||
|
||||
/* initialization of the pcp->value */
|
||||
for (i = 0; i < hrap_grid.maxi; i++) { /*
|
||||
* hrap_grid comes from the
|
||||
* function parameter
|
||||
*/
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* begin to interpolate 4 6hr grids. At the end of each iteration, the
|
||||
* calculated interpolation value is added to pcp->value[i][j].
|
||||
*/
|
||||
/*
|
||||
* time_pos is assigned a value of 0,1,2,or 3 (for four 6hr data). This
|
||||
* value is used in pdata[pcpn_day].stn[hh].frain[time_pos].data to
|
||||
* retrieve 6hr data.
|
||||
*/
|
||||
for (k = 0; k < 4; k++) {
|
||||
time_pos = k; /* for 6 hour data: 0, 1,2,3. */
|
||||
|
||||
/* begin to interpolate value for each bin in the HRAP grid */
|
||||
/*
|
||||
* to interpolate, two quantities are needed first: value and
|
||||
* distance. They are calculated by using the neighboring stations.
|
||||
*/
|
||||
|
||||
for (i = 0; i < hrap_grid.maxi; i++) { /*
|
||||
* hrap_grid comes from the
|
||||
* function parameter
|
||||
*/
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
/*
|
||||
* Check if the grid cell is covered by an HSA. If not, then
|
||||
* do not estimate precipitation for it.
|
||||
*/
|
||||
if (hrap_grid.owner[i][j] == -1) {
|
||||
pcp.value[i][j] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
value = 0.0;
|
||||
distance = 0.0;
|
||||
htotal = 0;
|
||||
|
||||
/*
|
||||
* the following for loop is to calculate two quantities:
|
||||
* value and distance, which later on, are used to interpret
|
||||
* the HRAP grid.
|
||||
*/
|
||||
/*
|
||||
* It uses neighbor stations of a HRAP grid bin to calculate
|
||||
* value and distance.
|
||||
*/
|
||||
/*
|
||||
* for each neighbor station of the grid bin, do the
|
||||
* following
|
||||
*/
|
||||
int mpe_dqc_max_precip_neighbors = DailyQcUtils.mpe_dqc_max_precip_neighbors;
|
||||
|
||||
for (h = 0; h < mpe_dqc_max_precip_neighbors; h++) {
|
||||
hh = hrap_grid.gage[i][j].index[h];/*
|
||||
* hh is index of
|
||||
* stations
|
||||
*/
|
||||
|
||||
if (pdata[pcpn_day].stn[hh].frain[time_pos].data < 0) {
|
||||
/* No precip data. */
|
||||
continue;
|
||||
} /*
|
||||
* frain refers to level 2 data; rain refers to level
|
||||
* 1
|
||||
*/
|
||||
|
||||
/*
|
||||
* generate something for output later on if in debug
|
||||
* mode
|
||||
*/
|
||||
// if (debug_level >= 1) {
|
||||
// if (pdata[pcpn_day].stn[hh].frain[time_pos].qual
|
||||
// == MISSING)
|
||||
// {
|
||||
// missing_total++;
|
||||
// }
|
||||
//
|
||||
// if (pdata[pcpn_day].stn[hh].frain[time_pos].qual
|
||||
// == ESTIMATED)
|
||||
// {
|
||||
// estimated_total++;
|
||||
// }
|
||||
//
|
||||
// if (pdata[pcpn_day].stn[hh].frain[time_pos].qual
|
||||
// == FAILED)
|
||||
// {
|
||||
// failed_total++;
|
||||
// }
|
||||
//
|
||||
// if (method == 2 && station[hh].isoh[isom] <= 0)
|
||||
// {
|
||||
// climo_total++;
|
||||
// }
|
||||
// } /* end if (debug_level >= 1) */
|
||||
|
||||
if (DailyQcUtils.method == 2
|
||||
&& precip_stations.get(hh).isoh[isom] <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pdata[pcpn_day].stn[hh].frain[time_pos].qual != 0
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 8
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 6
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 3
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 4
|
||||
&& pdata[pcpn_day].stn[hh].frain[time_pos].qual != 2) {
|
||||
/* The station has a bad qc flag. Do not use it. */
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert the coordinates of the grid and station in
|
||||
* lat/lon into distance.
|
||||
*/
|
||||
dist1 = (i + hrap_grid.hrap_minx - precip_stations
|
||||
.get(hh).hrap_x);
|
||||
dist2 = (j + hrap_grid.hrap_miny - precip_stations
|
||||
.get(hh).hrap_y);
|
||||
|
||||
dist = Math.pow(dist1, 2) + Math.pow(dist2, 2);
|
||||
|
||||
if (dist < .00001) {
|
||||
dist = .00001;
|
||||
}
|
||||
|
||||
dist = 1 / dist;
|
||||
|
||||
temp = pdata[pcpn_day].stn[hh].frain[time_pos].data
|
||||
* dist;
|
||||
|
||||
if (method == 2
|
||||
&& precip_stations.get(hh).isoh[isom] > 0) {
|
||||
temp = temp
|
||||
* hrap_grid.isoh[isom][i][j]
|
||||
/ (precip_stations.get(hh).isoh[isom] * 25.4);
|
||||
}
|
||||
|
||||
value = value + temp;
|
||||
|
||||
distance = distance + dist;
|
||||
|
||||
htotal++;
|
||||
|
||||
if (htotal == 10) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* end for loop (h = 0; h <
|
||||
* mpe_dqc_max_precip_neighbors;h++)
|
||||
*/
|
||||
/* the above for loop is for each neighbor station. */
|
||||
/*
|
||||
* the above for loop is to calculate value and distance,
|
||||
* which later on, are used to interpret the HRAP grid
|
||||
*/
|
||||
|
||||
/*
|
||||
* the resulting htotal is the valid number of neighbor
|
||||
* stations that are used to calculate value and distance,
|
||||
* which later on, are used to interpret the HRAP grid
|
||||
*/
|
||||
|
||||
/*
|
||||
* if there is not enough valid neighbor station, such as
|
||||
* htotal <4, the code below handle this situation.
|
||||
* Basically, the code recalculate the value and distance
|
||||
* using all the stations -- see the for (h = 0; h <
|
||||
* max_stations; h++) loop below.
|
||||
*/
|
||||
if (htotal < 4) {
|
||||
|
||||
value = 0.0;
|
||||
distance = 0.0;
|
||||
htotal = 0;
|
||||
|
||||
for (h = 0; h < numPstations; h++) {
|
||||
if (pdata[pcpn_day].stn[h].frain[time_pos].data < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (pdata[pcpn_day].stn[h].frain[time_pos].qual != 0
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 8
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 6
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 3
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 4
|
||||
&& pdata[pcpn_day].stn[h].frain[time_pos].qual != 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (method == 2
|
||||
&& precip_stations.get(h).isoh[isom] <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
dist1 = (i + hrap_grid.hrap_minx - precip_stations
|
||||
.get(h).hrap_x);
|
||||
dist2 = (j + hrap_grid.hrap_miny - precip_stations
|
||||
.get(h).hrap_y);
|
||||
|
||||
dist = Math.pow(dist1, 2) + Math.pow(dist2, 2);
|
||||
|
||||
if (dist < .00001) {
|
||||
dist = .00001;
|
||||
}
|
||||
|
||||
dist = 1 / dist;
|
||||
|
||||
temp = pdata[pcpn_day].stn[h].frain[time_pos].data
|
||||
* dist;
|
||||
|
||||
if (method == 2
|
||||
&& precip_stations.get(h).isoh[isom] > 0) {
|
||||
temp = temp
|
||||
* hrap_grid.isoh[isom][i][j]
|
||||
/ (precip_stations.get(h).isoh[isom] * 25.4);
|
||||
}
|
||||
|
||||
value = value + temp;
|
||||
|
||||
distance = distance + dist;
|
||||
|
||||
htotal++;
|
||||
|
||||
}
|
||||
neighbor_total++;
|
||||
} /* end the handling of special case : if (htotal < 4), */
|
||||
/* which means there is no enough neighboring stations */
|
||||
|
||||
/*
|
||||
* add the interpreted value for the bin of the HRAP_grid
|
||||
*/
|
||||
/*
|
||||
* if (htotal == 0) { pcp->value[i][j] += 0; } else {
|
||||
* pcp->value[i][j] += (int) (value / distance * 100); }
|
||||
*/
|
||||
if (htotal != 0) {
|
||||
pcp.value[i][j] += (int) (value / distance * 100);
|
||||
}
|
||||
|
||||
/*
|
||||
* if (pcp->value[i][j] < .01) { pcp->value[i][j] = 0; }
|
||||
*/
|
||||
all_total++;
|
||||
|
||||
} /* end of for loop (j = 0; j < hrap_grid->maxj; j++) */
|
||||
} /* end of for loop (i = 0; i < hrap_grid->maxi; i++) */
|
||||
/* At this moment, the interpretation of HRAP grid is done */
|
||||
|
||||
}/*
|
||||
* end of the ( k = 0; k<4; k++) loop, which interpolates 4 6hr HRAP
|
||||
* grid.
|
||||
*/
|
||||
|
||||
/* final adjustment of the pcp->value */
|
||||
for (i = 0; i < hrap_grid.maxi; i++) { /*
|
||||
* hrap_grid comes from the
|
||||
* function parameter
|
||||
*/
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
|
||||
if (pcp.value[i][j] < .01) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* time_pos = pcpn_day * 4 + 3 - pcpn_time; */
|
||||
time_pos = 40 + pcpn_day;
|
||||
|
||||
/*
|
||||
* pcp_in_use[i] = 1 -- grids rendered via Render button OR Save Level2
|
||||
* option = -1 --grids for this time period not rendered (initialization
|
||||
* value)
|
||||
*/
|
||||
pcp_in_use[time_pos] = 1;
|
||||
|
||||
/*
|
||||
* results of grid rendering routines (render_t, render_t6, render_pcp,
|
||||
* render_z) are written to scratch files using the write_file routine.
|
||||
* scratch file is stored in the scratch directory.
|
||||
*/
|
||||
ReadQPFGrids rqp = new ReadQPFGrids();
|
||||
rqp.write_file("pcp", time_pos, pcp);
|
||||
|
||||
}
|
||||
|
||||
int getTokenValue24hrGridGenMeth() {
|
||||
|
||||
int token_of_24hr_grid_gen_method = 0;
|
||||
|
||||
/* int token_of_24hr_grid_gen_method = 0; */
|
||||
|
||||
if (first == true) {
|
||||
String token_name_of_24hr_grid_gen_method_token = "mpe_dqc_24hr_precip_grid_meth";
|
||||
|
||||
/* char strTokenValue[50] = { '\0' }; */
|
||||
String DQC24hrPrecipMeth;
|
||||
|
||||
// char message[GAGEQC_MESSAGE_LEN] = { '\0' };
|
||||
|
||||
AppsDefaults appsDefaults = AppsDefaults.getInstance();
|
||||
DQC24hrPrecipMeth = appsDefaults
|
||||
.getToken(token_name_of_24hr_grid_gen_method_token);
|
||||
// sprintf(message, "\nSTATUS: token value of \"%s\" : %s\n",
|
||||
// token_name_of_24hr_grid_gen_method_token, strTokenValue);
|
||||
// logMessage(message);
|
||||
|
||||
if (DQC24hrPrecipMeth != null && DQC24hrPrecipMeth.length() > 0) {
|
||||
/* we use the token ACCUM_6HR and USE_24HR */
|
||||
if (DQC24hrPrecipMeth.equalsIgnoreCase("ACCUM_6HR")) {
|
||||
token_of_24hr_grid_gen_method = 1;
|
||||
}
|
||||
}
|
||||
|
||||
first = false;
|
||||
}
|
||||
|
||||
return token_of_24hr_grid_gen_method;
|
||||
}
|
||||
}
|
||||
private static boolean first = true;
|
||||
|
||||
Pcp pcp = DailyQcUtils.pcp;
|
||||
|
||||
/*
|
||||
* QC codes
|
||||
*/
|
||||
private static final int MISSING = -1;
|
||||
|
||||
private static final int STANDARD = 0;
|
||||
|
||||
private static final int SCREENED = 0;
|
||||
|
||||
private static final int FAILED = 1;
|
||||
|
||||
private static final int MANUAL = 2;
|
||||
|
||||
private static final int QUESTIONABLE = 3;
|
||||
|
||||
private static final int PARTIAL = 4;
|
||||
|
||||
private static final int ESTIMATED = 5;
|
||||
|
||||
private static final int TIMEDISTRIBUTED = 6;
|
||||
|
||||
private static final int VERIFIED = 8;
|
||||
|
||||
private static final String MPE_DQC_GRID_RENDERING_METHOD_TOKEN = "mpe_dqc_grid_render_method";
|
||||
|
||||
private static final int maxDistSquared = DailyQcUtils.mpe_dqc_grid_max_dist
|
||||
* DailyQcUtils.mpe_dqc_grid_max_dist;
|
||||
|
||||
/**
|
||||
* Converts point precipitation data in struct pdata to hrap grid. The 20
|
||||
* closest stations are precalculated for each grid point - this speeds
|
||||
* computations for data sets with many precipitation points. If there are
|
||||
* no good precipitation points for a grid point, then a recalculation is
|
||||
* made using all precipitation points. 1/R**2 interpolation is used. If
|
||||
* requested, the final interpolation is scaled using seasonal isohyets. The
|
||||
* grid is saved as a disk file and used later for a raster or vector (HRAP)
|
||||
* plot.
|
||||
*
|
||||
* @param m
|
||||
* @param k
|
||||
* @param mk
|
||||
* @param numPstations
|
||||
* @param
|
||||
* @param hrap_grid
|
||||
* @param pdata
|
||||
* @param pcp_in_use
|
||||
*/
|
||||
// mpe_dqc_grid_render_method
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
public void render_pcp(int pcpn_day, int pcpn_time, int pcpn_time_step,
|
||||
int numPstations, ArrayList<Station> precip_stations,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
String header = "RenderPcp.render_pcp(): ";
|
||||
|
||||
AppsDefaults appsDefaults = AppsDefaults.getInstance();
|
||||
|
||||
String tokenValue = appsDefaults
|
||||
.getToken(MPE_DQC_GRID_RENDERING_METHOD_TOKEN);
|
||||
|
||||
// System.out.println(header + "tokenValue = " + tokenValue);
|
||||
|
||||
// tokenValue = "BLOCKING";
|
||||
// tokenValue = "DISTANCE_SQUARED";
|
||||
|
||||
System.out.println(header + "now tokenValue = " + tokenValue);
|
||||
|
||||
if (tokenValue != null && tokenValue.equalsIgnoreCase("BLOCKING")) {
|
||||
RenderPcpBlocking renderer = new RenderPcpBlocking();
|
||||
|
||||
renderer.render_pcp(pcpn_day, pcpn_time, pcpn_time_step,
|
||||
numPstations, precip_stations, hrap_grid, pdata, pcp_in_use);
|
||||
}
|
||||
|
||||
else {
|
||||
RenderPcpStandard renderer = new RenderPcpStandard();
|
||||
|
||||
renderer.render_pcp(pcpn_day, pcpn_time, pcpn_time_step,
|
||||
numPstations, precip_stations, hrap_grid, pdata, pcp_in_use);
|
||||
|
||||
}
|
||||
|
||||
determineMaxPrecip(hrap_grid);
|
||||
|
||||
}
|
||||
|
||||
private int determineMaxPrecip(Hrap_Grid hrap_grid) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
String header = "RenderPcp.determineMaxPrecip(): ";
|
||||
|
||||
int value = 0;
|
||||
int maxValue = -1;
|
||||
|
||||
for (int col = 0; col < hrap_grid.maxi; col++) {
|
||||
for (int row = 0; row < hrap_grid.maxj; row++) {
|
||||
value = pcp.value[row][col];
|
||||
|
||||
if (value > maxValue) {
|
||||
maxValue = value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
System.out.println(header + "maxValue = " + maxValue);
|
||||
|
||||
return maxValue;
|
||||
|
||||
} // end determineMaxPrecip()
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
} // end class RenderPcp
|
|
@ -0,0 +1,957 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.mpe.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.raytheon.uf.common.ohd.AppsDefaults;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Hrap_Grid;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Pcp;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Pdata;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Station;
|
||||
|
||||
/**
|
||||
* DESCRIPTION: Maps precipitation station values to an HRAP grid. Produces the
|
||||
* DailyQC version of the GageOnly analysis.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 11, 2009 snaples Initial creation
|
||||
* May 02, 2011 8962 snaples Added render24hrPcpUsingFour6hr() method
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author snaples
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class RenderPcpBlocking {
|
||||
|
||||
private static boolean first = true;
|
||||
|
||||
Pcp pcp = DailyQcUtils.pcp;
|
||||
|
||||
/*
|
||||
* QC codes
|
||||
*/
|
||||
private static final int MISSING = -1;
|
||||
private static final int STANDARD = 0;
|
||||
private static final int SCREENED = 0;
|
||||
private static final int FAILED = 1;
|
||||
private static final int MANUAL = 2;
|
||||
private static final int QUESTIONABLE = 3;
|
||||
private static final int PARTIAL = 4;
|
||||
private static final int ESTIMATED = 5;
|
||||
private static final int TIMEDISTRIBUTED = 6;
|
||||
private static final int VERIFIED = 8;
|
||||
|
||||
// private static final String MPE_DQC_GRID_RENDERING_METHOD_TOKEN =
|
||||
// "mpe_dqc_grid_render_method";
|
||||
|
||||
private static final int maxDistSquared = DailyQcUtils.mpe_dqc_grid_max_dist
|
||||
* DailyQcUtils.mpe_dqc_grid_max_dist;
|
||||
|
||||
// private static final int maxDistSquared = 400;
|
||||
|
||||
/**
|
||||
* Converts point precipitation data in struct pdata to hrap grid. The 20
|
||||
* closest stations are precalculated for each grid point - this speeds
|
||||
* computations for data sets with many precipitation points. If there are
|
||||
* no good precipitation points for a grid point, then a recalculation is
|
||||
* made using all precipitation points. 1/R**2 interpolation is used. If
|
||||
* requested, the final interpolation is scaled using seasonal isohyets. The
|
||||
* grid is saved as a disk file and used later for a raster or vector (HRAP)
|
||||
* plot.
|
||||
*
|
||||
* @param m
|
||||
* @param k
|
||||
* @param mk
|
||||
* @param numPstations
|
||||
* @param
|
||||
* @param hrap_grid
|
||||
* @param pdata
|
||||
* @param pcp_in_use
|
||||
*/
|
||||
// mpe_dqc_grid_render_method
|
||||
|
||||
private boolean usingSingleDirectionCloseOutMode = true;
|
||||
private static final int MIN_PREFERRED_USED_GRID_CELLS = 4;
|
||||
private static final int MIN_REQUIRED_USED_GRID_CELLS = 1;
|
||||
|
||||
private SearchDirection north = new SearchDirection();
|
||||
private SearchDirection south = new SearchDirection();
|
||||
private SearchDirection east = new SearchDirection();
|
||||
private SearchDirection west = new SearchDirection();
|
||||
|
||||
private int colMin;
|
||||
private int colMax;
|
||||
private int rowMin;
|
||||
private int rowMax;
|
||||
private int prevColMin;
|
||||
private int prevColMax;
|
||||
private int prevRowMin;
|
||||
private int prevRowMax;
|
||||
|
||||
// weighting variables
|
||||
private int usedGridCellCount = 0;
|
||||
private double totalWeightedValue = 0;
|
||||
private double totalDistanceWeight = 0;
|
||||
|
||||
// grid variables
|
||||
private int binStationCount[][];
|
||||
|
||||
private int usableStationCount = 0;
|
||||
|
||||
private double valueGrid[][];
|
||||
private double prismStationGrid[][];
|
||||
|
||||
private int isom = -1;
|
||||
|
||||
class SearchDirection {
|
||||
private boolean isOpen;
|
||||
private int level;
|
||||
|
||||
public SearchDirection() {
|
||||
reset();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
setOpen(true);
|
||||
setLevel(0);
|
||||
}
|
||||
|
||||
public boolean isOpen() {
|
||||
return isOpen;
|
||||
}
|
||||
|
||||
public void setOpen(boolean isOpen) {
|
||||
this.isOpen = isOpen;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
setOpen(false);
|
||||
}
|
||||
|
||||
void expandSearchIfAllowed() {
|
||||
if (isOpen()) {
|
||||
incrementLevel();
|
||||
|
||||
if (getLevel() > DailyQcUtils.mpe_dqc_grid_max_dist) {
|
||||
setLevel(DailyQcUtils.mpe_dqc_grid_max_dist);
|
||||
close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void incrementLevel() {
|
||||
this.level++;
|
||||
}
|
||||
|
||||
private void setLevel(int level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
public int getLevel() {
|
||||
return level;
|
||||
}
|
||||
|
||||
} // end inner class SearchDirection
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
int getTokenValue24hrGridGenMeth() {
|
||||
|
||||
int token_of_24hr_grid_gen_method = 0;
|
||||
|
||||
if (first == true) {
|
||||
String tokenName = "mpe_dqc_24hr_precip_grid_meth";
|
||||
|
||||
String dqc24hrPrecipMeth;
|
||||
|
||||
// char message[GAGEQC_MESSAGE_LEN] = { '\0' };
|
||||
|
||||
AppsDefaults appsDefaults = AppsDefaults.getInstance();
|
||||
dqc24hrPrecipMeth = appsDefaults.getToken(tokenName);
|
||||
|
||||
if (dqc24hrPrecipMeth != null) {
|
||||
/* allowed token values: (ACCUM_6HR, USE_24HR) */
|
||||
if (dqc24hrPrecipMeth.equalsIgnoreCase("ACCUM_6HR")) {
|
||||
token_of_24hr_grid_gen_method = 1;
|
||||
}
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
return token_of_24hr_grid_gen_method;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
public void render_pcp(int pcpn_day, int pcpn_time, int pcpn_time_step,
|
||||
int numPstations, ArrayList<Station> stationList,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
isom = DailyQcUtils.isom;
|
||||
|
||||
int time_pos;
|
||||
|
||||
if (pcpn_time_step == 0) {
|
||||
time_pos = pcpn_time; // for 6 hour data: 0,1,2,3.
|
||||
|
||||
boolean save_grids = true;
|
||||
boolean accumulate_grids = false;
|
||||
|
||||
render_pcp_internal(pcpn_day, pcpn_time, pcpn_time_step,
|
||||
numPstations, stationList, hrap_grid, pdata, pcp_in_use,
|
||||
save_grids, accumulate_grids);
|
||||
} else {
|
||||
time_pos = 4; // for 24 hour data
|
||||
|
||||
/*
|
||||
* in case the 24hr grid rendering is required, we check
|
||||
* 24hr_grid_gen_method_token() to determine how to generate the
|
||||
* grid. New Post OB9.2
|
||||
*/
|
||||
|
||||
// debug
|
||||
// first = true;
|
||||
|
||||
if (getTokenValue24hrGridGenMeth() == 1) {
|
||||
render24hrPcpUsingFour6hr(pcpn_day, pcpn_time, numPstations,
|
||||
stationList, hrap_grid, pdata, pcp_in_use);
|
||||
return;
|
||||
} else // calculate 24-hour grids the regular way
|
||||
{
|
||||
|
||||
boolean save_grids = true;
|
||||
boolean accumulate_grids = false;
|
||||
|
||||
render_pcp_internal(pcpn_day, pcpn_time, pcpn_time_step,
|
||||
numPstations, stationList, hrap_grid, pdata,
|
||||
pcp_in_use, save_grids, accumulate_grids);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void render_pcp_internal(int pcpn_day, int pcpn_time,
|
||||
int pcpn_time_step, int numPstations,
|
||||
ArrayList<Station> stationList, Hrap_Grid hrap_grid, Pdata[] pdata,
|
||||
int[] pcp_in_use, boolean save_grids, boolean should_accumulate) {
|
||||
// String header = "RenderPcpBlocking.render_pcp_internal(): ";
|
||||
|
||||
int isom = DailyQcUtils.isom;
|
||||
|
||||
double resultingPrecipValue = 0.0;
|
||||
|
||||
/*-----------------------------------------------------*/
|
||||
|
||||
allocateGrids(hrap_grid);
|
||||
|
||||
initializeGrids(hrap_grid, should_accumulate);
|
||||
|
||||
placeStationsInGrid(pcpn_day, pcpn_time, pcpn_time_step, numPstations,
|
||||
stationList, hrap_grid, pdata);
|
||||
|
||||
// for every grid location, determine its estimated value
|
||||
for (int col = 0; col < hrap_grid.maxi; col++) {
|
||||
for (int row = 0; row < hrap_grid.maxj; row++) {
|
||||
|
||||
/*
|
||||
* Check if the grid cell is covered by an HSA. If not, then do
|
||||
* not estimate precipitation for it.
|
||||
*/
|
||||
if (hrap_grid.owner[col][row] == -1) {
|
||||
pcp.value[row][col] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (binStationCount[col][row] > 0) // if any station is in this
|
||||
// grid bin
|
||||
{
|
||||
resultingPrecipValue = valueGrid[col][row];
|
||||
|
||||
// adjust grid bin with actual gage by the prism factor
|
||||
if (prismStationGrid[col][row] > 0) {
|
||||
double prismStationValue = prismStationGrid[col][row] * 25.4;
|
||||
double prismGridValue = hrap_grid.isoh[isom][col][row];
|
||||
|
||||
double prismFactor = (double) prismGridValue
|
||||
/ prismStationValue;
|
||||
|
||||
resultingPrecipValue *= prismFactor;
|
||||
} else {
|
||||
resultingPrecipValue = 0.0;
|
||||
}
|
||||
|
||||
// pcp.value[row][col] is the value of grid,
|
||||
// so we don't need to estimate a value for [row][col]
|
||||
}
|
||||
|
||||
else // this grid location requires an estimate to be generated
|
||||
{
|
||||
resultingPrecipValue = estimateValue(isom, col, row,
|
||||
hrap_grid);
|
||||
}
|
||||
|
||||
if (resultingPrecipValue >= 0.0) {
|
||||
int precipInHundredthsOfMm = (int) Math
|
||||
.floor((resultingPrecipValue * 100.0));
|
||||
|
||||
if (should_accumulate) { // for case where we want to make
|
||||
// 24 = 4 6hr periods added
|
||||
// together
|
||||
pcp.value[col][row] += precipInHundredthsOfMm;
|
||||
} else {
|
||||
pcp.value[col][row] = precipInHundredthsOfMm;
|
||||
}
|
||||
}
|
||||
|
||||
} /* end for (col = 0 ... */
|
||||
|
||||
} /* end for (row = 0 ... */
|
||||
|
||||
// System.out.println(header + "maxPrecip in hundredths of mm = " +
|
||||
// maxPrecip);
|
||||
|
||||
int time_pos;
|
||||
/*
|
||||
* notice that time_pos is a variable defined inside the function, and
|
||||
* its value do not need to be limited as 0,1,2,3,or 4. Here it is
|
||||
* assigned with bigger numbers.
|
||||
*/
|
||||
if (pcpn_time_step == 0) // one of the 6-hr periods
|
||||
{
|
||||
time_pos = pcpn_day * 4 + 3 - pcpn_time;
|
||||
} else // 24 hr
|
||||
{
|
||||
time_pos = 40 + pcpn_day;
|
||||
}
|
||||
|
||||
if (save_grids) {
|
||||
/*
|
||||
* pcp_in_use[i] = 1 -- grids rendered via Render button OR Save
|
||||
* Level2 option = -1 --grids for this time period not rendered
|
||||
* (initialization value)
|
||||
*/
|
||||
pcp_in_use[time_pos] = 1;
|
||||
|
||||
/*
|
||||
* results of grid rendering routines (render_t, render_t6,
|
||||
* render_pcp, render_z) are written to scratch files using the
|
||||
* write_file routine. scratch file is stored in the scratch
|
||||
* directory.
|
||||
*/
|
||||
|
||||
ReadQPFGrids rqp = new ReadQPFGrids();
|
||||
rqp.write_file("pcp", time_pos, pcp);
|
||||
}
|
||||
|
||||
} // end render_pcp_internal()
|
||||
|
||||
private double estimateValue(int isom, int col, int row, Hrap_Grid hrap_grid) {
|
||||
|
||||
// String header = "RenderPcpBlocking.estimateValue(): ";
|
||||
int r;
|
||||
int c;
|
||||
|
||||
double estimatedPrecipValue = 0.0;
|
||||
|
||||
if (hrap_grid.isoh[isom][col][row] < 0.01) {
|
||||
estimatedPrecipValue = 0;
|
||||
return estimatedPrecipValue; // can't do anything more, quit
|
||||
}
|
||||
|
||||
// look through surrounding grid bins only for
|
||||
// values to be used in the distance-weighted interpolation
|
||||
|
||||
// set to open and level = 0
|
||||
north.reset();
|
||||
south.reset();
|
||||
east.reset();
|
||||
west.reset();
|
||||
|
||||
// initialize
|
||||
totalWeightedValue = 0.0;
|
||||
totalDistanceWeight = 0.0;
|
||||
usedGridCellCount = 0;
|
||||
|
||||
rowMax = row;
|
||||
rowMin = row;
|
||||
colMax = col;
|
||||
colMin = col;
|
||||
|
||||
prevRowMax = rowMax;
|
||||
prevRowMin = rowMin;
|
||||
prevColMax = colMax;
|
||||
prevColMin = colMin;
|
||||
|
||||
while (north.isOpen() || south.isOpen() || east.isOpen()
|
||||
|| west.isOpen()) {
|
||||
// expand search levels as appropriate
|
||||
// changes rowMin, rowMax, colMin, colMax
|
||||
expandGridSearch(col, row, hrap_grid);
|
||||
|
||||
if (rowMin < prevRowMin) // grew the top side
|
||||
{
|
||||
r = rowMin;
|
||||
for (c = colMin; c <= colMax; c++) {
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
} else // didn't grow the top side
|
||||
{
|
||||
if (colMin < prevColMin) // still need to check top left corner
|
||||
{
|
||||
c = colMin;
|
||||
r = rowMin;
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
|
||||
if (colMax > prevColMax) // still need to check top right corner
|
||||
{
|
||||
c = colMax;
|
||||
r = rowMin;
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (rowMax > prevRowMax) // grew the bottom side
|
||||
{
|
||||
r = rowMax;
|
||||
for (c = colMin; c <= colMax; c++) {
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
} else // didn't grow the bottom side
|
||||
{
|
||||
if (colMin < prevColMin) // still need to check bottom left
|
||||
// corner
|
||||
{
|
||||
c = colMin;
|
||||
r = rowMax;
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
if (colMax > prevColMax) // still need to check bottom right
|
||||
// corner
|
||||
{
|
||||
c = colMax;
|
||||
r = rowMax;
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
}
|
||||
|
||||
if (colMin < prevColMin) // grew left side
|
||||
{
|
||||
c = colMin;
|
||||
for (r = rowMin + 1; r < rowMax; r++) {
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
}
|
||||
|
||||
if (colMax > prevColMax) // grew right side
|
||||
{
|
||||
c = colMax;
|
||||
for (r = rowMin + 1; r < rowMax; r++) {
|
||||
processGriddedStationValues(col, row, c, r, hrap_grid);
|
||||
}
|
||||
}
|
||||
|
||||
if (usedGridCellCount >= MIN_PREFERRED_USED_GRID_CELLS) // have
|
||||
// enough
|
||||
// cells to
|
||||
// look at,
|
||||
// can quit
|
||||
// now
|
||||
{
|
||||
north.close();
|
||||
south.close();
|
||||
east.close();
|
||||
west.close();
|
||||
|
||||
// System.out.println(header +
|
||||
// "met minimum cell preference, resultingPrecipValue = " +
|
||||
// resultingPrecipValue);
|
||||
}
|
||||
|
||||
} /* end while (northLevelOpen ... */
|
||||
|
||||
// set weighted value to the cell or set value to 0.0 if there is not
|
||||
// enough data
|
||||
if (usedGridCellCount >= MIN_REQUIRED_USED_GRID_CELLS) {
|
||||
estimatedPrecipValue = totalWeightedValue / totalDistanceWeight;
|
||||
|
||||
// System.out.println(header +
|
||||
// "met minimum cell requirement, resultingPrecipValue = " +
|
||||
// resultingPrecipValue);
|
||||
} else // set to zero precip
|
||||
{
|
||||
estimatedPrecipValue = 0.0;
|
||||
}
|
||||
|
||||
return estimatedPrecipValue;
|
||||
|
||||
} // end estimateValue()
|
||||
|
||||
// *--------------------------------------------------------------------------
|
||||
|
||||
void processGriddedStationValues(int renderingCol, int renderingRow,
|
||||
int gridCol, int gridRow, Hrap_Grid hrap_grid) {
|
||||
|
||||
String header = "RenderPcpBlocking.processGriddedStationValues(): ";
|
||||
|
||||
int usedCells = 0;
|
||||
// sprintf(message,
|
||||
// "renderingCol = %d, renderingRow = %d, gridCol = %d, gridRow = %d \n",
|
||||
// renderingCol, renderingRow, gridCol, gridRow);
|
||||
|
||||
// logMessage(message);
|
||||
|
||||
if ((gridCol < 0) || (gridCol > hrap_grid.maxi) || (gridRow < 0)
|
||||
|| (gridRow > hrap_grid.maxj)) {
|
||||
System.out.println(header + "OUT OF RANGE gridCol = " + gridCol
|
||||
+ " gridRow = " + gridRow);
|
||||
}
|
||||
|
||||
double gageValue = valueGrid[gridCol][gridRow];
|
||||
|
||||
if (gageValue >= 0.0) // there is a gage
|
||||
// located at (gridCol,gridRow)
|
||||
// with a valid precip value
|
||||
{
|
||||
|
||||
usedCells = adjustWeights(gageValue, gridRow, gridCol,
|
||||
renderingRow, renderingCol, hrap_grid, isom,
|
||||
prismStationGrid);
|
||||
|
||||
usedGridCellCount += usedCells;
|
||||
// if data was found, close off a direction, usually 2 directions,
|
||||
// such as north and west
|
||||
|
||||
if (usedCells > 0) {
|
||||
determineDirectionFoundAndCloseOff(renderingCol, renderingRow,
|
||||
gridCol, gridRow);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
} // end processGriddedStationValues()
|
||||
|
||||
// *--------------------------------------------------------------------------
|
||||
|
||||
void expandGridSearch(int col, int row, Hrap_Grid hrap_grid) {
|
||||
// expand search levels as appropriate
|
||||
|
||||
north.expandSearchIfAllowed();
|
||||
south.expandSearchIfAllowed();
|
||||
east.expandSearchIfAllowed();
|
||||
west.expandSearchIfAllowed();
|
||||
|
||||
// save previous values of row and col min and max
|
||||
prevRowMax = rowMax;
|
||||
prevRowMin = rowMin;
|
||||
prevColMax = colMax;
|
||||
prevColMin = colMin;
|
||||
|
||||
// determine nested for loop ranges
|
||||
rowMax = row + north.getLevel();
|
||||
if (rowMax >= hrap_grid.maxj) {
|
||||
rowMax = hrap_grid.maxj - 1;
|
||||
north.close();
|
||||
}
|
||||
|
||||
rowMin = row - south.getLevel(); // row
|
||||
if (rowMin < 0) {
|
||||
rowMin = 0;
|
||||
south.close();
|
||||
}
|
||||
|
||||
colMin = col - west.getLevel();
|
||||
if (colMin < 0) {
|
||||
colMin = 0;
|
||||
west.close();
|
||||
}
|
||||
|
||||
colMax = col + east.getLevel();
|
||||
if (colMax >= hrap_grid.maxi) {
|
||||
colMax = hrap_grid.maxi - 1;
|
||||
east.close();
|
||||
}
|
||||
|
||||
return;
|
||||
} // end expandGridSearch()
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void determineDirectionFoundAndCloseOffSimpleVersion(int renderingCol,
|
||||
int renderingRow, int stationCol, int stationRow) {
|
||||
if (stationRow < renderingRow) {
|
||||
south.close();
|
||||
} else if (stationRow > renderingRow) {
|
||||
north.close();
|
||||
}
|
||||
|
||||
if (stationCol < renderingCol) {
|
||||
west.close();
|
||||
} else if (stationCol > renderingCol) {
|
||||
east.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void determineDirectionFoundAndCloseOff(int renderingCol, int renderingRow,
|
||||
int stationCol, int stationRow) {
|
||||
|
||||
final int closeEnoughToBeEqual = 2;
|
||||
|
||||
// String header =
|
||||
// "RenderPcpBlocking.determineDirectionFoundAndCloseOff(): ";
|
||||
|
||||
// consider taking a diff and a point is considered in a straightline if
|
||||
// its difference is < 3 from the grid bin to render
|
||||
|
||||
int northSouthDifference = Math.abs(stationRow - renderingRow);
|
||||
int eastWestDifference = Math.abs(stationCol - renderingCol);
|
||||
|
||||
boolean isNorthOrSouth = false;
|
||||
boolean isEastOrWest = false;
|
||||
|
||||
if (northSouthDifference - eastWestDifference <= closeEnoughToBeEqual) {
|
||||
isNorthOrSouth = true;
|
||||
isEastOrWest = true;
|
||||
} else if (northSouthDifference > eastWestDifference) {
|
||||
isNorthOrSouth = true;
|
||||
} else {
|
||||
isEastOrWest = true;
|
||||
}
|
||||
|
||||
if (usingSingleDirectionCloseOutMode) {
|
||||
// System.out.println(header +
|
||||
// "Using usingSingleDirectionCloseOutMode difference-based close off.");
|
||||
|
||||
if (isNorthOrSouth) {
|
||||
// this point functions as the north-south representative, since
|
||||
// it is primarily north or south
|
||||
|
||||
if (stationRow < renderingRow) {
|
||||
south.close();
|
||||
} else if (stationRow > renderingRow) {
|
||||
north.close();
|
||||
}
|
||||
}
|
||||
|
||||
if (isEastOrWest) {
|
||||
if (stationCol < renderingCol) {
|
||||
west.close();
|
||||
} else if (stationCol > renderingCol) {
|
||||
east.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else // in mode in which points represent 2 directions (unless directly
|
||||
// North-south or east-west)
|
||||
{
|
||||
// System.out.println(header +
|
||||
// "Using traditional difference cutoff.");
|
||||
if (stationRow < renderingRow) {
|
||||
south.close();
|
||||
} else if (stationRow > renderingRow) {
|
||||
north.close();
|
||||
}
|
||||
|
||||
if (stationCol < renderingCol) {
|
||||
west.close();
|
||||
} else if (stationCol > renderingCol) {
|
||||
east.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
} // determineDirectionFoundAndCloseOff()
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
void allocateGrids(Hrap_Grid hrap_grid) {
|
||||
|
||||
int maxI = hrap_grid.maxi;
|
||||
int maxJ = hrap_grid.maxj;
|
||||
|
||||
binStationCount = new int[maxI][maxJ];
|
||||
|
||||
valueGrid = new double[maxI][maxJ];
|
||||
|
||||
prismStationGrid = new double[maxI][maxJ];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void initializeGrids(Hrap_Grid hrap_grid, boolean should_accumulate) {
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
|
||||
/* initialize grids */
|
||||
for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
binStationCount[i][j] = 0;
|
||||
valueGrid[i][j] = DailyQcUtils.MOSAIC_DEFAULT; // precip in
|
||||
// inches
|
||||
prismStationGrid[i][j] = DailyQcUtils.MOSAIC_DEFAULT; // prism
|
||||
// station
|
||||
// value
|
||||
// mapped
|
||||
// to
|
||||
// grid
|
||||
// (this
|
||||
// algorithm
|
||||
// only)
|
||||
|
||||
if (!should_accumulate) {
|
||||
// in special 24hr = sum of 4 6hr periods mode,
|
||||
// we accumulate in this grid, so we don't reinit every time
|
||||
|
||||
pcp.value[i][j] = (int) DailyQcUtils.MOSAIC_DEFAULT; // final
|
||||
// precip
|
||||
// in
|
||||
// hundredths
|
||||
// of
|
||||
// mm
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void placeStationsInGrid(int pcpn_day, int pcpn_time, int pcpn_time_step,
|
||||
int max_stations, ArrayList<Station> stationList,
|
||||
Hrap_Grid hrap_grid, Pdata pdata[]) {
|
||||
|
||||
int method = DailyQcUtils.method;
|
||||
String header = "RenderPcpBlocking.placeStationsInGrid(): ";
|
||||
|
||||
int time_pos;
|
||||
|
||||
if (pcpn_time_step == 0) {
|
||||
time_pos = pcpn_time; // for 6 hour data: 0,1,2,3.
|
||||
} else {
|
||||
time_pos = 4; // for 24 hour data
|
||||
}
|
||||
|
||||
int hx, hy;
|
||||
int h = 0;
|
||||
|
||||
int noPrismCount = 0;
|
||||
|
||||
// System.out.println("max_stations = " + max_stations);
|
||||
|
||||
int maxPrecip = 0;
|
||||
|
||||
for (h = 0; h < max_stations; h++) {
|
||||
Station station = stationList.get(h);
|
||||
|
||||
hx = (int) (station.hrap_x - hrap_grid.hrap_minx);
|
||||
hy = (int) (station.hrap_y - hrap_grid.hrap_miny);
|
||||
|
||||
/* check that station is within the site's area */
|
||||
if (hx >= hrap_grid.maxi || hy >= hrap_grid.maxj || (hx < 0)
|
||||
|| (hy < 0)) {
|
||||
// This station cannot be used, because its coordinates are out
|
||||
// of range
|
||||
continue;
|
||||
}
|
||||
|
||||
// debug only
|
||||
|
||||
int stationCount = binStationCount[hx][hy];
|
||||
|
||||
double precipValue = pdata[pcpn_day].stn[h].frain[time_pos].data;
|
||||
|
||||
short qualCode = pdata[pcpn_day].stn[h].frain[time_pos].qual;
|
||||
|
||||
// skip if not an acceptable quality code
|
||||
if (qualCode != SCREENED && qualCode != VERIFIED
|
||||
&& qualCode != TIMEDISTRIBUTED && qualCode != QUESTIONABLE
|
||||
&& qualCode != PARTIAL && qualCode != MANUAL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((method == 2) && (station.isoh[isom] <= 0)) // no prism data for
|
||||
// the station
|
||||
{
|
||||
noPrismCount++;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* if station value is missing, ignore */
|
||||
if (precipValue >= 0.0) {
|
||||
|
||||
int precipIn_h_mm = (int) Math.floor(precipValue * 100.0);
|
||||
|
||||
if (precipIn_h_mm > maxPrecip) {
|
||||
maxPrecip = precipIn_h_mm;
|
||||
}
|
||||
|
||||
// we have data and no other station has been assigned to this
|
||||
// bin yet
|
||||
if (binStationCount[hx][hy] == 0) {
|
||||
binStationCount[hx][hy] = 1;
|
||||
valueGrid[hx][hy] = precipValue;
|
||||
prismStationGrid[hx][hy] = station.isoh[isom];
|
||||
|
||||
usableStationCount++;
|
||||
}
|
||||
|
||||
else if (stationCount > 0) // we have at least 1 value for this
|
||||
// grid location
|
||||
{
|
||||
|
||||
double valueGridTotalValue = (valueGrid[hx][hy] * stationCount)
|
||||
+ precipValue;
|
||||
double prismGridTotalValue = (prismStationGrid[hx][hy] * stationCount)
|
||||
+ station.isoh[isom];
|
||||
binStationCount[hx][hy]++;
|
||||
stationCount++;
|
||||
|
||||
double newGridAvgValue = valueGridTotalValue / stationCount;
|
||||
double newPrismAvgValue = prismGridTotalValue
|
||||
/ stationCount;
|
||||
|
||||
valueGrid[hx][hy] = newGridAvgValue;
|
||||
prismStationGrid[hx][hy] = newPrismAvgValue;
|
||||
|
||||
usableStationCount++;
|
||||
|
||||
} // end else
|
||||
} // end if
|
||||
|
||||
} // end for (h = 0; h < max_stations; h++)
|
||||
|
||||
System.out.println(header + " maxPrecip in hundredths of mm = "
|
||||
+ maxPrecip);
|
||||
|
||||
// System.out.println(header +
|
||||
// " number of stations missing PRISM data = " + noPrismCount);
|
||||
// System.out.println(header + " usableStationCount = " +
|
||||
// usableStationCount);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
/*
|
||||
* get the token value of token mpe_24hr_grid_gen_method. This token will
|
||||
* determine how we generate the 24hr grid. We can either use the 24hr gage
|
||||
* values, which is the old way, or we can use four 6hr gage values and add
|
||||
* them together.
|
||||
*/
|
||||
/* there is some problem with the static */
|
||||
|
||||
private void render24hrPcpUsingFour6hr(int pcpn_day, int pcpn_time,
|
||||
int numPstations, ArrayList<Station> stationList,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
/* initialization of the pcp.value */
|
||||
for (int i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (int j = 0; j < hrap_grid.maxj; j++) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
boolean save_grids = false;
|
||||
boolean should_accumulate = true;
|
||||
|
||||
for (int k = 0; k < 4; k++) {
|
||||
int pcpn_time_internal = k;
|
||||
|
||||
int pcpn_time_step = 0; // means it is one of the 6-hr periods
|
||||
|
||||
render_pcp_internal(pcpn_day, pcpn_time_internal, pcpn_time_step,
|
||||
numPstations, stationList, hrap_grid, pdata, pcp_in_use,
|
||||
save_grids, should_accumulate);
|
||||
|
||||
}
|
||||
|
||||
} // end render24hrPcpUsingFour6hr()
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
int adjustWeights(double originalValue, int otherRow, int otherColumn,
|
||||
int renderingRow, int renderingColumn, Hrap_Grid hrap_grid,
|
||||
int monthIndex, double[][] prismStationGrid) {
|
||||
|
||||
String header = "RenderPcpBlocking.adjustWeights(): ";
|
||||
|
||||
final double MIN_DISTANCE = 0.00001;
|
||||
int usedCount = 0;
|
||||
|
||||
double distanceWeight = 0.0;
|
||||
double weightedValue = 0.0;
|
||||
|
||||
int rowDiff = otherRow - renderingRow;
|
||||
int colDiff = otherColumn - renderingColumn;
|
||||
double distanceSquared = (rowDiff * rowDiff) + (colDiff * colDiff);
|
||||
|
||||
// int maxDistSquared = DailyQcUtils.mpe_dqc_grid_max_dist *
|
||||
// DailyQcUtils.mpe_dqc_grid_max_dist;
|
||||
|
||||
if (distanceSquared < MIN_DISTANCE) {
|
||||
distanceSquared = MIN_DISTANCE;
|
||||
}
|
||||
|
||||
/*
|
||||
* mpe_dqc_grid_max_dist = max distance of influence of a gage in units
|
||||
* of grid bins
|
||||
*/
|
||||
|
||||
if (distanceSquared <= maxDistSquared) {
|
||||
distanceWeight = 1.0 / distanceSquared;
|
||||
weightedValue = originalValue * distanceWeight;
|
||||
|
||||
// adjust by PRISM factor
|
||||
if (prismStationGrid[renderingColumn][renderingRow] > 0) {
|
||||
double prismFactor = (double) hrap_grid.isoh[monthIndex][renderingColumn][renderingRow]
|
||||
/ (prismStationGrid[renderingColumn][renderingRow] * 25.4);
|
||||
weightedValue *= prismFactor;
|
||||
|
||||
System.out.println(header + " prismFactor > 0 " + prismFactor);
|
||||
|
||||
}
|
||||
|
||||
totalWeightedValue += weightedValue;
|
||||
totalDistanceWeight += distanceWeight;
|
||||
|
||||
usedCount++;
|
||||
}
|
||||
|
||||
return usedCount;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
}
|
|
@ -0,0 +1,603 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.mpe.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.raytheon.uf.common.ohd.AppsDefaults;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Hrap_Grid;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Pcp;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Pdata;
|
||||
import com.raytheon.viz.mpe.util.DailyQcUtils.Station;
|
||||
|
||||
/**
|
||||
* DESCRIPTION: Maps precipitation station values to an HRAP grid. Produces the
|
||||
* DailyQC version of the GageOnly analysis.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 11, 2009 snaples Initial creation
|
||||
* May 02, 2011 8962 snaples Added render24hrPcpUsingFour6hr() method
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author snaples
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class RenderPcpStandard {
|
||||
|
||||
private static final int MINIMUM_NEAREST_NEIGHBOR_GAGES = 4;
|
||||
|
||||
private static final int SUFFICIENT_NEAREST_NEIGHBOR_GAGES = 10;
|
||||
|
||||
private static boolean first = true;
|
||||
|
||||
Pcp pcp = DailyQcUtils.pcp;
|
||||
|
||||
/*
|
||||
* QC codes
|
||||
*/
|
||||
private static final int MISSING = -1;
|
||||
|
||||
private static final int STANDARD = 0;
|
||||
|
||||
private static final int SCREENED = 0;
|
||||
|
||||
private static final int FAILED = 1;
|
||||
|
||||
private static final int MANUAL = 2;
|
||||
|
||||
private static final int QUESTIONABLE = 3;
|
||||
|
||||
private static final int PARTIAL = 4;
|
||||
|
||||
private static final int ESTIMATED = 5;
|
||||
|
||||
private static final int TIMEDISTRIBUTED = 6;
|
||||
|
||||
private static final int VERIFIED = 8;
|
||||
|
||||
private static final String MPE_DQC_GRID_RENDERING_METHOD_TOKEN = "mpe_dqc_grid_render_method";
|
||||
|
||||
private static final int maxDistSquared = DailyQcUtils.mpe_dqc_grid_max_dist
|
||||
* DailyQcUtils.mpe_dqc_grid_max_dist;
|
||||
|
||||
private static final double BOGUS_ESTIMATED_GRID_VALUE = -1.0;
|
||||
|
||||
// weighting variables
|
||||
|
||||
// consider making these members of a local variable of an inner class
|
||||
private double totalWeightedValue = 0;
|
||||
private double totalDistanceWeight = 0;
|
||||
|
||||
/**
|
||||
* Converts point precipitation data in struct pdata to hrap grid. The 20
|
||||
* closest stations are precalculated for each grid point - this speeds
|
||||
* computations for data sets with many precipitation points. If there are
|
||||
* no good precipitation points for a grid point, then a recalculation is
|
||||
* made using all precipitation points. 1/R**2 interpolation is used. If
|
||||
* requested, the final interpolation is scaled using seasonal isohyets. The
|
||||
* grid is saved as a disk file and used later for a raster or vector (HRAP)
|
||||
* plot.
|
||||
*
|
||||
* @param m
|
||||
* @param k
|
||||
* @param mk
|
||||
* @param numPstations
|
||||
* @param
|
||||
* @param hrap_grid
|
||||
* @param pdata
|
||||
* @param pcp_in_use
|
||||
*/
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
|
||||
public void render_pcp(int pcpn_day, int pcpn_time, int pcpn_time_step,
|
||||
int numPstations, ArrayList<Station> precip_stations,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
// String header = "RenderPcpStandard.render_pcp_original(): ";
|
||||
|
||||
int isom = DailyQcUtils.isom;
|
||||
int method = DailyQcUtils.method;
|
||||
int mpe_dqc_max_precip_neighbors = DailyQcUtils.mpe_dqc_max_precip_neighbors;
|
||||
int i, j, h, hh, time_pos;
|
||||
|
||||
int usedStationCount = 0;
|
||||
int totals[] = new int[5];
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
totals[i] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pcpn_time_step is a function parameter. It specifies whether to
|
||||
* interpolate 6hr or 24hr HRAP grid
|
||||
*/
|
||||
/*
|
||||
* pcpn_time is a function parameter. It specifies which 6hr HRAP grid
|
||||
* to generate. It takes 0,1,2,or 3 to represent different 6hr period of
|
||||
* a day.
|
||||
*/
|
||||
/*
|
||||
* time_pos is assigned a value of 0,1,2,or 3 (for 6hr data) or 4 (for
|
||||
* 24hr data). This value is used in
|
||||
* pdata[pcpn_day].stn[hh].frain[time_pos].data to control whether to
|
||||
* retrieve 6hr data or 24hr data.
|
||||
*/
|
||||
if (pcpn_time_step == 0) {
|
||||
time_pos = pcpn_time; // for 6 hour data: 0,1,2,3.
|
||||
} else {
|
||||
time_pos = 4; // for 24 hour data
|
||||
|
||||
/*
|
||||
* in case the 24hr grid rendering is required, we check
|
||||
* 24hr_grid_gen_method_token() to determine how to generate the
|
||||
* grid. New Post OB9.2
|
||||
*/
|
||||
|
||||
if (getTokenValue24hrGridGenMeth() == 1) {
|
||||
render24hrPcpUsingFour6hr(pcpn_day, pcpn_time, numPstations,
|
||||
precip_stations, hrap_grid, pdata, pcp_in_use);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* begin to interpolate value for each bin in the HRAP grid */
|
||||
/*
|
||||
* to interpolate, two quantities are needed first: value and distance.
|
||||
* They are calculated by using the neighboring stations.
|
||||
*/
|
||||
for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
/*
|
||||
* Check if the grid cell is covered by an HSA. If not, then do
|
||||
* not estimate precipitation for it.
|
||||
*/
|
||||
if (hrap_grid.owner[i][j] == -1) {
|
||||
pcp.value[i][j] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
totalDistanceWeight = 0.0;
|
||||
totalWeightedValue = 0.0;
|
||||
usedStationCount = 0;
|
||||
boolean usedStation = false;
|
||||
/*
|
||||
* the following for loop is to calculate two quantities: value
|
||||
* and distance, which later on, are used to interpret the HRAP
|
||||
* grid.
|
||||
*/
|
||||
/*
|
||||
* It uses neighbor stations of a HRAP grid bin to calculate
|
||||
* value and distance.
|
||||
*/
|
||||
/* for each neighbor station of the grid bin, do the following */
|
||||
|
||||
/* For each of the closest stations. */
|
||||
for (h = 0; h < mpe_dqc_max_precip_neighbors; h++) {
|
||||
|
||||
// hh is index of stations
|
||||
|
||||
hh = hrap_grid.gage[i][j].index[h];
|
||||
|
||||
int gageIndex = hh;
|
||||
|
||||
usedStation = processStation(gageIndex, isom, i, j,
|
||||
pcpn_day, pcpn_time, time_pos, method,
|
||||
precip_stations, hrap_grid, pdata, pcp_in_use,
|
||||
false);
|
||||
|
||||
if (usedStation) {
|
||||
usedStationCount++;
|
||||
}
|
||||
|
||||
if (usedStationCount == SUFFICIENT_NEAREST_NEIGHBOR_GAGES) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* end for loop (h = 0; h < mpe_dqc_max_precip_neighbors;h++)
|
||||
* the above for loop is for each neighbor station.
|
||||
*/
|
||||
/*
|
||||
* the above for loop is to calculate value and distance, which
|
||||
* later on, are used to interpret the HRAP grid
|
||||
*/
|
||||
|
||||
/*
|
||||
* the resulting htotal is the valid number of neighbor stations
|
||||
* that are used to calculate value and distance, which later
|
||||
* on, are used to interpret the HRAP grid
|
||||
*/
|
||||
|
||||
/*
|
||||
* if there is not enough valid neighbor station, such as
|
||||
* usedStationCount < MINIMUM_NEAREST_NEIGHBOR_GAGES the code
|
||||
* below handle this situation. Basically, the code recalculate
|
||||
* the value and distance using all the stations -- see the for
|
||||
* (h = 0; h < max_stations; h++) loop below.
|
||||
*/
|
||||
|
||||
if (usedStationCount < MINIMUM_NEAREST_NEIGHBOR_GAGES) {
|
||||
|
||||
totalWeightedValue = 0.0;
|
||||
totalDistanceWeight = 0.0;
|
||||
usedStationCount = 0;
|
||||
|
||||
for (h = 0; h < numPstations; h++) {
|
||||
|
||||
int gageIndex = h;
|
||||
|
||||
usedStation = processStation(gageIndex, isom, i, j,
|
||||
pcpn_day, pcpn_time, time_pos, method,
|
||||
precip_stations, hrap_grid, pdata, pcp_in_use,
|
||||
true);
|
||||
|
||||
if (usedStation) {
|
||||
usedStationCount++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}/*
|
||||
* end the handling of special case : if (usedStationCount <
|
||||
* MINIMUM_NEAREST_NEIGHBOR_GAGES),
|
||||
*/
|
||||
/* which means there are not enough neighboring stations */
|
||||
|
||||
// found no usable gages
|
||||
if (usedStationCount == 0) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
pcp.value[i][j] = (int) (totalWeightedValue
|
||||
/ totalDistanceWeight * 100.0);
|
||||
}
|
||||
|
||||
if (pcp.value[i][j] < .01) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
|
||||
} // end for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
} // end for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
|
||||
if (pcpn_time_step == 0) {
|
||||
time_pos = pcpn_day * 4 + 3 - pcpn_time;
|
||||
} else {
|
||||
time_pos = 40 + pcpn_day;
|
||||
}
|
||||
// notice that time_pos is a variable defined inside the function, and
|
||||
// its value do not need to be limited as 0,1,2,3,or 4. Here it is
|
||||
// assigned with bigger numbers.
|
||||
// time_pos = 40 + pcpn_day;
|
||||
|
||||
// pcp_in_use[i] = 1 -- grids rendered via Render button OR Save Level2
|
||||
// option
|
||||
// = -1 --grids for this time period not rendered (initialization value)
|
||||
pcp_in_use[time_pos] = 1;
|
||||
|
||||
ReadQPFGrids rqp = new ReadQPFGrids();
|
||||
rqp.write_file("pcp", time_pos, pcp);
|
||||
}
|
||||
|
||||
private boolean processStation(int gageIndex, int isom, int col, int row,
|
||||
int pcpn_day, int pcpn_time, int time_pos, int method,
|
||||
ArrayList<Station> stationList, Hrap_Grid hrap_grid, Pdata[] pdata,
|
||||
int[] pcp_in_use, boolean checkDistance) {
|
||||
boolean usedStation = false;
|
||||
|
||||
Station station = stationList.get(gageIndex);
|
||||
|
||||
float value = pdata[pcpn_day].stn[gageIndex].frain[time_pos].data;
|
||||
|
||||
if (value < 0) {
|
||||
return usedStation;// false
|
||||
}
|
||||
|
||||
int qualityCode = pdata[pcpn_day].stn[gageIndex].frain[time_pos].qual;
|
||||
|
||||
if (qualityCode != 0 && qualityCode != 8 && qualityCode != 6
|
||||
&& qualityCode != 3 && qualityCode != 4 && qualityCode != 2) {
|
||||
return usedStation; // false
|
||||
}
|
||||
|
||||
if (method == 2 && station.isoh[isom] <= 0) {
|
||||
return usedStation; // false
|
||||
}
|
||||
|
||||
/*
|
||||
* determine distance between grid bin and the station in question of
|
||||
* the grid and station in question
|
||||
*/
|
||||
double distanceX = (col + (hrap_grid.hrap_minx - station.hrap_x));
|
||||
double distanceY = (row + (hrap_grid.hrap_miny - station.hrap_y));
|
||||
|
||||
double distanceSquared = (distanceX * distanceX)
|
||||
+ (distanceY * distanceY);
|
||||
|
||||
if (distanceSquared < .00001) {
|
||||
distanceSquared = .00001;
|
||||
}
|
||||
|
||||
if (checkDistance) {
|
||||
if (distanceSquared > maxDistSquared) // too far away, don't use the
|
||||
// station
|
||||
{
|
||||
return usedStation; // false, bail out, don't adjust weight with
|
||||
// this reading
|
||||
}
|
||||
}
|
||||
|
||||
double distanceWeight = 1 / distanceSquared;
|
||||
double weightedValue = value * distanceWeight;
|
||||
|
||||
float prismValue = station.isoh[isom];
|
||||
|
||||
if (method == 2 && prismValue > 0) {
|
||||
weightedValue = weightedValue * hrap_grid.isoh[isom][col][row]
|
||||
/ (prismValue * 25.4);
|
||||
}
|
||||
|
||||
totalWeightedValue += weightedValue;
|
||||
totalDistanceWeight += distanceWeight;
|
||||
|
||||
usedStation = true;
|
||||
return usedStation;
|
||||
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
/*
|
||||
* get the token value of token mpe_24hr_grid_gen_method. This token will
|
||||
* determine how we generate the 24hr grid. We can either use the 24hr gage
|
||||
* values, which is the old way, or we can use four 6hr gage values and add
|
||||
* them together.
|
||||
*/
|
||||
/* there is some problem with the static */
|
||||
|
||||
/**
|
||||
* @param pcpn_day
|
||||
* @param pcpn_time
|
||||
* @param numPstations
|
||||
* @param precip_stations
|
||||
* @param hrap_grid
|
||||
* @param pdata
|
||||
* @param pcp_in_use
|
||||
*/
|
||||
private void render24hrPcpUsingFour6hr(int pcpn_day, int pcpn_time,
|
||||
int numPstations, ArrayList<Station> precip_stations,
|
||||
Hrap_Grid hrap_grid, Pdata[] pdata, int[] pcp_in_use) {
|
||||
|
||||
int i, j, k, h, hh, time_pos;
|
||||
boolean usedStation = false;
|
||||
int isom = DailyQcUtils.isom;
|
||||
int method = DailyQcUtils.method;
|
||||
int totals[] = new int[5];
|
||||
int all_total = 0;
|
||||
int neighbor_total = 0;
|
||||
|
||||
int usedStationCount;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
totals[i] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* pcpn_time_step is function parameter. It specifies whether to
|
||||
* interpolate 6hr or 24hr HRAP grid
|
||||
*/
|
||||
/*
|
||||
* pcpn_time is a function parameter. It specifies which 6hr HRAP grid
|
||||
* to generate. It takes 0,1,2,or 3 to represent different 6hr period of
|
||||
* a day.
|
||||
*/
|
||||
/*
|
||||
* time_pos is assigned a value of 0,1,2,or 3 (for 6hr data) or 4 (for
|
||||
* 24hr data). This value is used in
|
||||
* pdata[pcpn_day].stn[hh].frain[time_pos].data to control whether to
|
||||
* retrieve 6hr data or 24hr data.
|
||||
*/
|
||||
|
||||
/* initialization of the pcp.value */
|
||||
for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* begin to interpolate 4 6hr grids. At the end of each iteration, the
|
||||
* calculated interpolation value is added to pcp.value[i][j].
|
||||
*/
|
||||
/*
|
||||
* time_pos is assigned a value of 0,1,2,or 3 (for four 6hr data). This
|
||||
* value is used in pdata[pcpn_day].stn[hh].frain[time_pos].data to
|
||||
* retrieve 6hr data.
|
||||
*/
|
||||
for (k = 0; k < 4; k++) {
|
||||
time_pos = k; /* for 6 hour data: 0, 1,2,3. */
|
||||
|
||||
/* begin to interpolate value for each bin in the HRAP grid */
|
||||
/*
|
||||
* to interpolate, two quantities are needed first: value and
|
||||
* distance. They are calculated by using the neighboring stations.
|
||||
*/
|
||||
|
||||
for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
/*
|
||||
* Check if the grid cell is covered by an HSA. If not, then
|
||||
* do not estimate precipitation for it.
|
||||
*/
|
||||
if (hrap_grid.owner[i][j] == -1) {
|
||||
pcp.value[i][j] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
totalDistanceWeight = 0.0;
|
||||
totalWeightedValue = 0.0;
|
||||
usedStationCount = 0;
|
||||
|
||||
/*
|
||||
* for each neighbor station of the grid bin, do the
|
||||
* following
|
||||
*/
|
||||
int mpe_dqc_max_precip_neighbors = DailyQcUtils.mpe_dqc_max_precip_neighbors;
|
||||
|
||||
for (h = 0; h < mpe_dqc_max_precip_neighbors; h++) {
|
||||
hh = hrap_grid.gage[i][j].index[h];/*
|
||||
* hh is index of
|
||||
* stations
|
||||
*/
|
||||
int gageIndex = hh;
|
||||
|
||||
usedStation = processStation(gageIndex, isom, i, j,
|
||||
pcpn_day, pcpn_time, time_pos, method,
|
||||
precip_stations, hrap_grid, pdata, pcp_in_use,
|
||||
false);
|
||||
|
||||
if (usedStation) {
|
||||
usedStationCount++;
|
||||
}
|
||||
|
||||
if (usedStationCount == SUFFICIENT_NEAREST_NEIGHBOR_GAGES) {
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (usedStationCount < MINIMUM_NEAREST_NEIGHBOR_GAGES) {
|
||||
|
||||
// not enough gages, so extend search to all gages
|
||||
totalWeightedValue = 0.0;
|
||||
totalDistanceWeight = 0.0;
|
||||
usedStationCount = 0;
|
||||
|
||||
for (h = 0; h < numPstations; h++) {
|
||||
|
||||
int gageIndex = h;
|
||||
|
||||
usedStation = processStation(gageIndex, isom, i, j,
|
||||
pcpn_day, pcpn_time, time_pos, method,
|
||||
precip_stations, hrap_grid, pdata,
|
||||
pcp_in_use, false);
|
||||
|
||||
if (usedStation) {
|
||||
usedStationCount++;
|
||||
}
|
||||
|
||||
}
|
||||
neighbor_total++;
|
||||
}
|
||||
|
||||
if (usedStationCount != 0) {
|
||||
pcp.value[i][j] += (int) ((totalWeightedValue / totalDistanceWeight) * 100);
|
||||
}
|
||||
|
||||
/*
|
||||
* if (pcp.value[i][j] < .01) { pcp.value[i][j] = 0; }
|
||||
*/
|
||||
all_total++;
|
||||
|
||||
} /* end of for loop (j = 0; j < hrap_grid.maxj; j++) */
|
||||
} /* end of for loop (i = 0; i < hrap_grid.maxi; i++) */
|
||||
/* At this moment, the interpretation of HRAP grid is done */
|
||||
|
||||
}/*
|
||||
* end of the ( k = 0; k<4; k++) loop, which interpolates 4 6hr HRAP
|
||||
* grid.
|
||||
*/
|
||||
|
||||
/* final adjustment of the pcp.value */
|
||||
for (i = 0; i < hrap_grid.maxi; i++) {
|
||||
for (j = 0; j < hrap_grid.maxj; j++) {
|
||||
|
||||
if (pcp.value[i][j] < .01) { // this doesn't really make sense,
|
||||
// since this is an integer
|
||||
pcp.value[i][j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* time_pos = pcpn_day * 4 + 3 - pcpn_time; */
|
||||
time_pos = 40 + pcpn_day;
|
||||
|
||||
/*
|
||||
* pcp_in_use[i] = 1 -- grids rendered via Render button OR Save Level2
|
||||
* option = -1 --grids for this time period not rendered (initialization
|
||||
* value)
|
||||
*/
|
||||
pcp_in_use[time_pos] = 1;
|
||||
|
||||
/*
|
||||
* results of grid rendering routines (render_t, render_t6, render_pcp,
|
||||
* render_z) are written to scratch files using the write_file routine.
|
||||
* scratch file is stored in the scratch directory.
|
||||
*/
|
||||
ReadQPFGrids rqp = new ReadQPFGrids();
|
||||
rqp.write_file("pcp", time_pos, pcp);
|
||||
|
||||
} // end render24hrPcpUsingFour6hr()
|
||||
|
||||
// ---------------------------------------------------------------------------------------
|
||||
int getTokenValue24hrGridGenMeth() {
|
||||
|
||||
int token_of_24hr_grid_gen_method = 0;
|
||||
|
||||
if (first == true) {
|
||||
String tokenName = "mpe_dqc_24hr_precip_grid_meth";
|
||||
|
||||
String dqc24hrPrecipMeth;
|
||||
|
||||
// char message[GAGEQC_MESSAGE_LEN] = { '\0' };
|
||||
|
||||
AppsDefaults appsDefaults = AppsDefaults.getInstance();
|
||||
dqc24hrPrecipMeth = appsDefaults.getToken(tokenName);
|
||||
|
||||
if (dqc24hrPrecipMeth != null) {
|
||||
/* allowed token values: (ACCUM_6HR, USE_24HR) */
|
||||
if (dqc24hrPrecipMeth.equalsIgnoreCase("ACCUM_6HR")) {
|
||||
token_of_24hr_grid_gen_method = 1;
|
||||
}
|
||||
}
|
||||
first = false;
|
||||
}
|
||||
|
||||
return token_of_24hr_grid_gen_method;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------
|
||||
|
||||
}
|
|
@ -20,8 +20,9 @@
|
|||
package com.raytheon.viz.texteditor.command;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
|
@ -46,6 +47,7 @@ import com.raytheon.viz.texteditor.util.TextEditorUtil;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jan 18, 2013 rferrel Initial creation
|
||||
* Aug 23, 2013 DR 16514 D. Friedman Fix accum/cancel logic.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -59,82 +61,53 @@ public class ProductQueryJob extends Job {
|
|||
|
||||
private final IProductQueryCallback callback;
|
||||
|
||||
/**
|
||||
* flag to indicate request accumulate.
|
||||
*/
|
||||
private boolean accumulate;
|
||||
|
||||
/**
|
||||
* List queries to perform.
|
||||
*/
|
||||
private final List<Request> requests;
|
||||
|
||||
/**
|
||||
* Set of queries main thread is waiting for.
|
||||
*/
|
||||
private final Set<Request> expected;
|
||||
|
||||
/**
|
||||
* Transport to use for the queries.
|
||||
*/
|
||||
private final IQueryTransport queryTransport;
|
||||
|
||||
/**
|
||||
* Flag to indicate cancel is being performed.
|
||||
*/
|
||||
private final AtomicBoolean canceled;
|
||||
|
||||
public ProductQueryJob(IProductQueryCallback callback) {
|
||||
super("Product Query");
|
||||
setSystem(true);
|
||||
this.callback = callback;
|
||||
accumulate = false;
|
||||
requests = new ArrayList<Request>();
|
||||
expected = new HashSet<Request>();
|
||||
queryTransport = TextEditorUtil.getTextDbsrvTransport();
|
||||
canceled = new AtomicBoolean(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add request to queue and determine what needs to be done to schedule the
|
||||
* request.
|
||||
* Add request to queue. If not an incremental update, cancel
|
||||
* existing requests.
|
||||
*
|
||||
* @param command
|
||||
* @param isObsUpdated
|
||||
*/
|
||||
public synchronized void addRequest(ICommand command, boolean isObsUpdated) {
|
||||
Request request = new Request(command, isObsUpdated);
|
||||
if (accumulate) {
|
||||
requests.add(request);
|
||||
if (getState() == Job.NONE) {
|
||||
schedule();
|
||||
}
|
||||
} else {
|
||||
requests.clear();
|
||||
requests.add(request);
|
||||
if (getState() == Job.NONE) {
|
||||
schedule();
|
||||
} else {
|
||||
cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isAccumulate() {
|
||||
return accumulate;
|
||||
}
|
||||
|
||||
/**
|
||||
* When set to true requests will accumulate and be processed in the order
|
||||
* received; otherwise the queue is purged and any current request is
|
||||
* canceled if a new request is received.
|
||||
*
|
||||
* @param accumulate
|
||||
*/
|
||||
public void setAccumulate(boolean accumulate) {
|
||||
if (this.accumulate != accumulate) {
|
||||
synchronized (this) {
|
||||
requests.clear();
|
||||
if (getState() != Job.NONE) {
|
||||
cancel();
|
||||
}
|
||||
this.accumulate = accumulate;
|
||||
}
|
||||
public synchronized void addRequest(ICommand command, boolean isObsUpdated,
|
||||
boolean accumulate) {
|
||||
Request request = new Request(command, isObsUpdated);
|
||||
if (! accumulate && ! isObsUpdated) {
|
||||
// Cancel existing requests.
|
||||
expected.clear();
|
||||
requests.clear();
|
||||
}
|
||||
requests.add(request);
|
||||
expected.add(request);
|
||||
schedule();
|
||||
}
|
||||
|
||||
public boolean isExpectingRequests() {
|
||||
return ! expected.isEmpty();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -149,65 +122,44 @@ public class ProductQueryJob extends Job {
|
|||
return Status.OK_STATUS;
|
||||
}
|
||||
|
||||
Request request = null;
|
||||
try {
|
||||
while (true) {
|
||||
synchronized (this) {
|
||||
if (requests.size() > 0) {
|
||||
request = requests.remove(0);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
while (true) {
|
||||
final Request request;
|
||||
synchronized (this) {
|
||||
if (requests.size() > 0) {
|
||||
request = requests.remove(0);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
List<StdTextProduct> prodList = null;
|
||||
try {
|
||||
try {
|
||||
final ICommand command = request.getCommand();
|
||||
final boolean isObsUpdated = request.isObsUpdated();
|
||||
final List<StdTextProduct> prodList = command
|
||||
.executeCommand(queryTransport);
|
||||
// User may have canceled during long query.
|
||||
if (!canceled.get()) {
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
callback.requestDone(command, prodList,
|
||||
isObsUpdated);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
prodList = request.getCommand().
|
||||
executeCommand(queryTransport);
|
||||
} catch (CommandFailedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
if (!canceled.get()) {
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
callback.requestDone(null, null, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
final List<StdTextProduct> resultProdList = prodList;
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (expected.remove(request) && resultProdList != null) {
|
||||
callback.requestDone(request.getCommand(), resultProdList,
|
||||
request.isObsUpdated());
|
||||
} else {
|
||||
callback.requestDone(null, null, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
} finally {
|
||||
canceled.set(false);
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.core.runtime.jobs.Job#canceling()
|
||||
*/
|
||||
@Override
|
||||
protected void canceling() {
|
||||
canceled.set(true);
|
||||
}
|
||||
|
||||
/*
|
||||
* Class to hold the query command and isObsUpdated flag needed for the
|
||||
* query and its callback.
|
||||
|
|
|
@ -329,6 +329,8 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox;
|
|||
* set the highlight colors.
|
||||
* 23Jul2013 2176 jsanchez Added a new confirmation message for emergency warnings.
|
||||
* 25July2013 15733 GHull Read font and color prefs from TextEditorCfg.
|
||||
* 23Aug2013 DR 16514 D. Friedman Fix handling of completed product requests. Do not change
|
||||
* command history or close browser window for "update obs".
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1101,11 +1103,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
*/
|
||||
private boolean overwriteMode = false;
|
||||
|
||||
/**
|
||||
* flag to indicate it a product request is from the GUI or an updated ob.
|
||||
*/
|
||||
private final AtomicInteger updateCount = new AtomicInteger(0);
|
||||
|
||||
/**
|
||||
* The expire notification when editing a warn gen product.
|
||||
*/
|
||||
|
@ -3105,12 +3102,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
accumChkBtn = new Button(topBtnRowComp, SWT.CHECK);
|
||||
accumChkBtn.setText("Accum");
|
||||
accumChkBtn.setLayoutData(rd);
|
||||
accumChkBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
productQueryJob.setAccumulate(accumChkBtn.getSelection());
|
||||
}
|
||||
});
|
||||
|
||||
// Add the Update Observation check button.
|
||||
rd = new RowData(BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
|
@ -3994,6 +3985,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
// return textColorsCfg;
|
||||
// }
|
||||
|
||||
|
||||
private void setDefaultTextColor(TextEditorCfg txtClrCfg) {
|
||||
textBackground = new Color(shell.getDisplay(),
|
||||
txtClrCfg.getTextBackgroundColor());
|
||||
|
@ -5930,12 +5922,15 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
return;
|
||||
}
|
||||
|
||||
if (browser != null) {
|
||||
browser.close();
|
||||
browser = null;
|
||||
if (! isObsUpdated) {
|
||||
if (browser != null) {
|
||||
browser.close();
|
||||
browser = null;
|
||||
}
|
||||
|
||||
commandHistory.addCommand(command);
|
||||
}
|
||||
|
||||
commandHistory.addCommand(command);
|
||||
statusBarLabel.setText("Loading "
|
||||
+ TextEditorUtil.getCommandText(command));
|
||||
statusBarLabel.update();
|
||||
|
@ -5944,7 +5939,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
if (queryTransport == null) {
|
||||
queryTransport = TextEditorUtil.getTextDbsrvTransport();
|
||||
}
|
||||
productQueryJob.addRequest(command, isObsUpdated);
|
||||
productQueryJob.addRequest(command, isObsUpdated,
|
||||
accumChkBtn.getSelection());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -6025,7 +6021,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
stripWMOHeaders(prod);
|
||||
}
|
||||
|
||||
if (updateCount.get() > 0) {
|
||||
if (isObsUpdated) {
|
||||
updateDisplayedProduct(prod);
|
||||
} else {
|
||||
setDisplayedProduct(prod);
|
||||
|
@ -6120,13 +6116,15 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
private void postExecute(boolean hasAttachment, boolean enterEditor,
|
||||
boolean validExecuteCommand, String attachedFilename) {
|
||||
if (!this.isDisposed()) {
|
||||
if (hasAttachment) {
|
||||
statusBarLabel.setText("Attachment: " + attachedFilename);
|
||||
} else {
|
||||
statusBarLabel.setText("");
|
||||
if (! productQueryJob.isExpectingRequests()) {
|
||||
if (hasAttachment) {
|
||||
statusBarLabel.setText("Attachment: " + attachedFilename);
|
||||
} else {
|
||||
statusBarLabel.setText("");
|
||||
}
|
||||
statusBarLabel.update();
|
||||
setBusy(false);
|
||||
}
|
||||
statusBarLabel.update();
|
||||
setBusy(false);
|
||||
// Automatically open the editor window with returned data.
|
||||
if (enterEditor) {
|
||||
enterEditor();
|
||||
|
@ -6505,7 +6503,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
@Override
|
||||
public void setAccumulation(boolean flag) {
|
||||
this.accumChkBtn.setSelection(flag);
|
||||
productQueryJob.setAccumulate(flag);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -6992,7 +6989,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
// retrieved for display in this text editor dialog
|
||||
// instance.
|
||||
TextDisplayModel.getInstance().setStdTextProduct(token, product);
|
||||
updateCount.addAndGet(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -7343,7 +7339,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
msgPIL = "";
|
||||
}
|
||||
if (isObsDisplayed(msgPIL)) {
|
||||
updateCount.addAndGet(1);
|
||||
ICommand command = CommandFactory.getAfosCommand(msgPIL);
|
||||
UpdateObsRun run = new UpdateObsRun(command);
|
||||
VizApp.runSync(run);
|
||||
|
|
|
@ -32,6 +32,7 @@ import java.util.List;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Dec 11, 2007 #601 chammack Initial Creation.
|
||||
* Aug 19, 2013 2177 jsanchez Removed suppress attribute.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -49,11 +50,6 @@ public class AffectedAreas {
|
|||
*/
|
||||
protected List<String> partOfArea;
|
||||
|
||||
/**
|
||||
* The partOfArea to suppress (e.g. "ns")
|
||||
*/
|
||||
protected String suppress;
|
||||
|
||||
/** The notation of the area affected (e.g. "COUNTY") */
|
||||
protected String areaNotation;
|
||||
|
||||
|
@ -90,16 +86,14 @@ public class AffectedAreas {
|
|||
return name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* the name to set
|
||||
* the name to set
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return the areaNotation
|
||||
*/
|
||||
|
|
|
@ -46,7 +46,6 @@ import com.raytheon.uf.common.status.UFStatus;
|
|||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.viz.warngen.gui.WarngenLayer;
|
||||
import com.raytheon.viz.warngen.suppress.SuppressMap;
|
||||
import com.raytheon.viz.warngen.util.Abbreviation;
|
||||
import com.vividsolutions.jts.geom.Geometry;
|
||||
import com.vividsolutions.jts.geom.prep.PreparedGeometry;
|
||||
|
@ -74,6 +73,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometry;
|
|||
* Nov 9, 2012 DR 15430 D. Friedman Extracted method converFeAreaToPartList.
|
||||
* Apr 29, 2013 1955 jsanchez Ignored comparing the geometry's user data when finding intersected areas.
|
||||
* May 2, 2013 1963 jsanchez Updated method to determine partOfArea.
|
||||
* Aug 19, 2013 2177 jsanchez Used portionsUtil to calculate area portion descriptions.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -89,13 +89,15 @@ public class Area {
|
|||
*/
|
||||
public static final double DEFAULT_PORTION_TOLERANCE = 0.60;
|
||||
|
||||
private Area() {
|
||||
private PortionsUtil portionsUtil;
|
||||
|
||||
public Area(PortionsUtil portionsUtil) {
|
||||
this.portionsUtil = portionsUtil;
|
||||
}
|
||||
|
||||
public static AffectedAreas[] findAffectedAreas(
|
||||
WarngenConfiguration config, Geometry polygon,
|
||||
Geometry warningArea, String localizedSite) throws VizException {
|
||||
public AffectedAreas[] findAffectedAreas(WarngenConfiguration config,
|
||||
Geometry polygon, Geometry warningArea, String localizedSite)
|
||||
throws VizException {
|
||||
|
||||
// --- Begin argument checking ---
|
||||
Validate.notNull(config.getGeospatialConfig().getAreaSource(),
|
||||
|
@ -113,7 +115,7 @@ public class Area {
|
|||
localizedSite, geoms);
|
||||
}
|
||||
|
||||
private static AffectedAreas[] findAffectedAreas(
|
||||
private AffectedAreas[] findAffectedAreas(
|
||||
AreaSourceConfiguration areaConfig,
|
||||
GeospatialConfiguration geospatialConfig, Geometry polygon,
|
||||
String localizedSite, List<Geometry> geoms) throws VizException {
|
||||
|
@ -183,7 +185,6 @@ public class Area {
|
|||
area.stateabbr = regionFeature.attributes.get(areaNotationField)
|
||||
.toString();
|
||||
area.size = regionGeom.getArea();
|
||||
area.suppress = suppressType(areaSource, area.stateabbr, area.fips);
|
||||
|
||||
Object tzData = regionFeature.attributes.get(timezonePathcastField);
|
||||
|
||||
|
@ -219,9 +220,16 @@ public class Area {
|
|||
double tolerCheck = regionGeom.getArea()
|
||||
* DEFAULT_PORTION_TOLERANCE;
|
||||
if (areaIntersection < tolerCheck) {
|
||||
area.partOfArea = GisUtil
|
||||
.asStringList(GisUtil.calculatePortion(regionGeom,
|
||||
intersection, true, true));
|
||||
try {
|
||||
String entityID = area.stateabbr + areaSource.charAt(0)
|
||||
+ area.fips.substring(2);
|
||||
area.partOfArea = GisUtil.asStringList(portionsUtil
|
||||
.getPortions(entityID, regionGeom, intersection,
|
||||
true));
|
||||
} catch (Exception e) {
|
||||
statusHandler.error("Unable to calculate part of area for "
|
||||
+ area.name, e);
|
||||
}
|
||||
}
|
||||
|
||||
// Search the parent region
|
||||
|
@ -277,10 +285,9 @@ public class Area {
|
|||
* @return
|
||||
* @throws VizException
|
||||
*/
|
||||
public static Map<String, Object> findInsectingAreas(
|
||||
WarngenConfiguration config, Geometry warnPolygon,
|
||||
Geometry warnArea, String localizedSite, WarngenLayer warngenLayer)
|
||||
throws VizException {
|
||||
public Map<String, Object> findInsectingAreas(WarngenConfiguration config,
|
||||
Geometry warnPolygon, Geometry warnArea, String localizedSite,
|
||||
WarngenLayer warngenLayer) throws VizException {
|
||||
Map<String, Object> areasMap = new HashMap<String, Object>();
|
||||
|
||||
String hatchedAreaSource = config.getHatchedAreaSource()
|
||||
|
@ -311,18 +318,6 @@ public class Area {
|
|||
|
||||
}
|
||||
|
||||
private static String suppressType(String areaSource, String state,
|
||||
String fips) {
|
||||
String retVal = SuppressMap.NONE;
|
||||
String type = areaSource.equalsIgnoreCase("zone") ? "Z" : "C";
|
||||
|
||||
if (state != null && fips != null) {
|
||||
String key = state + type + fips.substring(2);
|
||||
retVal = SuppressMap.getInstance().getType(key);
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
public static List<String> converFeAreaToPartList(String feArea) {
|
||||
final List<String> partList = new ArrayList<String>();
|
||||
if (feArea == null) {
|
||||
|
|
|
@ -0,0 +1,178 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.warngen.gis;
|
||||
|
||||
/**
|
||||
* Port of A1 constants applied to a grid to determine county or zone portions.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 5, 2013 2177 jsanchez Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class CoverageConstants {
|
||||
|
||||
public static final int XSOUTH = 0x0001;
|
||||
|
||||
public static final int SOUTH = 0x0002;
|
||||
|
||||
public static final int NORTH = 0x0040;
|
||||
|
||||
public static final int XNORTH = 0x0080;
|
||||
|
||||
public static final int CENTER_NS = 0x0018;
|
||||
|
||||
public static final int CENTRAL_NS = 0x0024;
|
||||
|
||||
public static final int XWEST = 0x0100;
|
||||
|
||||
public static final int WEST = 0x0200;
|
||||
|
||||
public static final int EAST = 0x4000;
|
||||
|
||||
public static final int XEAST = 0x8000;
|
||||
|
||||
public static final int CENTER_EW = 0x1800;
|
||||
|
||||
public static final int CENTRAL_EW = 0x2400;
|
||||
|
||||
public static final int SOUTHERN = 0x0003;
|
||||
|
||||
public static final int NORTHERN = 0x00C0;
|
||||
|
||||
public static final int WESTERN = 0x0300;
|
||||
|
||||
public static final int EASTERN = 0xC000;
|
||||
|
||||
public static final int SOUTHSIDE = 0x000F;
|
||||
|
||||
public static final int NORTHSIDE = 0x00F0;
|
||||
|
||||
public static final int WESTSIDE = 0x0F00;
|
||||
|
||||
public static final int EASTSIDE = 0xF000;
|
||||
|
||||
public static final int EXTREME = 0x8181;
|
||||
|
||||
public static final int NOT_EXTREME = 0x7E7E;
|
||||
|
||||
public static final int EXTREME_NS = 0x0081;
|
||||
|
||||
public static final int EXTREME_EW = 0x8100;
|
||||
|
||||
public static final int CENTRAL = 0x2424;
|
||||
|
||||
public static final int CENTER = 0x1818;
|
||||
|
||||
public static final int NOT_CENTRAL = 0xC3C3;
|
||||
|
||||
public static final int NORTH_SOUTH = 0x00FF;
|
||||
|
||||
public static final int EAST_WEST = 0xFF00;
|
||||
|
||||
public static final int NNE = 0x0001;
|
||||
|
||||
public static final int ENE = 0x0002;
|
||||
|
||||
public static final int ESE = 0x0004;
|
||||
|
||||
public static final int SSE = 0x0008;
|
||||
|
||||
public static final int SSW = 0x0010;
|
||||
|
||||
public static final int WSW = 0x0020;
|
||||
|
||||
public static final int WNW = 0x0040;
|
||||
|
||||
public static final int NNW = 0x0080;
|
||||
|
||||
public static final int EXTREME_YES = 0xFFFF00;
|
||||
|
||||
public static final int EXTREME_NO = 0x00FF;
|
||||
|
||||
public static final int EXTREME_CORNER = 0xFF0000;
|
||||
|
||||
public static int[] NS_MASK = new int[256];
|
||||
|
||||
public static int[] EW_MASK = new int[256];
|
||||
|
||||
static {
|
||||
int i;
|
||||
|
||||
NS_MASK[0] = 0;
|
||||
for (i = 1; i < 256; i++) {
|
||||
if (i < 87) {
|
||||
NS_MASK[i] = XSOUTH | SOUTH;
|
||||
} else if (i > 167) {
|
||||
NS_MASK[i] = XNORTH | NORTH;
|
||||
} else if (i < 106) {
|
||||
NS_MASK[i] = SOUTH;
|
||||
} else if (i > 148) {
|
||||
NS_MASK[i] = NORTH;
|
||||
} else if (i < 118) {
|
||||
NS_MASK[i] = CENTRAL_NS | SOUTH;
|
||||
} else if (i > 138) {
|
||||
NS_MASK[i] = CENTRAL_NS | NORTH;
|
||||
} else if (i < 127) {
|
||||
NS_MASK[i] = CENTER_NS | CENTRAL_NS | SOUTH;
|
||||
} else if (i > 127) {
|
||||
NS_MASK[i] = CENTER_NS | CENTRAL_NS | NORTH;
|
||||
} else {
|
||||
NS_MASK[i] = CENTER_NS | CENTRAL_NS;
|
||||
}
|
||||
}
|
||||
|
||||
EW_MASK[0] = 0;
|
||||
for (i = 1; i < 256; i++) {
|
||||
if (i < 87) {
|
||||
EW_MASK[i] = XWEST | WEST;
|
||||
} else if (i > 167) {
|
||||
EW_MASK[i] = XEAST | EAST;
|
||||
} else if (i < 106) {
|
||||
EW_MASK[i] = WEST;
|
||||
} else if (i > 145) {
|
||||
EW_MASK[i] = EAST;
|
||||
} else if (i < 118) {
|
||||
EW_MASK[i] = CENTRAL_EW | WEST;
|
||||
} else if (i > 138) {
|
||||
EW_MASK[i] = CENTRAL_EW | EAST;
|
||||
} else if (i < 127) {
|
||||
EW_MASK[i] = CENTER_EW | CENTRAL_EW | WEST;
|
||||
} else if (i > 127) {
|
||||
EW_MASK[i] = CENTER_EW | CENTRAL_EW | EAST;
|
||||
} else {
|
||||
EW_MASK[i] = CENTER_EW | CENTRAL_EW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private CoverageConstants() {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.warngen.gis;
|
||||
|
||||
/**
|
||||
* Simple port of an A1 struct created by GridUtil and used by PortionsUtil.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 5, 2013 2177 jsanchez Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class EntityData {
|
||||
|
||||
private int meanMask = 0;
|
||||
|
||||
private int coverageMask = 0;
|
||||
|
||||
private int octants = 0;
|
||||
|
||||
public EntityData(int meanMask, int coverageMask, int octants) {
|
||||
this.meanMask = meanMask;
|
||||
this.coverageMask = coverageMask;
|
||||
this.octants = octants;
|
||||
}
|
||||
|
||||
public int getMeanMask() {
|
||||
return meanMask;
|
||||
}
|
||||
|
||||
public int getCoverageMask() {
|
||||
return coverageMask;
|
||||
}
|
||||
|
||||
public int getOctants() {
|
||||
return octants;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,616 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.warngen.gis;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.geotools.coverage.grid.GeneralGridGeometry;
|
||||
import org.geotools.coverage.grid.GridGeometry2D;
|
||||
import org.geotools.referencing.operation.DefaultMathTransformFactory;
|
||||
import org.opengis.coverage.grid.GridEnvelope;
|
||||
import org.opengis.metadata.spatial.PixelOrientation;
|
||||
import org.opengis.referencing.operation.MathTransform;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.warning.util.GeometryUtil;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.viz.warngen.gui.WarngenLayer;
|
||||
import com.vividsolutions.jts.geom.Coordinate;
|
||||
import com.vividsolutions.jts.geom.CoordinateSequence;
|
||||
import com.vividsolutions.jts.geom.Envelope;
|
||||
import com.vividsolutions.jts.geom.Geometry;
|
||||
import com.vividsolutions.jts.geom.GeometryFactory;
|
||||
import com.vividsolutions.jts.geom.Point;
|
||||
import com.vividsolutions.jts.geom.prep.PreparedGeometry;
|
||||
import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
|
||||
|
||||
/**
|
||||
* Converts the county or zone and the intersecting warning area to grids. The
|
||||
* county or zone is also weighted to determine the northern, southern, eastern,
|
||||
* and western parts of the county or zone. Most of the code is ported from A1
|
||||
* to create an EntityData object that will be used by PortionsUtil to determine
|
||||
* the applicable impacted portions of a county or zone.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 5, 2013 jsanchez Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class GridUtil {
|
||||
|
||||
private int ny = 0;
|
||||
|
||||
private int nx = 0;
|
||||
|
||||
private int[] ewGrid;
|
||||
|
||||
private int[] nsGrid;
|
||||
|
||||
private byte[] warnedAreaGrid;
|
||||
|
||||
private byte[] countyOrZoneGrid;
|
||||
|
||||
private WarngenLayer layer;
|
||||
|
||||
private MathTransform latLonToContour, contourToLatLon;
|
||||
|
||||
public GridUtil(WarngenLayer layer, GeneralGridGeometry localGridGeometry,
|
||||
MathTransform localToLatLon) throws Exception {
|
||||
this.layer = layer;
|
||||
|
||||
GridEnvelope range = localGridGeometry.getGridRange();
|
||||
this.nx = range.getHigh(0);
|
||||
this.ny = range.getHigh(1);
|
||||
|
||||
org.opengis.geometry.Envelope ge = localGridGeometry.getEnvelope();
|
||||
contourToLatLon = new DefaultMathTransformFactory()
|
||||
.createConcatenatedTransform(new GridGeometry2D(range, ge)
|
||||
.getGridToCRS(PixelOrientation.CENTER), localToLatLon);
|
||||
latLonToContour = contourToLatLon.inverse();
|
||||
|
||||
ewGrid = new int[nx * ny];
|
||||
nsGrid = new int[nx * ny];
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the countyOrZone geometry and the warnedArea into grids and sets
|
||||
* the appropriate data in an EntityData object.
|
||||
*
|
||||
* @param countyOrZone
|
||||
* @param warnedArea
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public EntityData calculateGrids(Geometry countyOrZone, Geometry warnedArea)
|
||||
throws Exception {
|
||||
countyOrZoneGrid = toByteArray(countyOrZone);
|
||||
warnedAreaGrid = toByteArray(warnedArea);
|
||||
int[] bounds = awips1FinishAreaEntity();
|
||||
EntityData entityData = finishDefineArea(bounds);
|
||||
return entityData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the geometry into a byte array that is expected by ported A1
|
||||
* code.
|
||||
*
|
||||
* @param geometry
|
||||
* @return
|
||||
* @throws VizException
|
||||
*/
|
||||
private byte[] toByteArray(Geometry geometry) throws VizException {
|
||||
byte[] bytes = new byte[nx * ny];
|
||||
float[][] floatData = toFloatData(geometry);
|
||||
|
||||
// Rotates grid
|
||||
int k = 0;
|
||||
for (int j = ny - 1; j >= 0; j--) {
|
||||
for (int i = 0; i < nx; i++) {
|
||||
if (floatData[i][j] == 1) {
|
||||
bytes[k] = 1;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
return bytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the geometry into a 2-D float array.
|
||||
*
|
||||
* @param geometry
|
||||
* @return
|
||||
* @throws VizException
|
||||
*/
|
||||
private float[][] toFloatData(Geometry geometry) throws VizException {
|
||||
Geometry contoured = layer.convertGeom(geometry, latLonToContour);
|
||||
List<Geometry> geomList = new ArrayList<Geometry>(
|
||||
contoured.getNumGeometries());
|
||||
GeometryUtil.buildGeometryList(geomList, contoured);
|
||||
List<PreparedGeometry> prepped = new ArrayList<PreparedGeometry>(
|
||||
geomList.size());
|
||||
for (Geometry g : geomList) {
|
||||
prepped.add(PreparedGeometryFactory.prepare(g));
|
||||
}
|
||||
|
||||
GeometryFactory gf = geometry.getFactory();
|
||||
Point point = gf.createPoint(new Coordinate(0, 0));
|
||||
CoordinateSequence pointCS = point.getCoordinateSequence();
|
||||
float[][] contourAreaData = new float[nx][ny];
|
||||
for (PreparedGeometry geom : prepped) {
|
||||
Envelope env = geom.getGeometry().getEnvelopeInternal();
|
||||
int startX = (int) env.getMinX();
|
||||
int startY = (int) env.getMinY();
|
||||
int width = (int) env.getMaxX();
|
||||
int height = (int) env.getMaxY();
|
||||
if (startX < 0 || width > nx || startY < 0 || height > ny) {
|
||||
continue;
|
||||
}
|
||||
startX = Math.max(0, startX - 1);
|
||||
startY = Math.max(0, startY - 1);
|
||||
width = Math.min(nx, width + 1);
|
||||
height = Math.min(ny, height + 1);
|
||||
for (int x = startX; x < width; ++x) {
|
||||
for (int y = startY; y < height; ++y) {
|
||||
|
||||
pointCS.setOrdinate(0, 0, x);
|
||||
pointCS.setOrdinate(0, 1, y);
|
||||
point.geometryChanged();
|
||||
if (contourAreaData[x][y] == 0.0f && geom.intersects(point)) {
|
||||
contourAreaData[x][y] = 1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return contourAreaData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ported only the logic from A1 code
|
||||
* GeoEntityLookupTable::finishDefineArea() that calculates the meanMask,
|
||||
* coverageMask,and octants for an entity (i.e. county or zone).
|
||||
*
|
||||
* @param countyOrZone
|
||||
* @param warnedArea
|
||||
* @return
|
||||
*/
|
||||
private EntityData finishDefineArea(int[] bounds) {
|
||||
int meanMask = 0;
|
||||
int coverageMask = 0;
|
||||
int octants = 0;
|
||||
|
||||
int ewCount = 0;
|
||||
int nsCount = 0;
|
||||
int ewTotal = 0;
|
||||
int nsTotal = 0;
|
||||
|
||||
int k = 0;
|
||||
int min_i = bounds[0];
|
||||
int max_i = bounds[1];
|
||||
int min_j = bounds[2];
|
||||
int max_j = bounds[3];
|
||||
for (int j = min_j; j < max_j; j++) {
|
||||
k = nx * j + min_i;
|
||||
for (int i = min_i; i < max_i; i++, k++) {
|
||||
if (warnedAreaGrid[k] == 1) {
|
||||
int e = countyOrZoneGrid[k];
|
||||
|
||||
int ii = ewGrid[k];
|
||||
int jj = nsGrid[k];
|
||||
|
||||
if (ii == 0 && jj == 0) {
|
||||
continue;
|
||||
}
|
||||
ewTotal += ii;
|
||||
if (ii > 0) {
|
||||
ewCount++;
|
||||
}
|
||||
nsTotal += jj;
|
||||
if (jj > 0) {
|
||||
nsCount++;
|
||||
}
|
||||
int m = CoverageConstants.EW_MASK[ii]
|
||||
| CoverageConstants.NS_MASK[jj];
|
||||
coverageMask |= m;
|
||||
if ((m & CoverageConstants.CENTRAL) == CoverageConstants.CENTRAL) {
|
||||
continue;
|
||||
}
|
||||
if (ii == 0) {
|
||||
ii = 127;
|
||||
}
|
||||
if (jj == 0) {
|
||||
jj = 127;
|
||||
}
|
||||
if (ii < 127) {
|
||||
if (jj < 127) {
|
||||
e = (ii > jj ? CoverageConstants.SSW
|
||||
: CoverageConstants.WSW);
|
||||
} else {
|
||||
e = (ii > 254 - jj ? CoverageConstants.NNW
|
||||
: CoverageConstants.WNW);
|
||||
}
|
||||
} else {
|
||||
if (jj < 127) {
|
||||
e = (ii < 254 - jj ? CoverageConstants.SSE
|
||||
: CoverageConstants.ESE);
|
||||
} else {
|
||||
e = (ii < jj ? CoverageConstants.NNE
|
||||
: CoverageConstants.ENE);
|
||||
}
|
||||
}
|
||||
if ((m & CoverageConstants.EXTREME_NS) > 0) {
|
||||
e <<= 8;
|
||||
}
|
||||
if ((m & CoverageConstants.EXTREME_EW) > 0) {
|
||||
e <<= 8;
|
||||
}
|
||||
octants |= e;
|
||||
} else {
|
||||
warnedAreaGrid[k] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (ewCount > 0) {
|
||||
ewTotal = (ewTotal + ewCount / 2) / ewCount;
|
||||
}
|
||||
if (nsCount > 0) {
|
||||
nsTotal = (nsTotal + nsCount / 2) / nsCount;
|
||||
}
|
||||
|
||||
meanMask = CoverageConstants.NS_MASK[nsTotal]
|
||||
| CoverageConstants.EW_MASK[ewTotal];
|
||||
return new EntityData(meanMask, coverageMask, octants);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the _ewGrid and _nsGrid via A1 ~~ mAgIc ~~
|
||||
*/
|
||||
private int[] awips1FinishAreaEntity() {
|
||||
|
||||
final double EXTREME_FRAC = 0.1;
|
||||
final double MIN_EXTREME = 87;
|
||||
final double MAX_EXTREME = 167;
|
||||
|
||||
int k = 0;
|
||||
int ii, jj;
|
||||
|
||||
/*
|
||||
* identify those points on the boundary of the entity so we can shrink
|
||||
* from there
|
||||
*/
|
||||
int i_mean = 0;
|
||||
int j_mean = 0;
|
||||
int new_tot = 0;
|
||||
int ii_mean = 0;
|
||||
int jj_mean = 0;
|
||||
int min_i = Integer.MAX_VALUE;
|
||||
int min_j = Integer.MAX_VALUE;
|
||||
int max_i = Integer.MIN_VALUE;
|
||||
int max_j = Integer.MIN_VALUE;
|
||||
|
||||
for (jj = 0; jj < ny; jj++) {
|
||||
k = nx * jj;
|
||||
for (ii = 0; ii < nx; ii++, k++) {
|
||||
// If the entity is not 1 then it's not part of the county or
|
||||
// zone area.
|
||||
if (countyOrZoneGrid[k] != 1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ii > max_i) {
|
||||
max_i = ii;
|
||||
}
|
||||
|
||||
if (ii < min_i) {
|
||||
min_i = ii;
|
||||
}
|
||||
|
||||
if (jj > max_j) {
|
||||
max_j = jj;
|
||||
}
|
||||
if (jj < min_j) {
|
||||
min_j = jj;
|
||||
}
|
||||
++new_tot;
|
||||
ii_mean += ii;
|
||||
jj_mean += jj;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* restablish some things that might have changed since the first time
|
||||
* they were calculated.
|
||||
*/
|
||||
// if (!outside) {
|
||||
ii_mean /= new_tot;
|
||||
jj_mean /= new_tot;
|
||||
i_mean = ii_mean;
|
||||
j_mean = jj_mean;
|
||||
// }/*endif*/
|
||||
|
||||
/* assign correct base for directional computation */
|
||||
// I changed this from ii_mean to this
|
||||
double i_base = (min_i + max_i) / 2;
|
||||
// I changed this from jj_mean to this
|
||||
double j_base = (min_j + max_j) / 2;
|
||||
|
||||
/*
|
||||
* calculate needed rotation factors for computation of amount each
|
||||
* point is north and east of centroid
|
||||
*/
|
||||
double x_intcpg = 0.5;
|
||||
double y_intcpg = 0.5;
|
||||
|
||||
double dx = 1, dy = 1;
|
||||
double x = (i_base - x_intcpg);
|
||||
double y = (j_base - y_intcpg);
|
||||
|
||||
// Below is some code from the original A1 code. I assumed that x_intcpg
|
||||
// to be 0.5 to avoid porting all the methods in gelt_maker.c.
|
||||
// xy_to_ll(&x,&y,&lat,&lon,&my_proj);
|
||||
// lat01=lat+0.1;
|
||||
// ll_to_xy(&lat01,&lon,&dx,&dy,&my_proj);
|
||||
// dx -= x;
|
||||
|
||||
dy -= y;
|
||||
|
||||
double mag = Math.sqrt(dx * dx + dy * dy);
|
||||
dx /= mag;
|
||||
dy /= mag;
|
||||
double erot_i = -dy;
|
||||
double erot_j = -dx;
|
||||
|
||||
double nrot_i = dx;
|
||||
double nrot_j = dy;
|
||||
|
||||
int[] ew_hist = new int[nx * ny];
|
||||
int[] ns_hist = new int[nx * ny];
|
||||
|
||||
/* Calculate north/south & east/west offsets, create histogram of these. */
|
||||
// TODO I did not fully implement the histograms as used in a1. Using
|
||||
// the histograms created index out of bounds errors. If the field is
|
||||
// unhappy with the portions, then porting the histograms needs to be
|
||||
// re-investigated.
|
||||
int ns1 = 0, ns2 = 0, ew1 = 0, ew2 = 0;
|
||||
int np_n = 0, np_s = 0, np_e = 0, np_w = 0;
|
||||
ns_hist[0] = 0;
|
||||
ew_hist[0] = 0;
|
||||
for (jj = min_j; jj < max_j; jj++) {
|
||||
k = nx * jj + min_i;
|
||||
for (ii = min_i; ii < max_i; ii++, k++) {
|
||||
// If the entity is not 1 then it's not part of the county or
|
||||
// zone area.
|
||||
if (countyOrZoneGrid[k] != 1) {
|
||||
continue;
|
||||
}
|
||||
double di = ii - i_base;
|
||||
double dj = jj - j_base;
|
||||
|
||||
double dns = (int) (nrot_i * di + nrot_j * dj);
|
||||
while (ns1 > dns) {
|
||||
// ns_hist[--ns1] = 0;
|
||||
--ns1;
|
||||
}
|
||||
|
||||
while (ns2 < dns) {
|
||||
// ns_hist[++ns2] = 0;
|
||||
++ns2;
|
||||
}
|
||||
// ns_hist[(int) dns]++;
|
||||
|
||||
double dew = (int) (erot_i * di + erot_j * dj);
|
||||
while (ew1 > dew) {
|
||||
// ew_hist[--ew1] = 0;
|
||||
--ew1;
|
||||
}
|
||||
while (ew2 < dew) {
|
||||
// ew_hist[++ew2] = 0;
|
||||
++ew2;
|
||||
}
|
||||
// ew_hist[(int) dew]++;
|
||||
|
||||
if (dew < 0) {
|
||||
np_w++;
|
||||
}
|
||||
if (dew > 0) {
|
||||
np_e++;
|
||||
}
|
||||
if (dns < 0) {
|
||||
np_s++;
|
||||
}
|
||||
if (dns > 0) {
|
||||
np_n++;
|
||||
}
|
||||
}/* end for */
|
||||
}/* end for */
|
||||
|
||||
/*
|
||||
* Transform n-s & e-w offsets into normalized distances north and
|
||||
* south. This is done based on a preferred fraction of each area that
|
||||
* is "extreme".
|
||||
*/
|
||||
|
||||
// a lot of assumptions were made here. therefore, not everything in
|
||||
// this part was fully ported.
|
||||
double target = np_w * EXTREME_FRAC;
|
||||
// for (ii = 0, k = ew1; k < -1 && ii < target; k++) {
|
||||
// ii += ew_hist[k];
|
||||
// }
|
||||
// if (ii / target > 1.5) {
|
||||
// k--;
|
||||
// }
|
||||
// if (k < ew1) {
|
||||
// k = ew1;
|
||||
// }
|
||||
|
||||
k = ew1;
|
||||
double mu_w = (MIN_EXTREME - 127) / (k + 0.5);
|
||||
|
||||
target = np_e * EXTREME_FRAC;
|
||||
// for (ii = 0, k = ew2; k > 1 && ii < target; k--) {
|
||||
// ii += ew_hist[k];
|
||||
// }
|
||||
// if (ii / target > 1.5) {
|
||||
// k++;
|
||||
// }
|
||||
// if (k > ew2) {
|
||||
// k = ew2;
|
||||
// }
|
||||
|
||||
k = ew2;
|
||||
double mu_e = (MAX_EXTREME - 127) / (k - 0.5);
|
||||
|
||||
target = np_s * EXTREME_FRAC;
|
||||
// for (ii = 0, k = ns1; k < -1 && ii < target; k++) {
|
||||
// ii += ns_hist[k];
|
||||
// }
|
||||
// if (ii / target > 1.5) {
|
||||
// k--;
|
||||
// }
|
||||
// if (k < ns1) {
|
||||
// k = ns1;
|
||||
// }
|
||||
|
||||
k = ns1;// TODO - REPLACE WITH ABOVE
|
||||
double mu_s = (MIN_EXTREME - 127) / (k + 0.5);
|
||||
|
||||
target = np_n * EXTREME_FRAC;
|
||||
// for (ii = 0, k = ns2; k > 1 && ii < target; k--) {
|
||||
// ii += ns_hist[k];
|
||||
// }
|
||||
// if (ii / target > 1.5) {
|
||||
// k++;
|
||||
// }
|
||||
// if (k > ns2) {
|
||||
// k = ns2;
|
||||
// }
|
||||
|
||||
k = ns2;
|
||||
double mu_n = (MAX_EXTREME - 127) / (k - 0.5);
|
||||
|
||||
for (jj = min_j; jj < max_j; jj++) {
|
||||
k = nx * jj + min_i;
|
||||
for (ii = min_i; ii < max_i; ii++, k++) {
|
||||
// If the entity is not 1 then it's not part of the county or
|
||||
// zone area.
|
||||
if (countyOrZoneGrid[k] != 1) {
|
||||
ewGrid[k] = 0;
|
||||
nsGrid[k] = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
double di = ii - i_base;
|
||||
double dj = jj - j_base;
|
||||
double dns = (int) (nrot_i * di + nrot_j * dj);
|
||||
double dew = (int) (erot_i * di + erot_j * dj);
|
||||
int c_ns2 = (int) (dns);
|
||||
int c_ew2 = (int) (dew);
|
||||
|
||||
if (c_ew2 < 0) {
|
||||
dx = c_ew2 * mu_w;
|
||||
} else {
|
||||
dx = c_ew2 * mu_e;
|
||||
}
|
||||
|
||||
if (dx > 127) {
|
||||
dx = 127;
|
||||
}
|
||||
|
||||
if (dx < -127) {
|
||||
dx = -127;
|
||||
}
|
||||
|
||||
ewGrid[k] = (int) (127 + (int) (dx));
|
||||
|
||||
if (c_ns2 < 0) {
|
||||
dy = c_ns2 * mu_s;
|
||||
} else {
|
||||
dy = c_ns2 * mu_n;
|
||||
}
|
||||
|
||||
if (dy > 127) {
|
||||
dy = 127;
|
||||
}
|
||||
|
||||
if (dy < -127) {
|
||||
dy = -127;
|
||||
}
|
||||
|
||||
nsGrid[k] = (int) (127 + (int) (dy));
|
||||
}
|
||||
}
|
||||
// System.out.println("-----------------------------------");
|
||||
// printGrids(countyOrZoneGrid, min_i, max_i, min_j, max_j);
|
||||
// System.out.println("-----------------------------------");
|
||||
// printGrids(_currentArea, min_i, max_i, min_j, max_j);
|
||||
// System.out.println("-------------- EAST WEST ---------------------");
|
||||
// printGrids(ewGrid, min_i, max_i, min_j, max_j);
|
||||
// System.out.println("-------------- NORTH SOUTH ---------------------");
|
||||
// printGrids(nsGrid, min_i, max_i, min_j, max_j);
|
||||
// System.out.println("north/south - east/west done");
|
||||
return new int[] { min_i, max_i, min_j, max_j };
|
||||
|
||||
}
|
||||
|
||||
// For debugging and view the grid in ascii format.
|
||||
private void printGrids(int[] grid, int min_i, int max_i, int min_j,
|
||||
int max_j) {
|
||||
int k = 0;
|
||||
for (int jj = min_j; jj < max_j; jj++) {
|
||||
k = nx * jj + min_i;
|
||||
for (int ii = min_i; ii < max_i; ii++) {
|
||||
System.out.print((int) grid[k]);
|
||||
k++;
|
||||
}
|
||||
System.out.println("-");
|
||||
}
|
||||
}
|
||||
|
||||
// For debugging and view the grid in ascii format.
|
||||
private void printGrids(byte[] grid, int min_i, int max_i, int min_j,
|
||||
int max_j) {
|
||||
int k = 0;
|
||||
for (int jj = min_j; jj < max_j; jj++) {
|
||||
k = nx * jj + min_i;
|
||||
for (int ii = min_i; ii < max_i; ii++) {
|
||||
System.out.print((int) grid[k]);
|
||||
k++;
|
||||
}
|
||||
System.out.println("-");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,471 @@
|
|||
/**
|
||||
* This software was developed and / or modified by Raytheon Company,
|
||||
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||
*
|
||||
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||
* This software product contains export-restricted data whose
|
||||
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||
* to non-U.S. persons whether in the United States or abroad requires
|
||||
* an export license or other authorization.
|
||||
*
|
||||
* Contractor Name: Raytheon Company
|
||||
* Contractor Address: 6825 Pine Street, Suite 340
|
||||
* Mail Stop B8
|
||||
* Omaha, NE 68106
|
||||
* 402.291.0100
|
||||
*
|
||||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.warngen.gis;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.raytheon.viz.warngen.gis.GisUtil.Direction;
|
||||
import com.raytheon.viz.warngen.gui.WarngenLayer;
|
||||
import com.vividsolutions.jts.geom.Geometry;
|
||||
|
||||
/**
|
||||
* Port of A1 code that determines the portions of the county or zone
|
||||
* descriptions, such as NORTHWEST.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 5, 2013 2177 jsanchez Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class PortionsUtil {
|
||||
|
||||
private GridUtil gridUtil;
|
||||
|
||||
public PortionsUtil(WarngenLayer layer) throws Exception {
|
||||
gridUtil = new GridUtil(layer, layer.getLocalGridGeometry(),
|
||||
layer.getlocalToLatLon());
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the the appropriate portion description for the warnedArea
|
||||
* intersecting the countyOrZone.
|
||||
*
|
||||
* @param entityID
|
||||
* @param countyOrZone
|
||||
* @param warnedArea
|
||||
* @param useExtreme
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public EnumSet<Direction> getPortions(String entityID,
|
||||
Geometry countyOrZone, Geometry warnedArea, boolean useExtreme)
|
||||
throws Exception {
|
||||
countyOrZone.getUserData();
|
||||
EntityData entityData = gridUtil.calculateGrids(countyOrZone,
|
||||
warnedArea);
|
||||
EnumSet<Direction> portions = getAreaDesc(entityData.getMeanMask(),
|
||||
entityData.getCoverageMask(), entityData.getOctants(),
|
||||
useExtreme);
|
||||
return suppressPortions(entityID, portions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks up if the designated entity ID has an suppressed directions. For
|
||||
* example, a county or zone may not need to include the north and sound
|
||||
* direction description if it was included in the area.suppress file.
|
||||
*
|
||||
* @param entityID
|
||||
* @param portions
|
||||
* @return
|
||||
*/
|
||||
private EnumSet<Direction> suppressPortions(String entityID,
|
||||
EnumSet<Direction> portions) {
|
||||
Map<String, List<Direction>> suppressedCounties = SuppressMap
|
||||
.getInstance().getAreas();
|
||||
if (entityID != null && suppressedCounties != null
|
||||
&& !suppressedCounties.isEmpty()) {
|
||||
List<Direction> suppressedDirections = suppressedCounties
|
||||
.get(entityID.toUpperCase());
|
||||
if (suppressedDirections != null && !suppressedDirections.isEmpty()) {
|
||||
portions.removeAll(suppressedDirections);
|
||||
}
|
||||
}
|
||||
|
||||
return portions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Port from A1 code of GeoEntityLookupTable::getAreaDesc.
|
||||
*
|
||||
* @param meanMask
|
||||
* @param areaMask
|
||||
* @param octants
|
||||
* @param exYes
|
||||
*/
|
||||
private static EnumSet<Direction> getAreaDesc(int meanMask, int areaMask,
|
||||
int octants, boolean exYes) {
|
||||
EnumSet<Direction> portions = EnumSet.noneOf(Direction.class);
|
||||
|
||||
// Test for case where we cannot do portions
|
||||
if (meanMask == 0 || areaMask == 0) {
|
||||
return portions;
|
||||
}
|
||||
|
||||
// The next block of code is the original port of A1 code but prevented
|
||||
// producing the correct result:
|
||||
// Test for case where area is completely within one subsection.
|
||||
// if (meanMask == areaMask) {
|
||||
// return getPointDesc(meanMask, exYes);
|
||||
// }
|
||||
|
||||
// Test for central by not being near adjacent borders.
|
||||
if (octants == 0
|
||||
|| ((octants & CoverageConstants.EXTREME_YES) == 0)
|
||||
&& (meanMask & CoverageConstants.CENTER) == CoverageConstants.CENTER) {
|
||||
portions.add(Direction.CENTRAL);
|
||||
return portions;
|
||||
}
|
||||
|
||||
if ((octants & 0xFFFF) == 0xFFFF) {
|
||||
return portions;
|
||||
}
|
||||
|
||||
// Identify quadrants in use, q is typical, qq is diagonal.
|
||||
int xoctant = octants >> 8;
|
||||
int xxoctant = octants >> 16;
|
||||
int nn, ss, ee, ww, ne, nw, se, sw;
|
||||
nn = ss = ee = ww = ne = nw = se = sw = 0;
|
||||
int omerge = xxoctant | xoctant | octants;
|
||||
if ((omerge & (CoverageConstants.NNE | CoverageConstants.ENE)) > 0) {
|
||||
ne = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.SSE | CoverageConstants.ESE)) > 0) {
|
||||
se = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.NNW | CoverageConstants.WNW)) > 0) {
|
||||
nw = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.SSW | CoverageConstants.WSW)) > 0) {
|
||||
sw = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.NNE | CoverageConstants.NNW)) > 0) {
|
||||
nn = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.SSE | CoverageConstants.SSW)) > 0) {
|
||||
ss = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.WNW | CoverageConstants.WSW)) > 0) {
|
||||
ww = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.ENE | CoverageConstants.ESE)) > 0) {
|
||||
ee = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.NORTH_SOUTH) == 0) {
|
||||
nn = ss = ne = nw = se = sw = 0;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.EAST_WEST) == 0) {
|
||||
ee = ww = ne = nw = se = sw = 0;
|
||||
}
|
||||
int q = ne + nw + se + sw;
|
||||
int qq = nn + ss + ee + ww;
|
||||
|
||||
// Identify extremes in use.
|
||||
int nnx, ssx, eex, wwx;
|
||||
nnx = ssx = eex = wwx = 0;
|
||||
if ((areaMask & CoverageConstants.XNORTH) > 0) {
|
||||
nnx = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.XSOUTH) > 0) {
|
||||
ssx = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.XWEST) > 0) {
|
||||
wwx = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.XEAST) > 0) {
|
||||
eex = 1;
|
||||
}
|
||||
int xxx = nnx + ssx + eex + wwx;
|
||||
|
||||
// Modify masks based on whether we can use extreme.
|
||||
if ((octants & CoverageConstants.EXTREME_NO) > 0
|
||||
&& (areaMask & CoverageConstants.EXTREME) > 0) {
|
||||
areaMask &= CoverageConstants.NOT_EXTREME;
|
||||
meanMask &= CoverageConstants.NOT_EXTREME;
|
||||
}
|
||||
|
||||
// Possible case of a stripe across the middle
|
||||
if (q == 0) {
|
||||
;// Only one direction encoded
|
||||
} else if (q == 2 && nw == se || q == 2 && ne == sw || qq == 2
|
||||
&& nn == ss || qq == 2 && ee == ww) {
|
||||
if ((meanMask & CoverageConstants.CENTRAL) == CoverageConstants.CENTRAL
|
||||
|| nnx == ssx && wwx == eex) {
|
||||
portions.add(Direction.CENTRAL);
|
||||
return portions;
|
||||
}
|
||||
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
|
||||
}
|
||||
|
||||
// Modify masks based on whether we can use central.
|
||||
if (xxx > 2 || nnx != ssx && wwx != eex) {
|
||||
areaMask &= CoverageConstants.NOT_CENTRAL;
|
||||
meanMask &= CoverageConstants.NOT_CENTRAL;
|
||||
}
|
||||
|
||||
// Another possible case of a stripe across the middle.
|
||||
if (q == 4 && (meanMask & CoverageConstants.CENTER) > 0) {
|
||||
portions.add(Direction.CENTRAL);
|
||||
return portions;
|
||||
}
|
||||
|
||||
// All quadrants in use.
|
||||
if (q == 4 && qq == 4) {
|
||||
return EnumSet.noneOf(Direction.class);
|
||||
}
|
||||
|
||||
// Only one typical quadrant in use.
|
||||
if (q == 1) {
|
||||
// if (ne == 1) {
|
||||
// portions.add(Direction.NORTH);
|
||||
// portions.add(Direction.EAST);
|
||||
// } else if (nw == 1) {
|
||||
// portions.add(Direction.NORTH);
|
||||
// portions.add(Direction.WEST);
|
||||
// } else if (se == 1) {
|
||||
// portions.add(Direction.SOUTH);
|
||||
// portions.add(Direction.EAST);
|
||||
// } else if (sw == 1) {
|
||||
// portions.add(Direction.SOUTH);
|
||||
// portions.add(Direction.WEST);
|
||||
// }
|
||||
// return portions;
|
||||
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
|
||||
}
|
||||
|
||||
// Further modify masks based on whether we can use central.
|
||||
if (xxx >= 2) {
|
||||
areaMask &= CoverageConstants.NOT_CENTRAL;
|
||||
meanMask &= CoverageConstants.NOT_CENTRAL;
|
||||
}
|
||||
|
||||
// No more than two quadrants of any kind in use, or all quadrants.
|
||||
if (q < 3 && qq < 3) {
|
||||
if (nnx != ssx && wwx != eex
|
||||
|| (meanMask & CoverageConstants.CENTRAL) > 0) {
|
||||
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
|
||||
|
||||
} else {
|
||||
return getPointDesc2(areaMask, exYes, nn, ss, ee, ww);
|
||||
}
|
||||
}
|
||||
|
||||
// Three typical quadrants in use.
|
||||
if (q == 3 && qq != 3) {
|
||||
|
||||
if (ne == 0) {
|
||||
// The next line is the original port of A1 code but prevented
|
||||
// producing the correct result:
|
||||
// if (ne == 0 && (xxoctant & (SSW | WSW)) > 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
portions.add(Direction.WEST);
|
||||
|
||||
} else if (se == 0) {
|
||||
// The next line is the original port of A1 code but prevented
|
||||
// producing the correct result:
|
||||
// } else if (se == 0 && (xxoctant & (NNW | WNW)) > 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
portions.add(Direction.WEST);
|
||||
|
||||
} else if (nw == 0) {
|
||||
// The next line is the original port of A1 code but prevented
|
||||
// producing the correct result:
|
||||
// } else if (nw == 0 && (xxoctant & (SSE | ESE)) > 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
portions.add(Direction.EAST);
|
||||
|
||||
} else if (sw == 0) {
|
||||
// The next line is the original port of A1 code but prevented
|
||||
// producing the correct result:
|
||||
// } else if (sw == 0 && (xxoctant & (NNE | ENE)) > 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
portions.add(Direction.EAST);
|
||||
}
|
||||
// The next line is the original port of A1 code but prevented
|
||||
// producing the correct result:
|
||||
// return getPointDesc(meanMask, exYes);
|
||||
}
|
||||
|
||||
// Three diagonal quadrants in use.
|
||||
if (qq == 3 && portions.isEmpty()) {
|
||||
if (nn == 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
} else if (ss == 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
} else if (ww == 0) {
|
||||
portions.add(Direction.EAST);
|
||||
} else if (ee == 0) {
|
||||
portions.add(Direction.WEST);
|
||||
}
|
||||
}
|
||||
|
||||
// add extreme for three quadrant case.
|
||||
if (!portions.isEmpty()) {
|
||||
if (exYes && ((areaMask & CoverageConstants.EXTREME)) > 0) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
return portions;
|
||||
}
|
||||
|
||||
// All of either type of quadrant in use.
|
||||
if (q == 4 || qq == 4) {
|
||||
return EnumSet.noneOf(Direction.class);
|
||||
}
|
||||
|
||||
// Case of a pure simple direction.
|
||||
nn = areaMask & CoverageConstants.NORTHERN;
|
||||
ss = areaMask & CoverageConstants.SOUTHERN;
|
||||
ee = areaMask & CoverageConstants.EASTERN;
|
||||
ww = areaMask & CoverageConstants.WESTERN;
|
||||
if (ss > 0 && nn > 0 || q == 0) {
|
||||
if (ee == 0 && ww > 0) {
|
||||
portions.add(Direction.WEST);
|
||||
}
|
||||
if (ww == 0 && ee > 0) {
|
||||
portions.add(Direction.EAST);
|
||||
}
|
||||
} else if (ee > 0 && ww > 0 || q == 0) {
|
||||
if (nn == 0 && ss > 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
}
|
||||
if (ss == 0 && nn > 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
}
|
||||
}
|
||||
|
||||
// add extreme for simple direction case.
|
||||
if (!portions.isEmpty()) {
|
||||
if (exYes && ((areaMask & CoverageConstants.EXTREME)) > 0) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
return portions;
|
||||
}
|
||||
|
||||
// Catch with the point descriptor one last time
|
||||
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
|
||||
}
|
||||
|
||||
/**
|
||||
* Port from A1 code of GeoEntityLookupTable::getPointDesc.
|
||||
*
|
||||
* @param mask
|
||||
* @param exYes
|
||||
* @return
|
||||
*/
|
||||
private static EnumSet<Direction> getPointDesc(int mask, boolean exYes) {
|
||||
EnumSet<Direction> portions = EnumSet.noneOf(Direction.class);
|
||||
|
||||
if (mask == 0) {
|
||||
return portions;
|
||||
}
|
||||
|
||||
int cc = mask & CoverageConstants.CENTRAL;
|
||||
if (cc == CoverageConstants.CENTRAL) {
|
||||
portions.add(Direction.CENTRAL);
|
||||
return portions;
|
||||
}
|
||||
|
||||
if ((mask & CoverageConstants.NORTH_SOUTH) == 0) {
|
||||
;
|
||||
} else if ((mask & CoverageConstants.SOUTHERN) == (mask & CoverageConstants.NORTH_SOUTH)) {
|
||||
portions.add(Direction.SOUTH);
|
||||
} else if ((mask & CoverageConstants.NORTHERN) == (mask & CoverageConstants.NORTH_SOUTH)) {
|
||||
portions.add(Direction.NORTH);
|
||||
}
|
||||
|
||||
if ((mask & CoverageConstants.EAST_WEST) == 0) {
|
||||
;
|
||||
} else if ((mask & CoverageConstants.WESTERN) == (mask & CoverageConstants.EAST_WEST)) {
|
||||
portions.add(Direction.WEST);
|
||||
} else if ((mask & CoverageConstants.EASTERN) == (mask & CoverageConstants.EAST_WEST)) {
|
||||
portions.add(Direction.EAST);
|
||||
}
|
||||
|
||||
if (portions.isEmpty()) {
|
||||
return portions;
|
||||
}
|
||||
|
||||
if (cc != 0) {
|
||||
portions.add(Direction.CENTRAL);
|
||||
}
|
||||
|
||||
if (exYes && ((int) (mask & CoverageConstants.EXTREME) > 0)) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
|
||||
return portions;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is not a direct port from A1. The original getPointDesc did
|
||||
* not produce the expected results. This method is a modified version of
|
||||
* getPointDesct that uses the calculated qq values instead of just the
|
||||
* meanMask.
|
||||
*
|
||||
* @param mask
|
||||
* @param exYes
|
||||
* @return
|
||||
*/
|
||||
private static EnumSet<Direction> getPointDesc2(int mask, boolean exYes,
|
||||
int nn, int ss, int ee, int ww) {
|
||||
EnumSet<Direction> portions = EnumSet.noneOf(Direction.class);
|
||||
|
||||
if (mask == 0) {
|
||||
return portions;
|
||||
}
|
||||
|
||||
int counter = 0;
|
||||
if (nn > 0 && ss > 0) {
|
||||
;
|
||||
} else if (ss > 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
counter++;
|
||||
} else if (nn > 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
counter++;
|
||||
}
|
||||
|
||||
if (ee > 0 && ww > 0) {
|
||||
;
|
||||
} else if (ww > 0) {
|
||||
portions.add(Direction.WEST);
|
||||
counter++;
|
||||
} else if (ee > 0) {
|
||||
portions.add(Direction.EAST);
|
||||
counter++;
|
||||
}
|
||||
|
||||
if (portions.isEmpty()) {
|
||||
return portions;
|
||||
}
|
||||
|
||||
int cc = mask & CoverageConstants.CENTRAL;
|
||||
boolean useCentral = counter < 2;
|
||||
if (useCentral && cc != 0) {
|
||||
portions.add(Direction.CENTRAL);
|
||||
}
|
||||
|
||||
if (exYes && ((int) (mask & CoverageConstants.EXTREME) > 0)) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
|
||||
return portions;
|
||||
}
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||
* further licensing information.
|
||||
**/
|
||||
package com.raytheon.viz.warngen.suppress;
|
||||
package com.raytheon.viz.warngen.gis;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
|
@ -25,7 +25,10 @@ import java.io.FileInputStream;
|
|||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
@ -38,9 +41,11 @@ import com.raytheon.uf.common.localization.PathManagerFactory;
|
|||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.viz.core.localization.LocalizationManager;
|
||||
import com.raytheon.viz.warngen.gis.GisUtil.Direction;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
* Creates a map of all the site's area suppress files.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
|
@ -48,6 +53,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 2, 2010 jsanchez Initial creation
|
||||
* Aug 15,2013 2177 jsanchez Refactored.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -66,16 +72,26 @@ public class SuppressMap {
|
|||
private static final Pattern ugcPattern = Pattern
|
||||
.compile("[A-Z]{2}[CZ][0-9]{3}");
|
||||
|
||||
public static final String NORTH_SOUTH = "NS";
|
||||
private static final List<Direction> NORTH_SOUTH = Arrays.asList(
|
||||
Direction.NORTH, Direction.SOUTH);
|
||||
|
||||
public static final String EAST_WEST = "EW";
|
||||
private static final List<Direction> EAST_WEST = Arrays.asList(
|
||||
Direction.EAST, Direction.WEST);
|
||||
|
||||
public static final String NONE = "NONE";
|
||||
private static final List<Direction> ALL = Arrays.asList(Direction.NORTH,
|
||||
Direction.SOUTH, Direction.EAST, Direction.WEST, Direction.CENTRAL,
|
||||
Direction.EXTREME);
|
||||
|
||||
public static final String ALL = "ALL";
|
||||
private static Map<String, Map<String, List<Direction>>> suppressMap = new HashMap<String, Map<String, List<Direction>>>();
|
||||
|
||||
private Map<String, String> suppressMap = new HashMap<String, String>();
|
||||
private SuppressMap() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return an instance of the SuppressMap object.
|
||||
*/
|
||||
public static SuppressMap getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new SuppressMap();
|
||||
|
@ -83,64 +99,82 @@ public class SuppressMap {
|
|||
return instance;
|
||||
}
|
||||
|
||||
private SuppressMap() {
|
||||
readFile();
|
||||
/**
|
||||
* Returns the suppressed area map for the current localized site.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public Map<String, List<Direction>> getAreas() {
|
||||
String threeLetterSiteID = LocalizationManager.getInstance()
|
||||
.getCurrentSite();
|
||||
Map<String, List<Direction>> areas = suppressMap.get(threeLetterSiteID);
|
||||
|
||||
if (areas == null) {
|
||||
areas = new HashMap<String, List<Direction>>();
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext lc = pm.getContext(
|
||||
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||
File file = pm.getFile(lc, AREA_SUPPRESS_FILENAME);
|
||||
loadFile(file, areas);
|
||||
}
|
||||
|
||||
return areas;
|
||||
}
|
||||
|
||||
private void readFile() {
|
||||
// load site
|
||||
IPathManager pathMgr = PathManagerFactory.getPathManager();
|
||||
LocalizationContext lc = pathMgr.getContext(
|
||||
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||
File file = pathMgr.getFile(lc, AREA_SUPPRESS_FILENAME);
|
||||
loadFile(file, suppressMap);
|
||||
}
|
||||
|
||||
private void loadFile(File file, Map<String, String> aliasMap) {
|
||||
/**
|
||||
* Loads the areas map with the suppress information in the file
|
||||
*
|
||||
* @param file
|
||||
* @param areas
|
||||
*/
|
||||
private void loadFile(File file, Map<String, List<Direction>> areas) {
|
||||
if ((file != null) && file.exists()) {
|
||||
Matcher m = null;
|
||||
BufferedReader fis = null;
|
||||
try {
|
||||
BufferedReader fis = new BufferedReader(new InputStreamReader(
|
||||
fis = new BufferedReader(new InputStreamReader(
|
||||
new FileInputStream(file)));
|
||||
|
||||
String line = null;
|
||||
try {
|
||||
while ((line = fis.readLine()) != null) {
|
||||
m = ugcPattern.matcher(line);
|
||||
if (m.find()) {
|
||||
String dataKey = m.group();
|
||||
String data = ALL;
|
||||
List<Direction> suppressedDirections = new ArrayList<Direction>();
|
||||
String ugc = m.group();
|
||||
if (line.indexOf("ns") > 5) {
|
||||
data = NORTH_SOUTH;
|
||||
suppressedDirections = NORTH_SOUTH;
|
||||
} else if (line.indexOf("ew") > 5) {
|
||||
data = EAST_WEST;
|
||||
suppressedDirections = EAST_WEST;
|
||||
} else {
|
||||
suppressedDirections = ALL;
|
||||
}
|
||||
aliasMap.put(dataKey, data);
|
||||
areas.put(ugc, suppressedDirections);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Could not read counties file: "
|
||||
+ AREA_SUPPRESS_FILENAME, e);
|
||||
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
// TODO Auto-generated catch block. Please revise as
|
||||
// appropriate.
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Failed to find counties file: "
|
||||
+ AREA_SUPPRESS_FILENAME, e);
|
||||
|
||||
} finally {
|
||||
|
||||
if (fis != null) {
|
||||
try {
|
||||
fis.close();
|
||||
} catch (IOException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to close buffered reader ", e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getType(String key) {
|
||||
if (suppressMap.containsKey(key)) {
|
||||
return suppressMap.get(key);
|
||||
} else {
|
||||
return NONE;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,7 +20,7 @@
|
|||
package com.raytheon.viz.warngen.gui;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
||||
import com.raytheon.uf.common.time.SimulatedTime;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
|
||||
|
@ -37,20 +37,21 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
|||
* May 7, 2013 1973 rferrel Changes to properly display Issue Time.
|
||||
* Jul 22, 2013 2176 jsanchez Added EMER to the display string in the update list.
|
||||
* Aug 7, 2013 2243 jsanchez Set all the attributes of an AbstractWarningRecord and added an expiration string. Removed calendar object.
|
||||
* Aug 15,2013 2243 jsanchez Improved the expiration string off by one minute. Fixed for practice mode.
|
||||
* Aug 15,2013 2243 jsanchez Improved the expiration string off by one minute.
|
||||
* </pre>
|
||||
*
|
||||
* @author rferrel
|
||||
* @version 1.0
|
||||
*/
|
||||
public class FollowupData extends WarningRecord {
|
||||
public class FollowupData extends AbstractWarningRecord {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* String displayed in the drop down update list.
|
||||
*/
|
||||
private String displayString;
|
||||
private final String displayString;
|
||||
|
||||
/**
|
||||
* String used to test if this object is equivalent to one of the updated
|
||||
|
@ -61,10 +62,10 @@ public class FollowupData extends WarningRecord {
|
|||
/**
|
||||
* Information string used when the follow up is no longer valid or allowed.
|
||||
*/
|
||||
private String expirationString;
|
||||
private final String expirationString;
|
||||
|
||||
public FollowupData(WarningAction action, AbstractWarningRecord record) {
|
||||
super((WarningRecord) record);
|
||||
super(record);
|
||||
setAct(action.toString());
|
||||
|
||||
displayString = createDisplayString(action, record);
|
||||
|
@ -191,4 +192,13 @@ public class FollowupData extends WarningRecord {
|
|||
return expirationString;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see com.raytheon.uf.common.dataplugin.PluginDataObject#getPluginName()
|
||||
*/
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "followupwarning";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import com.raytheon.uf.viz.core.exception.VizException;
|
|||
import com.raytheon.uf.viz.core.rsc.LoadProperties;
|
||||
import com.raytheon.uf.viz.core.rsc.tools.GenericToolsResourceData;
|
||||
import com.raytheon.uf.viz.core.rsc.tools.action.AbstractGenericToolAction;
|
||||
import com.raytheon.viz.ui.input.EditableManager;
|
||||
|
||||
/**
|
||||
* Simple action for loading the warngen layer
|
||||
|
@ -38,6 +39,7 @@ import com.raytheon.uf.viz.core.rsc.tools.action.AbstractGenericToolAction;
|
|||
* May 4, 2010 mschenke Initial creation
|
||||
* Oct 10, 2010 6990 Qinglu Lin Used D. Friedman short solution,
|
||||
* with minor changes.
|
||||
* Aug 15, 2013 DR 16418 D. Friedman Always show the dialog.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -65,16 +67,16 @@ public class WarngenAction extends AbstractGenericToolAction<WarngenLayer> {
|
|||
for (IDisplayPane pane : getSelectedPanes()) {
|
||||
for (ResourcePair rp : pane.getDescriptor().getResourceList()) {
|
||||
if (rp.getResource() instanceof WarngenLayer) {
|
||||
EditableManager.makeEditable(rp.getResource(), true);
|
||||
((WarngenLayer) rp.getResource())
|
||||
.showDialog(((WarngenLayer) rp.getResource())
|
||||
.isEditable());
|
||||
.showDialog(true);
|
||||
return (WarngenLayer) rp.getResource();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WarngenLayer layer = super.getResource(loadProperties, descriptor);
|
||||
layer.createDialog();
|
||||
layer.showDialog(true);
|
||||
return layer;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,9 +52,11 @@ import org.eclipse.swt.widgets.Button;
|
|||
import org.eclipse.swt.widgets.Combo;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.List;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
|
@ -82,6 +84,7 @@ import com.raytheon.viz.texteditor.util.VtecUtil;
|
|||
import com.raytheon.viz.ui.EditorUtil;
|
||||
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||
import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
||||
import com.raytheon.viz.ui.input.EditableManager;
|
||||
import com.raytheon.viz.warngen.Activator;
|
||||
import com.raytheon.viz.warngen.WarngenConstants;
|
||||
import com.raytheon.viz.warngen.comm.WarningSender;
|
||||
|
@ -144,6 +147,7 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* Jul 16, 2013 DR 16387 Qinglu Lin Reset totalSegments for each followup product.
|
||||
* Jul 29, 2013 DR 16352 D. Friedman Move 'result' to okPressed().
|
||||
* Aug 6, 2013 2243 jsanchez Refreshed the follow up list every minute.
|
||||
* Aug 15, 2013 DR 16418 D. Friedman Make dialog visibility match editable state.
|
||||
* </pre>
|
||||
*
|
||||
* @author chammack
|
||||
|
@ -306,6 +310,14 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
*/
|
||||
@Override
|
||||
protected void initializeComponents(Shell shell) {
|
||||
shell.addListener(SWT.Close, new Listener() {
|
||||
@Override
|
||||
public void handleEvent(Event event) {
|
||||
event.doit = false;
|
||||
closePressed();
|
||||
}
|
||||
});
|
||||
|
||||
Composite mainComposite = new Composite(shell, SWT.NONE);
|
||||
GridLayout gl = new GridLayout(1, false);
|
||||
gl.verticalSpacing = 2;
|
||||
|
@ -1256,7 +1268,8 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
* Action for Close button
|
||||
*/
|
||||
private void closePressed() {
|
||||
close();
|
||||
EditableManager.makeEditable(warngenLayer, false);
|
||||
hide();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2194,6 +2207,8 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
}
|
||||
// Move above parent shell if we are showing it
|
||||
shell.moveAbove(getParent());
|
||||
} else {
|
||||
shell.setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,9 @@ import org.eclipse.swt.graphics.RGB;
|
|||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.geotools.coverage.grid.GeneralGridEnvelope;
|
||||
import org.geotools.coverage.grid.GeneralGridGeometry;
|
||||
import org.geotools.geometry.GeneralEnvelope;
|
||||
import org.geotools.geometry.jts.JTS;
|
||||
import org.geotools.referencing.GeodeticCalculator;
|
||||
import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
||||
|
@ -57,7 +60,6 @@ import org.opengis.referencing.operation.MathTransform;
|
|||
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.AreaSourceConfiguration;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.AreaSourceConfiguration.AreaType;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.BulletActionGroup;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.DialogConfiguration;
|
||||
import com.raytheon.uf.common.dataplugin.warning.config.GridSpacing;
|
||||
|
@ -185,6 +187,7 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* 07/26/2013 DR 16376 Qinglu Lin Moved adjustVertex() and computeSlope() to PolygonUtil; removed calculateDistance();
|
||||
* updated AreaHatcher's run().
|
||||
* 07/26/2013 DR 16450 D. Friedman Fix logic errors when frame count is one.
|
||||
* 08/19/2013 2177 jsanchez Set a GeneralGridGeometry object in the GeospatialDataList.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -212,24 +215,28 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
IExtent localExtent;
|
||||
|
||||
int nx, ny;
|
||||
|
||||
GeneralGridGeometry localGridGeometry;
|
||||
}
|
||||
|
||||
private static class GeospatialDataAccessor {
|
||||
GeospatialDataList geoData;
|
||||
|
||||
AreaSourceConfiguration areaConfig;
|
||||
|
||||
public GeospatialDataAccessor(GeospatialDataList geoData,
|
||||
AreaSourceConfiguration areaConfig) {
|
||||
if (geoData == null || areaConfig == null) {
|
||||
throw new IllegalArgumentException("GeospatialDataAccessor must not be null");
|
||||
throw new IllegalArgumentException(
|
||||
"GeospatialDataAccessor must not be null");
|
||||
}
|
||||
this.geoData = geoData;
|
||||
this.areaConfig = areaConfig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the geometry area that intersects the cwa filter for the polygon in
|
||||
* local projection space
|
||||
* Build the geometry area that intersects the cwa filter for the
|
||||
* polygon in local projection space
|
||||
*
|
||||
* @param polygon
|
||||
* polygon to intersect with in lat/lon space
|
||||
|
@ -243,8 +250,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
PreparedGeometry prepGeom = (PreparedGeometry) r.attributes
|
||||
.get(GeospatialDataList.LOCAL_PREP_GEOM);
|
||||
try {
|
||||
Geometry intersection = GeometryUtil.intersection(polygon,
|
||||
prepGeom);
|
||||
Geometry intersection = GeometryUtil.intersection(
|
||||
polygon, prepGeom);
|
||||
if (intersection.isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -407,7 +414,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
try {
|
||||
warningPolygon = PolygonUtil.removeDuplicateCoordinate(warningPolygon);
|
||||
warningPolygon = PolygonUtil
|
||||
.removeDuplicateCoordinate(warningPolygon);
|
||||
Polygon hatched = polygonUtil.hatchWarningArea(
|
||||
warningPolygon,
|
||||
removeCounties(warningArea,
|
||||
|
@ -425,27 +433,37 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
LinearRing lr = gf.createLinearRing(coords);
|
||||
hatchedArea = gf.createPolygon(lr, null);
|
||||
int adjustPolygon_counter = 0;
|
||||
while (!hatchedArea.isValid() && adjustPolygon_counter < 1) {
|
||||
System.out.println("Calling adjustPolygon #" + adjustPolygon_counter);
|
||||
while (!hatchedArea.isValid()
|
||||
&& adjustPolygon_counter < 1) {
|
||||
System.out.println("Calling adjustPolygon #"
|
||||
+ adjustPolygon_counter);
|
||||
PolygonUtil.adjustPolygon(coords);
|
||||
PolygonUtil.round(coords, 2);
|
||||
coords = PolygonUtil.removeDuplicateCoordinate(coords);
|
||||
coords = PolygonUtil.removeOverlaidLinesegments(coords);
|
||||
coords = PolygonUtil
|
||||
.removeDuplicateCoordinate(coords);
|
||||
coords = PolygonUtil
|
||||
.removeOverlaidLinesegments(coords);
|
||||
lr = gf.createLinearRing(coords);
|
||||
hatchedArea = gf.createPolygon(lr, null);
|
||||
adjustPolygon_counter += 1;
|
||||
}
|
||||
int counter = 0;
|
||||
if (!hatchedArea.isValid() && counter < 2) {
|
||||
System.out.println("calling adjustVertex & alterVertexes: loop #" + counter);
|
||||
System.out
|
||||
.println("calling adjustVertex & alterVertexes: loop #"
|
||||
+ counter);
|
||||
int adjustVertex_counter = 0;
|
||||
lr = gf.createLinearRing(coords);
|
||||
hatchedArea = gf.createPolygon(lr, null);
|
||||
while (!hatchedArea.isValid() && adjustVertex_counter < 5) {
|
||||
System.out.println(" Calling adjustVertex #" + adjustVertex_counter);
|
||||
while (!hatchedArea.isValid()
|
||||
&& adjustVertex_counter < 5) {
|
||||
System.out.println(" Calling adjustVertex #"
|
||||
+ adjustVertex_counter);
|
||||
coords = PolygonUtil.adjustVertex(coords);
|
||||
coords = PolygonUtil.removeDuplicateCoordinate(coords);
|
||||
coords = PolygonUtil.removeOverlaidLinesegments(coords);
|
||||
coords = PolygonUtil
|
||||
.removeDuplicateCoordinate(coords);
|
||||
coords = PolygonUtil
|
||||
.removeOverlaidLinesegments(coords);
|
||||
lr = gf.createLinearRing(coords);
|
||||
hatchedArea = gf.createPolygon(lr, null);
|
||||
adjustVertex_counter += 1;
|
||||
|
@ -453,10 +471,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
int inner_counter = 0;
|
||||
System.out.println("");
|
||||
while (!hatchedArea.isValid() && inner_counter < 5) {
|
||||
System.out.println(" Calling alterVertexes #" + inner_counter);
|
||||
System.out
|
||||
.println(" Calling alterVertexes #"
|
||||
+ inner_counter);
|
||||
coords = PolygonUtil.alterVertexes(coords);
|
||||
coords = PolygonUtil.removeDuplicateCoordinate(coords);
|
||||
coords = PolygonUtil.removeOverlaidLinesegments(coords);
|
||||
coords = PolygonUtil
|
||||
.removeDuplicateCoordinate(coords);
|
||||
coords = PolygonUtil
|
||||
.removeOverlaidLinesegments(coords);
|
||||
lr = gf.createLinearRing(coords);
|
||||
hatchedArea = gf.createPolygon(lr, null);
|
||||
inner_counter += 1;
|
||||
|
@ -674,8 +696,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
displayState.angle = 0;
|
||||
displayState.speed = 0;
|
||||
} else if (checkStormTrackData(data = ToolsDataManager
|
||||
.getInstance()
|
||||
.getStormTrackData())) {
|
||||
.getInstance().getStormTrackData())) {
|
||||
displayState.angle = adjustAngle(data.getMotionDirection());
|
||||
displayState.speed = knotToMeterPerSec.convert(data
|
||||
.getMotionSpeed());
|
||||
|
@ -995,8 +1016,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
if (config != null) {
|
||||
init(config);
|
||||
displayState.setInitiallyMotionless(
|
||||
this.configuration.isTrackEnabled() == false
|
||||
displayState.setInitiallyMotionless(this.configuration
|
||||
.isTrackEnabled() == false
|
||||
|| this.configuration.getPathcastConfig() == null);
|
||||
}
|
||||
}
|
||||
|
@ -1044,9 +1065,11 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
}
|
||||
|
||||
/** Adds geospatial data to siteMap and timezoneMap for the given
|
||||
* template configuration. This must not have any site effects on the
|
||||
* currently loaded template or the current product being edited.
|
||||
/**
|
||||
* Adds geospatial data to siteMap and timezoneMap for the given template
|
||||
* configuration. This must not have any site effects on the currently
|
||||
* loaded template or the current product being edited.
|
||||
*
|
||||
* @param config
|
||||
*/
|
||||
private void loadGeodataForConfiguration(WarngenConfiguration config) {
|
||||
|
@ -1083,7 +1106,6 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
Coordinate c = new GeometryFactory()
|
||||
.buildGeometry(geoms).getCentroid()
|
||||
.getCoordinate();
|
||||
|
||||
gData.latLonToLocal = MapUtil
|
||||
.getTransformFromLatLon(MapUtil
|
||||
.constructStereographic(
|
||||
|
@ -1146,6 +1168,18 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
gData.nx = nx;
|
||||
gData.ny = ny;
|
||||
|
||||
GeneralGridEnvelope range = new GeneralGridEnvelope(
|
||||
new int[] { 0, 0 }, new int[] { gData.nx,
|
||||
gData.ny }, false);
|
||||
GeneralEnvelope ge = new GeneralEnvelope(new double[] {
|
||||
gData.localExtent.getMinX(),
|
||||
gData.localExtent.getMaxY() }, new double[] {
|
||||
gData.localExtent.getMaxX(),
|
||||
gData.localExtent.getMinY() });
|
||||
|
||||
gData.localGridGeometry = new GeneralGridGeometry(
|
||||
range, ge);
|
||||
|
||||
System.out.println("Time to lookup geospatial data "
|
||||
+ (System.currentTimeMillis() - tq0));
|
||||
siteMap.put(currKey, gData);
|
||||
|
@ -1188,6 +1222,14 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
return new GeospatialData[0];
|
||||
}
|
||||
|
||||
public GeneralGridGeometry getLocalGridGeometry() {
|
||||
return geoData.localGridGeometry;
|
||||
}
|
||||
|
||||
public MathTransform getlocalToLatLon() {
|
||||
return geoData.localToLatLon;
|
||||
}
|
||||
|
||||
private GeospatialDataList getGeodataList(String areaSource,
|
||||
String localizedSite) {
|
||||
String key = areaSource + "." + localizedSite;
|
||||
|
@ -1303,7 +1345,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
* Returns a set of UGCs for each area in the CWA that intersects the given
|
||||
* polygon.
|
||||
*/
|
||||
public Set<String> getUgcsForCountyWatches(Polygon polygon) throws Exception {
|
||||
public Set<String> getUgcsForCountyWatches(Polygon polygon)
|
||||
throws Exception {
|
||||
GeospatialDataAccessor gda = getCountyGeospatialDataAcessor();
|
||||
Set<String> ugcs = new HashSet<String>();
|
||||
for (String fips : gda.getAllFipsInArea(gda.buildArea(polygon))) {
|
||||
|
@ -1321,17 +1364,20 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
return ugcs;
|
||||
}
|
||||
|
||||
private GeospatialDataAccessor getCountyGeospatialDataAcessor() throws Exception {
|
||||
private GeospatialDataAccessor getCountyGeospatialDataAcessor()
|
||||
throws Exception {
|
||||
GeospatialDataList gdl = searchCountyGeospatialDataAccessor();
|
||||
if (gdl == null) {
|
||||
// Cause county geospatial data to be loaded
|
||||
// TODO: Should not be referencing tornadoWarning.
|
||||
WarngenConfiguration torConfig = WarngenConfiguration.loadConfig("tornadoWarning", getLocalizedSite());
|
||||
WarngenConfiguration torConfig = WarngenConfiguration.loadConfig(
|
||||
"tornadoWarning", getLocalizedSite());
|
||||
loadGeodataForConfiguration(torConfig);
|
||||
gdl = searchCountyGeospatialDataAccessor();
|
||||
}
|
||||
|
||||
// TODO: There should be some way to get the "county" configuration by name
|
||||
// TODO: There should be some way to get the "county" configuration by
|
||||
// name
|
||||
// independent of a template
|
||||
AreaSourceConfiguration areaConfig = new AreaSourceConfiguration();
|
||||
areaConfig.setFipsField("FIPS");
|
||||
|
@ -1341,7 +1387,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
|
||||
private GeospatialDataList searchCountyGeospatialDataAccessor() {
|
||||
synchronized (siteMap) {
|
||||
for (Map.Entry<String, GeospatialDataList> entry : siteMap.entrySet()) {
|
||||
for (Map.Entry<String, GeospatialDataList> entry : siteMap
|
||||
.entrySet()) {
|
||||
String[] keyParts = entry.getKey().split("\\.");
|
||||
if (keyParts.length == 2
|
||||
&& "county".equalsIgnoreCase(keyParts[0])
|
||||
|
@ -1938,8 +1985,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
return;
|
||||
}
|
||||
if (warningAction == null || warningAction == WarningAction.NEW) {
|
||||
if ((configuration.isTrackEnabled() == false ||
|
||||
configuration.getPathcastConfig() == null)
|
||||
if ((configuration.isTrackEnabled() == false || configuration
|
||||
.getPathcastConfig() == null)
|
||||
&& !this.displayState.isNonstationary()
|
||||
&& this.displayState.displayType != DisplayType.POLY) {
|
||||
createSquare();
|
||||
|
@ -2271,8 +2318,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
}
|
||||
|
||||
Point point = displayState.dragMePoint;
|
||||
if (motdir != null && motspd != null &&
|
||||
(motspd != 0 || configuration.isTrackEnabled())) {
|
||||
if (motdir != null && motspd != null
|
||||
&& (motspd != 0 || configuration.isTrackEnabled())) {
|
||||
displayState.setInitiallyMotionless(false);
|
||||
displayState.angle = adjustAngle(motdir);
|
||||
displayState.speed = knotToMeterPerSec.convert(motspd);
|
||||
|
@ -2325,10 +2372,9 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
if (m.find()) {
|
||||
int hour = Integer.parseInt(m.group(1));
|
||||
int minute = Integer.parseInt(m.group(2));
|
||||
frameTime = TimeUtil.timeOfDayToAbsoluteTime(
|
||||
hour * TimeUtil.SECONDS_PER_HOUR +
|
||||
minute * TimeUtil.SECONDS_PER_MINUTE,
|
||||
warnRecord.getIssueTime());
|
||||
frameTime = TimeUtil.timeOfDayToAbsoluteTime(hour
|
||||
* TimeUtil.SECONDS_PER_HOUR + minute
|
||||
* TimeUtil.SECONDS_PER_MINUTE, warnRecord.getIssueTime());
|
||||
} else {
|
||||
frameTime = warnRecord.getIssueTime();
|
||||
}
|
||||
|
@ -2376,8 +2422,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
FramesInfo info = descriptor.getFramesInfo();
|
||||
int currentFrame = trackUtil.getCurrentFrame(info);
|
||||
int frameCount = trackUtil.getFrameCount(info);
|
||||
if (currentFrame == frameCount - 1
|
||||
|| ! displayState.isNonstationary()) {
|
||||
if (currentFrame == frameCount - 1 || !displayState.isNonstationary()) {
|
||||
return coordinate;
|
||||
}
|
||||
DataTime[] datatimes = trackUtil.getDataTimes(info);
|
||||
|
@ -2686,7 +2731,8 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
getFips(f));
|
||||
if (tmp.isEmpty()) {
|
||||
String fip = getFips(f);
|
||||
if (fip != null && uniqueFip != null && fip.equals(uniqueFip)) {
|
||||
if (fip != null && uniqueFip != null
|
||||
&& fip.equals(uniqueFip)) {
|
||||
updateWarnedAreas(true);
|
||||
}
|
||||
break;
|
||||
|
@ -2769,8 +2815,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
if (areaHatcher != null) {
|
||||
Polygon polygon = state.getWarningPolygon();
|
||||
polygon = tryToIntersectWithOriginalPolygon(polygon);
|
||||
areaHatcher.hatchArea(polygon,
|
||||
state.getWarningArea(),
|
||||
areaHatcher.hatchArea(polygon, state.getWarningArea(),
|
||||
state.getOldWarningPolygon());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,6 +65,7 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* when c2 is null for "case SINGLE_POINT" in move().
|
||||
* Mar 28, 2013 DR 15974 D. Friedman Do not track removed GIDs.
|
||||
* Jun 25, 2013 DR 16013 Qinglu Lin Called setUniqueFip() in handleMouseUp().
|
||||
* Aug 15, 2013 DR 16418 D. Friedman Only raise dialog if editable. Don't call featureEdit if not editable.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -131,7 +132,9 @@ public class WarngenUIManager extends InputAdapter {
|
|||
*/
|
||||
@Override
|
||||
public boolean handleMouseDown(int x, int y, int button) {
|
||||
warngenLayer.showDialog(true);
|
||||
if (warngenLayer.isEditable()) {
|
||||
warngenLayer.showDialog(true);
|
||||
}
|
||||
lastMouseX = x;
|
||||
lastMouseY = y;
|
||||
if (!handleInput || warngenLayer.isBoxEditable() == false) {
|
||||
|
@ -207,7 +210,7 @@ public class WarngenUIManager extends InputAdapter {
|
|||
return super.handleMouseUp(x, y, mouseButton);
|
||||
}
|
||||
|
||||
if (mouseButton == 3 && menuMove == false) {
|
||||
if (mouseButton == 3 && menuMove == false && warngenLayer.isEditable()) {
|
||||
Coordinate c = container.translateClick(x, y);
|
||||
WarngenUIState state = warngenLayer.getWarngenState();
|
||||
boolean geomsEqual = true;
|
||||
|
|
|
@ -98,6 +98,7 @@ import com.raytheon.viz.warngen.gis.Area;
|
|||
import com.raytheon.viz.warngen.gis.ClosestPointComparator;
|
||||
import com.raytheon.viz.warngen.gis.GisUtil;
|
||||
import com.raytheon.viz.warngen.gis.PathCast;
|
||||
import com.raytheon.viz.warngen.gis.PortionsUtil;
|
||||
import com.raytheon.viz.warngen.gis.Wx;
|
||||
import com.raytheon.viz.warngen.gui.BackupData;
|
||||
import com.raytheon.viz.warngen.gui.FollowupData;
|
||||
|
@ -154,6 +155,7 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* May 10, 2013 1951 rjpeter Updated ugcZones references
|
||||
* May 30, 2013 DR 16237 D. Friedman Fix watch query.
|
||||
* Jun 18, 2013 2118 njensen Only calculate pathcast if it's actually used
|
||||
* Aug 19, 2013 2177 jsanchez Passed PortionsUtil to Area class.
|
||||
* </pre>
|
||||
*
|
||||
* @author njensen
|
||||
|
@ -301,17 +303,18 @@ public class TemplateRunner {
|
|||
AffectedAreas[] cancelareas = null;
|
||||
Map<String, Object> intersectAreas = null;
|
||||
Wx wx = null;
|
||||
Area area = new Area(new PortionsUtil(warngenLayer));
|
||||
long wwaMNDTime = 0l;
|
||||
try {
|
||||
t0 = System.currentTimeMillis();
|
||||
areas = Area.findAffectedAreas(config, warnPolygon, warningArea,
|
||||
areas = area.findAffectedAreas(config, warnPolygon, warningArea,
|
||||
threeLetterSiteId);
|
||||
System.out.println("Time to get areas = "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
context.put(config.getHatchedAreaSource().getVariable(), areas);
|
||||
|
||||
t0 = System.currentTimeMillis();
|
||||
intersectAreas = Area.findInsectingAreas(config, warnPolygon,
|
||||
intersectAreas = area.findInsectingAreas(config, warnPolygon,
|
||||
warningArea, threeLetterSiteId, warngenLayer);
|
||||
System.out.println("Time to get intersecting areas = "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
|
@ -324,10 +327,11 @@ public class TemplateRunner {
|
|||
double minSize = 1.0E-3d;
|
||||
if ((areas != null) && (areas.length > 0)) {
|
||||
Set<String> timeZones = new HashSet<String>();
|
||||
for (AffectedAreas area : areas) {
|
||||
if (area.getTimezone() != null) {
|
||||
for (AffectedAreas affectedAreas : areas) {
|
||||
if (affectedAreas.getTimezone() != null) {
|
||||
// Handles counties that span two time zones
|
||||
String oneLetterTimeZones = area.getTimezone().trim();
|
||||
String oneLetterTimeZones = affectedAreas.getTimezone()
|
||||
.trim();
|
||||
oneLetterTZ = new String[oneLetterTimeZones.length()];
|
||||
if (oneLetterTimeZones.length() == 1) {
|
||||
timeZones.add(String.valueOf(oneLetterTimeZones
|
||||
|
@ -799,14 +803,14 @@ public class TemplateRunner {
|
|||
Geometry removedAreas = warngenLayer.getWarningAreaForGids(
|
||||
oldGids, oldWarningArea);
|
||||
if (removedAreas.isEmpty() == false) {
|
||||
cancelareas = Area.findAffectedAreas(config,
|
||||
cancelareas = area.findAffectedAreas(config,
|
||||
oldWarn.getGeometry(), removedAreas,
|
||||
threeLetterSiteId);
|
||||
for (int i = 0; i < cancelareas.length; i++) {
|
||||
for (AffectedAreas area : areas) {
|
||||
for (AffectedAreas affectedAreas : areas) {
|
||||
if ((cancelareas[i] != null)
|
||||
&& cancelareas[i].getFips().equals(
|
||||
area.getFips())) {
|
||||
affectedAreas.getFips())) {
|
||||
cancelareas[i] = null;
|
||||
}
|
||||
}
|
||||
|
@ -824,7 +828,7 @@ public class TemplateRunner {
|
|||
// This may not be efficient enough. Is it possible that
|
||||
// a removed intersected county be in the affected
|
||||
// intersected county. Need an example to fully test.
|
||||
Map<String, Object> intersectRemovedAreas = Area
|
||||
Map<String, Object> intersectRemovedAreas = area
|
||||
.findInsectingAreas(config, warnPolygon,
|
||||
removedAreas, threeLetterSiteId,
|
||||
warngenLayer);
|
||||
|
|
22
deltaScripts/13.5.2/addBufrmosDataURI.sh
Normal file
22
deltaScripts/13.5.2/addBufrmosDataURI.sh
Normal file
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
# DR #2275 - this script is needd to add the dataURI column back into the
|
||||
# bufrmosavn and bufrmoshpc tables.
|
||||
|
||||
PSQL="/awips2/psql/bin/psql"
|
||||
|
||||
${PSQL} -U awips -d metadata -c "ALTER TABLE bufrmosavn ADD COLUMN datauri character varying(255);"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Failed to drop dataURI column for bufrmosavn"
|
||||
echo "FATAL: The update has failed."
|
||||
exit 1
|
||||
fi
|
||||
${PSQL} -U awips -d metadata -c "ALTER TABLE bufrmoshpc ADD COLUMN datauri character varying(255);"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "ERROR: Failed to add dataURI column for bufrmoshpc"
|
||||
echo "FATAL: The update has failed."
|
||||
exit 1
|
||||
fi
|
||||
${PSQL} -U awips -d metadata -c "VACUUM FULL ANALYZE bufrmosavn"
|
||||
${PSQL} -U awips -d metadata -c "VACUUM FULL ANALYZE bufrmoshpc"
|
||||
|
||||
echo "INFO: dataURI columns added successfully"
|
File diff suppressed because it is too large
Load diff
|
@ -19,6 +19,9 @@
|
|||
**/
|
||||
package com.raytheon.edex.plugin.bufrmos.common;
|
||||
|
||||
import javax.persistence.Access;
|
||||
import javax.persistence.AccessType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.SequenceGenerator;
|
||||
import javax.persistence.Table;
|
||||
|
@ -48,6 +51,8 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
|||
* May 07, 2013 1869 bsteffen Remove dataURI column from
|
||||
* PluginDataObject.
|
||||
* May 14, 2013 1869 bsteffen Remove DataURI column from bufrmos.
|
||||
* Aug 19, 2013 2275 bsteffen Add dataURI column back into bufrmos
|
||||
* types.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -77,4 +82,11 @@ public class BufrMosAvnData extends BufrMosData {
|
|||
return MOSType.AVN;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Column
|
||||
@Access(AccessType.PROPERTY)
|
||||
public String getDataURI() {
|
||||
return super.getDataURI();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
**/
|
||||
package com.raytheon.edex.plugin.bufrmos.common;
|
||||
|
||||
import javax.persistence.Access;
|
||||
import javax.persistence.AccessType;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.SequenceGenerator;
|
||||
import javax.persistence.Table;
|
||||
|
@ -48,6 +51,8 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
|||
* May 07, 2013 1869 bsteffen Remove dataURI column from
|
||||
* PluginDataObject.
|
||||
* May 14, 2013 1869 bsteffen Remove DataURI column from bufrmos.
|
||||
* Aug 19, 2013 2275 bsteffen Add dataURI column back into bufrmos
|
||||
* types.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -77,4 +82,11 @@ public class BufrMosHpcData extends BufrMosData {
|
|||
return MOSType.HPC;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Column
|
||||
@Access(AccessType.PROPERTY)
|
||||
public String getDataURI() {
|
||||
return super.getDataURI();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1292,7 +1292,7 @@ public class GFEDao extends DefaultPluginDao {
|
|||
DatabaseQuery query = new DatabaseQuery(this.daoClass);
|
||||
query.addQueryParam("parmId.dbId.siteId", dbId.getSiteId(),
|
||||
QueryOperand.EQUALS);
|
||||
query.addQueryParam("parmId.dbId.format", dbId.getFormat(),
|
||||
query.addQueryParam("parmId.dbId.dbType", dbId.getDbType(),
|
||||
QueryOperand.EQUALS);
|
||||
query.addQueryParam("parmId.dbId.modelName", dbId.getModelName(),
|
||||
QueryOperand.EQUALS);
|
||||
|
|
|
@ -53,6 +53,9 @@
|
|||
class="com.raytheon.edex.plugin.grib.spatial.GribSpatialCache"
|
||||
factory-method="getInstance" depends-on="gridcoveragelookup"/>
|
||||
|
||||
<bean id="ncgribFilenameProcessor" class="com.raytheon.edex.plugin.grib.filenameprocessor.NcgribFileNameProcessor" />
|
||||
|
||||
|
||||
<camelContext id="grib-decode" xmlns="http://camel.apache.org/schema/spring"
|
||||
errorHandlerRef="errorHandler"
|
||||
autoStartup="false">
|
||||
|
@ -63,6 +66,7 @@
|
|||
<route id="gribFileConsumerRoute">
|
||||
<from ref="gribFileEndpoint" />
|
||||
<bean ref="fileToString" />
|
||||
<bean ref="ncgribFilenameProcessor" />
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>grid</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -54,11 +54,11 @@ public class NcgribFileNameProcessor implements Processor {
|
|||
|
||||
// grab global wind and wave ensemble IDs
|
||||
private static final Pattern ENSEMBLE_WAVE_PATTERN = Pattern
|
||||
.compile("^gep(\\d{0,2}{2})$");
|
||||
.compile("^\\d{8}_gep(\\d{0,2}{2})$");
|
||||
|
||||
// grab global wind and wave ensemble IDs
|
||||
private static final Pattern ENSEMBLE_NFC_PATTERN = Pattern
|
||||
.compile("^HTSGW_(\\d{0,2}{2})$");
|
||||
.compile("^\\d{8}_HTSGW_(\\d{2})$");
|
||||
// anything that ends in nest is assumed to be a nested grid identifier
|
||||
// might add alaska fire weather later...
|
||||
private static final Pattern FIREWXNEST_ID_PATTERN = Pattern
|
||||
|
@ -73,7 +73,7 @@ public class NcgribFileNameProcessor implements Processor {
|
|||
// This is the least generic pattern ever, are there any constraints on
|
||||
// event names, who knows?
|
||||
private static final Pattern HURRICANE_PATTERN = Pattern
|
||||
.compile("^([a-z]*)\\d{1,2}[lewcs]$");
|
||||
.compile("^\\d{10}_([a-z]*)\\d{1,2}[lewcs]$");
|
||||
|
||||
private static NcgribModelNameMap modelMap = null;
|
||||
|
||||
|
@ -85,6 +85,7 @@ public class NcgribFileNameProcessor implements Processor {
|
|||
String secondaryid = null;
|
||||
String ensembleid = null;
|
||||
String[] nameTokens = flName.split("\\.");
|
||||
|
||||
for (String token : nameTokens) {
|
||||
if (ENSEMBLE_ID_PATTERN.matcher(token).find()) {
|
||||
ensembleid = token;
|
||||
|
@ -112,15 +113,17 @@ public class NcgribFileNameProcessor implements Processor {
|
|||
matcher.find();
|
||||
secondaryid = matcher.group(1);
|
||||
datasetid = "GHM";
|
||||
if (nameTokens[2].equalsIgnoreCase("gribn3")) {
|
||||
|
||||
if (nameTokens[3].equalsIgnoreCase("gribn3")) {
|
||||
datasetid = "GHMNEST";
|
||||
} else if (nameTokens[2].equalsIgnoreCase("grib6th")) {
|
||||
} else if (nameTokens[3].equalsIgnoreCase("grib6th")) {
|
||||
datasetid = "GHM6TH";
|
||||
} else if (nameTokens[2].equalsIgnoreCase("hwrfprs_n")) {
|
||||
} else if (nameTokens[3].equalsIgnoreCase("hwrfprs_n")) {
|
||||
datasetid = "HWRFNEST";
|
||||
} else if (nameTokens[2].equalsIgnoreCase("hwrfprs_p")) {
|
||||
} else if (nameTokens[3].equalsIgnoreCase("hwrfprs_p")) {
|
||||
datasetid = "HWRF";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -128,6 +131,7 @@ public class NcgribFileNameProcessor implements Processor {
|
|||
modelMap = NcgribModelNameMap.load();
|
||||
}
|
||||
|
||||
// Get model name from grib file template
|
||||
if (datasetid == null) {
|
||||
datasetid = modelMap.getModelName(flName);
|
||||
}
|
||||
|
|
|
@ -3,219 +3,219 @@
|
|||
<ncgribModelNameMap>
|
||||
<mapping>
|
||||
<entry>
|
||||
<key>cmc_geavg.*</key>
|
||||
<key>gens_cmce.*_cmc_geavg.*</key>
|
||||
<value>cmceDerv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>cmc_gespr.*</key>
|
||||
<key>gens_cmce.*_cmc_gespr.*</key>
|
||||
<value>cmceDerv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gec00.*anl</key>
|
||||
<key>gens_gefs.*_gec00.*anl</key>
|
||||
<value>gefsAnal</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gep[0-9][0-9].*anl</key>
|
||||
<key>gens_gefs.*_gep[0-9][0-9].*anl</key>
|
||||
<value>gefsAnal</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gec00.*bcf.*</key>
|
||||
<key>gens_gefs.*_gec00.*bcf.*</key>
|
||||
<value>gefsBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gep[0-9][0-9].*bcf.*</key>
|
||||
<key>gens_gefs.*_gep[0-9][0-9].*bcf.*</key>
|
||||
<value>gefsBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>geavg.*bcf.*</key>
|
||||
<key>gens_gefs.*_geavg.*bcf.*</key>
|
||||
<value>gefsBCDerv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gespr.*bcf.*</key>
|
||||
<key>gens_gefs.*_gespr.*bcf.*</key>
|
||||
<value>gefsBCDerv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>geavg.*</key>
|
||||
<key>gens_gefs.*_geavg.*</key>
|
||||
<value>gefsDerv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gespr.*</key>
|
||||
<key>gens_gefs.*_gespr.*</key>
|
||||
<value>gefsDerv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>HTSGW_mean.*</key>
|
||||
<key>wave_nfcens.*_HTSGW_mean.*</key>
|
||||
<value>nfcMean</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>HTSGW_probab.*</key>
|
||||
<key>wave_nfcens.*_HTSGW_probab.*</key>
|
||||
<value>nfcProb</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>HTSGW_spread.*</key>
|
||||
<key>wave_nfcens.*_HTSGW_spread.*</key>
|
||||
<value>nfcSprd</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>mens.glo_60m.*.grib2</key>
|
||||
<key>wave_wave.*_mens.glo_60m.*.grib2</key>
|
||||
<value>gwwEns</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>gep[0-9][0-9].glo_60m.*.grib2</key>
|
||||
<key>wave_wave.*_gep[0-9][0-9].glo_60m.*.grib2</key>
|
||||
<value>gwwEns</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>mean.*</key>
|
||||
<key>wave_wave.*_mean.*</key>
|
||||
<value>gwwMean</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>spread.*.grib2</key>
|
||||
<key>wave_wave.*_spread.*.grib2</key>
|
||||
<value>gwwSprd</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>probab.*.grib2</key>
|
||||
<key>wave_wave.*_probab.*.grib2</key>
|
||||
<value>gwwProb</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_geavg.*bcf.*</key>
|
||||
<key>gens_naefs.*_naefs_geavg.*bcf.*</key>
|
||||
<value>naefsDervBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_gespr.*bcf.*</key>
|
||||
<key>gens_naefs.*_naefs_gespr.*bcf.*</key>
|
||||
<value>naefsDervBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_gemode.*bcf.*</key>
|
||||
<key>gens_naefs.*_naefs_gemode.*bcf.*</key>
|
||||
<value>naefsModeBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge10pt.*bcf.*</key>
|
||||
<key>gens_naefs.*_naefs_ge10pt.*bcf.*</key>
|
||||
<value>naefs10ptBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge50pt.*bcf.*</key>
|
||||
<key>gens_naefs.*_naefs_ge50pt.*bcf.*</key>
|
||||
<value>naefs50ptBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge90pt.*bcf.*</key>
|
||||
<key>gens_naefs.*_naefs_ge90pt.*bcf.*</key>
|
||||
<value>naefs90ptBC</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_geavg.*ndgd_conusf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_geavg.*ndgd_conusf.*grib2</key>
|
||||
<value>naefsDervUS</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_gespr.*ndgd_conusf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_gespr.*ndgd_conusf.*grib2</key>
|
||||
<value>naefsDervUS</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_gemode.*ndgd_conusf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_gemode.*ndgd_conusf.*grib2</key>
|
||||
<value>naefsModeUS</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge10pt.*ndgd_conusf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_ge10pt.*ndgd_conusf.*grib2</key>
|
||||
<value>naefs10ptUS</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge50pt.*ndgd_conusf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_ge50pt.*ndgd_conusf.*grib2</key>
|
||||
<value>naefs50ptUS</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge90pt.*ndgd_conusf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_ge90pt.*ndgd_conusf.*grib2</key>
|
||||
<value>naefs90ptUS</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_geavg.*ndgd_alaskaf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_geavg.*ndgd_alaskaf.*grib2</key>
|
||||
<value>naefsDervAK</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_gespr.*ndgd_alaskaf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_gespr.*ndgd_alaskaf.*grib2</key>
|
||||
<value>naefsDervAK</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_gemode.*ndgd_alaskaf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_gemode.*ndgd_alaskaf.*grib2</key>
|
||||
<value>naefsModeAK</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge10pt.*ndgd_alaskaf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_ge10pt.*ndgd_alaskaf.*grib2</key>
|
||||
<value>naefs10ptAK</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge50pt.*ndgd_alaskaf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_ge50pt.*ndgd_alaskaf.*grib2</key>
|
||||
<value>naefs50ptAK</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>naefs_ge90pt.*ndgd_alaskaf.*grib2</key>
|
||||
<key>gens_naefs.*_naefs_ge90pt.*ndgd_alaskaf.*grib2</key>
|
||||
<value>naefs90ptAK</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_em.*132.ctl.*</key>
|
||||
<key>sref_sref.*_sref_em.*132.ctl.*</key>
|
||||
<value>sref16EM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_em.*132.[pn][1-3].*</key>
|
||||
<key>sref_sref.*_sref_em.*132.[pn][1-3].*</key>
|
||||
<value>sref16EM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmb.*132.ctl.*</key>
|
||||
<key>sref_sref.*_sref_nmb.*132.ctl.*</key>
|
||||
<value>sref16NMB</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmb.*132.[pn][1-3].*</key>
|
||||
<key>sref_sref.*_sref_nmb.*132.[pn][1-3].*</key>
|
||||
<value>sref16NMB</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmm.*132.ctl.*</key>
|
||||
<key>sref_sref.*_sref_nmm.*132.ctl.*</key>
|
||||
<value>sref16NMM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmm.*132.[pn][1-3].*</key>
|
||||
<key>sref_sref.*_sref_nmm.*132.[pn][1-3].*</key>
|
||||
<value>sref16NMM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref.*132.mean.*</key>
|
||||
<key>sref_sref.*_sref.*132.mean.*</key>
|
||||
<value>sref16Derv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref.*132.prob.*</key>
|
||||
<key>sref_sref.*_sref.*132.prob.*</key>
|
||||
<value>sref16Derv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref.*132.spread.*</key>
|
||||
<key>sref_sref.*_sref.*132.spread.*</key>
|
||||
<value>sref16Derv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_em.*212.ctl.*</key>
|
||||
<key>sref_sref.*_sref_em.*212.ctl.*</key>
|
||||
<value>sref40EM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_em.*212.[pn][1-3].*</key>
|
||||
<key>sref_sref.*_sref_em.*212.[pn][1-3].*</key>
|
||||
<value>sref40EM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmb.*212.ctl.*</key>
|
||||
<key>sref_sref.*_sref_nmb.*212.ctl.*</key>
|
||||
<value>sref40NMB</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmb.*212.[pn][1-3].*</key>
|
||||
<key>sref_sref.*_sref_nmb.*212.[pn][1-3].*</key>
|
||||
<value>sref40NMB</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmm.*212.ctl.*</key>
|
||||
<key>sref_sref.*_sref_nmm.*212.ctl.*</key>
|
||||
<value>sref40NMM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref_nmm.*212.[pn][1-3].*</key>
|
||||
<key>sref_sref.*_sref_nmm.*212.[pn][1-3].*</key>
|
||||
<value>sref40NMM</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref.*212.mean.*</key>
|
||||
<key>sref_sref.*_sref.*212.mean.*</key>
|
||||
<value>sref40Derv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref.*212.prob.*</key>
|
||||
<key>sref_sref.*_sref.*212.prob.*</key>
|
||||
<value>sref40Derv</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>sref.*212.spread.*</key>
|
||||
<key>sref_sref.*_sref.*212.spread.*</key>
|
||||
<value>sref40Derv</value>
|
||||
</entry>
|
||||
</mapping>
|
||||
|
|
|
@ -19,11 +19,15 @@
|
|||
**/
|
||||
package com.raytheon.edex.plugin.radar;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.zip.DataFormatException;
|
||||
import java.util.zip.Inflater;
|
||||
|
||||
import org.itadaki.bzip2.BZip2InputStream;
|
||||
|
||||
import com.raytheon.edex.esb.Headers;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
|
@ -42,6 +46,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
* Jul 16, 2012 DR 14723 D.Friedman Decompress files atomically
|
||||
* Mar 20, 2013 1804 bsteffen Switch all radar decompressing to be in
|
||||
* memory.
|
||||
* Aug 20, 2013 16157 wkwock Add bunzip2 cabability.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -104,13 +109,27 @@ public class RadarDecompressor {
|
|||
wmoHeaderSize, radarData.length);
|
||||
radarData = radarDataWithHeader;
|
||||
}
|
||||
} else if (!keepHeader && wmoHeaderSize > 0) {
|
||||
// strip the header.
|
||||
radarData = new byte[messageData.length - wmoHeaderSize];
|
||||
System.arraycopy(messageData, wmoHeaderSize, radarData, 0,
|
||||
radarData.length);
|
||||
} else {
|
||||
radarData = messageData;
|
||||
radarData = decompressBzip2 (messageData, wmoHeaderSize, headers);
|
||||
if (radarData !=null) {
|
||||
if (keepHeader) {
|
||||
// put the header back on.
|
||||
byte[] radarDataWithHeader = new byte[radarData.length
|
||||
+ wmoHeaderSize];
|
||||
System.arraycopy(messageData, 0, radarDataWithHeader, 0,
|
||||
wmoHeaderSize);
|
||||
System.arraycopy(radarData, 0, radarDataWithHeader,
|
||||
wmoHeaderSize, radarData.length);
|
||||
radarData = radarDataWithHeader;
|
||||
}
|
||||
} else if (!keepHeader && wmoHeaderSize > 0) {
|
||||
// strip the header.
|
||||
radarData = new byte[messageData.length - wmoHeaderSize];
|
||||
System.arraycopy(messageData, wmoHeaderSize, radarData, 0,
|
||||
radarData.length);
|
||||
} else {
|
||||
radarData = messageData;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
theHandler.handle(Priority.ERROR, "Failed decompression on "
|
||||
|
@ -152,6 +171,33 @@ public class RadarDecompressor {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if inBuf has bzip2 compressed block.
|
||||
* 0-inOff in inBuf is WMO header.
|
||||
* (inOff+1) - (inOff+120) is nexrad_header(18 bytes) +
|
||||
* s_product_description_block (102 bytes)
|
||||
* And inBuf[inOff+121 to inOff+123] is 'BZh' then it most likely is bzip2
|
||||
* compressed.
|
||||
* Also see AWIPS I RadarDecompress.c for more info.
|
||||
*
|
||||
* @param inBuf
|
||||
* the data buffer
|
||||
* @param inOff
|
||||
* the offset into the buffer
|
||||
* @return true if data is bzip2 compressed
|
||||
*/
|
||||
private boolean isBzip2Compressed(byte[] inBuf, int inOff) {
|
||||
if ((inBuf==null) || (inOff < 0) || ((inOff +120) >= inBuf.length)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (inBuf[inOff+120]== 'B' && inBuf[inOff+121]== 'Z' && inBuf[inOff+122]== 'h') {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private int findStartRadarData(String headerInfo) {
|
||||
int startOfRadarData = 0;
|
||||
Matcher matcher = WMO_PATTERN.matcher(headerInfo);
|
||||
|
@ -222,4 +268,40 @@ public class RadarDecompressor {
|
|||
|
||||
return outBuf;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to handle bzip2 compressed radar data. If data is not compressed it is
|
||||
* just copied to the output buffer.
|
||||
*
|
||||
* @return The decompressed byte array for the radar data
|
||||
* or null if not decompressed
|
||||
*/
|
||||
private byte[] decompressBzip2(byte[] inBuf, int offset, Headers headers) {
|
||||
byte[] outBuf = null;
|
||||
|
||||
if (isBzip2Compressed(inBuf, offset)) {
|
||||
byte[] tmpBuf= new byte[inBuf.length-offset-120];
|
||||
System.arraycopy(inBuf, offset+120, tmpBuf, 0, tmpBuf.length);
|
||||
ByteArrayInputStream is = new ByteArrayInputStream(tmpBuf);
|
||||
BZip2InputStream bis= new BZip2InputStream(is,false);
|
||||
try {
|
||||
//use 10x85716 should be safe
|
||||
byte[] tmpBuf2= new byte[860000];
|
||||
int actualByte=bis.read(tmpBuf2);
|
||||
bis.close();
|
||||
outBuf = new byte[actualByte+120];
|
||||
//the 120 bytes:description block and symbology block
|
||||
System.arraycopy(inBuf, offset, outBuf, 0, 8);
|
||||
byte[] lengthMsg2=ByteBuffer.allocate(4).putInt(outBuf.length).array();
|
||||
System.arraycopy(lengthMsg2, 0, outBuf, 8, 4);
|
||||
System.arraycopy(inBuf, offset+8+4, outBuf, 12, 108);
|
||||
|
||||
System.arraycopy(tmpBuf2, 0, outBuf, 120, actualByte);
|
||||
} catch (Exception e) {
|
||||
theHandler.handle(Priority.ERROR,
|
||||
"Failed to decompress " + headers.get("ingestfilename"));
|
||||
}
|
||||
}
|
||||
return outBuf;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ import com.raytheon.uf.edex.decodertools.core.ReportParser;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* 20071010 391 jkorman Initial coding.
|
||||
* 20071109 391 jkorman Added guard for short data.
|
||||
* 2013/8 757 T. Lee Checked missing wave height from ship report
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -254,7 +255,7 @@ public class SynopticSec2Decoder extends AbstractSectionDecoder {
|
|||
wavePeriod = null;
|
||||
}
|
||||
}
|
||||
if(waveHeight != null) {
|
||||
if((waveHeight != null) && (waveHeight >=0) ) {
|
||||
receiver.setWaveHeight(waveHeight.doubleValue() * 0.5);
|
||||
}
|
||||
if(windWavePeriod != null) {
|
||||
|
@ -265,7 +266,7 @@ public class SynopticSec2Decoder extends AbstractSectionDecoder {
|
|||
windWavePeriod = null;
|
||||
}
|
||||
}
|
||||
if(windWaveHeight != null) {
|
||||
if((windWaveHeight != null) && (windWaveHeight >=0) ) {
|
||||
receiver.setWindWaveHeight(windWaveHeight.doubleValue() * 0.5);
|
||||
}
|
||||
if ((wavePeriod != null) && (waveHeight != null)) {
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
# Feb 19, 2013 1636 rferrel Use TimeTools to get file timestamp.
|
||||
# May 07, 2013 1973 rferrel Adjust Issue and Purge times to be relative to start time.
|
||||
# Jun 24, 2013 DR 16317 D. Friedman If no storm line, parse storm motion from event text.
|
||||
# Aug 21, 2013 DR16501 m.gamazaychikov Adjusted calculation of Purge time in NoVTECWarningDecoder.
|
||||
# </pre>
|
||||
#
|
||||
# @author rferrel
|
||||
|
@ -986,7 +987,7 @@ class NoVTECWarningDecoder(StdWarningDecoder):
|
|||
if self._officeFromWMO:
|
||||
template['officeid'] = self._officeFromWMO
|
||||
|
||||
template['purgeTime'] = long(purgeTime * 1000)
|
||||
template['purgeTime'] = long(self._dtgFromDDHHMM(purgeTime, self._issueTime)*1000)
|
||||
template['issueTime'] = long(self._issueTime * 1000)
|
||||
template['state'] = "Decoded"
|
||||
template['xxxid'] = self._completeProductPil[3:]
|
||||
|
|
|
@ -688,7 +688,6 @@ public class FFMPBasinData implements ISerializableObject {
|
|||
* @param times
|
||||
*/
|
||||
public void populate(List<Long> times) {
|
||||
|
||||
if (mapFactory == null) {
|
||||
mapFactory = new BasinMapFactory<Date>(Collections.reverseOrder(),
|
||||
getBasins().size());
|
||||
|
|
|
@ -66,6 +66,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* 02/19/13 #1637 randerso Fixed remapping of byte grids
|
||||
* 07/09/13 #2044 randerso Made SoftReferences to interp and rotation since
|
||||
* they can be quite large and may not be needed frequently
|
||||
* 08/27/13 #2287 randerso Removed 180 degree adjustment required by error
|
||||
* in Maputil.rotation
|
||||
* 07/17/13 #2185 bsteffen Cache computed grid reprojections.
|
||||
* 08/13/13 #1571 randerso Passed fill values into interpolator.
|
||||
*
|
||||
|
@ -642,8 +644,8 @@ public class RemapGrid {
|
|||
for (int y1 = 0; y1 < rotation.getYdim(); y1++) {
|
||||
Coordinate llc = destinationGloc
|
||||
.latLonCenter(new Coordinate(x1, y1));
|
||||
rotation.set(x1, y1, (float) (180 - MapUtil.rotation(
|
||||
llc, sourceGloc)));
|
||||
rotation.set(x1, y1,
|
||||
(float) (-MapUtil.rotation(llc, sourceGloc)));
|
||||
}
|
||||
}
|
||||
rotationRef = new SoftReference<Grid2DFloat>(rotation);
|
||||
|
|
|
@ -94,6 +94,8 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* 06/19/2012 14988 D. Friedman Make oversampling more like AWIPS 1
|
||||
* 09/18/2012 #1091 randerso corrected getBoundingEnvelope
|
||||
* 11/06/2012 15406 ryu Added convertToNativeEnvelope()
|
||||
* 08/27/2013 #2287 randerso Fixed rotation methods so it is not necessary
|
||||
* to subtract 180 from the returned value
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1062,12 +1064,13 @@ public class MapUtil {
|
|||
* the right of UP is north (or 360) degrees.
|
||||
*
|
||||
* @param latLon
|
||||
* @param spatialObject
|
||||
* @return rotation angle
|
||||
*/
|
||||
public static double rotation(Coordinate latLon,
|
||||
ISpatialObject spatialObject) {
|
||||
|
||||
double newLatLonY = latLon.y + 0.05;
|
||||
double newLatLonY = latLon.y - 0.05;
|
||||
if (newLatLonY > 90) {
|
||||
newLatLonY -= 180;
|
||||
}
|
||||
|
@ -1098,11 +1101,12 @@ public class MapUtil {
|
|||
* the right of UP is north (or 360) degrees.
|
||||
*
|
||||
* @param latLon
|
||||
* @param geometry
|
||||
* @return rotation angle
|
||||
*/
|
||||
public static double rotation(Coordinate latLon, GridGeometry2D geometry) {
|
||||
|
||||
double newLatLonY = latLon.y + 0.05;
|
||||
double newLatLonY = latLon.y - 0.05;
|
||||
if (newLatLonY > 90) {
|
||||
newLatLonY -= 180;
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package com.raytheon.uf.common.geospatial;
|
||||
|
||||
import org.geotools.coverage.grid.GeneralGridGeometry;
|
||||
import org.geotools.referencing.CRS;
|
||||
import org.geotools.referencing.operation.DefaultMathTransformFactory;
|
||||
import org.geotools.referencing.operation.transform.IdentityTransform;
|
||||
import org.opengis.referencing.FactoryException;
|
||||
|
@ -166,6 +167,27 @@ public class TransformFactory {
|
|||
return factory.createConcatenatedTransform(mt1, mt2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a transform from the "world" CRS of the crs passed in. null
|
||||
* will be returned if no "world" crs exists.
|
||||
*
|
||||
* @param crs
|
||||
* @return
|
||||
* @throws FactoryException
|
||||
*/
|
||||
public static MathTransform worldToCRS(CoordinateReferenceSystem crs)
|
||||
throws FactoryException {
|
||||
CoordinateReferenceSystem worldCRS = crs;
|
||||
while (worldCRS instanceof GeneralDerivedCRS) {
|
||||
GeneralDerivedCRS derivedCRS = (GeneralDerivedCRS) worldCRS;
|
||||
worldCRS = derivedCRS.getBaseCRS();
|
||||
}
|
||||
if (worldCRS != crs) {
|
||||
return CRS.findMathTransform(worldCRS, crs);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a transform from the "world" CRS of the target geometry to the
|
||||
* grid of the targetGeometry. Will return crsToGrid if no "world" CRS
|
||||
|
@ -178,23 +200,19 @@ public class TransformFactory {
|
|||
*/
|
||||
public static MathTransform worldToGrid(GeneralGridGeometry targetGeometry,
|
||||
PixelInCell cellType) throws FactoryException {
|
||||
CoordinateReferenceSystem crs = targetGeometry.getEnvelope()
|
||||
.getCoordinateReferenceSystem();
|
||||
try {
|
||||
if (crs instanceof GeneralDerivedCRS) {
|
||||
GeneralDerivedCRS projCRS = (GeneralDerivedCRS) crs;
|
||||
CoordinateReferenceSystem worldCRS = projCRS.getBaseCRS();
|
||||
MathTransform worldToCRS = CRSCache.getInstance()
|
||||
.findMathTransform(worldCRS, crs);
|
||||
|
||||
MathTransform crsToPixel = targetGeometry
|
||||
.getGridToCRS(cellType).inverse();
|
||||
return factory.createConcatenatedTransform(worldToCRS,
|
||||
crsToPixel);
|
||||
} else {
|
||||
// No associated "world" CRS, go straight crs to grid
|
||||
return targetGeometry.getGridToCRS(cellType).inverse();
|
||||
CoordinateReferenceSystem crs = targetGeometry.getEnvelope()
|
||||
.getCoordinateReferenceSystem();
|
||||
MathTransform worldToCRS = worldToCRS(crs);
|
||||
MathTransform worldToGrid = targetGeometry.getGridToCRS(cellType)
|
||||
.inverse();
|
||||
if (worldToCRS != null) {
|
||||
worldToGrid = factory.createConcatenatedTransform(worldToCRS,
|
||||
worldToGrid);
|
||||
}
|
||||
return worldToGrid;
|
||||
} catch (FactoryException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new FactoryException(e);
|
||||
}
|
||||
|
|
|
@ -61,6 +61,7 @@ import com.raytheon.uf.common.status.UFStatus.Priority;
|
|||
* Feb 27, 2013 1638 mschenke Cleaned up localization code to fix null pointer
|
||||
* when no distribution files present
|
||||
* Mar 19, 2013 1794 djohnson PatternWrapper is immutable, add toString() to it for debugging.
|
||||
* Aug 19, 2013 2257 bkowal edexBridge to qpid 0.18 upgrade
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -73,6 +74,8 @@ public class DistributionSrv {
|
|||
private static final IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(DistributionSrv.class);
|
||||
|
||||
private static final String HEADER_QPID_SUBJECT = "qpid.subject";
|
||||
|
||||
private static class PatternWrapper {
|
||||
private final String plugin;
|
||||
|
||||
|
@ -223,7 +226,15 @@ public class DistributionSrv {
|
|||
StringBuilder pluginNames = new StringBuilder();
|
||||
List<String> dest = new ArrayList<String>();
|
||||
Message in = exchange.getIn();
|
||||
String header = (String) in.getHeader("header");
|
||||
// determine if the header is in the qpid subject field?
|
||||
String header = (String) in.getHeader(HEADER_QPID_SUBJECT);
|
||||
if (header != null) {
|
||||
// make the qpid subject the header so that everything downstream
|
||||
// will be able to read it as the header.
|
||||
in.setHeader("header", header);
|
||||
}
|
||||
|
||||
header = (String) in.getHeader("header");
|
||||
Object payload = in.getBody();
|
||||
String bodyString = null;
|
||||
if (payload instanceof byte[]) {
|
||||
|
@ -277,8 +288,8 @@ public class DistributionSrv {
|
|||
throws DistributionException {
|
||||
RequestPatterns patternSet = null;
|
||||
try {
|
||||
patternSet = SerializationUtil
|
||||
.jaxbUnmarshalFromXmlFile(RequestPatterns.class, modelFile.getPath());
|
||||
patternSet = SerializationUtil.jaxbUnmarshalFromXmlFile(
|
||||
RequestPatterns.class, modelFile.getPath());
|
||||
} catch (Exception e) {
|
||||
throw new DistributionException("File "
|
||||
+ modelFile.getAbsolutePath()
|
||||
|
|
|
@ -39,6 +39,7 @@ import com.raytheon.uf.edex.database.cluster.ClusterTask;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Feb 19, 2010 njensen Initial creation
|
||||
* Aug 21, 2013 DR 16521 D. Friedman Ensure endpoint URI is used for cluster entry
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -61,7 +62,7 @@ public class ClusteredQuartzEndpoint extends QuartzEndpoint {
|
|||
@Override
|
||||
public void onJobExecute(final JobExecutionContext jobExecutionContext)
|
||||
throws JobExecutionException {
|
||||
String jName = jobExecutionContext.getJobDetail().getName();
|
||||
String jName = getEndpointUri();
|
||||
long period = Math.abs(jobExecutionContext.getFireTime().getTime()
|
||||
- jobExecutionContext.getNextFireTime().getTime()) / 2;
|
||||
ClusterTask ct = ClusterLockUtils.lock(TASK, jName, period, false);
|
||||
|
|
34
edexOsgi/com.raytheon.uf.tools.cli/impl/gpd
Normal file
34
edexOsgi/com.raytheon.uf.tools.cli/impl/gpd
Normal file
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
##
|
||||
##
|
||||
##############################################################################
|
||||
# This script allows users to query point data database from EDEX.
|
||||
#
|
||||
# SOFTWARE HISTORY
|
||||
#
|
||||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 05/20/2013 Chin Chen Initial Creation.
|
||||
##############################################################################
|
||||
|
||||
# this allows you to run this script from outside of ./bin
|
||||
path_to_script=`readlink -f $0`
|
||||
RUN_FROM_DIR=`dirname $path_to_script`
|
||||
|
||||
BASE_AWIPS_DIR=`dirname $RUN_FROM_DIR`
|
||||
|
||||
# get the base environment
|
||||
source ${RUN_FROM_DIR}/setup.env
|
||||
|
||||
# setup the environment needed to run the the Python
|
||||
export LD_LIBRARY_PATH=${BASE_AWIPS_DIR}/src/lib:${PYTHON_INSTALL}/lib
|
||||
export PYTHONPATH=${RUN_FROM_DIR}/src:$PYTHONPATH
|
||||
|
||||
# execute the ifpInit Python module
|
||||
_PYTHON="${PYTHON_INSTALL}/bin/python"
|
||||
_MODULE="${RUN_FROM_DIR}/src/gpd/gpd.py"
|
||||
|
||||
# quoting of '$@' is used to prevent command line interpretation
|
||||
#$_PYTHON $_MODULE -h ${DEFAULT_HOST} -p ${DEFAULT_PORT} "$@"
|
||||
$_PYTHON $_MODULE "$@"
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
##
|
||||
# This script is used to send GPD request to EDEX.
|
||||
#
|
||||
# Users can override the default EDEX server and port name by specifying them
|
||||
# in the $DEFAULT_HOST and $DEFAULT_PORT shell environment variables.
|
||||
#
|
||||
# 5/22/2013 Chin J. Chen
|
||||
##
|
||||
import os
|
||||
from dynamicserialize.dstypes.gov.noaa.nws.ncep.common.dataplugin.gpd.query import GenericPointDataReqMsg
|
||||
from ufpy import ThriftClient
|
||||
|
||||
|
||||
class GpdCliRequestHandler:
|
||||
""" Request Activity to EDEX."""
|
||||
|
||||
def __init__(self):
|
||||
self.host = os.getenv("DEFAULT_HOST", "localhost")
|
||||
self.port = os.getenv("DEFAULT_PORT", "9581")
|
||||
self.client = ThriftClient.ThriftClient(self.host, self.port)
|
||||
|
||||
def getGpdProdInfo(self, prodName, reqType):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType(reqType)
|
||||
req.setProductName(prodName)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
def getGpdProduct(self, refTime,prodName , reqType,querySpecifiedProductVersion=None,versionNum=None ):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType(reqType)
|
||||
req.setRefTime(refTime)
|
||||
req.setProductName(prodName)
|
||||
if (querySpecifiedProductVersion!= None and versionNum !=None):
|
||||
req.setQuerySpecifiedProductVersion(querySpecifiedProductVersion)
|
||||
req.setProductVersion(versionNum)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
|
||||
def getGpdStationProduct(self, stnId, refTime,prodName , reqType,querySpecifiedProductVersion=None,versionNum=None ):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType(reqType)
|
||||
req.setStnId(stnId)
|
||||
req.setRefTime(refTime)
|
||||
req.setProductName(prodName)
|
||||
if (querySpecifiedProductVersion!= None and versionNum !=None):
|
||||
req.setQuerySpecifiedProductVersion(querySpecifiedProductVersion)
|
||||
req.setProductVersion(versionNum)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
def getGpdMovingProduct(self, slat, slon, refTime,prodName , reqType,querySpecifiedProductVersion=None,versionNum=None ):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType(reqType)
|
||||
req.setSlon(slon)
|
||||
req.setSlat(slat)
|
||||
req.setRefTime(refTime)
|
||||
req.setProductName(prodName)
|
||||
if (querySpecifiedProductVersion!= None and versionNum !=None):
|
||||
req.setQuerySpecifiedProductVersion(querySpecifiedProductVersion)
|
||||
req.setProductVersion(versionNum)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
def storeGpdGempakProduct(self, gpdGempak, prodName, maxNumLevel,versionNum):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType("STORE_GPD_PRODUCT_FROM_GEMPAK_TBL")
|
||||
req.setGpdDataString(gpdGempak)
|
||||
req.setProductName(prodName)
|
||||
req.setProductVersion(versionNum)
|
||||
req.setMaxNumLevel(maxNumLevel)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
def storeGpdXmlProduct(self, gpdXml):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType("STORE_GPD_PRODUCT_FROM_XML")
|
||||
req.setGpdDataString(gpdXml)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
def storeGpdProductInfo(self, gpdXml):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType("STORE_GPD_PRODUCT_INFO_FROM_XML")
|
||||
req.setGpdDataString(gpdXml)
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
'''
|
||||
def purgeGpdProd(self, prodName, refTime=None, all=None):
|
||||
req = GenericPointDataReqMsg()
|
||||
if(all == "yes"):
|
||||
req.setReqType("PURGE_GPD_PRODUCT_ALLTIME")
|
||||
else:
|
||||
req.setReqType("PURGE_GPD_PRODUCT_ONETIME")
|
||||
if(refTime!=None):
|
||||
req.setRefTime(refTime)
|
||||
else:
|
||||
return "reference time required for purging"
|
||||
req.setProductName(prodName)
|
||||
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
'''
|
||||
def purgeGpdExpired(self):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType("PURGE_GPD_EXPIRED_PRODUCT")
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
def purgeGpdAll(self):
|
||||
req = GenericPointDataReqMsg()
|
||||
req.setReqType("PURGE_GPD_ALL_PRODUCTS")
|
||||
resp = self.client.sendRequest(req)
|
||||
return resp
|
||||
|
||||
|
695
edexOsgi/com.raytheon.uf.tools.cli/impl/src/gpd/gpd.py
Normal file
695
edexOsgi/com.raytheon.uf.tools.cli/impl/src/gpd/gpd.py
Normal file
|
@ -0,0 +1,695 @@
|
|||
##
|
||||
# This script is used to query Generic Point Data database from EDEX.
|
||||
#
|
||||
# 5/22/2013 Chin J. Chen
|
||||
##
|
||||
import io
|
||||
import logging
|
||||
import sys
|
||||
import time
|
||||
import GpdCliRequestHandler
|
||||
from ufpy import UsageArgumentParser
|
||||
from dynamicserialize.dstypes.gov.noaa.nws.ncep.common.dataplugin.gpd.query import GenericPointDataReqMsg
|
||||
from dynamicserialize.dstypes.java.util import Date
|
||||
|
||||
logger = None
|
||||
parser = None
|
||||
USAGE_MESSAGE = \
|
||||
"""
|
||||
<To query product information in XML format, result saved at optional filePath >
|
||||
gpd qix --p prodName --f filePath
|
||||
<To query and list product information in XML format >
|
||||
gpd qixl --p prodName
|
||||
<To query a product (all stations) in XML format, optional version number, result saved at optional filePath >
|
||||
gpd qpx --p prodName --t referenceTime [--f filePath --v versionNum]
|
||||
<To query and list a product (all stations) in XML format, optional version number >
|
||||
gpd qpxl --p prodName --t referenceTime [--v versionNum]
|
||||
<To query a station product (single station) in XML format,optional version number, result saved at optional filePath >
|
||||
gpd qsx --p prodName --t referenceTime --id stationId [--f filePath --v versionNum]
|
||||
<To query and list a station product (single station) in XML format, optional version number >
|
||||
gpd qsxl --p prodName --t referenceTime --id stationId [--v versionNum]
|
||||
<To query a moving product in XML format, optional version number result saved at optional filePath >
|
||||
gpd qmx --p prodName --t referenceTime --slat latitude --slon longitude [--f filePath --v versionNum]
|
||||
<To query and list a moving product in XML format,optional version number >
|
||||
gpd qmxl --p prodName --t referenceTime --slat latitude --slon longitude [--v versionNum]
|
||||
<To query product information in Gempak format, result saved at filePath >
|
||||
<To store product XML file at filePath to EDEX server database>
|
||||
gpd spx --f filePath
|
||||
<To store product GEMPAK file at filePath to EDEX server database>
|
||||
gpd spg --f filePath --p prodName [--v versionNum]
|
||||
<To purge expired products from DB and HDF5>
|
||||
gpd pe
|
||||
<To purge all products from DB and HDF5>
|
||||
gpd pa
|
||||
<To print this usage>
|
||||
gpd u
|
||||
#######
|
||||
NOTE: referenceTime string format yyyy-mm-dd HH:MM:SS, for example "2013-05-21 20:30:00"
|
||||
filePath - required when saving Gempak table or XML file
|
||||
filePath - optional when querying, if not provided, result will be saved at current directory
|
||||
versionNum - optional, if not provided, latest version is returned
|
||||
#######
|
||||
"""
|
||||
SUBCOMMAND_MESSAGE = \
|
||||
"""
|
||||
qix: To query product information, result saved at optional filePath
|
||||
qixl: To query and list product information
|
||||
qpx: To query a product (all stations), result saved at optional filePath
|
||||
qpxl: To query and list a product (all stations)
|
||||
qsx: To query a station product, result saved at optional filePath
|
||||
qsxl: To query and list a station product
|
||||
qmx: To query a moving product, result saved at optional filePath
|
||||
qmxl: To query and print a moving product
|
||||
spx: To store product XML file to EDEX server database
|
||||
spg: To store product GEMPAk table file to EDEX server database
|
||||
pe: To purge expired products
|
||||
pa: To purge all products
|
||||
u: To print usage
|
||||
"""
|
||||
'''
|
||||
gpd qig --p prodName --f filePath
|
||||
<To query and list product information in Gempak format >
|
||||
gpd qigl --p prodName
|
||||
<To query a product (all stations) in Gempak format, optional version number, result saved at filePath >
|
||||
gpd qpg --p prodName --t referenceTime [--f filePath --v versionNum]
|
||||
<To query and list a product (all stations) in Gempak format, optional version number >
|
||||
gpd qpgl --p prodName --t referenceTime [--v versionNum]
|
||||
<To query a station product (single station) in Gempak format,optional version number, result saved at optional filePath >
|
||||
gpd qsg --p prodName --t referenceTime --id stationId [--f filePath --v versionNum]
|
||||
<To query and list a station product (single station) in Gempak format, optional version number >
|
||||
gpd qsgl --p prodName --t referenceTime --id stationId [--v versionNum]
|
||||
<To query a moving product in Gempak format, optional version number result saved at optional filePath >
|
||||
gpd qmg --p prodName --t referenceTime --slat latitude --slon longitude [--f filePath --v versionNum]
|
||||
<To query and list a moving product in Gempak format, optional version number >
|
||||
gpd qmgl --p prodName --t referenceTime --slat latitude --slon longitude [--v versionNum]
|
||||
|
||||
qig: To query product information, result saved at optional filePath
|
||||
qigl: To query and list product information
|
||||
qpg: To query a product (all stations), result saved at optional filePath
|
||||
qpgl: To query and list a product (all stations)
|
||||
qsg: To query a station product, result saved at optional filePath
|
||||
qsgl: To query and list a station product
|
||||
qmg: To query a moving product, result saved at optional filePath
|
||||
qmgl: To query and print a moving product
|
||||
'''
|
||||
def __initLogger():
|
||||
global logger
|
||||
logger = logging.getLogger("gpd")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
ch = logging.StreamHandler()
|
||||
ch.setLevel(logging.INFO)
|
||||
# Uncomment line below to enable debug-level logging
|
||||
ch.setLevel(logging.DEBUG)
|
||||
formatter = logging.Formatter("\n%(asctime)s %(name)s %(levelname)s: %(message)s", "%H:%M:%S")
|
||||
ch.setFormatter(formatter)
|
||||
logger.addHandler(ch)
|
||||
|
||||
def __parseCommandLine():
|
||||
global parser
|
||||
parser = UsageArgumentParser.UsageArgumentParser(prog='gpd',description="Query or store point data database from EDEX.")#, usage=USAGE_MESSAGE)
|
||||
#parser.add_argument("-u", action="help",
|
||||
# help="show usage")
|
||||
|
||||
subparsers = parser.add_subparsers(help=USAGE_MESSAGE)
|
||||
|
||||
#to print usage
|
||||
parser_usage = subparsers.add_parser('u')
|
||||
parser_usage.set_defaults(func=__printUsage)
|
||||
|
||||
#To update/replace product information
|
||||
#parser_saveinfo = subparsers.add_parser('si')
|
||||
#parser_saveinfo.add_argument("--f", dest="filePath", action="store",required=True,
|
||||
# help=":target file path for return product")
|
||||
#parser_saveinfo.set_defaults(func=__saveProdInfo)
|
||||
|
||||
#To save a GPD product in XML format
|
||||
parser_saveprod_xml = subparsers.add_parser('spx')
|
||||
parser_saveprod_xml.add_argument("--f", dest="filePath", action="store",required=True,
|
||||
help=":target file path for return product")
|
||||
parser_saveprod_xml.set_defaults(func=__saveProdXml)
|
||||
|
||||
#To save a GPD product in GEMPAk table format
|
||||
parser_saveprod_gempak = subparsers.add_parser('spg')
|
||||
parser_saveprod_gempak.add_argument("--f", dest="filePath", action="store",required=True,
|
||||
help=":target file path for return product")
|
||||
parser_saveprod_gempak.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_saveprod_gempak.add_argument("--l", dest="maxNumLevel", action="store",required=True,
|
||||
help=":max number of level for product")
|
||||
parser_saveprod_gempak.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_saveprod_gempak.set_defaults(func=__saveProdGempak)
|
||||
|
||||
#To query product information
|
||||
parser_infoXml = subparsers.add_parser('qix')
|
||||
parser_infoXml.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_infoXml.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_infoXml.set_defaults(func=__getProdInfoXml)
|
||||
|
||||
parser_info_printXml = subparsers.add_parser('qixl')
|
||||
parser_info_printXml.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
#parser_info_printXml.add_argument("--f", dest="filePath", action="store",
|
||||
# help=":target file path for return product")
|
||||
parser_info_printXml.set_defaults(func=__getPrintProdInfoXml)
|
||||
'''
|
||||
parser_infoGempak = subparsers.add_parser('qig')
|
||||
parser_infoGempak.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_infoGempak.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_infoGempak.set_defaults(func=__getProdInfoGempak)
|
||||
|
||||
parser_info_printGempak = subparsers.add_parser('qigl')
|
||||
parser_info_printGempak.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_info_printGempak.set_defaults(func=__getPrintProdInfoGempak)
|
||||
'''
|
||||
#To query a station product (single station)
|
||||
parser_stnProdXml = subparsers.add_parser('qsx')
|
||||
parser_stnProdXml.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_stnProdXml.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_stnProdXml.add_argument("--id", dest="stnId", action="store",required=True,
|
||||
help=":station id of a product")
|
||||
parser_stnProdXml.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_stnProdXml.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_stnProdXml.set_defaults(func=__getStnProdXml)
|
||||
|
||||
parser_stnProdXml_print = subparsers.add_parser('qsxl')
|
||||
parser_stnProdXml_print.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_stnProdXml_print.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_stnProdXml_print.add_argument("--id", dest="stnId", action="store",required=True,
|
||||
help=":station id of a product")
|
||||
parser_stnProdXml_print.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_stnProdXml_print.set_defaults(func=__getPrintStnProdXml)
|
||||
|
||||
'''
|
||||
parser_stnProdGempak = subparsers.add_parser('qsg')
|
||||
parser_stnProdGempak.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_stnProdGempak.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_stnProdGempak.add_argument("--id", dest="stnId", action="store",required=True,
|
||||
help=":station id of a product")
|
||||
parser_stnProdGempak.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_stnProdGempak.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_stnProdGempak.set_defaults(func=__getStnProdGempak)
|
||||
|
||||
parser_stnProdGempak_print = subparsers.add_parser('qsgl')
|
||||
parser_stnProdGempak_print.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_stnProdGempak_print.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_stnProdGempak_print.add_argument("--id", dest="stnId", action="store",required=True,
|
||||
help=":station id of a product")
|
||||
parser_stnProdGempak_print.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_stnProdGempak_print.set_defaults(func=__getPrintStnProdGempak)
|
||||
'''
|
||||
#To query a moving product
|
||||
parser_movingProdXml = subparsers.add_parser('qmx')
|
||||
parser_movingProdXml.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_movingProdXml.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_movingProdXml.add_argument("--slat", dest="slat", type=float, action="store",required=True,
|
||||
help=":latitude of a moving product")
|
||||
parser_movingProdXml.add_argument("--slon", dest="slon", type=float, action="store",required=True,
|
||||
help=":longitude of a moving product")
|
||||
parser_movingProdXml.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_movingProdXml.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_movingProdXml.set_defaults(func=__getMovingProdXml)
|
||||
|
||||
parser_movingProdXml_print = subparsers.add_parser('qmxl')
|
||||
parser_movingProdXml_print.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_movingProdXml_print.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_movingProdXml_print.add_argument("--slat", dest="slat", type=float, action="store",required=True,
|
||||
help=":latitude of a moving product")
|
||||
parser_movingProdXml_print.add_argument("--slon", dest="slon", type=float, action="store",required=True,
|
||||
help=":longitude of a moving product")
|
||||
parser_movingProdXml_print.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_movingProdXml_print.set_defaults(func=__getPrintMovingProdXml)
|
||||
|
||||
'''
|
||||
parser_movingProdGempak = subparsers.add_parser('qmg')
|
||||
parser_movingProdGempak.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_movingProdGempak.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_movingProdGempak.add_argument("--slat", dest="slat", type=float, action="store",required=True,
|
||||
help=":latitude of a moving product")
|
||||
parser_movingProdGempak.add_argument("--slon", dest="slon", type=float, action="store",required=True,
|
||||
help=":longitude of a moving product")
|
||||
parser_movingProdGempak.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_movingProdGempak.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_movingProdGempak.set_defaults(func=__getMovingProdGempak)
|
||||
|
||||
parser_movingProdGempak_print = subparsers.add_parser('qmgl')
|
||||
parser_movingProdGempak_print.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_movingProdGempak_print.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_movingProdGempak_print.add_argument("--slat", dest="slat", type=float, action="store",required=True,
|
||||
help=":latitude of a moving product")
|
||||
parser_movingProdGempak_print.add_argument("--slon", dest="slon", type=float, action="store",required=True,
|
||||
help=":longitude of a moving product")
|
||||
parser_movingProdGempak_print.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_movingProdGempak_print.set_defaults(func=__getPrintMovingProdGempak)
|
||||
'''
|
||||
|
||||
#To query a product
|
||||
parser_prodXml = subparsers.add_parser('qpx')
|
||||
parser_prodXml.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_prodXml.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_prodXml.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_prodXml.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_prodXml.set_defaults(func=__getProdXml)
|
||||
|
||||
'''
|
||||
parser_prodGempak = subparsers.add_parser('qpg')
|
||||
parser_prodGempak.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_prodGempak.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_prodGempak.add_argument("--f", dest="filePath", action="store",
|
||||
help=":target file path for return product")
|
||||
parser_prodGempak.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
parser_prodGempak.set_defaults(func=__getProdGempak)
|
||||
'''
|
||||
parser_prodXml_print = subparsers.add_parser('qpxl')
|
||||
parser_prodXml_print.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_prodXml_print.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_prodXml_print.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
|
||||
parser_prodXml_print.set_defaults(func=__getPrintProdXml)
|
||||
'''
|
||||
parser_prodGempak_print = subparsers.add_parser('qpgl')
|
||||
parser_prodGempak_print.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
help=":name of a Generic Point Data product")
|
||||
parser_prodGempak_print.add_argument("--t", dest="refTime", action="store",required=True,
|
||||
help=":reference time of a product")
|
||||
parser_prodGempak_print.add_argument("--v", dest="versionNum", action="store",
|
||||
help=":product version")
|
||||
|
||||
parser_prodGempak_print.set_defaults(func=__getPrintProdGempak)
|
||||
'''
|
||||
|
||||
'''
|
||||
#parser_purge_prod = subparsers.add_parser('pp')
|
||||
#parser_purge_prod.add_argument("--p", dest="prodName", action="store",required=True,
|
||||
# help=":name of a Generic Point Data product")
|
||||
#parser_purge_prod.add_argument("--t", dest="refTime", action="store",
|
||||
# help=":reference time of a product")
|
||||
#parser_purge_prod.add_argument("--all", dest="all", action="store",
|
||||
# help=":yes")
|
||||
#parser_purge_prod.set_defaults(func=__purgeProd)
|
||||
'''
|
||||
|
||||
parser_purge_expired = subparsers.add_parser('pe')
|
||||
parser_purge_expired.set_defaults(func=__purgeExpired)
|
||||
|
||||
parser_purge_all = subparsers.add_parser('pa')
|
||||
parser_purge_all.set_defaults(func=__purgeAll)
|
||||
|
||||
options = parser.parse_args()
|
||||
|
||||
#logger.debug("Command-line arguments: " + str(options))
|
||||
return options
|
||||
|
||||
def __convertTimeToDate(refTime):
|
||||
struct_time = time.strptime(refTime, "%Y-%m-%d %H:%M:%S")
|
||||
#print "returned tuple: %s " % struct_time
|
||||
#print "timeZone " + str(time.timezone) + " altimezone " + str(time.altzone)
|
||||
milsec = (time.mktime(struct_time)-time.altzone) * 1000
|
||||
date= Date()
|
||||
date.setTime(milsec)
|
||||
#print "time in msec: %s" % str(date.getTime())
|
||||
return date
|
||||
|
||||
def __createFilenameStringXml(name, refTime):
|
||||
filename = name + '@'+ refTime.replace(" ","@")+".xml"
|
||||
return filename
|
||||
|
||||
def __createFilenameStringGempak(name, refTime):
|
||||
filename = name + '@'+ refTime.replace(" ","@")+".gempak"
|
||||
return filename
|
||||
|
||||
def __getPrintProdInfoXml(options):
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
prodInfo = req.getGpdProdInfo(options.prodName, "GET_GPD_PRODUCT_INFO_XML")
|
||||
if(prodInfo != None):
|
||||
print(prodInfo)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getProdInfoXml(options):
|
||||
#if options.prodName == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
prodInfo = req.getGpdProdInfo(options.prodName,"GET_GPD_PRODUCT_INFO_XML")
|
||||
if(prodInfo != None):
|
||||
if(options.filePath == None):
|
||||
f = open(options.prodName+"Info.xml",'w')
|
||||
else:
|
||||
f = open(options.filePath,'w')
|
||||
f.write(prodInfo)
|
||||
return prodInfo
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
|
||||
def __getPrintProdInfoGempak(options):
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
prodInfo = req.getGpdProdInfo(options.prodName, "GET_GPD_PRODUCT_INFO_GEMPAK_TBL")
|
||||
if(prodInfo != None):
|
||||
print(prodInfo)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getProdInfoGempak(options):
|
||||
#if options.prodName == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
prodInfo = req.getGpdProdInfo(options.prodName,"GET_GPD_PRODUCT_INFO_GEMPAK_TBL")
|
||||
if(prodInfo != None):
|
||||
if(options.filePath == None):
|
||||
f = open(options.prodName+"Info.gempak",'w')
|
||||
else:
|
||||
f = open(options.filePath,'w')
|
||||
f.write(prodInfo)
|
||||
return prodInfo
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
|
||||
#===========================================================================
|
||||
# print ("GPD Report::::::::::::::")
|
||||
# print str("Report Name: "+ prodInfo.getName())
|
||||
# print str("Master Level Name = " + prodInfo.getMasterLevel().getName())
|
||||
# print str("Master Level Description = " + prodInfo.getMasterLevel().getDescription())
|
||||
# print str("Master Level Type = " + prodInfo.getMasterLevel().getType())
|
||||
# print str("Master Level Unit String = " + prodInfo.getMasterLevel().getUnitString())
|
||||
# print ("Max NUmber of Level = " + str(prodInfo.getMaxNumberOfLevel()))
|
||||
# print ("Parameters:")
|
||||
# parmLst =prodInfo.getParameterLst()
|
||||
# i = 1
|
||||
# for parm in parmLst:
|
||||
# print ("Parameter "+ str(i)+ ": Abbreviation="+ str(parm.getAbbreviation())+ " Unit="+str(parm.getUnitString())+ " Name =" + str(parm.getName()))
|
||||
# i=i+1
|
||||
#===========================================================================
|
||||
|
||||
def __getStnProdXml(options):
|
||||
#if options.prodName == None or options.refTime == None or options.stnId == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName,"GET_GPD_STATION_PRODUCT_XML")
|
||||
else:
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName, "GET_GPD_STATION_PRODUCT_XML", True, int(options.versionNum))
|
||||
if(stnProd!=None):
|
||||
if(options.filePath == None):
|
||||
filename = __createFilenameStringXml((options.prodName+'@'+options.stnId),options.refTime)
|
||||
else:
|
||||
filename = options.filePath
|
||||
f = open(filename,'w')
|
||||
f.write(stnProd)
|
||||
return stnProd
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
def __getPrintStnProdXml(options):
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName,"GET_GPD_STATION_PRODUCT_XML")
|
||||
else:
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName, "GET_GPD_STATION_PRODUCT_XML",True, int(options.versionNum))
|
||||
if(stnProd != None):
|
||||
print(stnProd)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getStnProdGempak(options):
|
||||
#if options.prodName == None or options.refTime == None or options.stnId == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName,"GET_GPD_STATION_PRODUCT_GEMPAK_TBL")
|
||||
else:
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName, "GET_GPD_STATION_PRODUCT_GEMPAK_TBL", True, int(options.versionNum))
|
||||
if(stnProd!=None):
|
||||
if(options.filePath == None):
|
||||
filename = __createFilenameStringGempak((options.prodName+'@'+options.stnId),options.refTime)
|
||||
else:
|
||||
filename = options.filePath
|
||||
f = open(filename,'w')
|
||||
f.write(stnProd)
|
||||
return stnProd
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
def __getPrintStnProdGempak(options):
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName,"GET_GPD_STATION_PRODUCT_GEMPAK_TBL")
|
||||
else:
|
||||
stnProd = req.getGpdStationProduct(options.stnId, date,options.prodName, "GET_GPD_STATION_PRODUCT_GEMPAK_TBL",True, int(options.versionNum))
|
||||
if(stnProd != None):
|
||||
print(stnProd)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getMovingProdXml(options):
|
||||
#if options.prodName == None or options.refTime == None or options.slat == None or options.slon == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName,"GET_GPD_MOVING_PRODUCT_XML")
|
||||
else:
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName, "GET_GPD_MOVING_PRODUCT_XML",True, int(options.versionNum))
|
||||
if(stnProd!=None):
|
||||
if(options.filePath == None):
|
||||
filename = __createFilenameStringXml((options.prodName+'@'+str(options.slat)+'#'+str(options.slon)),options.refTime)
|
||||
else:
|
||||
filename = options.filePath
|
||||
f = open(filename,'w')
|
||||
f.write(stnProd)
|
||||
return stnProd
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
def __getPrintMovingProdXml(options):
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName,"GET_GPD_MOVING_PRODUCT_XML")
|
||||
else:
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName, "GET_GPD_MOVING_PRODUCT_XML", True, int(options.versionNum))
|
||||
if(stnProd != None):
|
||||
print(stnProd)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getMovingProdGempak(options):
|
||||
#if options.prodName == None or options.refTime == None or options.slat == None or options.slon == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName,"GET_GPD_MOVING_PRODUCT_GEMPAK_TBL")
|
||||
else:
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName, "GET_GPD_MOVING_PRODUCT_GEMPAK_TBL",True, int(options.versionNum))
|
||||
if(stnProd!=None):
|
||||
if(options.filePath == None):
|
||||
filename = __createFilenameStringGempak((options.prodName+'@'+str(options.slat)+'#'+str(options.slon)),options.refTime)
|
||||
else:
|
||||
filename = options.filePath
|
||||
f = open(filename,'w')
|
||||
f.write(stnProd)
|
||||
return stnProd
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
def __getPrintMovingProdGempak(options):
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName,"GET_GPD_MOVING_PRODUCT_GEMPAK_TBL")
|
||||
else:
|
||||
stnProd = req.getGpdMovingProduct(options.slat, options.slon, date,options.prodName, "GET_GPD_MOVING_PRODUCT_GEMPAK_TBL", True, int(options.versionNum))
|
||||
if(stnProd != None):
|
||||
print(stnProd)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getProdXml(options):
|
||||
#if options.prodName == None or options.refTime == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_XML")
|
||||
else:
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_XML", True, int(options.versionNum))
|
||||
if(prod != None):
|
||||
if(options.filePath == None):
|
||||
filename = __createFilenameStringXml(options.prodName,options.refTime)
|
||||
else:
|
||||
filename = options.filePath
|
||||
f = open(filename,'w')
|
||||
f.write(prod)
|
||||
return prod
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
|
||||
def __getPrintProdXml(options):
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_XML")
|
||||
else:
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_XML", True, int(options.versionNum))
|
||||
if(prod != None):
|
||||
print(prod)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
def __getProdGempak(options):
|
||||
#if options.prodName == None or options.refTime == None:
|
||||
# parser.print_help()
|
||||
# return None
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_GEMPAK_TBL")
|
||||
else:
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_GEMPAK_TBL", True, int(options.versionNum))
|
||||
if(prod != None):
|
||||
if(options.filePath == None):
|
||||
filename = __createFilenameStringGempak(options.prodName,options.refTime)
|
||||
else:
|
||||
filename = options.filePath
|
||||
f = open(filename,'w')
|
||||
f.write(prod)
|
||||
return prod
|
||||
else:
|
||||
print("Query failed!")
|
||||
return None
|
||||
|
||||
def __getPrintProdGempak(options):
|
||||
date = __convertTimeToDate(options.refTime)
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
if(options.versionNum == None):
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_GEMPAK_TBL")
|
||||
else:
|
||||
prod = req.getGpdProduct( date,options.prodName,"GET_GPD_PRODUCT_GEMPAK_TBL", True, int(options.versionNum))
|
||||
if(prod != None):
|
||||
print(prod)
|
||||
else:
|
||||
print("Query failed!")
|
||||
|
||||
#def __purgeProd(options):
|
||||
# req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
# req.purgeGpdProd(options.prodName,options.refTime, option.all)
|
||||
|
||||
def __purgeExpired(options):
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
req.purgeGpdExpired()
|
||||
|
||||
def __purgeAll(options):
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
req.purgeGpdAll()
|
||||
|
||||
def __printUsage(options):
|
||||
print(USAGE_MESSAGE)
|
||||
|
||||
|
||||
def __saveProdXml(options):
|
||||
# read in XML from input file
|
||||
xmlfile = io.open(options.filePath, 'rb')
|
||||
gpdXML = xmlfile.read()
|
||||
xmlfile.close()
|
||||
|
||||
# Store GPD report to EDEX
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
result = req.storeGpdXmlProduct(gpdXML)
|
||||
if result==None:
|
||||
print("Store action failed!")
|
||||
else:
|
||||
print(result)
|
||||
|
||||
def __saveProdGempak(options):
|
||||
# read in XML from input file
|
||||
gpkfile = io.open(options.filePath, 'rb')
|
||||
gpdGempak = gpkfile.read()
|
||||
gpkfile.close()
|
||||
|
||||
# Store GPD report to EDEX
|
||||
req= GpdCliRequestHandler.GpdCliRequestHandler()
|
||||
maxNumLevel = options.maxNumLevel
|
||||
|
||||
if(options.versionNum == None):
|
||||
result = req.storeGpdGempakProduct(gpdGempak,options.prodName,int(maxNumLevel),0)
|
||||
else:
|
||||
result = req.storeGpdGempakProduct(gpdGempak,options.prodName,int(maxNumLevel),int(options.versionNum))
|
||||
|
||||
if result==None:
|
||||
print("Store action failed!")
|
||||
else:
|
||||
print(result)
|
||||
|
||||
def main():
|
||||
__initLogger()
|
||||
#logger.info("Starting Query report.")
|
||||
options = __parseCommandLine()
|
||||
#vars(options)
|
||||
options.func(options)
|
||||
#logger.info("queried report name: " + options.prodName)
|
||||
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Binary file not shown.
|
@ -56,11 +56,10 @@ namespace VizLauncher.com.raytheon.viz.launcher.process
|
|||
{
|
||||
ProcessStartInfo processStartInfo =
|
||||
new ProcessStartInfo(this.constructProcessName(vizEnvironment.getLocation()));
|
||||
processStartInfo.EnvironmentVariables.Remove(EnvironmentProperties.ENVIRONMENT_VARIABLE_PATH);
|
||||
processStartInfo.EnvironmentVariables.Add(
|
||||
EnvironmentProperties.ENVIRONMENT_VARIABLE_PATH, vizEnvironment.getPath());
|
||||
processStartInfo.EnvironmentVariables.Add(
|
||||
EnvironmentProperties.ENVIRONMENT_VARIABLE_PYTHON_PATH, vizEnvironment.getPythonPath());
|
||||
processStartInfo.EnvironmentVariables[EnvironmentProperties.ENVIRONMENT_VARIABLE_PATH] =
|
||||
vizEnvironment.getPath();
|
||||
processStartInfo.EnvironmentVariables[EnvironmentProperties.ENVIRONMENT_VARIABLE_PYTHON_PATH] =
|
||||
vizEnvironment.getPythonPath();
|
||||
processStartInfo.UseShellExecute = false;
|
||||
processStartInfo.Arguments = this.getCommandLineArguments();
|
||||
processStartInfo.RedirectStandardOutput = true;
|
||||
|
|
Binary file not shown.
|
@ -26,7 +26,7 @@
|
|||
<option id="gnu.cpp.compiler.exe.release.option.optimization.level.208885184" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
|
||||
<option id="gnu.cpp.compiler.exe.release.option.debugging.level.1161967936" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
|
||||
<option id="gnu.cpp.compiler.option.include.paths.1128011603" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/qpid/include}""/>
|
||||
<listOptionValue builtIn="false" value="/awips2/qpid/include"/>
|
||||
<listOptionValue builtIn="false" value="/usr/local/ldm-6.8.1/src/config"/>
|
||||
<listOptionValue builtIn="false" value="/usr/local/ldm-6.8.1/src/protocol"/>
|
||||
<listOptionValue builtIn="false" value="/usr/local/ldm-6.8.1/src/ulog"/>
|
||||
|
@ -84,424 +84,424 @@
|
|||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
|
||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.375046330;cdt.managedbuild.config.gnu.exe.release.375046330.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1192057398;cdt.managedbuild.tool.gnu.cpp.compiler.input.1743926560">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.375046330;cdt.managedbuild.config.gnu.exe.release.375046330.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1809941717;cdt.managedbuild.tool.gnu.c.compiler.input.329001407">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1877956122;cdt.managedbuild.config.gnu.exe.debug.1877956122.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.974131962;cdt.managedbuild.tool.gnu.cpp.compiler.input.865889016">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1877956122;cdt.managedbuild.config.gnu.exe.debug.1877956122.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.382778888;cdt.managedbuild.tool.gnu.c.compiler.input.557265334">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
</cconfiguration>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<project id="edexBridge.cdt.managedbuild.target.gnu.exe.32670172" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
|
||||
</storageModule>
|
||||
<storageModule moduleId="scannerConfiguration">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.375046330;cdt.managedbuild.config.gnu.exe.release.375046330.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1809941717;cdt.managedbuild.tool.gnu.c.compiler.input.329001407">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.375046330;cdt.managedbuild.config.gnu.exe.release.375046330.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1192057398;cdt.managedbuild.tool.gnu.cpp.compiler.input.1743926560">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1877956122;cdt.managedbuild.config.gnu.exe.debug.1877956122.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.974131962;cdt.managedbuild.tool.gnu.cpp.compiler.input.865889016">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.1877956122;cdt.managedbuild.config.gnu.exe.debug.1877956122.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.382778888;cdt.managedbuild.tool.gnu.c.compiler.input.557265334">
|
||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="makefileGenerator">
|
||||
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
|
||||
<buildOutputProvider>
|
||||
<openAction enabled="true" filePath=""/>
|
||||
<parser enabled="true"/>
|
||||
</buildOutputProvider>
|
||||
<scannerInfoProvider id="specsFile">
|
||||
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
|
||||
<parser enabled="true"/>
|
||||
</scannerInfoProvider>
|
||||
</profile>
|
||||
</scannerConfigBuildInfo>
|
||||
</storageModule>
|
||||
</cproject>
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
*
|
||||
* Created on: Oct 8, 2009
|
||||
* Author: brockwoo
|
||||
* Updated on: June 21, 2013 (Re-written to work with the qpid messaging api)
|
||||
* Author: bkowal
|
||||
*/
|
||||
|
||||
// START SNIPPET: demo
|
||||
|
||||
#include <qpid/client/Connection.h>
|
||||
#include <qpid/client/Session.h>
|
||||
#include <qpid/client/Message.h>
|
||||
#include <qpid/client/MessageListener.h>
|
||||
#include <qpid/client/SubscriptionManager.h>
|
||||
#include <qpid/messaging/Connection.h>
|
||||
#include <qpid/messaging/Session.h>
|
||||
#include <qpid/messaging/Message.h>
|
||||
#include <qpid/messaging/Sender.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/sem.h>
|
||||
#include <sys/shm.h>
|
||||
#include <stdlib.h>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <memory>
|
||||
#include <filel.h>
|
||||
#include <ulog.h>
|
||||
|
@ -26,8 +26,7 @@
|
|||
#include <sys/time.h>
|
||||
#include <list>
|
||||
|
||||
using namespace qpid::client;
|
||||
using namespace qpid::framing;
|
||||
using namespace qpid::messaging;
|
||||
using namespace std;
|
||||
|
||||
class LdmProducer {
|
||||
|
@ -35,23 +34,31 @@ private:
|
|||
|
||||
Connection connection;
|
||||
Session session;
|
||||
Sender sender;
|
||||
bool useTopic;
|
||||
bool sessionTransacted;
|
||||
bool isConnected;
|
||||
std::string brokerURI;
|
||||
int portNumber;
|
||||
std::string username;
|
||||
std::string password;
|
||||
list<string> filenameList;
|
||||
list<string> headerList;
|
||||
|
||||
public:
|
||||
|
||||
LdmProducer(const std::string& brokerURI, int port = 5672, bool useTopic =
|
||||
false, bool sessionTransacted = false) {
|
||||
LdmProducer(const std::string& brokerURI, int port = 5672,
|
||||
const std::string& username = "guest",
|
||||
const std::string& password = "guest",
|
||||
bool useTopic = false, bool sessionTransacted = false)
|
||||
{
|
||||
this->useTopic = useTopic;
|
||||
this->sessionTransacted = sessionTransacted;
|
||||
this->brokerURI = brokerURI;
|
||||
this->isConnected = false;
|
||||
this->portNumber = port;
|
||||
this->username = username;
|
||||
this->password = password;
|
||||
}
|
||||
|
||||
~LdmProducer() {
|
||||
|
@ -82,20 +89,19 @@ public:
|
|||
try {
|
||||
while (!this->filenameList.empty()) {
|
||||
Message message;
|
||||
message.getDeliveryProperties().setRoutingKey(
|
||||
"external.dropbox");
|
||||
|
||||
fileLocation = this->filenameList.front();
|
||||
fileHeader = this->headerList.front();
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
long long current = (((long long) tv.tv_sec) * 1000000
|
||||
uint64_t current = (((long long) tv.tv_sec) * 1000000
|
||||
+ ((long long) tv.tv_usec)) / 1000;
|
||||
message.getDeliveryProperties().setDeliveryMode(PERSISTENT);
|
||||
message.setData(fileLocation);
|
||||
message.getHeaders().setString("header", fileHeader);
|
||||
message.getHeaders().setInt64("enqueueTime", current);
|
||||
session.messageTransfer(arg::content = message,
|
||||
arg::destination = "amq.direct");
|
||||
message.setDurable(true);
|
||||
message.setContent(fileLocation);
|
||||
message.getProperties()["header"] = fileHeader;
|
||||
message.getProperties()["enqueueTime"] = current;
|
||||
|
||||
this->sender.send(message);
|
||||
|
||||
this->filenameList.pop_front();
|
||||
this->headerList.pop_front();
|
||||
|
@ -103,7 +109,6 @@ public:
|
|||
}
|
||||
} catch (const std::exception& error) {
|
||||
// Error occurred during communication. Clean up the connection and return the number of messages processed.
|
||||
uerror(error.what());
|
||||
cleanup();
|
||||
|
||||
}
|
||||
|
@ -112,31 +117,94 @@ public:
|
|||
|
||||
private:
|
||||
|
||||
void cleanup() {
|
||||
cout << "Cleaning up\n";
|
||||
void cleanup()
|
||||
{
|
||||
unotice ("Cleaning up");
|
||||
|
||||
// Destroy resources.
|
||||
try {
|
||||
session.close();
|
||||
connection.close();
|
||||
} catch (const std::exception& error) {
|
||||
this->isConnected = false;
|
||||
if (this->sender != 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
this->sender.close();
|
||||
this->sender = 0;
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
uwarn(error.what());
|
||||
}
|
||||
}
|
||||
|
||||
if (this->session != 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
this->session.close();
|
||||
this->session = 0;
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
uwarn(error.what());
|
||||
}
|
||||
}
|
||||
|
||||
if (this->connection != 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
this->connection.close();
|
||||
this->connection = 0;
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
uwarn(error.what());
|
||||
}
|
||||
}
|
||||
this->isConnected = false;
|
||||
}
|
||||
|
||||
bool connect() {
|
||||
if (this->isConnected) {
|
||||
bool connect()
|
||||
{
|
||||
if (this->isConnected)
|
||||
{
|
||||
return this->isConnected;
|
||||
}
|
||||
try {
|
||||
this->connection.open(brokerURI, portNumber);
|
||||
this->session = this->connection.newSession();
|
||||
session.queueDeclare(arg::queue = "external.dropbox", arg::durable=true);
|
||||
session.exchangeBind(arg::exchange = "amq.direct", arg::queue
|
||||
= "external.dropbox", arg::bindingKey = "external.dropbox");
|
||||
try
|
||||
{
|
||||
// initialize
|
||||
this->connection = 0;
|
||||
this->session = 0;
|
||||
this->sender = 0;
|
||||
|
||||
std::stringstream qpidURLBuilder;
|
||||
qpidURLBuilder << "amqp:tcp:";
|
||||
qpidURLBuilder << this->brokerURI;
|
||||
qpidURLBuilder << ":";
|
||||
qpidURLBuilder << this->portNumber;
|
||||
std::string qpidURL = qpidURLBuilder.str();
|
||||
|
||||
std::stringstream connectionOptionsBuilder;
|
||||
connectionOptionsBuilder << "{sasl-mechanism:PLAIN,username:";
|
||||
connectionOptionsBuilder << this->username;
|
||||
connectionOptionsBuilder << ",password:";
|
||||
connectionOptionsBuilder << this->password;
|
||||
connectionOptionsBuilder << "}";
|
||||
std::string connectionOptions = connectionOptionsBuilder.str();
|
||||
|
||||
this->connection = Connection(qpidURL, connectionOptions);
|
||||
this->connection.open();
|
||||
|
||||
std::string address = "external.dropbox; {node:{type:queue,durable:true,x-bindings:"
|
||||
"[{exchange:amq.direct,queue:external.dropbox,key:external.dropbox}]}}";
|
||||
|
||||
this->session = this->connection.createSession();
|
||||
this->sender = this->session.createSender(address);
|
||||
|
||||
this->isConnected = true;
|
||||
} catch (const std::exception& error) {
|
||||
}
|
||||
catch (const std::exception& error)
|
||||
{
|
||||
uerror(error.what());
|
||||
this->isConnected = false;
|
||||
}
|
||||
return this->isConnected;
|
||||
|
@ -231,6 +299,8 @@ int main(int argc, char* argv[]) {
|
|||
int loggingToStdErr = 0;
|
||||
std::string brokerURI = "127.0.0.1";
|
||||
int port = 5672;
|
||||
std::string username = "guest";
|
||||
std::string password = "guest";
|
||||
|
||||
{
|
||||
extern char *optarg;
|
||||
|
@ -281,7 +351,6 @@ int main(int argc, char* argv[]) {
|
|||
// createQueue to be used in both consumer an producer.
|
||||
//============================================================
|
||||
bool useTopics = false;
|
||||
//bool sessionTransacted = false;
|
||||
|
||||
int shmid;
|
||||
int semid;
|
||||
|
@ -309,7 +378,7 @@ int main(int argc, char* argv[]) {
|
|||
|
||||
messageCursor = (edex_message *) shmat(shmid, (void *) 0, 0);
|
||||
|
||||
LdmProducer producer(brokerURI, port, useTopics);
|
||||
LdmProducer producer(brokerURI, port, username, password, useTopics);
|
||||
|
||||
for (;;) {
|
||||
if (hupped) {
|
||||
|
|
|
@ -485,4 +485,19 @@
|
|||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.common.dataplugin.gpd"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
<plugin
|
||||
id="gov.noaa.nws.ncep.edex.plugin.gpd"
|
||||
download-size="0"
|
||||
install-size="0"
|
||||
version="0.0.0"
|
||||
unpack="false"/>
|
||||
|
||||
|
||||
</feature>
|
||||
|
|
|
@ -27,12 +27,12 @@
|
|||
* Apr 12, 2013 1857 bgonzale Added SequenceGenerator annotation.
|
||||
* May 07, 2013 1869 bsteffen Remove dataURI column from
|
||||
* PluginDataObject.
|
||||
* July 29, 2013 1028 ghull add AwwReportType enum
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* This code has been developed by the SIB for use in the AWIPS2 system.
|
||||
*/
|
||||
|
||||
package gov.noaa.nws.ncep.common.dataplugin.aww;
|
||||
|
||||
import java.util.Calendar;
|
||||
|
@ -86,6 +86,69 @@ public class AwwRecord extends PluginDataObject {
|
|||
* REPORT 27. HIGH WIND WARNING 28. FREEZE WARNING 29. ADVERTENCIA DE
|
||||
* INUNDACIONES 30. HYDROLOGIC STATEMENT 31. URGENT WEATHER MESSAGE
|
||||
*/
|
||||
public static enum AwwReportType {
|
||||
SEVERE_THUNDERSTORM_WARNING,
|
||||
SEVERE_THUNDERSTORM_WATCH,
|
||||
TORNADO_WARNING,
|
||||
TORNADO_WATCH,
|
||||
SEVERE_THUNDERSTORM_OUTLINE_UPDATE,
|
||||
TORNADO_WATCH_OUTLINE_UPDATE,
|
||||
FLASH_FLOOD_WARNING,
|
||||
FLASH_FLOOD_WATCH,
|
||||
FLOOD_WARNING,
|
||||
FLOOD_WATCH,
|
||||
FLOOD_STATEMENT,
|
||||
// WINTER STORM. something is getting decoded as WINTER STORM
|
||||
WINTER_STORM_WARNING,
|
||||
WINTER_STORM_WATCH,
|
||||
WATCH_COUNTY_NOTIFICATION,
|
||||
SEVERE_WEATHER_STATEMENT,
|
||||
WIND_ADVISORY, // ?WIND CHILL ADVISORY?
|
||||
// WIND CHILL ADVISORYs getting decoded as "ADVISORY"
|
||||
FOG_ADVISORY,
|
||||
HEAT_ADVISORY,
|
||||
FROST_ADVISORY,
|
||||
SMOKE_ADVISORY,
|
||||
WEATHER_ADVISORY,
|
||||
WINTER_WEATHER_ADVISORY,
|
||||
SIGNIGICANT_WEATHER_ADVISORY,
|
||||
SPECIAL_WEATHER_STATEMENT,
|
||||
RED_FLAG_WARNING,
|
||||
TORNADO_REPORT,
|
||||
HIGH_WIND_WARNING,
|
||||
FREEZE_WARNING,
|
||||
ADVERTENCIA_DE_INUNDACIONES,
|
||||
HYDROLOGIC_STATEMENT,
|
||||
URGENT_WEATHER_MESSAGE,
|
||||
UNKNOWN_AWW_REPORT_TYPE,
|
||||
// DON"T know what this is but WTCH is looking for it (isSevereWeatherStatusNotification)?
|
||||
STATUS_REPORT;
|
||||
|
||||
public static AwwReportType getReportType( String rtStr ) {
|
||||
rtStr = rtStr.trim().replace(" ", "_" );
|
||||
for( AwwReportType rt : values() ) {
|
||||
if( rt.toString().equals( rtStr ) ) {
|
||||
return rt;
|
||||
}
|
||||
}
|
||||
// WTCH is looking for
|
||||
if( rtStr.equals("THUNDERSTORM_REPORT" ) ) {
|
||||
return SEVERE_THUNDERSTORM_WATCH;
|
||||
}
|
||||
if( rtStr.endsWith( "STATUS REPORT" ) ) {
|
||||
// ??? return AwwReportType.SEVERE_WEATHER_STATUS_NOTIFICATION
|
||||
}
|
||||
// WSTM is looking for
|
||||
if( rtStr.equals( "WINTER_STORM" ) ) {
|
||||
// ???
|
||||
}
|
||||
if( rtStr.equals( "ADVISORY" ) ) {
|
||||
// ???? WIND CHILL ADVISORY is getting decoded as "ADVISORY"???
|
||||
}
|
||||
return UNKNOWN_AWW_REPORT_TYPE;
|
||||
}
|
||||
}
|
||||
|
||||
@Column(length = 40)
|
||||
@DataURI(position = 1)
|
||||
@DynamicSerializeElement
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.aww;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
// *** Copied from raytheon's class in com.raytheon.edex.warning.
|
||||
// TODO : get this moved to a common plugin.
|
||||
|
||||
public class UGCHeaderUtil {
|
||||
|
||||
/** Another RE to Catch the Date portion of the UGC Header */
|
||||
private static final String DATESTR = "[0-9]{6}\\-";
|
||||
|
||||
/** Parses a single county from a UGC Header, can be repeated */
|
||||
private static final String SINGLECOUNTY = "(?:([A-Z]{3}[0-9]{3})([\\-\\>]))|(?:([0-9]{3})[\\-\\>])";
|
||||
|
||||
/**
|
||||
* Private utility method which will return an ArrayList of each zone
|
||||
* formatted from a UGC Header.
|
||||
*
|
||||
* @param fips
|
||||
* @return
|
||||
*/
|
||||
public static ArrayList<String> getUGCZones(String fips) {
|
||||
ArrayList<String> rval = new ArrayList<String>();
|
||||
String matchStr = "";
|
||||
|
||||
Pattern pattern = Pattern.compile(DATESTR);
|
||||
Matcher matcher = pattern.matcher(fips);
|
||||
if (matcher.find()) {
|
||||
matchStr = fips.substring(0, fips.length() - 7);
|
||||
} else {
|
||||
matchStr = fips;
|
||||
}
|
||||
if (!matchStr.endsWith("-")) {
|
||||
matchStr += "-";
|
||||
}
|
||||
|
||||
String currentState = "";
|
||||
String startOfSeries = "";
|
||||
pattern = Pattern.compile(SINGLECOUNTY);
|
||||
matcher = pattern.matcher(matchStr);
|
||||
while (matcher.find()) {
|
||||
if (matcher.group(1) != null && matcher.group(1).length() == 6) {
|
||||
currentState = matcher.group(1).substring(0, 3);
|
||||
rval.add(matcher.group(1));
|
||||
if (matcher.group(2).equals(">")) {
|
||||
startOfSeries = matcher.group(1).substring(3, 6);
|
||||
}
|
||||
} else {
|
||||
rval.add(currentState + matcher.group(3));
|
||||
if (!startOfSeries.equals("")) {
|
||||
int start = Integer.parseInt(startOfSeries);
|
||||
int end = Integer.parseInt(matcher.group(3));
|
||||
for (int i = start + 1; i < end; i++) {
|
||||
String str = String.valueOf(i);
|
||||
while (str.length() < 3) {
|
||||
str = "0" + str;
|
||||
}
|
||||
rval.add(currentState + str);
|
||||
}
|
||||
startOfSeries = "";
|
||||
}
|
||||
if (matcher.group(2) != null && matcher.group(2).equals(">")) {
|
||||
startOfSeries = matcher.group(1).substring(3, 6);
|
||||
}
|
||||
}
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagRecord
|
||||
gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSource
|
||||
gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSourcePreference
|
||||
gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagAvg
|
||||
gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagK1min
|
||||
gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagK3hr
|
|
@ -1,5 +1,4 @@
|
|||
source.. = src/
|
||||
output.. = bin/
|
||||
bin.includes = META-INF/,\
|
||||
.,\
|
||||
res/
|
||||
.
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
INSERT INTO awips.geomag_source_preferences VALUES (201, 'Primary', 1);
|
||||
INSERT INTO awips.geomag_source_preferences VALUES (202, 'Secondary', 2);
|
||||
INSERT INTO awips.geomag_source_preferences VALUES (203, 'Tertiary', 3);
|
|
@ -1,3 +0,0 @@
|
|||
INSERT INTO awips.geomag_sources VALUES (101, 201, 'Data transmitted directly via the Magworm protocol from the Table Mountain Observatory (TMO).', 'direct');
|
||||
INSERT INTO awips.geomag_sources VALUES (102, 202, 'Data transmitted directly via the Magworm protocol from USGS Golden, CO.', 'magworm');
|
||||
INSERT INTO awips.geomag_sources VALUES (103, 203, 'Data originally transmitted via GOES and then through the Magworm protocol from USGS Golden, CO.', 'domsat');
|
|
@ -0,0 +1,173 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.SequenceGenerator;
|
||||
import javax.persistence.Table;
|
||||
//import javax.persistence.UniqueConstraint;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag avg.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ---------------- --------------------------
|
||||
* 08/14/2013 T989 qzhou Initial creation.
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
@Entity
|
||||
@SequenceGenerator(initialValue = 1, name = PluginDataObject.ID_GEN, sequenceName = "geomagseq")
|
||||
@Table(name = "geomag_houravg")
|
||||
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@DynamicSerialize
|
||||
public class GeoMagAvg extends PersistableDataObject<Object> {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final String ID_GEN = "idgen";
|
||||
|
||||
/** The id */
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ID_GEN)
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* station code
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private String stationCode;
|
||||
|
||||
/**
|
||||
* time tag
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private Date avgTime;
|
||||
|
||||
/**
|
||||
* insert time tag
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private Date insertTime;
|
||||
|
||||
/**
|
||||
* H data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float hHrAvg;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float dHrAvg;
|
||||
|
||||
|
||||
public GeoMagAvg() {
|
||||
|
||||
}
|
||||
|
||||
public void generateId() {
|
||||
this.id = hashCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public float getHHrAvg() {
|
||||
return hHrAvg;
|
||||
}
|
||||
|
||||
public void setHHrAvg(float hHrAvg) {
|
||||
this.hHrAvg = hHrAvg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getDHrAvg() {
|
||||
return dHrAvg;
|
||||
}
|
||||
|
||||
public void setDHrAvg(float dHrAvg) {
|
||||
this.dHrAvg = dHrAvg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The id
|
||||
*/
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeTag
|
||||
*/
|
||||
public Date getAvgTime() {
|
||||
return avgTime;
|
||||
}
|
||||
|
||||
public void setAvgTime(Date avgTime) {
|
||||
this.avgTime = avgTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeTag
|
||||
*/
|
||||
public Date getInsertTime() {
|
||||
return insertTime;
|
||||
}
|
||||
|
||||
public void setInsertTime(Date insertTime) {
|
||||
this.insertTime = insertTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the stationCode
|
||||
*/
|
||||
public String getStationCode() {
|
||||
return stationCode;
|
||||
}
|
||||
|
||||
public void setStationCode(String stationCode) {
|
||||
this.stationCode = stationCode;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,365 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag k 1 min.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ---------------- --------------------------
|
||||
* 08/14/2013 T989 qzhou Initial creation.
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
@Entity
|
||||
@Table(name = "geomag_k1min")
|
||||
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@DynamicSerialize
|
||||
public class GeoMagK1min extends PersistableDataObject<Object> {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
/** The id */
|
||||
@Id
|
||||
@DynamicSerializeElement
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* station code
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private String stationCode;
|
||||
|
||||
/**
|
||||
* time tag
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private Date refTime;
|
||||
|
||||
/**
|
||||
* insert time tag
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private Date lastUpdate;
|
||||
|
||||
/**
|
||||
* H data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int kestIndex;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float kestReal;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float kestGamma;
|
||||
|
||||
/**
|
||||
* H data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int hkIndex;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float hkReal;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float hkGamma;
|
||||
|
||||
/**
|
||||
* H data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int dkIndex;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float dkReal;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float dkGamma;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int hCount;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int dCount;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int aest;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float ks;
|
||||
|
||||
|
||||
|
||||
public GeoMagK1min() {
|
||||
|
||||
}
|
||||
|
||||
public void generateId() {
|
||||
this.id = hashCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public int getKestIndex() {
|
||||
return kestIndex;
|
||||
}
|
||||
|
||||
public void setKestIndex(int kestIndex) {
|
||||
this.kestIndex = kestIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getKestReal() {
|
||||
return kestReal;
|
||||
}
|
||||
|
||||
public void setKestReal(float kestReal) {
|
||||
this.kestReal = kestReal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public float getKestGamma() {
|
||||
return kestGamma;
|
||||
}
|
||||
|
||||
public void setKestGamma(float kestGamma) {
|
||||
this.kestGamma = kestGamma;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public int getHkIndex() {
|
||||
return hkIndex;
|
||||
}
|
||||
|
||||
public void setHKIndex(int hkIndex) {
|
||||
this.hkIndex = hkIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getHKReal() {
|
||||
return hkReal;
|
||||
}
|
||||
|
||||
public void setHKReal(float hkReal) {
|
||||
this.hkReal = hkReal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public float getHKGamma() {
|
||||
return hkGamma;
|
||||
}
|
||||
|
||||
public void setHKGamma(float hkGamma) {
|
||||
this.hkGamma = hkGamma;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public int getDKIndex() {
|
||||
return dkIndex;
|
||||
}
|
||||
|
||||
public void setDKIndex(int dkIndex) {
|
||||
this.dkIndex = dkIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getDKReal() {
|
||||
return dkReal;
|
||||
}
|
||||
|
||||
public void setDKReal(float dkReal) {
|
||||
this.dkReal = dkReal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public float getDKGamma() {
|
||||
return dkGamma;
|
||||
}
|
||||
|
||||
public void setDKGamma(float dkGamma) {
|
||||
this.dkGamma = dkGamma;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getHCount() {
|
||||
return hCount;
|
||||
}
|
||||
|
||||
public void setHCount(int hCount) {
|
||||
this.hCount = hCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public int getDCount() {
|
||||
return dCount;
|
||||
}
|
||||
|
||||
public void setDCount(int dCount) {
|
||||
this.dCount = dCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public int getAest() {
|
||||
return aest;
|
||||
}
|
||||
|
||||
public void setAest(int aest) {
|
||||
this.aest = aest;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getKs() {
|
||||
return ks;
|
||||
}
|
||||
|
||||
public void setKs(float ks) {
|
||||
this.ks = ks;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The id
|
||||
*/
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeTag
|
||||
*/
|
||||
public Date getRefTime() {
|
||||
return refTime;
|
||||
}
|
||||
|
||||
public void setRefTime(Date refTime) {
|
||||
this.refTime = refTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeTag
|
||||
*/
|
||||
public Date getLastUpdate() {
|
||||
return lastUpdate;
|
||||
}
|
||||
|
||||
public void setLastUpdate(Date lastUpdate) {
|
||||
this.lastUpdate = lastUpdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the stationCode
|
||||
*/
|
||||
public String getStationCode() {
|
||||
return stationCode;
|
||||
}
|
||||
|
||||
public void setStationCode(String stationCode) {
|
||||
this.stationCode = stationCode;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,203 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag k 3 hr.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ---------------- --------------------------
|
||||
* 08/14/2013 T989 qzhou Initial creation.
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
@Entity
|
||||
@Table(name = "geomag_k3hr")
|
||||
@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@DynamicSerialize
|
||||
public class GeoMagK3hr extends PersistableDataObject<Object> {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
/** The id */
|
||||
@Id
|
||||
@DynamicSerializeElement
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* station code
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private String stationCode;
|
||||
|
||||
/**
|
||||
* time tag
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private Date refTime;
|
||||
|
||||
/**
|
||||
* insert time tag
|
||||
*/
|
||||
@Column
|
||||
@XmlAttribute
|
||||
@DynamicSerializeElement
|
||||
private Date lastUpdate;
|
||||
|
||||
/**
|
||||
* H data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private int kIndex;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float kReal;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float kGamma;
|
||||
|
||||
/**
|
||||
* D data Hour Average
|
||||
*/
|
||||
@Column(length=16)
|
||||
@DynamicSerializeElement
|
||||
private float aFinalRunning;
|
||||
|
||||
|
||||
|
||||
public GeoMagK3hr() {
|
||||
|
||||
}
|
||||
|
||||
public void generateId() {
|
||||
this.id = hashCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public int getKIndex() {
|
||||
return kIndex;
|
||||
}
|
||||
|
||||
public void setKIndex(int kIndex) {
|
||||
this.kIndex = kIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getKReal() {
|
||||
return kReal;
|
||||
}
|
||||
|
||||
public void setKReal(float kReal) {
|
||||
this.kReal = kReal;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hHrAvg
|
||||
*/
|
||||
public float getKGamma() {
|
||||
return kGamma;
|
||||
}
|
||||
|
||||
public void setKGamma(float kGamma) {
|
||||
this.kGamma = kGamma;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the dHrAvg
|
||||
*/
|
||||
public float getAFinalRunning() {
|
||||
return aFinalRunning;
|
||||
}
|
||||
|
||||
public void setAFinalRunning(float aFinalRunning) {
|
||||
this.aFinalRunning = aFinalRunning;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The id
|
||||
*/
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeTag
|
||||
*/
|
||||
public Date getRefTime() {
|
||||
return refTime;
|
||||
}
|
||||
|
||||
public void setRefTime(Date refTime) {
|
||||
this.refTime = refTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeTag
|
||||
*/
|
||||
public Date getLastUpdate() {
|
||||
return lastUpdate;
|
||||
}
|
||||
|
||||
public void setLastUpdate(Date lastUpdate) {
|
||||
this.lastUpdate = lastUpdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the stationCode
|
||||
*/
|
||||
public String getStationCode() {
|
||||
return stationCode;
|
||||
}
|
||||
|
||||
public void setStationCode(String stationCode) {
|
||||
this.stationCode = stationCode;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.persist.DefaultPathProvider;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
|
||||
|
||||
public class GeoMagPathProvider extends DefaultPathProvider {
|
||||
private static GeoMagPathProvider instance = new GeoMagPathProvider();
|
||||
|
||||
public static GeoMagPathProvider getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
protected GeoMagPathProvider() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getHDFFileName(String pluginName, IPersistable persistable) {
|
||||
if (persistable == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Expected argument persistable is null");
|
||||
}
|
||||
|
||||
if (!(persistable instanceof GeoMagRecord)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Argument persistable is of wrong type. Expected "
|
||||
+ GeoMagRecord.class + " but got "
|
||||
+ persistable.getClass());
|
||||
}
|
||||
|
||||
if (pluginName == null) {
|
||||
throw new IllegalArgumentException(
|
||||
"Expected argument pluginName not set on object "
|
||||
+ persistable.toString());
|
||||
}
|
||||
|
||||
GeoMagRecord pdo = (GeoMagRecord) persistable;
|
||||
StringBuffer sb = new StringBuffer(64);
|
||||
sb.append(pluginName);
|
||||
|
||||
if (pdo.getDataTime() != null ) {
|
||||
Date time = (Date) pdo.getDataTime().getRefTime().clone();
|
||||
time.setHours(0);
|
||||
|
||||
// //System.out.println("***Path "+pdo.getDataTime().getRefTime() +" "+ fileNameFormat.get().format(pdo.getDataTime().getRefTime()));
|
||||
sb.append(fileNameFormat.get().format(time));
|
||||
sb.append(".h5");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
|
@ -16,14 +16,10 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
import com.raytheon.uf.common.dataplugin.IDecoderGettable;
|
||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
||||
import com.raytheon.uf.common.dataplugin.annotations.DataURI;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IHDFFilePathProvider;
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject;
|
||||
import com.raytheon.uf.common.datastorage.IDataStore;
|
||||
import com.raytheon.uf.common.datastorage.records.FloatDataRecord;
|
||||
import com.raytheon.uf.common.datastorage.records.IDataRecord;
|
||||
import com.raytheon.uf.common.datastorage.records.LongDataRecord;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
|
||||
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag plugin.
|
||||
*
|
||||
|
@ -35,6 +31,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
|
|||
* May 26, 2013 bhebbard Added SequenceGenerator
|
||||
* annotation.
|
||||
* Jul 22, 2013 1977 rjpeter Added getDataURI and annotations.
|
||||
* Jul 26, 2013 989 qzhou Added lots of fields.
|
||||
* Aug 30, 2013 2298 rjpeter Make getPluginName abstract
|
||||
* </pre>
|
||||
*
|
||||
|
@ -52,15 +49,48 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static final String OBS_TIME = "OBS_TIME";
|
||||
public static final String OBS_TIME = "Obs_Time";//h5
|
||||
public static final String Comp_Insert_Time = "Comp_Insert_Time";
|
||||
public static final String component1 = "Component1";
|
||||
public static final String component2 = "Component2";
|
||||
public static final String component3 = "Component3";
|
||||
public static final String component4 = "Component4";
|
||||
|
||||
public static final String component1 = "component1";
|
||||
public static final String H_HR_AVG = "Hr_Avg_H";
|
||||
public static final String D_HR_AVG = "Hr_Avg_D";
|
||||
|
||||
public static final String component2 = "component2";
|
||||
public static final String K_Index = "P3h_K_Index";
|
||||
public static final String K_Real = "P3h_K_Real";
|
||||
public static final String K_Gamma = "P3h_Gamma";
|
||||
public static final String Kest_Index = "P3h_Kest_Index";
|
||||
public static final String Kest_Real = "P3h_Kest_Real";
|
||||
public static final String Kest_Gamma = "P3h_Kest_Gamma";
|
||||
public static final String KH_Real = "P3h_Hk_Real";
|
||||
public static final String KH_Gamma = "P3h_H_Gamma";
|
||||
public static final String KD_Real = "P3h_Dk_Real";
|
||||
public static final String KD_Gamma = "P3h_D_Gamma";
|
||||
public static final String A_Running = "P3h_A_Running";
|
||||
public static final String A_Final_Running = "P3h_A_Final_Running";
|
||||
public static final String KH_Int = "P3h_Hk_Int";
|
||||
public static final String KD_Int = "P3h_Dk_Int";
|
||||
public static final String Last_Update = "P3h_Last_Update";
|
||||
|
||||
public static final String component3 = "component3";
|
||||
|
||||
public static final String component4 = "component4";
|
||||
public static final String Kest_Index_1m = "P1m_Kest_Index";
|
||||
public static final String Kest_Real_1m = "P1m_Kest_Real";
|
||||
public static final String Kest_Gamma_1m = "P1m_Kest_Gamma";
|
||||
public static final String KH_Real_1m = "P1m_Hk_Real";
|
||||
public static final String KH_Gamma_1m = "P1m_H_Gamma";
|
||||
public static final String KH_Index_1m = "P1m_Hk_Index";
|
||||
public static final String KD_Real_1m = "P1m_Dk_Real";
|
||||
public static final String KD_Gamma_1m = "P1m_D_Gamma";
|
||||
public static final String KD_Index_1m = "P1m_Dk_Index";
|
||||
public static final String KH_Count = "P1m_H_Count";
|
||||
public static final String KD_Count = "P1m_D_Count";
|
||||
public static final String KH_Dev = "P1m_H_Dev";
|
||||
public static final String KD_Dev = "P1m_D_Dev";
|
||||
public static final String A_est = "P1m_A_est";
|
||||
public static final String K_s = "P1m_K_s";
|
||||
public static final String Last_Update_1m = "P1m_Last_Update";
|
||||
|
||||
/**
|
||||
* station code
|
||||
|
@ -89,16 +119,53 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
@XmlAttribute
|
||||
private String reportType;
|
||||
|
||||
// /**
|
||||
// * index for data in hdf5, 0-1439
|
||||
// */
|
||||
// @Column
|
||||
// @DynamicSerializeElement
|
||||
// @XmlAttribute
|
||||
// private int idx;
|
||||
|
||||
/**
|
||||
* flag to indicate bad data point
|
||||
*/
|
||||
/*
|
||||
* @Column
|
||||
*
|
||||
* @DynamicSerializeElement
|
||||
*
|
||||
* @XmlAttribute private String badDataPoint;
|
||||
@Column
|
||||
@DynamicSerializeElement
|
||||
@XmlAttribute
|
||||
private String badDataPoint;
|
||||
|
||||
/**
|
||||
* H or X values
|
||||
*/
|
||||
@Column
|
||||
@DynamicSerializeElement
|
||||
@XmlAttribute
|
||||
private float component_1;
|
||||
|
||||
/**
|
||||
* D or Y values
|
||||
*/
|
||||
@Column
|
||||
@DynamicSerializeElement
|
||||
@XmlAttribute
|
||||
private float component_2;
|
||||
|
||||
/**
|
||||
* Z values
|
||||
*/
|
||||
@Column
|
||||
@DynamicSerializeElement
|
||||
@XmlAttribute
|
||||
private float component_3;
|
||||
|
||||
/**
|
||||
* F values
|
||||
*/
|
||||
@Column
|
||||
@DynamicSerializeElement
|
||||
@XmlAttribute
|
||||
private float component_4;
|
||||
|
||||
/**
|
||||
* Observation Date and Time for the minute values
|
||||
|
@ -130,6 +197,77 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
@Transient
|
||||
private float[] comp4_data;
|
||||
|
||||
/**
|
||||
* Following for HrAvg values
|
||||
*/
|
||||
@Transient
|
||||
private float[] hrAvgH;
|
||||
|
||||
@Transient
|
||||
private float[] hrAvgD;
|
||||
|
||||
@Transient
|
||||
private long[] comp_InsertTime;
|
||||
|
||||
/**
|
||||
* Following for K values
|
||||
*/
|
||||
// 3hr
|
||||
@Transient
|
||||
private int[] kK_Index;
|
||||
@Transient
|
||||
private float[] kK_Real;
|
||||
@Transient
|
||||
private float[] kK_Gamma;
|
||||
@Transient
|
||||
private int[] kest_Index;
|
||||
@Transient
|
||||
private float[] kest_Real;
|
||||
@Transient
|
||||
private float[] kest_Gamma;
|
||||
@Transient
|
||||
private float[] hK_Real;
|
||||
@Transient
|
||||
private float[] hK_Gamma;
|
||||
@Transient
|
||||
private float[] dK_Real;
|
||||
@Transient
|
||||
private float[] dK_Gamma;
|
||||
|
||||
// 1 min
|
||||
@Transient
|
||||
private int[] h_Count;
|
||||
@Transient
|
||||
private int[] d_Count;
|
||||
@Transient
|
||||
private int[] kest_Index_1m;
|
||||
@Transient
|
||||
private float[] kest_Real_1m;
|
||||
@Transient
|
||||
private float[] kest_Gamma_1m;
|
||||
@Transient
|
||||
private float[] hK_Real_1m;
|
||||
@Transient
|
||||
private float[] hK_Gamma_1m;
|
||||
@Transient
|
||||
private float[] dK_Real_1m;
|
||||
@Transient
|
||||
private float[] dK_Gamma_1m;
|
||||
@Transient
|
||||
private int[] hK_Index_1m;
|
||||
@Transient
|
||||
private int[] dK_Index_1m;
|
||||
@Transient
|
||||
private float[] h_Dev;
|
||||
@Transient
|
||||
private float[] d_Dev;
|
||||
@Transient
|
||||
private float[] Ks;
|
||||
@Transient
|
||||
private int[] a_est;
|
||||
@Transient
|
||||
private float[] update_1m;
|
||||
|
||||
/**
|
||||
* No-arg Constructor
|
||||
*/
|
||||
|
@ -177,6 +315,20 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
this.sourceId = sourceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the badDataPoint
|
||||
*/
|
||||
public String getBadDataPoint() {
|
||||
return badDataPoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param the badDataPoint to set
|
||||
*/
|
||||
public void setBadDataPoint(String badDataPoint) {
|
||||
this.badDataPoint = badDataPoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the reportType
|
||||
*/
|
||||
|
@ -193,46 +345,33 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
}
|
||||
|
||||
/**
|
||||
* @return the min_data
|
||||
* @return the obs_times array
|
||||
*/
|
||||
public long[] getObsTimes() {
|
||||
return obs_times;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param comp1_data
|
||||
* the comp1_data to set
|
||||
*/
|
||||
public void setObsTimes(long[] obs_times) {
|
||||
this.obs_times = obs_times;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the comp1_data
|
||||
* @return the comp1_data array
|
||||
*/
|
||||
public float[] getComp1Data() {
|
||||
return comp1_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param comp1_data
|
||||
* the comp1_data to set
|
||||
*/
|
||||
public void setComp1Data(float[] h_data) {
|
||||
this.comp1_data = h_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the comp2_data
|
||||
* @return the comp2_data array
|
||||
*/
|
||||
public float[] getComp2Data() {
|
||||
return comp2_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param comp2_data
|
||||
* the comp2_data to set
|
||||
*/
|
||||
public void setComp2Data(float[] d_data) {
|
||||
this.comp2_data = d_data;
|
||||
}
|
||||
|
@ -244,10 +383,6 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
return comp3_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param comp3_data
|
||||
* the comp3_data to set
|
||||
*/
|
||||
public void setComp3Data(float[] z_data) {
|
||||
this.comp3_data = z_data;
|
||||
}
|
||||
|
@ -259,45 +394,335 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
return comp4_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param comp4_data
|
||||
* the comp4_data to set
|
||||
*/
|
||||
public void setComp4Data(float[] f_data) {
|
||||
this.comp4_data = f_data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the component_1
|
||||
*/
|
||||
public float getComponent_1() {
|
||||
return component_1;
|
||||
}
|
||||
|
||||
public void setComponent_1(float component_1) {
|
||||
this.component_1 = component_1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the component_2
|
||||
*/
|
||||
public float getComponent_2() {
|
||||
return component_2;
|
||||
}
|
||||
|
||||
public void setComponent_2(float component_2) {
|
||||
this.component_2 = component_2;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the component_3
|
||||
*/
|
||||
public float getComponent_3() {
|
||||
return component_3;
|
||||
}
|
||||
|
||||
public void setComponent_3(float component_3) {
|
||||
this.component_3 = component_3;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the component_4
|
||||
*/
|
||||
public float getComponent_4() {
|
||||
return component_4;
|
||||
}
|
||||
|
||||
public void setComponent_4(float component_4) {
|
||||
this.component_4 = component_4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the h_HrAvg
|
||||
*/
|
||||
public float[] getHrAvgH() {
|
||||
return hrAvgH;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param h_HrAvg
|
||||
*/
|
||||
public void setHrAvgH(float[] hrAvgH) {
|
||||
this.hrAvgH = hrAvgH;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the d_HrAvg
|
||||
*/
|
||||
public float[] getHrAvgD() {
|
||||
return hrAvgD;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param d_HrAvg
|
||||
*/
|
||||
public void setHrAvgD(float[] hrAvgD) {
|
||||
this.hrAvgD = hrAvgD;
|
||||
}
|
||||
|
||||
public long[] getCompInsertTime() {
|
||||
return comp_InsertTime;
|
||||
}
|
||||
|
||||
public void setCompInsertTime(long[] comp_InsertTime) {
|
||||
this.comp_InsertTime = comp_InsertTime;
|
||||
}
|
||||
|
||||
/*
|
||||
* @param k index related
|
||||
*/
|
||||
// 3hr
|
||||
public int[] getKKIndex() {
|
||||
return kK_Index;
|
||||
}
|
||||
|
||||
public void setKKIndex(int[] kK_Index) {
|
||||
this.kK_Index = kK_Index;
|
||||
}
|
||||
|
||||
public float[] getKKReal() {
|
||||
return kK_Real;
|
||||
}
|
||||
|
||||
public void setKKReal(float[] kK_Real) {
|
||||
this.kK_Real = kK_Real;
|
||||
}
|
||||
|
||||
public float[] getKKGamma() {
|
||||
return kK_Gamma;
|
||||
}
|
||||
|
||||
public void setKKGamma(float[] kK_Gamma) {
|
||||
this.kK_Gamma = kK_Gamma;
|
||||
}
|
||||
|
||||
|
||||
public float[] getHKReal() {
|
||||
return hK_Real;
|
||||
}
|
||||
|
||||
public void setHKReal(float[] hK_Real) {
|
||||
this.hK_Real = hK_Real;
|
||||
}
|
||||
|
||||
public float[] getDKReal() {
|
||||
return dK_Real;
|
||||
}
|
||||
|
||||
public void setDKReal(float[] dK_Real) {
|
||||
this.dK_Real = dK_Real;
|
||||
}
|
||||
|
||||
public int[] getKestIndex() {
|
||||
return kest_Index;
|
||||
}
|
||||
|
||||
public void setKestIndex(int[] kest_Index) {
|
||||
this.kest_Index = kest_Index;
|
||||
}
|
||||
|
||||
public float[] getKestReal() {
|
||||
return kest_Real;
|
||||
}
|
||||
|
||||
public void setKestReal(float[] kest_Real) {
|
||||
this.kest_Real = kest_Real;
|
||||
}
|
||||
|
||||
public float[] getKestGamma() {
|
||||
return kest_Gamma;
|
||||
}
|
||||
|
||||
public void setKestGamma(float[] kest_Gamma) {
|
||||
this.kest_Gamma = kest_Gamma;
|
||||
}
|
||||
|
||||
public float[] getHKGamma() {
|
||||
return hK_Gamma;
|
||||
}
|
||||
|
||||
public void setHKGamma(float[] hK_Gamma) {
|
||||
this.hK_Gamma = hK_Gamma;
|
||||
}
|
||||
|
||||
public float[] getDKGamma() {
|
||||
return dK_Gamma;
|
||||
}
|
||||
|
||||
public void setDKGamma(float[] dK_Gamma) {
|
||||
this.dK_Gamma = dK_Gamma;
|
||||
}
|
||||
|
||||
// 1min
|
||||
public float[] getHKReal1m() {
|
||||
return hK_Real_1m;
|
||||
}
|
||||
|
||||
public void setHKReal1m(float[] hK_Real_1m) {
|
||||
this.hK_Real_1m = hK_Real_1m;
|
||||
}
|
||||
|
||||
public float[] getDKReal1m() {
|
||||
return dK_Real_1m;
|
||||
}
|
||||
|
||||
public void setDKReal1m(float[] dK_Real_1m) {
|
||||
this.dK_Real_1m = dK_Real_1m;
|
||||
}
|
||||
|
||||
public int[] getKestIndex1m() {
|
||||
return kest_Index_1m;
|
||||
}
|
||||
|
||||
public void setKestIndex1m(int[] kest_Index_1m) {
|
||||
this.kest_Index_1m = kest_Index_1m;
|
||||
}
|
||||
|
||||
public float[] getKestReal1m() {
|
||||
return kest_Real_1m;
|
||||
}
|
||||
|
||||
public void setKestReal1m(float[] kest_Real_1m) {
|
||||
this.kest_Real_1m = kest_Real_1m;
|
||||
}
|
||||
|
||||
public float[] getKestGamma1m() {
|
||||
return kest_Gamma_1m;
|
||||
}
|
||||
|
||||
public void setKestGamma1m(float[] kest_Gamma_1m) {
|
||||
this.kest_Gamma_1m = kest_Gamma_1m;
|
||||
}
|
||||
|
||||
public float[] getHKGamma1m() {
|
||||
return hK_Gamma_1m;
|
||||
}
|
||||
|
||||
public void setHKGamma1m(float[] hK_Gamma_1m) {
|
||||
this.hK_Gamma_1m = hK_Gamma_1m;
|
||||
}
|
||||
|
||||
public float[] getDKGamma1m() {
|
||||
return dK_Gamma_1m;
|
||||
}
|
||||
|
||||
public void setDKGamma1m(float[] dK_Gamma_1m) {
|
||||
this.dK_Gamma_1m = dK_Gamma_1m;
|
||||
}
|
||||
|
||||
public int[] getHKIndex1m() {
|
||||
return hK_Index_1m;
|
||||
}
|
||||
|
||||
public void setHKIndex1m(int[] hK_Index_1m) {
|
||||
this.hK_Index_1m = hK_Index_1m;
|
||||
}
|
||||
|
||||
public int[] getDKIndex1m() {
|
||||
return dK_Index_1m;
|
||||
}
|
||||
|
||||
public void setDKIndex1m(int[] dK_Index_1m) {
|
||||
this.dK_Index_1m = dK_Index_1m;
|
||||
}
|
||||
|
||||
public int[] getHCount() {
|
||||
return h_Count;
|
||||
}
|
||||
|
||||
public void setHCount(int[] h_Count) {
|
||||
this.h_Count = h_Count;
|
||||
}
|
||||
|
||||
public int[] getDCount() {
|
||||
return d_Count;
|
||||
}
|
||||
|
||||
public void setDCount(int[] d_Count) {
|
||||
this.d_Count = d_Count;
|
||||
}
|
||||
|
||||
public float[] getHDev() {
|
||||
return h_Dev;
|
||||
}
|
||||
|
||||
public void setHDev(float[] h_Dev) {
|
||||
this.h_Dev = h_Dev;
|
||||
}
|
||||
|
||||
public float[] getDDev() {
|
||||
return d_Dev;
|
||||
}
|
||||
|
||||
public void setDDev(float[] d_Dev) {
|
||||
this.d_Dev = d_Dev;
|
||||
}
|
||||
|
||||
public float[] getKs() {
|
||||
return Ks;
|
||||
}
|
||||
|
||||
public void setKs(float[] Ks) {
|
||||
this.Ks = Ks;
|
||||
}
|
||||
|
||||
public int[] getAest() {
|
||||
return a_est;
|
||||
}
|
||||
|
||||
public void setAest(int[] a_est) {
|
||||
this.a_est = a_est;
|
||||
}
|
||||
|
||||
public float[] getLastUpdate() {
|
||||
return update_1m;
|
||||
}
|
||||
|
||||
public void setLastUpdate(float[] update_1m) {
|
||||
this.update_1m = update_1m;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IDecoderGettable getDecoderGettable() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void retrieveFromDataStore(IDataStore dataStore) {
|
||||
|
||||
try {
|
||||
IDataRecord[] dataRec = dataStore.retrieve(getDataURI());
|
||||
for (IDataRecord element : dataRec) {
|
||||
if (element.getName().equals(GeoMagRecord.component1)) {
|
||||
obs_times = (((LongDataRecord) element).getLongData());
|
||||
}
|
||||
if (element.getName().equals(GeoMagRecord.component1)) {
|
||||
comp1_data = (((FloatDataRecord) element).getFloatData());
|
||||
}
|
||||
if (element.getName().equals(GeoMagRecord.component2)) {
|
||||
comp2_data = (((FloatDataRecord) element).getFloatData());
|
||||
}
|
||||
if (element.getName().equals(GeoMagRecord.component3)) {
|
||||
comp3_data = (((FloatDataRecord) element).getFloatData());
|
||||
}
|
||||
if (element.getName().equals(GeoMagRecord.component4)) {
|
||||
comp4_data = (((FloatDataRecord) element).getFloatData());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception se) {
|
||||
se.printStackTrace();
|
||||
}
|
||||
}
|
||||
// public void retrieveFromDataStore(IDataStore dataStore) {
|
||||
//
|
||||
// try {
|
||||
// IDataRecord[] dataRec = dataStore.retrieve(getDataURI());
|
||||
// for (int i = 0; i < dataRec.length; i++) {
|
||||
// if (dataRec[i].getName().equals(GeoMagRecord.OBS_TIME)) {
|
||||
// obs_times = (((LongDataRecord) dataRec[i]).getLongData());
|
||||
// }
|
||||
// if (dataRec[i].getName().equals(GeoMagRecord.component1)) {
|
||||
// comp1_data = (((FloatDataRecord) dataRec[i]).getFloatData());
|
||||
// }
|
||||
// if (dataRec[i].getName().equals(GeoMagRecord.component2)) {
|
||||
// comp2_data = (((FloatDataRecord) dataRec[i]).getFloatData());
|
||||
// }
|
||||
// if (dataRec[i].getName().equals(GeoMagRecord.component3)) {
|
||||
// comp3_data = (((FloatDataRecord) dataRec[i]).getFloatData());
|
||||
// }
|
||||
// if (dataRec[i].getName().equals(GeoMagRecord.component4)) {
|
||||
// comp4_data = (((FloatDataRecord) dataRec[i]).getFloatData());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// } catch (Exception se) {
|
||||
// se.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
|
||||
@Override
|
||||
@Column
|
||||
|
@ -306,8 +731,14 @@ public class GeoMagRecord extends PersistablePluginDataObject {
|
|||
return super.getDataURI();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IHDFFilePathProvider getHDFPathProvider() {
|
||||
return GeoMagPathProvider.getInstance();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPluginName() {
|
||||
return "geomag";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.dao;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.Criteria;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.criterion.Criterion;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
import org.springframework.orm.hibernate3.HibernateTemplate;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.support.TransactionCallback;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagAvg;
|
||||
|
||||
import com.raytheon.uf.edex.database.dao.CoreDao;
|
||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag avgDao.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ---------------- --------------------------
|
||||
* 08/14/2013 T989 qzhou Initial creation.
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class GeoMagAvgDao extends CoreDao {
|
||||
/**
|
||||
* Creates a new GribModelDao
|
||||
*/
|
||||
public GeoMagAvgDao() {
|
||||
super(DaoConfig.forClass(GeoMagAvg.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GeoMagAvgId based on the given id
|
||||
*
|
||||
* @param id
|
||||
* The given ID number
|
||||
* @return The GeoMagAvgId
|
||||
*/
|
||||
public GeoMagAvg queryById(int id) {
|
||||
return (GeoMagAvg) super.queryById(id);
|
||||
}
|
||||
|
||||
public int getAreaId (int id){
|
||||
return queryById(id).getId();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<GeoMagAvg> getAvgForStation(final String stationCode, final Date start, final Date end) {
|
||||
return (List<GeoMagAvg>) txTemplate.execute(new TransactionCallback() {
|
||||
@Override
|
||||
public Object doInTransaction(TransactionStatus status) {
|
||||
HibernateTemplate ht = getHibernateTemplate();
|
||||
Session sess = ht.getSessionFactory().getCurrentSession();
|
||||
Criteria crit = sess.createCriteria(GeoMagAvg.class);
|
||||
Criterion where1 = Restrictions.eq("stationCode", stationCode);
|
||||
crit.add(where1);
|
||||
// Criterion where2 = Restrictions.gt("avgTime", start);
|
||||
// crit.add(where2);
|
||||
// Criterion where3 = Restrictions.le("avgTime", end);
|
||||
// crit.add(where3);
|
||||
Criterion where2 = Restrictions.between("avgTime", start, end);//include bounds, but don't need bounds
|
||||
crit.add(where2);
|
||||
return crit.list();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<GeoMagAvg> getSingleAvg(final String stationCode, final Date date) {
|
||||
return (List<GeoMagAvg>) txTemplate.execute(new TransactionCallback() {
|
||||
@Override
|
||||
public Object doInTransaction(TransactionStatus status) {
|
||||
HibernateTemplate ht = getHibernateTemplate();
|
||||
Session sess = ht.getSessionFactory().getCurrentSession();
|
||||
Criteria crit = sess.createCriteria(GeoMagAvg.class);
|
||||
Criterion where1 = Restrictions.eq("stationCode", stationCode);
|
||||
crit.add(where1);
|
||||
Criterion where2 = Restrictions.eq("avgTime", date);
|
||||
crit.add(where2);
|
||||
return crit.list();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,18 +1,22 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.dao;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.PluginException;
|
||||
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
|
||||
import com.raytheon.uf.common.datastorage.IDataStore;
|
||||
import com.raytheon.uf.common.datastorage.StorageException;
|
||||
import com.raytheon.uf.common.datastorage.records.AbstractStorageRecord;
|
||||
import com.raytheon.uf.common.datastorage.records.FloatDataRecord;
|
||||
import com.raytheon.uf.common.datastorage.records.LongDataRecord;
|
||||
import com.raytheon.uf.common.datastorage.records.IntegerDataRecord;
|
||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
import com.raytheon.uf.edex.database.plugin.PluginDao;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagAvg;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagK1min;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagK3hr;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagRecord;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSource;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSourcePreference;
|
||||
|
||||
/**
|
||||
* This is a Data Access Object (DAO) driver to interact with geomag database table and HDF5 data store.
|
||||
|
@ -23,7 +27,7 @@ import gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSourcePreference;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/2013 975 S. Gurung Initial Creation
|
||||
*
|
||||
* 07/16/2013 975 Q. Zhou Added fields.
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
|
@ -32,30 +36,183 @@ import gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSourcePreference;
|
|||
public class GeoMagDao extends PluginDao {
|
||||
|
||||
/** The source data access object */
|
||||
private GeoMagSourceDao sourceDao = new GeoMagSourceDao();
|
||||
|
||||
/** The source preference data access object */
|
||||
private GeoMagSourcePreferenceDao sourcePrefDao = new GeoMagSourcePreferenceDao();
|
||||
private GeoMagAvgDao avgDao = new GeoMagAvgDao();
|
||||
private GeoMagK3hrDao k3hrDao = new GeoMagK3hrDao();
|
||||
private GeoMagK1minDao k1minDao = new GeoMagK1minDao();
|
||||
|
||||
public GeoMagDao(String pluginName) throws PluginException {
|
||||
super(pluginName);
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public StorageStatus persistToHDF5(PluginDataObject... records)
|
||||
// throws PluginException {
|
||||
// long t0 = System.currentTimeMillis();
|
||||
//
|
||||
// // NOTE: currently making the assumption that models aren't
|
||||
// // mixed in the records aggregate. If this isn't true,
|
||||
// // some pre-processing will be needed.
|
||||
// Map<PointDataContainer, List<PointDataView>> containerMap = new HashMap<PointDataContainer, List<PointDataView>>(
|
||||
// records.length);
|
||||
// Map<PointDataContainer, File> fileMap = new HashMap<PointDataContainer, File>();
|
||||
//
|
||||
// for (PluginDataObject p : records) {
|
||||
// if (p instanceof IPointData) {
|
||||
// PointDataView pdv = ((IPointData) p).getPointDataView();
|
||||
// List<PointDataView> views = containerMap
|
||||
// .get(pdv.getContainer());
|
||||
// if (views == null) {
|
||||
// views = new ArrayList<PointDataView>();
|
||||
// containerMap.put(pdv.getContainer(), views);
|
||||
// }
|
||||
// views.add(pdv);
|
||||
// File file = fileMap.get(pdv.getContainer());
|
||||
// if (file == null) {
|
||||
// file = getFullFilePath(p);
|
||||
// System.out.println("***file " +file.toString());
|
||||
// fileMap.put(pdv.getContainer(), file);
|
||||
// }
|
||||
//
|
||||
// }DataTime
|
||||
// }
|
||||
//
|
||||
// List<StorageStatus> ssList = new ArrayList<StorageStatus>();
|
||||
// try {
|
||||
// for (PointDataContainer container : containerMap.keySet()) {
|
||||
// IDataStore ds = DataStoreFactory.getDataStore(fileMap
|
||||
// .get(container));
|
||||
// StorageProperties sp = new StorageProperties();
|
||||
// String compression = PluginRegistry.getInstance()
|
||||
// .getRegisteredObject(pluginName).getCompression();
|
||||
// if (compression != null) {
|
||||
// sp.setCompression(StorageProperties.Compression
|
||||
// .valueOf(compression));
|
||||
// }
|
||||
//
|
||||
// Set<String> params = container.getParameters();
|
||||
// for (String param : params) {
|
||||
// try {
|
||||
// IDataRecord idr = container.getParameterRecord(param);
|
||||
// ds.addDataRecord(idr, sp);
|
||||
// } catch (StorageException e) {
|
||||
// throw new PluginException("Error adding record", e);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// try {
|
||||
// StorageStatus ss = ds.store(StoreOp.APPEND);
|
||||
// if (ss.getOperationPerformed() == StoreOp.APPEND) {
|
||||
// // increment the indices
|
||||
// List<PointDataView> views = containerMap.get(container);
|
||||
// int idx = (int) ss.getIndexOfAppend()[0];
|
||||
// container.incrementIds(idx, views);
|
||||
// }
|
||||
// ssList.add(ss);
|
||||
// } catch (StorageException e) {
|
||||
// throw new PluginException("Error updating point file", e);
|
||||
// }
|
||||
// }
|
||||
// // Aggregate the storage status errors
|
||||
// StorageStatus aggregatedStatus = new StorageStatus();
|
||||
// List<StorageException> se = new ArrayList<StorageException>();
|
||||
// for (StorageStatus ss : ssList) {
|
||||
// StorageException[] seArr = ss.getExceptions();
|
||||
// if (seArr != null) {
|
||||
// se.addAll(Arrays.asList(seArr));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// aggregatedStatus.setExceptions(se.toArray(new StorageException[se
|
||||
// .size()]));
|
||||
// return aggregatedStatus;
|
||||
// }
|
||||
//
|
||||
// finally {
|
||||
// System.out.println("Time spent in persist: "
|
||||
// + (System.currentTimeMillis() - t0));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public File getFullFilePath(PluginDataObject p) {
|
||||
// File file;
|
||||
// String directory = p.getPluginName() + File.separator
|
||||
// + pathProvider.getHDFPath(p.getPluginName(), (IPersistable) p);
|
||||
// file = new File(directory
|
||||
// + File.separator
|
||||
// + pathProvider.getHDFFileName(p.getPluginName(),
|
||||
// (IPersistable) p));
|
||||
// return file;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Retrieves an geomag report using the datauri .
|
||||
*
|
||||
* @param dataURI
|
||||
* The dataURI to match against.
|
||||
* @return The report record if it exists.
|
||||
*/
|
||||
public GeoMagRecord queryByDataURI(String dataURI) {
|
||||
GeoMagRecord report = null;
|
||||
List<?> obs = null;
|
||||
try {
|
||||
obs = queryBySingleCriteria("dataURI", dataURI);
|
||||
} catch (DataAccessLayerException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if ((obs != null) && (obs.size() > 0)) {
|
||||
report = (GeoMagRecord) obs.get(0);
|
||||
}
|
||||
return report;
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries for to determine if a given data uri exists on the sfcobs table.
|
||||
*
|
||||
* @param dataUri
|
||||
* The DataURI to find.
|
||||
* @return An array of objects. If not null, there should only be a single
|
||||
* element.
|
||||
*/
|
||||
public Object[] queryDataUriColumn(final String dataUri) {
|
||||
|
||||
String sql = "select datauri from awips.geomag where datauri='"
|
||||
+ dataUri + "';";
|
||||
|
||||
Object[] results = executeSQLQuery(sql);
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IDataStore populateDataStore(IDataStore dataStore, IPersistable record)
|
||||
public IDataStore populateDataStore(IDataStore dataStore, IPersistable record)
|
||||
throws StorageException {
|
||||
//return null;
|
||||
GeoMagRecord magRecord = (GeoMagRecord) record;
|
||||
|
||||
// change to 00:00:00.0. "/geomag/2013-04-01_00:00:00.0/BOU/102/GEOMAG";
|
||||
// String headUri = magRecord.getDataURI();
|
||||
// headUri = headUri.substring(0, 18) +"_00:00:00.0/" + headUri.substring(30);
|
||||
|
||||
/*
|
||||
* Write observation times to HDF5.
|
||||
*/
|
||||
if (magRecord.getObsTimes() != null ) {
|
||||
AbstractStorageRecord storageRecord = new LongDataRecord(GeoMagRecord.OBS_TIME,
|
||||
magRecord.getDataURI(), (long[]) magRecord.getObsTimes(), 1,
|
||||
new long[] {magRecord.getObsTimes().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
}
|
||||
// if (magRecord.getObsTimes() != null ) {
|
||||
// AbstractStorageRecord storageRecord = new LongDataRecord(GeoMagRecord.OBS_TIME,
|
||||
// headUri, (long[]) magRecord.getObsTimes(), 1,
|
||||
// new long[] {magRecord.getObsTimes().length});
|
||||
// storageRecord.setCorrelationObject(magRecord);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
//
|
||||
// }
|
||||
|
||||
// if (magRecord.getCompIdx() != null) {
|
||||
// AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.CompIdx,
|
||||
// magRecord.getDataURI(), (int[]) magRecord.getCompIdx(), 1,
|
||||
// new long[] {magRecord.getCompIdx().length});
|
||||
//
|
||||
// storageRecord.setCorrelationObject(record);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
// }
|
||||
|
||||
/*
|
||||
* Write component1 data to HDF5.
|
||||
|
@ -66,6 +223,7 @@ public class GeoMagDao extends PluginDao {
|
|||
new long[] {magRecord.getComp1Data().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
//StorageStatus ss = dataStore.store(StoreOp.APPEND);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -77,67 +235,377 @@ public class GeoMagDao extends PluginDao {
|
|||
new long[] {magRecord.getComp2Data().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
// /*
|
||||
// * Write component3 data to HDF5.
|
||||
// */
|
||||
// if ( magRecord.getComp3Data() != null ) {
|
||||
// AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.component3,
|
||||
// magRecord.getDataURI(), (float[]) magRecord.getComp3Data(), 1,
|
||||
// new long[] {magRecord.getComp3Data().length});
|
||||
// storageRecord.setCorrelationObject(magRecord);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * Write component4 data to HDF5.
|
||||
// */
|
||||
// if ( magRecord.getComp4Data() != null ) {
|
||||
// AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.component4,
|
||||
// magRecord.getDataURI(), (float[]) magRecord.getComp4Data(), 1,
|
||||
// new long[] {magRecord.getComp4Data().length});
|
||||
// storageRecord.setCorrelationObject(magRecord);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
//
|
||||
// }
|
||||
|
||||
// if (magRecord.getHrAvgIdx() != null) {
|
||||
// AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.HrAvgIdx,
|
||||
// magRecord.getDataURI(), (int[]) magRecord.getHrAvgIdx(), 1,
|
||||
// new long[] {magRecord.getHrAvgIdx().length});
|
||||
//
|
||||
// storageRecord.setCorrelationObject(record);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
// }
|
||||
|
||||
/*
|
||||
* Write H_HR_AVG data to HDF5.
|
||||
*/
|
||||
if ( magRecord.getHrAvgH() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.H_HR_AVG,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHrAvgH(), 1,
|
||||
new long[] {magRecord.getHrAvgH().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Write component3 data to HDF5.
|
||||
* Write D_HR_AVG data to HDF5.
|
||||
*/
|
||||
if ( magRecord.getComp3Data() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.component3,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getComp3Data(), 1,
|
||||
new long[] {magRecord.getComp3Data().length});
|
||||
if ( magRecord.getHrAvgD() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.D_HR_AVG,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHrAvgD(), 1,
|
||||
new long[] {magRecord.getHrAvgD().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
// /*
|
||||
// * Write insertTime data to HDF5.
|
||||
// */
|
||||
// if ( magRecord.getCompInsertTime() != null ) {
|
||||
// AbstractStorageRecord storageRecord = new LongDataRecord(GeoMagRecord.Comp_Insert_Time,
|
||||
// magRecord.getDataURI(), (long[]) magRecord.getCompInsertTime(), 1,
|
||||
// new long[] {magRecord.getCompInsertTime().length});
|
||||
// storageRecord.setCorrelationObject(magRecord);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
//
|
||||
// }
|
||||
|
||||
/*
|
||||
* Write component4 data to HDF5.
|
||||
* Write K_Index data to HDF5.
|
||||
*/
|
||||
if ( magRecord.getComp4Data() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.component4,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getComp4Data(), 1,
|
||||
new long[] {magRecord.getComp4Data().length});
|
||||
// 3hr
|
||||
if ( magRecord.getKKIndex() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.K_Index,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getKKIndex(), 1,
|
||||
new long[] {magRecord.getKKIndex().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKKGamma() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.K_Gamma,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKKGamma(), 1,
|
||||
new long[] {magRecord.getKKGamma().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKKReal() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.K_Real,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKKReal(), 1,
|
||||
new long[] {magRecord.getKKReal().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKestIndex() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.Kest_Index,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getKestIndex(), 1,
|
||||
new long[] {magRecord.getKestIndex().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKestGamma() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.Kest_Gamma,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKestGamma(), 1,
|
||||
new long[] {magRecord.getKestGamma().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKestReal() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.Kest_Real,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKestReal(), 1,
|
||||
new long[] {magRecord.getKestReal().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getHKGamma() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KH_Gamma,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHKGamma(), 1,
|
||||
new long[] {magRecord.getHKGamma().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getHKReal() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KH_Real,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHKReal(), 1,
|
||||
new long[] {magRecord.getHKReal().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDKGamma() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KD_Gamma,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getDKGamma(), 1,
|
||||
new long[] {magRecord.getDKGamma().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDKReal() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KD_Real,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getDKReal(), 1,
|
||||
new long[] {magRecord.getDKReal().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 1 min
|
||||
// if (magRecord.getKIdx() != null) {
|
||||
// AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.KIdx,
|
||||
// magRecord.getDataURI(), (int[]) magRecord.getKIdx(), 1,
|
||||
// new long[] {magRecord.getKIdx().length});
|
||||
//
|
||||
// storageRecord.setCorrelationObject(record);
|
||||
// dataStore.addDataRecord(storageRecord);
|
||||
// }
|
||||
|
||||
if ( magRecord.getKestIndex1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.Kest_Index_1m,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getKestIndex1m(), 1,
|
||||
new long[] {magRecord.getKestIndex1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKestGamma1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.Kest_Gamma_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKestGamma1m(), 1,
|
||||
new long[] {magRecord.getKestGamma1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getKestReal1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.Kest_Real_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKestReal1m(), 1,
|
||||
new long[] {magRecord.getKestReal1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getHKGamma1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KH_Gamma_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHKGamma1m(), 1,
|
||||
new long[] {magRecord.getHKGamma1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getHKReal1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KH_Real_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHKReal1m(), 1,
|
||||
new long[] {magRecord.getHKReal1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDKGamma1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KD_Gamma_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getDKGamma1m(), 1,
|
||||
new long[] {magRecord.getDKGamma1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDKReal1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KD_Real_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getDKReal1m(), 1,
|
||||
new long[] {magRecord.getDKReal1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
if ( magRecord.getHKIndex1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.KH_Index_1m,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getHKIndex1m(), 1,
|
||||
new long[] {magRecord.getHKIndex1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDKIndex1m() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.KD_Index_1m,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getDKIndex1m(), 1,
|
||||
new long[] {magRecord.getDKIndex1m().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getHCount() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.KH_Count,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getHCount(), 1,
|
||||
new long[] {magRecord.getHCount().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDCount() != null ) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.KD_Count,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getDCount(), 1,
|
||||
new long[] {magRecord.getDCount().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getHDev() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KH_Dev,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getHDev(), 1,
|
||||
new long[] {magRecord.getHDev().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if ( magRecord.getDDev() != null ) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.KD_Dev,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getDDev(), 1,
|
||||
new long[] {magRecord.getDDev().length});
|
||||
storageRecord.setCorrelationObject(magRecord);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if (magRecord.getKs() != null) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.K_s,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getKs(), 1,
|
||||
new long[] {magRecord.getKs().length});
|
||||
storageRecord.setCorrelationObject(record);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if (magRecord.getAest() != null) {
|
||||
AbstractStorageRecord storageRecord = new IntegerDataRecord(GeoMagRecord.A_est,
|
||||
magRecord.getDataURI(), (int[]) magRecord.getAest(), 1,
|
||||
new long[] {magRecord.getAest().length});
|
||||
storageRecord.setCorrelationObject(record);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
|
||||
if (magRecord.getLastUpdate() != null) {
|
||||
AbstractStorageRecord storageRecord = new FloatDataRecord(GeoMagRecord.Last_Update_1m,
|
||||
magRecord.getDataURI(), (float[]) magRecord.getLastUpdate(), 1,
|
||||
new long[] {magRecord.getLastUpdate().length});
|
||||
storageRecord.setCorrelationObject(record);
|
||||
dataStore.addDataRecord(storageRecord);
|
||||
|
||||
}
|
||||
return dataStore;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get GeoMagSource from source ID
|
||||
* Get GeoMagAvg from ID
|
||||
*/
|
||||
public GeoMagSource getGeoMagSource(int sourceId) {
|
||||
return sourceDao.queryById(sourceId);
|
||||
public GeoMagAvg getGeoMagAvg(Date avgTime) {
|
||||
return (GeoMagAvg) avgDao.queryById(avgTime);
|
||||
}
|
||||
|
||||
public Integer getGeoMagSourceId(String sourceName) throws DataAccessLayerException {
|
||||
return sourceDao.getSourceId(sourceName);
|
||||
// public Integer getGeoMagSourceId(String sourceName) throws DataAccessLayerException {
|
||||
// return avgDao.getSourceId(sourceName);
|
||||
// }
|
||||
|
||||
public GeoMagAvgDao getGeoMagAvgDao() {
|
||||
return avgDao;
|
||||
}
|
||||
|
||||
public GeoMagSourceDao getGeoMagSource() {
|
||||
return sourceDao;
|
||||
}
|
||||
|
||||
public void setGeoMagSourceDao(
|
||||
GeoMagSourceDao sourceDao) {
|
||||
this.sourceDao = sourceDao;
|
||||
public void setGeoMagAvgDao(
|
||||
GeoMagAvgDao avgDao) {
|
||||
this.avgDao = avgDao;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get GeoMagSourcePreference from source preference ID
|
||||
* Get GeoMagK1min from ID
|
||||
*/
|
||||
public GeoMagSourcePreference getGeoMagSourcePreference(int prefId) {
|
||||
return sourcePrefDao.queryById(prefId);
|
||||
public GeoMagK1min getGeoMagDateK1min(int id) {
|
||||
return k1minDao.queryById(id);
|
||||
}
|
||||
|
||||
public GeoMagSourcePreferenceDao getGeoMagSourcePreference() {
|
||||
return sourcePrefDao;
|
||||
public GeoMagK1minDao getGeoMagK1minDao() {
|
||||
return k1minDao;
|
||||
}
|
||||
|
||||
public void setGeoMagSourcePreference(
|
||||
GeoMagSourcePreferenceDao sourcePrefDao) {
|
||||
this.sourcePrefDao = sourcePrefDao;
|
||||
public void setGeoMagK1minDao(
|
||||
GeoMagK1minDao k1minDao) {
|
||||
this.k1minDao = k1minDao;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get GeoMagK1min from ID
|
||||
*/
|
||||
public GeoMagK3hr getGeoMagDateK3hr(int id) {
|
||||
return k3hrDao.queryById(id);
|
||||
}
|
||||
|
||||
public GeoMagK3hrDao getGeoMagK3hrDao() {
|
||||
return k3hrDao;
|
||||
}
|
||||
|
||||
public void setGeoMagK3hrDao(
|
||||
GeoMagK3hrDao k3hrDao) {
|
||||
this.k3hrDao = k3hrDao;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.dao;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagK1min;
|
||||
|
||||
import com.raytheon.uf.edex.database.dao.CoreDao;
|
||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag k1minDao.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ---------------- --------------------------
|
||||
* 08/14/2013 T989 qzhou Initial creation.
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class GeoMagK1minDao extends CoreDao {
|
||||
/**
|
||||
* Creates a new GribModelDao
|
||||
*/
|
||||
public GeoMagK1minDao() {
|
||||
super(DaoConfig.forClass(GeoMagK1min.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GeoMagAvgId based on the given id
|
||||
*
|
||||
* @param id
|
||||
* The given ID number
|
||||
* @return The GeoMagAvgId
|
||||
*/
|
||||
public GeoMagK1min queryById(int id) {
|
||||
return (GeoMagK1min) super.queryById(id);
|
||||
}
|
||||
|
||||
public int getAreaId (int id){
|
||||
return queryById(id).getId();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.dao;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.Criteria;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.criterion.Criterion;
|
||||
import org.hibernate.criterion.Restrictions;
|
||||
import org.springframework.orm.hibernate3.HibernateTemplate;
|
||||
import org.springframework.transaction.TransactionStatus;
|
||||
import org.springframework.transaction.support.TransactionCallback;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.GeoMagK3hr;
|
||||
|
||||
import com.raytheon.uf.edex.database.dao.CoreDao;
|
||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||
|
||||
/**
|
||||
* Record implementation for geomag k3hrDao.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ---------------- --------------------------
|
||||
* 08/14/2013 T989 qzhou Initial creation.
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class GeoMagK3hrDao extends CoreDao {
|
||||
/**
|
||||
* Creates a new GribModelDao
|
||||
*/
|
||||
public GeoMagK3hrDao() {
|
||||
super(DaoConfig.forClass(GeoMagK3hr.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GeoMagAvgId based on the given id
|
||||
*
|
||||
* @param id
|
||||
* The given ID number
|
||||
* @return The GeoMagAvgId
|
||||
*/
|
||||
public GeoMagK3hr queryById(int id) {
|
||||
return (GeoMagK3hr) super.queryById(id);
|
||||
}
|
||||
|
||||
public int getId (int id){
|
||||
return queryById(id).getId();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<GeoMagK3hr> getK3hrForStation(final String stationCode, final Date time) {
|
||||
return (List<GeoMagK3hr>) txTemplate.execute(new TransactionCallback() {
|
||||
@Override
|
||||
public Object doInTransaction(TransactionStatus status) {
|
||||
HibernateTemplate ht = getHibernateTemplate();
|
||||
Session sess = ht.getSessionFactory().getCurrentSession();
|
||||
Criteria crit = sess.createCriteria(GeoMagK3hr.class);
|
||||
Criterion where1 = Restrictions.eq("stationCode", stationCode);
|
||||
crit.add(where1);
|
||||
Criterion where2 = Restrictions.ge("k3hrTime", time);
|
||||
crit.add(where2);
|
||||
return crit.list();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.dao;
|
||||
|
||||
/**
|
||||
* This Data Access Object is used to interact with the database to get geomag source
|
||||
* ID numbers and source names for a geomag data.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/2013 975 S. Gurung Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.raytheon.uf.edex.database.DataAccessLayerException;
|
||||
import com.raytheon.uf.edex.database.dao.CoreDao;
|
||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||
import com.raytheon.uf.edex.database.query.DatabaseQuery;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSource;
|
||||
|
||||
public class GeoMagSourceDao extends CoreDao {
|
||||
|
||||
/**
|
||||
* Constructs a new GeoMagSourceDao
|
||||
*/
|
||||
public GeoMagSourceDao() {
|
||||
super(DaoConfig.forClass(GeoMagSource.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GeoMagSource based on the given source id
|
||||
*
|
||||
* @param sourceId
|
||||
* The source ID number
|
||||
* @return The GeoMagSource with the given ID
|
||||
*/
|
||||
public GeoMagSource queryById(int sourceId) {
|
||||
return (GeoMagSource) super.queryById(sourceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the source name given the id
|
||||
*
|
||||
* @param sourceId
|
||||
* The source id
|
||||
* @return The source name
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur during query
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public String getSourceName (int sourceId){
|
||||
return queryById(sourceId).getSourceName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the source id given the name
|
||||
*
|
||||
* @param sourceName
|
||||
* The source name
|
||||
* @return The source id corresponding to the given name
|
||||
* @throws DataAccessLayerException
|
||||
* If errors occur during query
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public Integer getSourceId(String sourceName)
|
||||
throws DataAccessLayerException {
|
||||
DatabaseQuery query = new DatabaseQuery(daoClass.getName());
|
||||
query.addReturnedField("sourceId");
|
||||
query.addQueryParam("sourceName", sourceName);
|
||||
List<Integer> sources = (List<Integer>) this.queryByCriteria(query);
|
||||
if (sources.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
return sources.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.dao;
|
||||
|
||||
/**
|
||||
* This Data Access Object is used to interact with the database to get geomag source preference
|
||||
* ID numbers and source preference order for a geomag data.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/2013 975 S. Gurung Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
import com.raytheon.uf.edex.database.dao.CoreDao;
|
||||
import com.raytheon.uf.edex.database.dao.DaoConfig;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.fixed.GeoMagSourcePreference;
|
||||
|
||||
public class GeoMagSourcePreferenceDao extends CoreDao {
|
||||
|
||||
/**
|
||||
* Constructs a new GeoMagSourcePreferenceDao
|
||||
*/
|
||||
public GeoMagSourcePreferenceDao() {
|
||||
super(DaoConfig.forClass(GeoMagSourcePreference.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a GeoMag source preference based on the given source preference id
|
||||
*
|
||||
* @param preferenceId
|
||||
* The source preference ID number
|
||||
* @return The GeoMagSource
|
||||
*/
|
||||
public GeoMagSourcePreference queryById(int preferenceId) {
|
||||
return (GeoMagSourcePreference) super.queryById(preferenceId);
|
||||
}
|
||||
|
||||
public String getSourcePreferenceDesc (int preferenceId){
|
||||
return queryById(preferenceId).getDescription();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,112 +0,0 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.fixed;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
/**
|
||||
* This java class is to create GEOMAG sources.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/2013 975 S. Gurung Initial Creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
@Entity
|
||||
@Table(name = "geomag_sources", uniqueConstraints=@javax.persistence.UniqueConstraint(columnNames="sourceName"))
|
||||
|
||||
public class GeoMagSource extends PersistableDataObject implements
|
||||
Serializable, ISerializableObject {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** The source id number */
|
||||
@Id
|
||||
private int sourceId;
|
||||
|
||||
/** The source preference id number */
|
||||
@Column(length = 16)
|
||||
private int preferenceId;
|
||||
|
||||
/** The source description */
|
||||
@Column(length = 128)
|
||||
private String sourceDesc;
|
||||
|
||||
/** The source name */
|
||||
@Column(length = 64)
|
||||
private String sourceName;
|
||||
|
||||
/**
|
||||
* Constructs and empty GeoMagSource
|
||||
*/
|
||||
public GeoMagSource() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new GeoMagSource
|
||||
*
|
||||
* @param sourceId
|
||||
* The source ID number
|
||||
* @param sourceName
|
||||
* The source name
|
||||
* @param preferenceId
|
||||
* The preference ID number
|
||||
* @param sourceDesc
|
||||
* The source description
|
||||
*/
|
||||
public GeoMagSource (int sourceId, int preferenceId, String sourceName, String sourceDesc) {
|
||||
this.sourceId = sourceId;
|
||||
this.preferenceId = preferenceId;
|
||||
this.sourceName = sourceName;
|
||||
this.sourceDesc = sourceDesc;
|
||||
}
|
||||
|
||||
public int getSourceId() {
|
||||
return sourceId;
|
||||
}
|
||||
|
||||
public void setSourceId(int sourceId) {
|
||||
this.sourceId = sourceId;
|
||||
}
|
||||
|
||||
public String getSourceName() {
|
||||
return sourceName;
|
||||
}
|
||||
|
||||
public void setSourceName(String sourceName) {
|
||||
this.sourceName = sourceName;
|
||||
}
|
||||
|
||||
public int getPreferenceId() {
|
||||
return preferenceId;
|
||||
}
|
||||
|
||||
public void setPreferenceId(int preferenceId) {
|
||||
this.preferenceId = preferenceId;
|
||||
}
|
||||
|
||||
public String getSourceDesc() {
|
||||
return sourceDesc;
|
||||
}
|
||||
|
||||
public void setSourceDesc(String sourceDesc) {
|
||||
this.sourceDesc = sourceDesc;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return sourceName;
|
||||
}
|
||||
}
|
|
@ -1,94 +0,0 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.fixed;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import org.hibernate.annotations.Cache;
|
||||
import org.hibernate.annotations.CacheConcurrencyStrategy;
|
||||
import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
/**
|
||||
* This java class is to create GEOMAG source preferences.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/2013 975 S. Gurung Initial Creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
@Entity
|
||||
@Table(name = "geomag_source_preferences")
|
||||
|
||||
public class GeoMagSourcePreference extends PersistableDataObject implements
|
||||
Serializable, ISerializableObject {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** The source id number */
|
||||
@Id
|
||||
private int preferenceId;
|
||||
|
||||
/** The source name */
|
||||
@Column(length = 128)
|
||||
private String description;
|
||||
|
||||
/** The preference order number */
|
||||
@Column(length = 128)
|
||||
private int preferenceOrder;
|
||||
|
||||
/**
|
||||
* Constructs and empty GeoMagSourcePreference
|
||||
*/
|
||||
public GeoMagSourcePreference() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new GeoMagSourcePreference
|
||||
*
|
||||
* @param preferenceId
|
||||
* The area file ID number
|
||||
* @param description
|
||||
* The area name
|
||||
*/
|
||||
public GeoMagSourcePreference (int sourceId, String sourceName) {
|
||||
this.preferenceId = sourceId;
|
||||
this.description = sourceName;
|
||||
}
|
||||
|
||||
public int getSourceId() {
|
||||
return preferenceId;
|
||||
}
|
||||
|
||||
public void setSourceId(int sourceId) {
|
||||
this.preferenceId = sourceId;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String desc) {
|
||||
this.description = desc;
|
||||
}
|
||||
public int getPreferenceOrder() {
|
||||
return preferenceOrder;
|
||||
}
|
||||
|
||||
public void setPreferenceOrder(int preferenceOrder) {
|
||||
this.preferenceOrder = preferenceOrder;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return description;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.table;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
/**
|
||||
* Defines a magnetometer station.
|
||||
*
|
||||
*<pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 07/17/2013 975 qzhou Initiate for reading source attributes
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
@XmlRootElement(name = "source")
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlType(name = "")
|
||||
public class GeoMagSource {
|
||||
|
||||
@XmlAttribute
|
||||
private String name;
|
||||
|
||||
@XmlAttribute
|
||||
private int priority;
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public int getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
public void setPriority(int priority) {
|
||||
this.priority = priority;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -4,9 +4,7 @@ import java.util.ArrayList;
|
|||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElements;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
|
||||
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
|
@ -21,6 +19,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 03/29/2013 975 sgurung Initial Creation
|
||||
* 07/17/2013 975 qzhou Changed source type for reading source attributes
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
|
@ -48,8 +47,7 @@ public class GeoMagStation {
|
|||
* Data sources for the station
|
||||
*/
|
||||
@XmlElement
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
protected String[] source;
|
||||
protected ArrayList<GeoMagSource> source;
|
||||
|
||||
/**
|
||||
* Indicates whether the station should be included
|
||||
|
@ -65,6 +63,13 @@ public class GeoMagStation {
|
|||
@XmlElement
|
||||
protected Boolean kpStation;
|
||||
|
||||
/**
|
||||
* Indicates whether the station has a header.
|
||||
* Same station data may have or have no header.
|
||||
*/
|
||||
@XmlElement
|
||||
protected String hasHeader;
|
||||
|
||||
/**
|
||||
* Data order (e.g. HDZF or XYZF)
|
||||
*/
|
||||
|
@ -84,8 +89,10 @@ public class GeoMagStation {
|
|||
@XmlElement
|
||||
protected RawDataFormat rawDataFormat;
|
||||
|
||||
public GeoMagStation() {
|
||||
|
||||
|
||||
public GeoMagStation() {
|
||||
source = new ArrayList<GeoMagSource>();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -124,7 +131,7 @@ public class GeoMagStation {
|
|||
* Gets the stationCode of this station
|
||||
* @return the stationCode
|
||||
*/
|
||||
public String[] getSource() {
|
||||
public ArrayList<GeoMagSource> getSource() {
|
||||
return source;
|
||||
}
|
||||
|
||||
|
@ -132,7 +139,7 @@ public class GeoMagStation {
|
|||
* Sets the source of this station
|
||||
* @param source the source to set
|
||||
*/
|
||||
public void setSource(String[] source) {
|
||||
public void setSource(ArrayList<GeoMagSource> source) {
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
|
@ -170,6 +177,22 @@ public class GeoMagStation {
|
|||
this.kpStation = kpStation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the header true or false
|
||||
* @return the hasHeader
|
||||
*/
|
||||
public String getHasHeader() {
|
||||
return hasHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the hasHeader value of this station
|
||||
* @param hasHeader the hasHeader to set
|
||||
*/
|
||||
public void setHasHeader(String hasHeader) {
|
||||
this.hasHeader = hasHeader;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the dataOrder of this station
|
||||
* @return the dataOrder
|
||||
|
@ -217,4 +240,5 @@ public class GeoMagStation {
|
|||
public void setRawDataFormat(RawDataFormat rawDataFormat) {
|
||||
this.rawDataFormat = rawDataFormat;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.table;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
/*
|
||||
* The FitTime.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* ate Ticket# Engineer Description
|
||||
* ----------- ---------- ---------- --------------------------
|
||||
* 05/14/2013 #989 qzhou Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
|
||||
@XmlRootElement(name = "fitTime")
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlType(name = "")
|
||||
public class KFitTime {
|
||||
|
||||
@XmlAttribute
|
||||
private String key;
|
||||
|
||||
@XmlAttribute
|
||||
private float coeffA;
|
||||
|
||||
@XmlAttribute
|
||||
private float coeffB;
|
||||
|
||||
@XmlAttribute
|
||||
private float coeffW;
|
||||
|
||||
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public void setKey(String key) {
|
||||
this.key = key;
|
||||
}
|
||||
|
||||
public float getCoeffA() {
|
||||
return coeffA;
|
||||
}
|
||||
|
||||
public void setCoeffA(float coeffA) {
|
||||
this.coeffA = coeffA;
|
||||
}
|
||||
|
||||
public float getCoeffB() {
|
||||
return coeffB;
|
||||
}
|
||||
|
||||
public void setCoeffB(float coeffB) {
|
||||
this.coeffB = coeffB;
|
||||
}
|
||||
|
||||
public float getCoeffW() {
|
||||
return coeffW;
|
||||
}
|
||||
|
||||
public void setCoeffW(float coeffW) {
|
||||
this.coeffW = coeffW;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.table;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
/*
|
||||
* The KStationCoeffTable Reader.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* ate Ticket# Engineer Description
|
||||
* ----------- ---------- ---------- --------------------------
|
||||
* 05/14/2013 #989 qzhou Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
public class KStationCoeffTableReader {
|
||||
|
||||
private String xmlFile = null;
|
||||
|
||||
public KStationCoeffTableReader(String file) {
|
||||
xmlFile = file;
|
||||
}
|
||||
|
||||
public List<KStationCoefficient> getStationList() throws JAXBException{
|
||||
|
||||
JAXBContext context = JAXBContext.newInstance(KStationCoefficients.class);
|
||||
//PACKAGE);
|
||||
Unmarshaller unmarshaller = context.createUnmarshaller();
|
||||
KStationCoefficients sfstnlist = null;
|
||||
|
||||
File file = new File(xmlFile);
|
||||
|
||||
try {
|
||||
if (file.exists()) {
|
||||
sfstnlist = (KStationCoefficients)unmarshaller.unmarshal(
|
||||
new FileReader(xmlFile));
|
||||
List<KStationCoefficient> listOfItems = sfstnlist.getKStationCoefficients();
|
||||
|
||||
return listOfItems;
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.table;
|
||||
|
||||
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.XmlRootElement;
|
||||
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
|
||||
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||
|
||||
/*
|
||||
* The KStationCoefficient.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* ate Ticket# Engineer Description
|
||||
* ----------- ---------- ---------- --------------------------
|
||||
* 05/14/2013 #989 qzhou Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
|
||||
@XmlRootElement(name = "kStationCoefficient")
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
//@XmlType(name = "")
|
||||
public class KStationCoefficient {
|
||||
|
||||
/**
|
||||
* Station Code
|
||||
*/
|
||||
@XmlElement
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
private String stationCode;
|
||||
/**
|
||||
* provider
|
||||
*/
|
||||
@XmlElement
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
private String provider;
|
||||
/**
|
||||
* k9Limit
|
||||
*/
|
||||
@XmlElement
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
private String k9Limit;
|
||||
/**
|
||||
* longitude
|
||||
*/
|
||||
@XmlElement
|
||||
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
|
||||
private String longitude;
|
||||
/**
|
||||
* fitTime
|
||||
*/
|
||||
@XmlElement
|
||||
protected ArrayList<KFitTime> fitTime;
|
||||
/**
|
||||
* @XmlElement
|
||||
*/
|
||||
@XmlElement
|
||||
protected ArrayList<KsThree> ksThree;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public KStationCoefficient() {
|
||||
fitTime = new ArrayList<KFitTime>();
|
||||
ksThree = new ArrayList<KsThree>();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the stationCode
|
||||
*/
|
||||
public String getStationCode() {
|
||||
return stationCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param stationCode: the stationCode to set
|
||||
*/
|
||||
public void setStationCode(String stationCode) {
|
||||
this.stationCode = stationCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the provider
|
||||
*/
|
||||
public String getProvider() {
|
||||
return provider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param provider: the provider to set
|
||||
*/
|
||||
public void setProvider(String provider) {
|
||||
this.provider = provider;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the k9Limit
|
||||
*/
|
||||
public String getK9Limit() {
|
||||
return k9Limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param k9Limit: the k9Limit to set
|
||||
*/
|
||||
public void setK9Limit(String k9Limit) {
|
||||
this.k9Limit = k9Limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the longitude
|
||||
*/
|
||||
public String getLongitude() {
|
||||
return longitude;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param longitude: the longitude to set
|
||||
*/
|
||||
public void setLongitude(String longitude) {
|
||||
this.longitude = longitude;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the fitTime
|
||||
*/
|
||||
|
||||
public ArrayList<KFitTime> getKFitTime() {
|
||||
return fitTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the fitTime
|
||||
*/
|
||||
|
||||
public ArrayList<KsThree> getKsThree() {
|
||||
return ksThree;
|
||||
}
|
||||
public void setKsThree(ArrayList<KsThree> ksThree) {
|
||||
this.ksThree = ksThree;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.table;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
|
||||
/*
|
||||
* The KStationCoefficients.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* ate Ticket# Engineer Description
|
||||
* ----------- ---------- ---------- --------------------------
|
||||
* 05/14/2013 #989 qzhou Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
|
||||
@XmlRootElement(name = "kStationCoefficients")
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
public class KStationCoefficients implements ISerializableObject{
|
||||
|
||||
/**
|
||||
* A list of the available KStationCoefficients
|
||||
*/
|
||||
@XmlElement(name="kStationCoefficient")
|
||||
private ArrayList<KStationCoefficient> stationList;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public KStationCoefficients() {
|
||||
stationList = new ArrayList<KStationCoefficient>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the list of KStationCoefficients
|
||||
* @return the stationList
|
||||
*/
|
||||
public ArrayList<KStationCoefficient> getKStationCoefficients() {
|
||||
return stationList;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param file
|
||||
* @return
|
||||
* @throws JAXBException
|
||||
*/
|
||||
public static KStationCoefficients fromFile(File file) throws JAXBException {
|
||||
KStationCoefficients gml = null;
|
||||
|
||||
JAXBContext ctx = JAXBContext.newInstance(KStationCoefficients.class);
|
||||
if (ctx != null) {
|
||||
Unmarshaller um = ctx.createUnmarshaller();
|
||||
if (um != null) {
|
||||
gml = (KStationCoefficients) um.unmarshal(file);
|
||||
}
|
||||
}
|
||||
//System.out.println("*****fromFile"+gml.getK9Limit());
|
||||
return gml;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param is
|
||||
* @return
|
||||
* @throws JAXBException
|
||||
*/
|
||||
public static KStationCoefficients fromStream(InputStream is)
|
||||
throws JAXBException {
|
||||
KStationCoefficients gml = null;
|
||||
|
||||
JAXBContext ctx = JAXBContext.newInstance(KStationCoefficients.class);
|
||||
if (ctx != null) {
|
||||
Unmarshaller um = ctx.createUnmarshaller();
|
||||
if (um != null) {
|
||||
gml = (KStationCoefficients) um.unmarshal(is);
|
||||
}
|
||||
}
|
||||
|
||||
return gml;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.table;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
/*
|
||||
* The KStationCoeffTable Reader.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* ate Ticket# Engineer Description
|
||||
* ----------- ---------- ---------- --------------------------
|
||||
* 05/14/2013 #989 qzhou Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
@XmlRootElement(name = "ksThree")
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlType(name = "")
|
||||
public class KsThree {
|
||||
|
||||
@XmlAttribute
|
||||
private String period;
|
||||
|
||||
@XmlAttribute
|
||||
private String season;
|
||||
|
||||
@XmlAttribute
|
||||
private int k0;
|
||||
|
||||
@XmlAttribute
|
||||
private int k1;
|
||||
|
||||
@XmlAttribute
|
||||
private int k2;
|
||||
|
||||
@XmlAttribute
|
||||
private int k3;
|
||||
|
||||
@XmlAttribute
|
||||
private int k4;
|
||||
|
||||
@XmlAttribute
|
||||
private int k5;
|
||||
|
||||
@XmlAttribute
|
||||
private int k6;
|
||||
|
||||
@XmlAttribute
|
||||
private int k7;
|
||||
|
||||
@XmlAttribute
|
||||
private int k8;
|
||||
|
||||
@XmlAttribute
|
||||
private int k9;
|
||||
|
||||
|
||||
public String getSeason() {
|
||||
return season;
|
||||
}
|
||||
public void setSeason(String season) {
|
||||
this.season = season;
|
||||
}
|
||||
|
||||
public String getPeriod() {
|
||||
return period;
|
||||
}
|
||||
public void setPeriod(String period) {
|
||||
this.period = period;
|
||||
}
|
||||
|
||||
public int getK0() {
|
||||
return k0;
|
||||
}
|
||||
public void setK0(int k0) {
|
||||
this.k0 = k0;
|
||||
}
|
||||
|
||||
public int getK1() {
|
||||
return k1;
|
||||
}
|
||||
public void setK1(int k1) {
|
||||
this.k1 = k1;
|
||||
}
|
||||
|
||||
public int getK2() {
|
||||
return k2;
|
||||
}
|
||||
public void setK2(int k2) {
|
||||
this.k2 = k2;
|
||||
}
|
||||
|
||||
public int getK3() {
|
||||
return k3;
|
||||
}
|
||||
public void setK3(int k3) {
|
||||
this.k3 = k3;
|
||||
}
|
||||
|
||||
public int getK4() {
|
||||
return k4;
|
||||
}
|
||||
public void setK4(int k4) {
|
||||
this.k4 = k4;
|
||||
}
|
||||
|
||||
public int getK5() {
|
||||
return k5;
|
||||
}
|
||||
public void setK5(int k5) {
|
||||
this.k5 = k5;
|
||||
}
|
||||
|
||||
public int getK6() {
|
||||
return k6;
|
||||
}
|
||||
public void setK6(int k6) {
|
||||
this.k6 = k6;
|
||||
}
|
||||
|
||||
public int getK7() {
|
||||
return k7;
|
||||
}
|
||||
public void setK7(int k7) {
|
||||
this.k7 = k7;
|
||||
}
|
||||
|
||||
public int getK8() {
|
||||
return k8;
|
||||
}
|
||||
public void setK8(int k8) {
|
||||
this.k8 = k8;
|
||||
}
|
||||
|
||||
public int getK9() {
|
||||
return k9;
|
||||
}
|
||||
public void setK9(int k9) {
|
||||
this.k9 = k9;
|
||||
}
|
||||
}
|
||||
|
|
@ -27,7 +27,7 @@ import com.raytheon.uf.common.localization.PathManagerFactory;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* 04/2013 975 sgurung Initial creation
|
||||
*
|
||||
* 07/2013 975 qzhou Change Map<String, GeoMagStation> stnsByCode to
|
||||
* </pre>
|
||||
*
|
||||
* @author sgurung
|
||||
|
@ -43,11 +43,10 @@ public class GeoMagStationLookup {
|
|||
private static GeoMagStationLookup instance;
|
||||
|
||||
/** A map of the stations. The key is the station code of the station */
|
||||
private Map<String, GeoMagStation> stnsByCode;
|
||||
private Map<String, ArrayList<GeoMagStation>> stnsByCode;
|
||||
|
||||
public static synchronized GeoMagStationLookup getInstance() {
|
||||
if (instance == null) {
|
||||
// System.out.println("in reloading geoMagStations.xml ....");
|
||||
instance = new GeoMagStationLookup();
|
||||
}
|
||||
return instance;
|
||||
|
@ -64,7 +63,7 @@ public class GeoMagStationLookup {
|
|||
}
|
||||
|
||||
private GeoMagStationLookup() {
|
||||
stnsByCode = new HashMap<String, GeoMagStation>();
|
||||
stnsByCode = new HashMap<String, ArrayList<GeoMagStation>>();
|
||||
try {
|
||||
initStationList();
|
||||
} catch (GeoMagException e) {
|
||||
|
@ -72,11 +71,26 @@ public class GeoMagStationLookup {
|
|||
}
|
||||
}
|
||||
|
||||
public GeoMagStation getStationByCode(String stnCode) {
|
||||
return stnsByCode.get(stnCode);
|
||||
public GeoMagStation getStationByCode(String stnCode, boolean hasHeader) {
|
||||
ArrayList<GeoMagStation> stationList = null;
|
||||
|
||||
stationList = stnsByCode.get(stnCode);
|
||||
|
||||
int i = 0;
|
||||
for (i = 0; i <stationList.size(); i++) {
|
||||
|
||||
if (hasHeader == true && stationList.get(i).getRawDataFormat().getHeaderFormat() != null)
|
||||
break;
|
||||
else if (hasHeader == false && stationList.get(i).getRawDataFormat().getHeaderFormat() == null)
|
||||
break;
|
||||
else if (hasHeader == true && stationList.get(i).getRawDataFormat().getHeaderFormat() == null)
|
||||
break;
|
||||
}
|
||||
|
||||
public Map<String, GeoMagStation> getStationsByCodeMap() {
|
||||
return stationList.get(i);
|
||||
}
|
||||
|
||||
public Map<String, ArrayList<GeoMagStation>> getStationsByCodeMap() {
|
||||
return stnsByCode;
|
||||
}
|
||||
|
||||
|
@ -110,15 +124,28 @@ public class GeoMagStationLookup {
|
|||
if (stnsFile.exists()) {
|
||||
geoMagStationsTbl = new GeoMagStationTableReader(stnsFile.getPath());
|
||||
}
|
||||
|
||||
// if site version exists, use it instead
|
||||
/*if (siteStnsFile.exists()) {
|
||||
geoMagStationsTbl = new GeoMagStationTableReader(stnsFile.getPath());
|
||||
}*/
|
||||
|
||||
List<GeoMagStation> list = (geoMagStationsTbl!=null)?geoMagStationsTbl.getStationList():new ArrayList<GeoMagStation>();
|
||||
|
||||
//System.out.println("**list "+list.size());
|
||||
for(GeoMagStation station : list){
|
||||
stnsByCode.put(station.getStationCode(), station);
|
||||
ArrayList<GeoMagStation> stationList = null;
|
||||
if (stnsByCode.containsKey(station.getStationCode())) {
|
||||
stationList = stnsByCode.get(station.getStationCode());
|
||||
if(stationList==null)
|
||||
stationList=new ArrayList<GeoMagStation>();
|
||||
|
||||
stationList.add(station);
|
||||
|
||||
}else{
|
||||
stationList=new ArrayList<GeoMagStation>();
|
||||
stationList.add(station);
|
||||
}
|
||||
stnsByCode.put(station.getStationCode(), stationList);//station);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new GeoMagException("Unable to unmarshal ncep geomag stations file");
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
package gov.noaa.nws.ncep.common.dataplugin.geomag.util;
|
||||
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.exception.GeoMagException;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.table.KStationCoeffTableReader;
|
||||
import gov.noaa.nws.ncep.common.dataplugin.geomag.table.KStationCoefficient;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.bind.JAXBException;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
|
||||
/*
|
||||
* The KStationCoefficient table Lookup.
|
||||
*
|
||||
* <pre>
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* ate Ticket# Engineer Description
|
||||
* ----------- ---------- ---------- --------------------------
|
||||
* 05/14/2013 #989 qzhou Initial Creation
|
||||
* </pre>
|
||||
*
|
||||
* @author qzhou
|
||||
* @version 1
|
||||
*/
|
||||
|
||||
public class KStationCoefficientLookup {
|
||||
|
||||
/** The logger */
|
||||
protected transient Log logger = LogFactory.getLog(getClass());
|
||||
|
||||
/** The singleton instance of GeoMagStationLookup **/
|
||||
private static KStationCoefficientLookup instance;
|
||||
|
||||
/** A map of the stations. The key is the station code of the station */
|
||||
private Map<String, KStationCoefficient> coeff;
|
||||
|
||||
public static synchronized KStationCoefficientLookup getInstance() {
|
||||
if (instance == null) {
|
||||
|
||||
try {
|
||||
instance = new KStationCoefficientLookup();
|
||||
} catch (JAXBException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* If file has been modified, then reload it again
|
||||
*
|
||||
* @return
|
||||
* @return
|
||||
*/
|
||||
public static void ReloadInstance() {
|
||||
instance = null;
|
||||
}
|
||||
|
||||
private KStationCoefficientLookup() throws JAXBException {
|
||||
coeff = new HashMap<String, KStationCoefficient>();
|
||||
try {
|
||||
initStationList();
|
||||
} catch (GeoMagException e) {
|
||||
logger.error("Unable to initialize K stations list!", e);
|
||||
}
|
||||
}
|
||||
|
||||
public KStationCoefficient getStationByCode(String stnCode) {
|
||||
return coeff.get(stnCode);
|
||||
}
|
||||
|
||||
public Map<String, KStationCoefficient> getStationsByCodeMap() {
|
||||
return coeff;
|
||||
}
|
||||
|
||||
private void initStationList() throws GeoMagException, JAXBException {
|
||||
IPathManager pathMgr = PathManagerFactory.getPathManager();
|
||||
|
||||
LocalizationContext commonStaticBase = pathMgr.getContext(
|
||||
LocalizationContext.LocalizationType.COMMON_STATIC,
|
||||
LocalizationContext.LocalizationLevel.BASE);
|
||||
|
||||
/*LocalizationContext commonStaticSite = pathMgr.getContext(
|
||||
LocalizationContext.LocalizationType.COMMON_STATIC,
|
||||
LocalizationContext.LocalizationLevel.SITE);*/
|
||||
|
||||
String path = "";
|
||||
//String sitePath = "";
|
||||
try {
|
||||
path = pathMgr.getFile(commonStaticBase,
|
||||
"ncep" + File.separator + "geomag" + File.separator + "kStandardLookup.xml")
|
||||
.getCanonicalPath();
|
||||
//sitePath = pathMgr.getFile(commonStaticSite, NcPathConstants.GEOMAG_STNS_TBL).getCanonicalPath();
|
||||
} catch (IOException e) {
|
||||
logger.error("Error reading K stations coefficient table. ", e);
|
||||
}
|
||||
|
||||
File stnsFile = new File(path);
|
||||
|
||||
//File siteStnsFile = new File(sitePath);
|
||||
KStationCoeffTableReader kStationCoeffTbl = null;
|
||||
|
||||
if (stnsFile.exists()) {
|
||||
kStationCoeffTbl = new KStationCoeffTableReader(stnsFile.getPath());
|
||||
}
|
||||
// if site version exists, use it instead
|
||||
/*if (siteStnsFile.exists()) {
|
||||
geoMagStationsTbl = new GeoMagStationTableReader(stnsFile.getPath());
|
||||
}*/
|
||||
|
||||
List<KStationCoefficient> list = (kStationCoeffTbl!=null)? kStationCoeffTbl.getStationList() : new ArrayList<KStationCoefficient>();
|
||||
|
||||
for(KStationCoefficient station : list){
|
||||
coeff.put(station.getStationCode(), station);
|
||||
//System.out.println("****look2 "+station.getStationCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue