Merge branch 'omaha_13.5.3' into development
Conflicts: cave/build/static/common/cave/etc/ncep/PlotModels/PlotParameters/plotParameters_ncairep.xml cave/build/static/common/cave/etc/ncep/PlotModels/PlotParameters/plotParameters_ncpirep.xml cave/build/static/common/cave/etc/ncep/ResourceDefns/MISC/SGWH/SGWH.xml cave/build/static/common/cave/etc/ncep/ResourceDefns/MISC/SGWH/WaveSat.xml cave/com.raytheon.uf.viz.archive/src/com/raytheon/uf/viz/archive/ui/ICaseCopy.java cave/com.raytheon.uf.viz.monitor.scan/src/com/raytheon/uf/viz/monitor/scan/resource/ScanResourceData.java cave/com.raytheon.viz.core.contours/src/com/raytheon/viz/core/contours/rsc/displays/AbstractGriddedDisplay.java cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/dialogs/formatterlauncher/StyledTextComp.java cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/textformatter/CombinationsFileUtil.java cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/rsc/MPEFieldResource.java cave/com.raytheon.viz.pointdata/src/com/raytheon/viz/pointdata/util/PointDataCubeAdapter.java cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/FollowupData.java cave/com.raytheon.viz.warngen/src/com/raytheon/viz/warngen/gui/WarngenDialog.java cots/edu.uci.ics.crawler4j/.classpath cots/edu.uci.ics.crawler4j/META-INF/MANIFEST.MF cots/edu.uci.ics.crawler4j/build.properties edexOsgi/build.edex/esb/bin/yajsw/wrapper.jar edexOsgi/build.edex/esb/bin/yajsw/wrapperApp.jar edexOsgi/build.edex/esb/conf/log4j-ingest.xml edexOsgi/build.edex/esb/conf/spring/cron.properties edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AWW.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/EXASCT.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_Composite.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/Global.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/LTNG.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/LocalRadar.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/McIdas.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ModelSounding.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMSND.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NcGridInventory.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NcGridModelParameters.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NcGridModelTimes.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NcScat.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NsharpGridInventory.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/Radar.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SVRL.xml edexOsgi/build.edex/esb/data/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SolarImage.xml edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/milemarkers.vm edexOsgi/build.edex/esb/data/utility/common_static/base/warngen/milemarkers.xml edexOsgi/com.raytheon.edex.ingestsrv/res/spring/persist-ingest.xml edexOsgi/com.raytheon.edex.plugin.airep/res/spring/airep-ingest.xml edexOsgi/com.raytheon.edex.plugin.airep/src/com/raytheon/edex/plugin/airep/AirepDecoder.java edexOsgi/com.raytheon.edex.plugin.bufrua/src/com/raytheon/edex/plugin/bufrua/decoder/AbstractBUFRUAAdapter.java edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-common.xml edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-request.xml edexOsgi/com.raytheon.edex.plugin.gfe/res/spring/gfe-spring.xml edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/cache/d2dparms/D2DParmIdCache.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/config/GFESiteActivation.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/GridParmManager.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/database/D2DGridDatabase.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SmartInitRequestHandler.java edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/notify/GfeIngestNotificationFilter.java edexOsgi/com.raytheon.edex.plugin.grib/GribDecoder.py edexOsgi/com.raytheon.edex.plugin.obs/src/com/raytheon/edex/plugin/obs/metar/MetarDecoder.java edexOsgi/com.raytheon.edex.plugin.pirep/res/spring/pirep-ingest.xml edexOsgi/com.raytheon.edex.plugin.pirep/src/com/raytheon/edex/plugin/pirep/PirepDecoder.java edexOsgi/com.raytheon.edex.plugin.poessounding/src/com/raytheon/edex/plugin/poessounding/POESSoundingDecoder.java edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/plugin/satellite/SatelliteDecoder.java edexOsgi/com.raytheon.edex.plugin.shef/unit-test/test/edex/transform/shef/TestMetarToShefTransformer.java edexOsgi/com.raytheon.edex.plugin.taf/src/com/raytheon/edex/plugin/taf/common/TafRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.airep/src/com/raytheon/uf/common/dataplugin/airep/AirepRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.binlightning/src/com/raytheon/uf/common/dataplugin/binlightning/BinLightningRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.bufrua/src/com/raytheon/uf/common/dataplugin/bufrua/UAObs.java edexOsgi/com.raytheon.uf.common.dataplugin.cwat/src/com/raytheon/uf/common/dataplugin/cwat/CWATRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.fssobs/src/com/raytheon/uf/common/dataplugin/fssobs/FSSObsRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/db/objects/GFERecord.java edexOsgi/com.raytheon.uf.common.dataplugin.goessounding/src/com/raytheon/uf/common/dataplugin/goessounding/GOESSounding.java edexOsgi/com.raytheon.uf.common.dataplugin.npp.nucaps/src/com/raytheon/uf/common/dataplugin/npp/nucaps/NucapsRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.pirep/src/com/raytheon/uf/common/dataplugin/pirep/PirepRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.preciprate/src/com/raytheon/uf/common/dataplugin/preciprate/PrecipRateRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.profiler/src/com/raytheon/uf/common/dataplugin/profiler/ProfilerObs.java edexOsgi/com.raytheon.uf.common.dataplugin.radar/src/com/raytheon/uf/common/dataplugin/radar/RadarRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.scan/src/com/raytheon/uf/common/dataplugin/scan/ScanRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/AbstractWarningRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/PracticeWarningRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/WarningRecord.java edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/milemarkers.vm edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/milemarkers.xml edexOsgi/com.raytheon.uf.common.util/src/com/raytheon/uf/common/util/header/WMOHeaderFinder.java edexOsgi/com.raytheon.uf.edex.database/src/com/raytheon/uf/edex/database/plugin/PluginDao.java edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/res/spring/bandwidth-datadelivery-edex-impl.xml edexOsgi/com.raytheon.uf.edex.plugin.acars/src/com/raytheon/uf/edex/plugin/acars/decoder/ACARSDataAdapter.java edexOsgi/com.raytheon.uf.edex.plugin.ffmp/src/com/raytheon/uf/edex/plugin/ffmp/FFMPGenerator.java ncep/gov.noaa.nws.ncep.common.dataplugin.gempak/gov.noaa.nws.ncep.common.dataplugin.gempak.ecl 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/src/gov/noaa/nws/ncep/common/dataplugin/gpd/GenericPointDataRecord.java ncep/gov.noaa.nws.ncep.common.dataplugin.ncairep/src/gov/noaa/nws/ncep/common/dataplugin/ncairep/NcAirepPointDataTransform.java ncep/gov.noaa.nws.ncep.common.dataplugin.ncairep/src/gov/noaa/nws/ncep/common/dataplugin/ncairep/NcAirepRecord.java ncep/gov.noaa.nws.ncep.common.dataplugin.ncpirep/src/gov/noaa/nws/ncep/common/dataplugin/ncpirep/NcPirepRecord.java ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AIRMET.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ASCT.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AUTOSPE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AVIATION.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AVN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AVN190AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AVN80PAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/AVN80US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CCPA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CCPA2P5.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CCPA_US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CMC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CMCE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CMCE_ENS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CPCOUTLK80US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/CSIG.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/DGEX_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/DGEX_US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/DPD.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWFG.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWFT.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWFWAVE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_AF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_ATL.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_ATL_EQ.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_EPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_EPAC_EQ.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_EU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_WPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ECMWF_WPAC_EQ.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ESTOFS_PR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ESTOFS_US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/EXASCT.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFG.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFG_ALR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FFG_TIR_HIRES.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FNMOCWAVE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/FYC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GDAS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GEFS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GEFSC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GEFS_ENS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS40US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS95US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFSGUIDE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFSLAMPTSTORM.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS_ENS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS_GU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS_NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS_PAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GFS_PR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GHM.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GHMNEST.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_Composite.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_DMSP.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_ERS-QuickSCAT-Scatterometer.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GMS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES10.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES11.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES12.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES13.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES15.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES7.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES8.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_GOES9.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_JERS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_METEOSAT.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_Miscellaneous.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_NOAA16.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_NOAA17.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_NOAA18.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_NOAA19.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GINI_POES-NPOESS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GMS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES10.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES11.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES12.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES13.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES15.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES6.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES7.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES8.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOES9.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GOESGFS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GRLKWAVE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GWW.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GWW233.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/GWWP5.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/Global.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_ARW_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_ARW_E.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_ARW_GU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_ARW_HI.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_ARW_SJU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_ARW_W.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_NMM_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_NMM_E.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_NMM_GU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_NMM_HI.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_NMM_SJU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HIRESW_NMM_W.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HPCGUIDE_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HPCQPF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HPCQPFNDFD.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HPC_RAIN_CAT_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HPC_RAIN_CAT_US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/HRCN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ICE12NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ICE12SH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ICE12TH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ICE25NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ICE25SH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ICEP5.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/IND.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/ISIG.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/LTNG.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/LTNG2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/LocalRadar.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METAR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT10.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT3.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT5.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT6.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT7.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT8.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/METEOSAT9.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MOS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MOS_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_ALR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_FWR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_MSR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_ORN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_RHA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_RSA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_SJU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_STR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_TAR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_LOCAL_TUA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_ALR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_FWR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_MSR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_ORN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_RHA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_SJU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MPE_MOSAIC_TAR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MRF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MRF160HI.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MRF190AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MRF190PR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MRF_NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MTS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/MTSAT2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAEFS_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAEFS_BC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAEFS_US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM11.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM11AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM12_CNTRL_US.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM20.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM22AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM32PR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM45AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM80.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM95AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMDNG5.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMDNG5_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMDNG5_HI.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMDNG5_PR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMNEST_HI.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAMSND.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NAM_00.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NCON.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NMM40.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NOGAPS.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NOHRSC_SNOW.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NWW3.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NcGridInventory.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NcGridSoundingInventory.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/NsharpGridInventory.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/OFSGMEX.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/OFSWATL.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/OPCWAVE12_ATL.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/OPCWAVE12_NPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/OPCWAVE12_SPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/PROB3HR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_AUTO_TUA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_RFC_PTR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_RFC_RSA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_RFC_STR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_ALR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_FWR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_KRF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_MSR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_ORN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_RHA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_SJU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_TAR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_TIR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QPE_XNAV_TUA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/QSCT.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RAP.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RAP32.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RAP40.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RCM.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RFCQPF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTGSST.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTGSSTHR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTMA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTMA_AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTMA_GU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTMA_HI.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RTMA_PR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RUC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/RUC40.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SCD.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SHIP.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SPCGUIDE.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SREF2P5.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SREF40.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SREF45.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/SVRL.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/TPC_WIND_PROB.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UAIR.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKENS_ASIA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKENS_CPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKENS_NA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKENS_NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_ASIA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_AU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_CPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_EU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_NA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_NH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_SA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_SAF.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/UKMET_SPAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/VAAC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WARN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WATCH.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10AK_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10EP.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10EP_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10WC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10WC_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10WNA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE10WNA_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE2AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE30MAO.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE30MGLOBAL.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4AK.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4AK_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4ENP.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4ENP_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4WC.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4WC_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4WNA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVE4WNA_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVEP25WNA.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WAVEP25WNA_2.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WCN.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WCP.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WOU.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WSAT.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WSTM.xml ncep/gov.noaa.nws.ncep.edex.common/utility/common_static/base/ncep/hold/NcInventoryDefinitions/WSTM2.xml 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.gempak/gov.noaa.nws.ncep.edex.plugin.gempak.ecl 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.ncairep/res/spring/ncairep-ingest.xml ncep/gov.noaa.nws.ncep.edex.plugin.ncairep/src/gov/noaa/nws/ncep/edex/plugin/ncairep/NcAirepDecoder.java ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/res/spring/ncpirep-ingest.xml ncep/gov.noaa.nws.ncep.edex.plugin.ncpirep/src/gov/noaa/nws/ncep/edex/plugin/ncpirep/NcPirepDecoder.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.edex.uengine/src/gov/noaa/nws/ncep/edex/uengine/tasks/profile/ObservedSoundingQuery.java ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/AttributeSetGroups/PGEN/PGEN-PGEN.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/AttributeSetGroups/PGEN/default.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/AttributeSetGroups/PGEN/monocolor-green.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/AttributeSetGroups/PGEN/monocolor-white.attr ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/MISC/SGWH/WaveSat.xml ncep/gov.noaa.nws.ncep.viz.localization/localization/ncep/ResourceDefns/PGEN/Volcano/Volcano.xml ncep/gov.noaa.nws.ncep.viz.rsc.ncgrid/src/gov/noaa/nws/ncep/viz/rsc/ncgrid/contours/ContourSupport.java rpms/awips2.qpid/0.18/SOURCES/wrapper.conf rpms/awips2.qpid/0.18/SPECS/qpid-java.spec.patch0 Change-Id: I0f1887b68875b77234407e68d3e4f9e6760e4539 Former-commit-id:fbfaf0bd64
[formerly516ba4eaf5
[formerly 6828de5272fc41eff0cfc1e4be88e7abc533793c]] Former-commit-id:516ba4eaf5
Former-commit-id:2dbc993fac
This commit is contained in:
commit
63dbe78c7b
1058 changed files with 19152 additions and 11984 deletions
|
@ -0,0 +1,5 @@
|
|||
s2s
|
||||
default : SKY_COVER_00
|
||||
1 : SKY_COVER_00
|
||||
4 : SKY_COVER_08
|
||||
7 : SKY_COVER_06
|
|
@ -0,0 +1,13 @@
|
|||
s2s
|
||||
0 : SKY_COVER_00
|
||||
1 : SKY_COVER_02
|
||||
2 : SKY_COVER_03
|
||||
4 : SKY_COVER_08
|
||||
5 : SKY_COVER_00
|
||||
6 : SKY_COVER_05
|
||||
8 : SKY_COVER_09
|
||||
9 : SKY_COVER_03
|
||||
11 : SKY_COVER_03
|
||||
12 : SKY_COVER_02
|
||||
13 : SKY_COVER_02
|
||||
14 : SKY_COVER_00
|
|
@ -0,0 +1,11 @@
|
|||
s2s
|
||||
SEV : ICING_08
|
||||
MODSEV : ICING_06
|
||||
MOD : ICING_05
|
||||
LGTMOD : ICING_04
|
||||
LGT : ICING_03
|
||||
TRACELGT: ICING_02
|
||||
TRACE : ICING_01
|
||||
NEG : ICING_00
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
s2s
|
||||
0 : PRESSURE_TENDENCY_00
|
||||
1 : PRESSURE_TENDENCY_01
|
||||
2 : PRESSURE_TENDENCY_02
|
||||
3 : PRESSURE_TENDENCY_03
|
||||
4 : PRESSURE_TENDENCY_04
|
||||
5 : PRESSURE_TENDENCY_05
|
||||
6 : PRESSURE_TENDENCY_06
|
||||
7 : PRESSURE_TENDENCY_07
|
||||
8 : PRESSURE_TENDENCY_08
|
|
@ -0,0 +1,11 @@
|
|||
s2s
|
||||
default : SKY_COVER_10
|
||||
BLNK : SKY_COVER_10
|
||||
SKC : SKY_COVER_00
|
||||
CLR : SKY_COVER_00
|
||||
FEW : SKY_COVER_02
|
||||
SCT : SKY_COVER_03
|
||||
BKN : SKY_COVER_06
|
||||
OVC : SKY_COVER_08
|
||||
OBS : SKY_COVER_09
|
||||
VV : SKY_COVER_09
|
|
@ -0,0 +1,10 @@
|
|||
s2s
|
||||
default : SKY_COVER_10
|
||||
1 : SKY_COVER_10
|
||||
2 : SKY_COVER_00
|
||||
3 : SKY_COVER_00
|
||||
4 : SKY_COVER_03
|
||||
5 : SKY_COVER_02
|
||||
6 : SKY_COVER_06
|
||||
7 : SKY_COVER_08
|
||||
8 : SKY_COVER_09
|
|
@ -0,0 +1,9 @@
|
|||
s2s
|
||||
EXTRM :TURBULENCE_7
|
||||
SEV :TURBULENCE_6
|
||||
MODSEV:TURBULENCE_5
|
||||
MOD :TURBULENCE_4
|
||||
LGTMOD:TURBULENCE_3
|
||||
LGT :TURBULENCE_2
|
||||
NEGLGT:TURBULENCE_1
|
||||
NEG :TURBULENCE_0
|
|
@ -0,0 +1,71 @@
|
|||
s2s
|
||||
-SHRA : PRESENT_WX_080
|
||||
+SHRA : PRESENT_WX_082
|
||||
SHRA : PRESENT_WX_081
|
||||
-SHSN : PRESENT_WX_085
|
||||
+SHSN : PRESENT_WX_086
|
||||
SHSN : PRESENT_WX_086
|
||||
-TSRA : PRESENT_WX_095
|
||||
+TSRA : PRESENT_WX_097
|
||||
TSRA : PRESENT_WX_095
|
||||
-TSSN : PRESENT_WX_095
|
||||
+TSSN : PRESENT_WX_097
|
||||
TSSN : PRESENT_WX_095
|
||||
FZRASN : PRESENT_WX_066
|
||||
BCBR : PRESENT_WX_010
|
||||
MIBR : PRESENT_WX_010
|
||||
BR : PRESENT_WX_010
|
||||
FZFG : PRESENT_WX_048
|
||||
BCFG : PRESENT_WX_041
|
||||
MIFG : PRESENT_WX_044
|
||||
FG : PRESENT_WX_045
|
||||
TS : PRESENT_WX_095
|
||||
+TS : PRESENT_WX_097
|
||||
FC : PRESENT_WX_019
|
||||
+FC : PRESENT_WX_019
|
||||
PO : PRESENT_WX_008
|
||||
DRSN : PRESENT_WX_036
|
||||
+DRSN : PRESENT_WX_037
|
||||
BLSN : PRESENT_WX_038
|
||||
+BLSN : PRESENT_WX_039
|
||||
FU : PRESENT_WX_004
|
||||
HZ : PRESENT_WX_005
|
||||
-SH : PRESENT_WX_080
|
||||
SH : PRESENT_WX_081
|
||||
DU : PRESENT_WX_006
|
||||
SA : PRESENT_WX_007
|
||||
SS : PRESENT_WX_009
|
||||
DS : PRESENT_WX_009
|
||||
+SS : PRESENT_WX_009
|
||||
+DS : PRESENT_WX_009
|
||||
-FZRA : PRESENT_WX_066
|
||||
-FZDZ : PRESENT_WX_056
|
||||
FZRA : PRESENT_WX_067
|
||||
FZDZ : PRESENT_WX_057
|
||||
GR : PRESENT_WX_088
|
||||
IC : PRESENT_WX_078
|
||||
PE : PRESENT_WX_079
|
||||
PL : PRESENT_WX_079
|
||||
GS : PRESENT_WX_087
|
||||
DZRA : PRESENT_WX_058
|
||||
RADZ : PRESENT_WX_058
|
||||
RASN : PRESENT_WX_069
|
||||
SNRA : PRESENT_WX_069
|
||||
-RA : PRESENT_WX_061
|
||||
+RA : PRESENT_WX_065
|
||||
RA : PRESENT_WX_063
|
||||
-DZ : PRESENT_WX_051
|
||||
+DZ : PRESENT_WX_055
|
||||
DZ : PRESENT_WX_053
|
||||
-SN : PRESENT_WX_071
|
||||
+SN : PRESENT_WX_075
|
||||
SN : PRESENT_WX_073
|
||||
-UP : PRESENT_WX_203
|
||||
+UP : PRESENT_WX_203
|
||||
UP : PRESENT_WX_203
|
||||
IP : PRESENT_WX_079
|
||||
SG : PRESENT_WX_077
|
||||
VA : PRESENT_WX_201
|
||||
PRFG : PRESENT_WX_044
|
||||
SQ : PRESENT_WX_018
|
||||
BLDU : PRESENT_WX_007
|
|
@ -48,6 +48,7 @@ import com.raytheon.viz.core.ColorUtil;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Mar 21, 2013 1638 mschenke Renamed to better represent purpose
|
||||
* Aug 29, 2103 DR 16550 D. Friedman Fix reflection constructor args
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -101,7 +102,7 @@ public class GenericToolsResourceData<T extends AbstractVizResource<?, ?>>
|
|||
public T construct(LoadProperties loadProperties, IDescriptor descriptor)
|
||||
throws VizException {
|
||||
try {
|
||||
Class<?>[] ctorParams = new Class<?>[] { this.getClass(),
|
||||
Class<?>[] ctorParams = new Class<?>[] { GenericToolsResourceData.class,
|
||||
LoadProperties.class };
|
||||
Object[] ctorArgs = new Object[] { this, loadProperties };
|
||||
|
||||
|
@ -110,7 +111,7 @@ public class GenericToolsResourceData<T extends AbstractVizResource<?, ?>>
|
|||
ctor = classT.getConstructor(ctorParams);
|
||||
} catch (NoSuchMethodException e) {
|
||||
// check for ctor with additional descriptor parameter
|
||||
ctorParams = new Class<?>[] { this.getClass(),
|
||||
ctorParams = new Class<?>[] { GenericToolsResourceData.class,
|
||||
LoadProperties.class, MapDescriptor.class };
|
||||
ctorArgs = new Object[] { this, loadProperties, descriptor };
|
||||
ctor = classT.getConstructor(ctorParams);
|
||||
|
|
|
@ -34,6 +34,8 @@ import java.util.List;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 24, 2013 2189 mschenke Initial creation
|
||||
* Sep 13, 2013 16581 kshrestha Variables scaleFont and smoothing
|
||||
* initialized to true.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
|
|
@ -43,6 +43,7 @@ import com.raytheon.viz.ui.tools.AbstractTool;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Feb 23, 2007 chammack Initial Creation.
|
||||
* Nov 3, 2009 3457 bsteffen Updated to change blend on all DisplayPanes, not just the active ones.
|
||||
* Aug 30, 2013 DR 16555 D. Friedman Prevent NPE.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -65,7 +66,7 @@ public class ToggleTool extends AbstractTool {
|
|||
ResourceList rscs = mapDescriptor.getResourceList();
|
||||
for (ResourcePair rp : rscs) {
|
||||
AbstractVizResource<?, ?> rsc = rp.getResource();
|
||||
if (rsc.getCapabilities().hasCapability(
|
||||
if (rsc != null && rsc.getCapabilities().hasCapability(
|
||||
BlendableCapability.class)) {
|
||||
rsc.getCapability(BlendableCapability.class).toggle();
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<Method name="Alias">
|
||||
<Field abbreviation="CCOV"/>
|
||||
</Method>
|
||||
<Method models="HPCGuide" displayName="Total Cloud Cover" name="Multiply">
|
||||
<Method models="HPCGuide HPCGuide-2.5km" displayName="Total Cloud Cover" name="Multiply">
|
||||
<Field abbreviation="TCC"/>
|
||||
<ConstantField value="100.0"/>
|
||||
</Method>
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
<Method models="HPCGuide GWW233 SeaIce RTGSST RTGSSTHR NICICE AK-NICICE
|
||||
HPCGuide GFSGuide LAMPTstorm TPCWindProb OPCWave180
|
||||
OPCWave181 OPCWave182 RTMA WNAWAVE238 AKWAVE239
|
||||
HPCqpfNDFD" name="NoDerivation" />
|
||||
HPCqpfNDFD HPCGuide-2.5km" name="NoDerivation" />
|
||||
<Method models="mesoEta212" levels="2FHAG" name="Import">
|
||||
<Field level="Surface" model="mesoEta215" abbreviation="P"/>
|
||||
</Method>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<Field abbreviation="snowTyp" />
|
||||
<ConstantField value="8" />
|
||||
</Method>
|
||||
<Method name="Mapping" models="HPCGuide AK-HPCGuide" levels="Surface">
|
||||
<Method name="Mapping" models="HPCGuide HPCGuide-2.5km AK-HPCGuide" levels="Surface">
|
||||
<Field level="Surface" abbreviation="wxType" />
|
||||
<ConstantField value="1" />
|
||||
<ConstantField value="168" />
|
||||
|
|
|
@ -60,6 +60,8 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Aug 27, 2013 2287 randerso Replaced hard coded constant with densityFactor
|
||||
* parameter to allow application specific density
|
||||
* scaling to better match A1 displays
|
||||
* Sep 10, 2013 DR 16257 MPorricelli Fix so that wind for global grids displays on
|
||||
* mercator maps.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
|
|
@ -61,6 +61,10 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* adjustment of density.
|
||||
* Added gridRelative flag to indicate whether direction
|
||||
* data is relative to grid or true north
|
||||
* Sep 9, 2013 DR16257 MPorricelli When setDestinationGeographicPoint fails (which can
|
||||
* happen for global lat/lon grid winds displayed on
|
||||
* Equidistant Cylindrical map) try again with different
|
||||
* pixel location.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -157,7 +161,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
if (Float.isNaN(spd) || Float.isNaN(dir)) {
|
||||
return;
|
||||
}
|
||||
|
||||
int tryDiffPixLoc = 0;
|
||||
try {
|
||||
ReferencedCoordinate rCoord = new ReferencedCoordinate(
|
||||
gridGeometryOfGrid, ijcoord);
|
||||
|
@ -169,12 +173,24 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
|
||||
if (stationPixelLocation != null) {
|
||||
stationPixelLocation[1]--;
|
||||
double[] newWorldLocation = this.descriptor
|
||||
.pixelToWorld(stationPixelLocation);
|
||||
this.gc.setStartingGeographicPoint(stationLocation[0],
|
||||
stationLocation[1]);
|
||||
this.gc.setDestinationGeographicPoint(newWorldLocation[0],
|
||||
newWorldLocation[1]);
|
||||
do {
|
||||
try {
|
||||
double[] newWorldLocation = this.descriptor
|
||||
.pixelToWorld(stationPixelLocation);
|
||||
this.gc.setStartingGeographicPoint(stationLocation[0],
|
||||
stationLocation[1]);
|
||||
this.gc.setDestinationGeographicPoint(
|
||||
newWorldLocation[0], newWorldLocation[1]);
|
||||
tryDiffPixLoc = 2; // setting of pts succeeded; do not need to try again
|
||||
|
||||
} catch (Exception e2) {
|
||||
if (tryDiffPixLoc == 0) { // setting of points failed first time through
|
||||
stationPixelLocation[1] += 2; // try pixel location in opposite dir of 1st try
|
||||
tryDiffPixLoc++;
|
||||
} else
|
||||
throw new VizException(e2); // failed on second try; give up
|
||||
}
|
||||
} while (tryDiffPixLoc < 2);
|
||||
}
|
||||
|
||||
if (gridRelative) {
|
||||
|
@ -185,6 +201,7 @@ public class GriddedVectorDisplay extends AbstractGriddedDisplay<Coordinate> {
|
|||
|
||||
// rotate dir from true north to display up
|
||||
dir -= this.gc.getAzimuth();
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new VizException(e);
|
||||
}
|
||||
|
|
|
@ -44,6 +44,10 @@ import org.opengis.referencing.operation.TransformException;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Oct 13, 2011 bsteffen Initial creation
|
||||
* Sep 10, 2013 DR 16257 MPorricelli Eliminate values that
|
||||
* fail to be tranformed,e.g.
|
||||
* when too close to pole for
|
||||
* mercator projections
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -146,7 +150,19 @@ public class PlotLocationCache {
|
|||
ConcatenatedTransform.create(grid2crs, crs2crs),
|
||||
crs2grid);
|
||||
|
||||
grid2grid.transform(result, 0, result, 0, xDim * yDim);
|
||||
try {
|
||||
grid2grid.transform(result, 0, result, 0, xDim * yDim);
|
||||
} catch (TransformException e1) {
|
||||
// Set values to NaN when fail transform
|
||||
for (int i = 0; i < result.length; i += 2) {
|
||||
try {
|
||||
grid2grid.transform(result, i, result, i, 1);
|
||||
} catch (TransformException e2) {
|
||||
result[i] = Float.NaN;
|
||||
result[i + 1] = Float.NaN;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (FactoryException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (InvalidGridGeometryException e) {
|
||||
|
|
|
@ -28,24 +28,39 @@
|
|||
# Date Ticket# Engineer Description
|
||||
# ------------ ---------- ----------- --------------------------
|
||||
# 07/25/08 njensen Initial Creation.
|
||||
#
|
||||
# 09/05/13 #2329 randerso Added error handling
|
||||
#
|
||||
#
|
||||
|
||||
import sys
|
||||
import sys, traceback, os, time, LogStream
|
||||
from java.util import ArrayList
|
||||
|
||||
def getCombinations(comboName):
|
||||
outercombos = ArrayList()
|
||||
cmd = "md = __import__(\"" + comboName + "\")"
|
||||
exec cmd
|
||||
comList = md.Combinations
|
||||
for i in comList:
|
||||
combos = ArrayList()
|
||||
innerList = i[0]
|
||||
for zone in innerList:
|
||||
combos.add(zone)
|
||||
outercombos.add(combos)
|
||||
return outercombos
|
||||
try:
|
||||
outercombos = ArrayList()
|
||||
md = __import__(comboName)
|
||||
comList = md.Combinations
|
||||
for i in comList:
|
||||
combos = ArrayList()
|
||||
innerList = i[0]
|
||||
for zone in innerList:
|
||||
combos.add(zone)
|
||||
outercombos.add(combos)
|
||||
return outercombos
|
||||
|
||||
except AttributeError as e:
|
||||
filename = md.__file__
|
||||
if filename.endswith("pyc") or filename.endswith("pyo"):
|
||||
filename = filename[:-1]
|
||||
with open(filename,'r') as fd:
|
||||
filecontents = fd.read()
|
||||
|
||||
LogStream.logProblem("\nERROR loading combinations file: "+ comboName +
|
||||
"\nmd.__file__: " + md.__file__ +
|
||||
"\ndir(md): " + str(dir(md)) +
|
||||
"\n" + md.__file__ + " last modified: " + time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(os.path.getmtime(md.__file__))) +
|
||||
"\n" + filename + " last modified: " + time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(os.path.getmtime(filename))) +
|
||||
"\nContents of " + filename + "\n" + filecontents)
|
||||
raise e
|
||||
|
||||
|
||||
|
|
|
@ -61,6 +61,8 @@ import com.raytheon.viz.gfe.textformatter.TextProductManager;
|
|||
* 26 SEP 2012 15423 ryu Fix product correction in practice mode
|
||||
* 15 MAY 2013 1842 dgilling Change constructor signature to accept a
|
||||
* DataManager instance.
|
||||
* 05 SEP 2013 2329 randerso Added call to ZoneCombinerComp.applyZoneCombo when
|
||||
* when run formatter button is clicked.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -386,12 +388,12 @@ public class ProductAreaComp extends Composite implements
|
|||
// use
|
||||
// it, else use the default
|
||||
String dbId = null;
|
||||
// zoneCombinerComp.compactList();
|
||||
zoneCombiner.applyZoneCombo();
|
||||
dbId = ((FormatterLauncherDialog) productTabCB)
|
||||
.getSelectedDataSource(productName);
|
||||
FormatterUtil.runFormatterScript(textProductMgr,
|
||||
productName, zoneCombiner.getZoneGroupings(),
|
||||
dbId, vtecMode, ProductAreaComp.this);
|
||||
productName, dbId, vtecMode,
|
||||
ProductAreaComp.this);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -63,7 +63,6 @@ import org.eclipse.swt.events.MouseAdapter;
|
|||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.Font;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
|
@ -152,6 +151,7 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
|||
* 02/12/2013 #1597 randerso Code cleanup. Fixed possible widget disposed errors on shut down.
|
||||
* 05/08/2013 #1842 dgilling Add alternate setProductText(), fix
|
||||
* warnings.
|
||||
* 09/03/2013 16534 ryu Refactor; sneak in a change for Ron (RM #1597).
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1851,7 +1851,7 @@ public class ProductEditorComp extends Composite implements
|
|||
}
|
||||
|
||||
// convert to hours and check bounds
|
||||
Float purgeOffset = (float) (offset / TimeUtil.SECONDS_PER_HOUR);
|
||||
Float purgeOffset = offset / ((float) TimeUtil.SECONDS_PER_HOUR);
|
||||
purgeOffset = Math.min(purgeOffset, 24F);
|
||||
purgeOffset = Math.max(purgeOffset, 1F);
|
||||
|
||||
|
@ -2868,19 +2868,14 @@ public class ProductEditorComp extends Composite implements
|
|||
}
|
||||
|
||||
// Look for locked text in the selection
|
||||
StyleRange[] styleRanges = styledText.getStyleRanges(selectionRange.x,
|
||||
selectionRange.y);
|
||||
Color lockedColor = textComp.getLockColor();
|
||||
for (StyleRange styleRange : styleRanges) {
|
||||
if (lockedColor.equals(styleRange.foreground)) {
|
||||
String msg2 = "Selection contains locked text\n\n ";
|
||||
MessageBox mb2 = new MessageBox(getShell(), SWT.OK
|
||||
| SWT.ICON_WARNING);
|
||||
mb2.setText("CTA");
|
||||
mb2.setMessage(msg2);
|
||||
mb2.open();
|
||||
return;
|
||||
}
|
||||
if (textComp.rangeHasLockedText(selectionRange.x, selectionRange.y)) {
|
||||
String msg2 = "Selection contains locked text\n\n ";
|
||||
MessageBox mb2 = new MessageBox(getShell(), SWT.OK
|
||||
| SWT.ICON_WARNING);
|
||||
mb2.setText("CTA");
|
||||
mb2.setMessage(msg2);
|
||||
mb2.open();
|
||||
return;
|
||||
}
|
||||
|
||||
// Word-wrap the whole selection.
|
||||
|
|
|
@ -81,6 +81,7 @@ import com.raytheon.viz.gfe.textformatter.TextFmtParserUtil;
|
|||
* 03 Dec 2012 15620 ryu Unlock framed cities list for editing.
|
||||
* 30 APR 2013 16095 ryu Modified updateTextStyle() to not lock edited text.
|
||||
* 29 AUG 2013 #2250 dgilling Better error handling for parseProductText().
|
||||
* 04 SEP 2013 16534 ryu Fixed word wrap to not insert duplicate text; refactor.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -340,19 +341,6 @@ public class StyledTextComp extends Composite {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* computes the logical caret offset within the ProductEditor as a result of
|
||||
* the CTA insert.
|
||||
*
|
||||
* @param newProductText
|
||||
* The new product text
|
||||
*/
|
||||
private int caretOffsetAfterCTAInsert(String newProductText) {
|
||||
int currentProductTextLength = textEditorST.getText().length();
|
||||
int displacement = newProductText.length() - currentProductTextLength;
|
||||
return displacement + textEditorST.getCaretOffset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Lock the parts of the text that needs to be uneditable.
|
||||
*/
|
||||
|
@ -585,7 +573,7 @@ public class StyledTextComp extends Composite {
|
|||
replaceText(ff, SPC + newfield);
|
||||
}
|
||||
} else {
|
||||
String s = SPC + newfield;
|
||||
String s = SPC + newfield;
|
||||
if (!ff.getText().equals(s)) {
|
||||
replaceText(ff, s);
|
||||
}
|
||||
|
@ -828,7 +816,7 @@ public class StyledTextComp extends Composite {
|
|||
* @return Whether or not there is text in the range that contains locked
|
||||
* text.
|
||||
*/
|
||||
private boolean rangeHasLockedText(int offset, int length) {
|
||||
protected boolean rangeHasLockedText(int offset, int length) {
|
||||
StyleRange[] ranges = textEditorST.getStyleRanges(offset, length);
|
||||
|
||||
for (StyleRange range : ranges) {
|
||||
|
@ -1363,16 +1351,7 @@ public class StyledTextComp extends Composite {
|
|||
int lineOffset = st.getOffsetAtLine(searchLine);
|
||||
|
||||
// if line contains locked text, quit looking.
|
||||
StyleRange[] styleRanges = st.getStyleRanges(lineOffset,
|
||||
line.length());
|
||||
boolean locked = false;
|
||||
for (StyleRange range : styleRanges) {
|
||||
if (range.foreground.equals(lockColor)) {
|
||||
locked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (locked) {
|
||||
if (rangeHasLockedText(lineOffset, line.length())) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1404,16 +1383,7 @@ public class StyledTextComp extends Composite {
|
|||
line = st.getLine(searchLine);
|
||||
|
||||
// don't use locked text
|
||||
StyleRange[] ranges = st.getStyleRanges(lineStartOffset,
|
||||
line.length());
|
||||
boolean locked = false;
|
||||
for (StyleRange range : ranges) {
|
||||
if (range.foreground.equals(lockColor)) {
|
||||
locked = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (locked) {
|
||||
if (rangeHasLockedText(lineStartOffset, line.length())) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1438,6 +1408,10 @@ public class StyledTextComp extends Composite {
|
|||
endIndex = st.getCharCount() - 1;
|
||||
}
|
||||
|
||||
if (endIndex < startIndex) {
|
||||
return new int[] { startIndex, endIndex, 0 };
|
||||
}
|
||||
|
||||
// get the block text before the cursor
|
||||
String pre = "";
|
||||
if (startIndex < cursorIndex) {
|
||||
|
|
|
@ -22,16 +22,12 @@ package com.raytheon.viz.gfe.dialogs.formatterlauncher;
|
|||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
|
@ -61,6 +57,7 @@ import org.opengis.referencing.FactoryException;
|
|||
import org.opengis.referencing.operation.TransformException;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.gfe.db.objects.GridLocation;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage;
|
||||
import com.raytheon.uf.common.localization.FileUpdatedMessage.FileChangeType;
|
||||
import com.raytheon.uf.common.localization.ILocalizationFileObserver;
|
||||
|
@ -70,21 +67,17 @@ import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel
|
|||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.LocalizationFile;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.uf.common.util.file.FilenameFilters;
|
||||
import com.raytheon.uf.viz.core.RGBColors;
|
||||
import com.raytheon.uf.viz.core.VizApp;
|
||||
import com.raytheon.uf.viz.core.exception.VizException;
|
||||
import com.raytheon.viz.gfe.Activator;
|
||||
import com.raytheon.viz.gfe.core.DataManagerUIFactory;
|
||||
import com.raytheon.viz.gfe.textformatter.CombinationsFileGenerator;
|
||||
import com.raytheon.viz.gfe.textformatter.CombinationsFileUtil;
|
||||
import com.raytheon.viz.gfe.textformatter.TextProductManager;
|
||||
import com.raytheon.viz.gfe.ui.AccessMgr;
|
||||
import com.raytheon.viz.gfe.ui.zoneselector.ZoneSelector;
|
||||
|
||||
/**
|
||||
|
@ -100,8 +93,9 @@ import com.raytheon.viz.gfe.ui.zoneselector.ZoneSelector;
|
|||
* Changes for non-blocking SaveDeleteComboDlg.
|
||||
* Changes for non-blocking ShuffleZoneGroupsDialog.
|
||||
* Changes for non-blocking ZoneColorEditorDlg.
|
||||
*
|
||||
* Mar 14, 2013 1794 djohnson Consolidate common FilenameFilter implementations.
|
||||
* Sep 05, 2013 2329 randerso Removed obsolete methods, added ApplyZoneCombo method
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author lvenable
|
||||
|
@ -307,6 +301,8 @@ public class ZoneCombinerComp extends Composite implements
|
|||
createMapArea(theSaved);
|
||||
|
||||
createBottomControls();
|
||||
|
||||
applyButtonState(false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -455,6 +451,7 @@ public class ZoneCombinerComp extends Composite implements
|
|||
@Override
|
||||
public void widgetSelected(SelectionEvent e) {
|
||||
zoneSelector.updateCombos(new HashMap<String, Integer>());
|
||||
applyButtonState(false);
|
||||
}
|
||||
});
|
||||
clearMI.setText("Clear");
|
||||
|
@ -731,14 +728,7 @@ public class ZoneCombinerComp extends Composite implements
|
|||
applyZoneComboBtn.addSelectionListener(new SelectionAdapter() {
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent event) {
|
||||
try {
|
||||
CombinationsFileGenerator.generateAutoCombinationsFile(
|
||||
zoneSelector.getZoneGroupings(),
|
||||
getCombinationsFileName() + ".py");
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM, "Unable to save "
|
||||
+ getCombinationsFileName(), e);
|
||||
}
|
||||
applyZoneCombo();
|
||||
}
|
||||
});
|
||||
Label label = new Label(controlComp, SWT.CENTER);
|
||||
|
@ -754,6 +744,25 @@ public class ZoneCombinerComp extends Composite implements
|
|||
label.setAlignment(SWT.CENTER);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save zone combo
|
||||
*/
|
||||
public void applyZoneCombo() {
|
||||
if (!buttonState()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
CombinationsFileUtil.generateAutoCombinationsFile(
|
||||
zoneSelector.getZoneGroupings(), getCombinationsFileName()
|
||||
+ ".py");
|
||||
applyButtonState(false);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM, "Unable to save "
|
||||
+ getCombinationsFileName(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the Color Editor dialog.
|
||||
*/
|
||||
|
@ -845,93 +854,6 @@ public class ZoneCombinerComp extends Composite implements
|
|||
return file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the names of the combo files at the given level. If level is null,
|
||||
* get the names of the combo files at all levels. Otherwise, only get the
|
||||
* names of the files at the given level.
|
||||
*
|
||||
* @param level
|
||||
* @return the save combo files at the given level
|
||||
*/
|
||||
public String[] getSavedCombos(LocalizationLevel level) {
|
||||
String comboDirName = "saved";
|
||||
String[] combos;
|
||||
File localFile;
|
||||
// Accept any file whose name ends with ".py".
|
||||
FilenameFilter filter = FilenameFilters.byFileExtension(".py");
|
||||
|
||||
if (level == null) {
|
||||
// Aggregate the filenames for all levels.
|
||||
// Use a set to keep names unique.
|
||||
Set<String> comboSet = new TreeSet<String>();
|
||||
LocalizationLevel[] levels = PathManagerFactory.getPathManager()
|
||||
.getAvailableLevels();
|
||||
for (int i = levels.length - 1; i >= 0; --i) {
|
||||
localFile = getLocalization(comboDirName, levels[i]);
|
||||
if ((localFile != null) && localFile.exists()) {
|
||||
comboSet.addAll(Arrays.asList(localFile.list(filter)));
|
||||
}
|
||||
}
|
||||
|
||||
combos = comboSet.toArray(new String[0]);
|
||||
} else {
|
||||
// Get only the filenames for USER level.
|
||||
localFile = getLocalization(comboDirName);
|
||||
combos = localFile.list(filter);
|
||||
}
|
||||
return combos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the combinations file called filename if it is in list or
|
||||
* filename.py is in list, and return the loaded file as a List of Lists of
|
||||
* Strings.
|
||||
*
|
||||
* @param list
|
||||
* The list of valid filenames
|
||||
* @param filename
|
||||
* The filename to load
|
||||
* @return the contents of the file, as a List of Lists of Strings.
|
||||
*/
|
||||
// public List<List<String>> findCombos(String[] list, String filename) {
|
||||
// List<List<String>> listOfCombos = null;
|
||||
// for (int i = 0; i < list.length; i++) {
|
||||
// if (list[i].equals(filename) || list[i].equals(filename + ".py")) {
|
||||
// listOfCombos = loadCombinationsFile(filename);
|
||||
// }
|
||||
// }
|
||||
// return listOfCombos;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Deletes the saved file chosen
|
||||
*
|
||||
* @param name
|
||||
* the combo file name
|
||||
* @throws LocalizationOpFailedException
|
||||
* if the server copy of the file cannot be deleted
|
||||
*/
|
||||
public void deleteSavedCombos(String name)
|
||||
throws LocalizationOpFailedException {
|
||||
String searchName = FileUtil.join(CombinationsFileUtil.COMBO_DIR_PATH,
|
||||
"saved", name + ".py");
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext userContext = pm.getContext(
|
||||
LocalizationType.CAVE_STATIC, LocalizationLevel.USER);
|
||||
LocalizationFile userFile = pm.getLocalizationFile(userContext,
|
||||
searchName);
|
||||
|
||||
if (AccessMgr.verifyDelete(userFile.getName(),
|
||||
LocalizationType.CAVE_STATIC, false)) {
|
||||
if (userFile.isAvailableOnServer()) {
|
||||
userFile.delete();
|
||||
} else if (userFile.exists()) {
|
||||
File localFile = userFile.getFile();
|
||||
localFile.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the localization for the save and delete functions. This is a
|
||||
* wrapper around getLocalization(String, level).
|
||||
|
@ -987,34 +909,40 @@ public class ZoneCombinerComp extends Composite implements
|
|||
}
|
||||
|
||||
public Map<String, Integer> loadCombinationsFile(String comboName) {
|
||||
List<List<String>> combolist = new ArrayList<List<String>>();
|
||||
File localFile = PathManagerFactory.getPathManager().getStaticFile(
|
||||
FileUtil.join(CombinationsFileUtil.COMBO_DIR_PATH, comboName
|
||||
+ ".py"));
|
||||
if (localFile != null) {
|
||||
combolist = CombinationsFileUtil.init(comboName);
|
||||
}
|
||||
|
||||
// reformat combinations into combo dictionary
|
||||
Map<String, Integer> d = new HashMap<String, Integer>();
|
||||
Map<String, Integer> dict = new HashMap<String, Integer>();
|
||||
try {
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext ctx = pm.getContext(
|
||||
LocalizationType.CAVE_STATIC, LocalizationLevel.SITE);
|
||||
File localFile = pm.getFile(ctx, FileUtil.join(
|
||||
CombinationsFileUtil.COMBO_DIR_PATH, comboName + ".py"));
|
||||
|
||||
List<List<String>> combolist = new ArrayList<List<String>>();
|
||||
if (localFile != null && localFile.exists()) {
|
||||
combolist = CombinationsFileUtil.init(comboName);
|
||||
} else {
|
||||
statusHandler.error("Combinations file does not found: "
|
||||
+ comboName);
|
||||
}
|
||||
|
||||
// reformat combinations into combo dictionary
|
||||
int group = 1;
|
||||
for (List<String> zonelist : combolist) {
|
||||
for (String z : zonelist) {
|
||||
d.put(z, group);
|
||||
dict.put(z, group);
|
||||
}
|
||||
group += 1;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.SIGNIFICANT,
|
||||
"Combo file is not in combo format: " + comboName);
|
||||
} catch (GfeException e) {
|
||||
statusHandler.handle(Priority.SIGNIFICANT, e.getLocalizedMessage(),
|
||||
e);
|
||||
return new HashMap<String, Integer>();
|
||||
}
|
||||
|
||||
currentComboFile = FileUtil.join(CombinationsFileUtil.COMBO_DIR_PATH,
|
||||
comboName + ".py");
|
||||
|
||||
return d;
|
||||
return dict;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1060,11 +988,12 @@ public class ZoneCombinerComp extends Composite implements
|
|||
&& message.getFileName().equalsIgnoreCase(currentComboFile)) {
|
||||
File file = new File(message.getFileName());
|
||||
String comboName = file.getName().replace(".py", "");
|
||||
if (file.getParent().endsWith("saved")) {
|
||||
comboName = FileUtil.join("saved", comboName);
|
||||
}
|
||||
statusHandler
|
||||
.info("Received FileUpdatedMessage for combinations file: "
|
||||
+ comboName);
|
||||
Map<String, Integer> comboDict = loadCombinationsFile(comboName);
|
||||
this.zoneSelector.updateCombos(comboDict);
|
||||
applyButtonState(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1085,4 +1014,20 @@ public class ZoneCombinerComp extends Composite implements
|
|||
});
|
||||
}
|
||||
}
|
||||
|
||||
private boolean buttonState() {
|
||||
final boolean[] state = { false };
|
||||
if (this.applyZoneComboBtn != null
|
||||
&& !this.applyZoneComboBtn.isDisposed()) {
|
||||
VizApp.runSync(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
state[0] = ZoneCombinerComp.this.applyZoneComboBtn
|
||||
.isEnabled();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return state[0];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
/**
|
||||
* 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.
|
||||
**/
|
||||
|
||||
/**
|
||||
* Creating the combinations file for the TextFormatter
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
*6/12/2008 mnash Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author mnash
|
||||
* @version 1
|
||||
*/
|
||||
package com.raytheon.viz.gfe.textformatter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.gfe.request.SaveCombinationsFileRequest;
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType;
|
||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.viz.gfe.core.DataManager;
|
||||
import com.raytheon.viz.gfe.core.internal.IFPClient;
|
||||
|
||||
public class CombinationsFileGenerator {
|
||||
|
||||
/**
|
||||
* Generates combinations files based on just running the formatter
|
||||
*
|
||||
* @param zoneGroupList
|
||||
* @param filename
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void generateAutoCombinationsFile(
|
||||
List<List<String>> zoneGroupList, String filename) throws Exception {
|
||||
generateCombinationsFile(zoneGroupList, filename, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates combinations files based on user wanting to save
|
||||
*
|
||||
* @param zoneGroupList
|
||||
* @param filename
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void generateSavedCombinationsFile(
|
||||
List<List<String>> zoneGroupList, String filename) throws Exception {
|
||||
|
||||
if (filename.endsWith(".py")) {
|
||||
generateCombinationsFile(zoneGroupList, filename, "saved"
|
||||
+ File.separator);
|
||||
} else {
|
||||
generateCombinationsFile(zoneGroupList, filename + ".py", "saved"
|
||||
+ File.separator);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by both auto and saved functions to actually write file
|
||||
*
|
||||
* @param zoneGroupList
|
||||
* @param filename
|
||||
* @param loc
|
||||
* @throws Exception
|
||||
*/
|
||||
public static void generateCombinationsFile(
|
||||
List<List<String>> zoneGroupList, String filename, String loc)
|
||||
throws Exception {
|
||||
IFPClient ifpc = DataManager.getCurrentInstance().getClient();
|
||||
SaveCombinationsFileRequest req = new SaveCombinationsFileRequest();
|
||||
req.setFileName(FileUtil.join(loc, filename));
|
||||
req.setCombos(zoneGroupList);
|
||||
ifpc.makeRequest(req);
|
||||
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
LocalizationContext ctx = pm.getContext(LocalizationType.CAVE_STATIC,
|
||||
LocalizationLevel.SITE);
|
||||
pm.getFile(ctx, FileUtil.join("gfe", "combinations", filename));
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
package com.raytheon.viz.gfe.textformatter;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
@ -33,7 +34,9 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
|
||||
import jep.JepException;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.gfe.exception.GfeException;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.python.GfePyIncludeUtil;
|
||||
import com.raytheon.uf.common.dataplugin.gfe.request.SaveCombinationsFileRequest;
|
||||
import com.raytheon.uf.common.localization.IPathManager;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||
import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel;
|
||||
|
@ -42,14 +45,16 @@ import com.raytheon.uf.common.localization.LocalizationFile;
|
|||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||
import com.raytheon.uf.common.localization.exception.LocalizationException;
|
||||
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
||||
import com.raytheon.uf.common.python.PyUtil;
|
||||
import com.raytheon.uf.common.python.PythonScript;
|
||||
import com.raytheon.uf.common.serialization.ISerializableObject;
|
||||
import com.raytheon.uf.common.serialization.SerializationException;
|
||||
import com.raytheon.uf.common.serialization.SerializationUtil;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.util.FileUtil;
|
||||
import com.raytheon.viz.gfe.core.DataManagerUIFactory;
|
||||
import com.raytheon.viz.gfe.core.internal.IFPClient;
|
||||
import com.raytheon.viz.gfe.textformatter.CombinationsFileUtil.ComboData.Entry;
|
||||
|
||||
/**
|
||||
|
@ -61,6 +66,8 @@ import com.raytheon.viz.gfe.textformatter.CombinationsFileUtil.ComboData.Entry;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 25, 2008 mnash Initial creation
|
||||
* Aug 07, 2013 1561 njensen Use pm.listFiles() instead of pm.listStaticFiles()
|
||||
* Sep 05, 2013 #2329 randerso Moved genereateAutoCombinationsFile here
|
||||
* Cleaned up error handling
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -178,7 +185,7 @@ public class CombinationsFileUtil {
|
|||
}
|
||||
s.append(':');
|
||||
|
||||
if (fn.length() > s.length() && fn.indexOf(s.toString()) == 0) {
|
||||
if ((fn.length() > s.length()) && (fn.indexOf(s.toString()) == 0)) {
|
||||
return fn.substring(s.length());
|
||||
} else {
|
||||
return "";
|
||||
|
@ -202,7 +209,7 @@ public class CombinationsFileUtil {
|
|||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static List<List<String>> init(String comboName) {
|
||||
public static List<List<String>> init(String comboName) throws GfeException {
|
||||
|
||||
IPathManager pm = PathManagerFactory.getPathManager();
|
||||
|
||||
|
@ -213,7 +220,6 @@ public class CombinationsFileUtil {
|
|||
File comboFile = new File(comboName);
|
||||
comboName = comboFile.getName();
|
||||
|
||||
String comboPath = GfePyIncludeUtil.getCombinationsIncludePath();
|
||||
String scriptPath = FileUtil.join(
|
||||
GfePyIncludeUtil.getUtilitiesLF(baseContext).getFile()
|
||||
.getPath(), "CombinationsInterface.py");
|
||||
|
@ -223,13 +229,15 @@ public class CombinationsFileUtil {
|
|||
map.put("comboName", comboName);
|
||||
PythonScript python = null;
|
||||
try {
|
||||
python = new PythonScript(scriptPath, comboPath,
|
||||
python = new PythonScript(scriptPath, PyUtil.buildJepIncludePath(
|
||||
GfePyIncludeUtil.getCombinationsIncludePath(),
|
||||
GfePyIncludeUtil.getCommonPythonIncludePath()),
|
||||
CombinationsFileUtil.class.getClassLoader());
|
||||
Object com = python.execute("getCombinations", map);
|
||||
combos = (List<List<String>>) com;
|
||||
} catch (JepException e) {
|
||||
statusHandler.handle(Priority.CRITICAL,
|
||||
"Could not get combinations", e);
|
||||
throw new GfeException("Error loading combinations file: "
|
||||
+ comboName, e);
|
||||
} finally {
|
||||
if (python != null) {
|
||||
python.dispose();
|
||||
|
@ -237,4 +245,30 @@ public class CombinationsFileUtil {
|
|||
}
|
||||
return combos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates combinations files based on just running the formatter
|
||||
*
|
||||
* @param zoneGroupList
|
||||
* @param filename
|
||||
* @throws Exception
|
||||
* @throws IOException
|
||||
*/
|
||||
public static void generateAutoCombinationsFile(
|
||||
List<List<String>> zoneGroupList, String filename) throws Exception {
|
||||
IFPClient ifpc = DataManagerUIFactory.getCurrentInstance().getClient();
|
||||
SaveCombinationsFileRequest req = new SaveCombinationsFileRequest();
|
||||
req.setFileName(filename);
|
||||
req.setCombos(zoneGroupList);
|
||||
try {
|
||||
statusHandler.info("Saving combinations file: " + filename);
|
||||
ifpc.makeRequest(req);
|
||||
statusHandler.info("Successfully saved combinations file: "
|
||||
+ filename);
|
||||
} catch (Exception e) {
|
||||
statusHandler.error("Error saving combinations file: " + filename,
|
||||
e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
package com.raytheon.viz.gfe.textformatter;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
|
@ -40,8 +39,9 @@ import com.raytheon.viz.gfe.tasks.TaskManager;
|
|||
* SOFTWARE HISTORY
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Sep 8, 2008 njensen Initial creation
|
||||
* Jan 15, 2010 3395 ryu Fix "issued by" functionality
|
||||
* Sep 8, 2008 njensen Initial creation
|
||||
* Jan 15, 2010 3395 ryu Fix "issued by" functionality
|
||||
* Sep 05, 2013 2329 randerso Removed save of combinations file
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -63,21 +63,20 @@ public class FormatterUtil {
|
|||
* the formatter instance to use
|
||||
* @param productName
|
||||
* the name of the text product
|
||||
* @param zoneList
|
||||
* the list of zones to produce the product for
|
||||
* @param dbId
|
||||
* source database
|
||||
* @param vtecMode
|
||||
* VTEC mode
|
||||
* @param finish
|
||||
* listener to fire when formatter finishes generating product
|
||||
*/
|
||||
public static void runFormatterScript(TextProductManager productMgr,
|
||||
String productName, List<List<String>> zoneList, String dbId,
|
||||
String vtecMode, TextProductFinishListener finish) {
|
||||
String productName, String dbId, String vtecMode,
|
||||
TextProductFinishListener finish) {
|
||||
try {
|
||||
String filename = productMgr.getCombinationsFileName(productName);
|
||||
boolean mapRequired = productMgr.mapRequired(productName);
|
||||
if (filename != null && mapRequired) {
|
||||
String filenameExt = filename + ".py";
|
||||
CombinationsFileGenerator.generateAutoCombinationsFile(
|
||||
zoneList, filenameExt);
|
||||
productMgr.reloadModule(filename);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<constraint constraintValue="grid" constraintType="EQUALS"/>
|
||||
</mapping>
|
||||
<mapping key="info.datasetId">
|
||||
<constraint constraintValue="FFG-TUA,FFG-ACR,FFG-STR,FFG-RSA,FFG-ORN,FFG-RHA,FFG-KRF,FFG-MSR,FFG-TAR,FFG-PTR,FFG-TIR-HiRes,FFG-ALR,FFG-FWR"
|
||||
<constraint constraintValue="FFG-TUA,FFG-ACR,FFG-STR,FFG-RSA,FFG-ORN,FFG-RHA,FFG-KRF,FFG-MSR,FFG-TAR,FFG-PTR,FFG-TIR,FFG-ALR,FFG-FWR"
|
||||
constraintType="IN" />
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
|
@ -321,7 +321,7 @@
|
|||
<constraint constraintValue="grid" constraintType="EQUALS"/>
|
||||
</mapping>
|
||||
<mapping key="info.datasetId">
|
||||
<constraint constraintValue="FFG-TIR-HiRes" constraintType="EQUALS"/>
|
||||
<constraint constraintValue="FFG-TIR" constraintType="EQUALS"/>
|
||||
</mapping>
|
||||
</metadataMap>
|
||||
</resourceData>
|
||||
|
|
|
@ -246,19 +246,19 @@
|
|||
menuText="1hr FFG" id="OH1hrFFG">
|
||||
<dataURI>/grib/%/FFG-TIR/FFG0124hr/%</dataURI>
|
||||
<substitute key="timespan" value="FFG0124hr"/>
|
||||
<substitute key="model" value="FFG-TIR-HiRes"/>
|
||||
<substitute key="model" value="FFG-TIR"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/hydro/FFGmosaic.xml"
|
||||
menuText="3hr FFG" id="OH3hrFFG">
|
||||
<dataURI>/grib/%/FFG-TIR-HiRes/FFG0324hr/%</dataURI>
|
||||
<dataURI>/grib/%/FFG-TIR/FFG0324hr/%</dataURI>
|
||||
<substitute key="timespan" value="FFG0324hr"/>
|
||||
<substitute key="model" value="FFG-TIR-HiRes"/>
|
||||
<substitute key="model" value="FFG-TIR"/>
|
||||
</contribute>
|
||||
<contribute xsi:type="bundleItem" file="bundles/hydro/FFGmosaic.xml"
|
||||
menuText="6hr FFG" id="OH6hrFFG">
|
||||
<dataURI>/grib/%/FFG-TIR-HiRes/FFG0624hr/%</dataURI>
|
||||
<dataURI>/grib/%/FFG-TIR/FFG0624hr/%</dataURI>
|
||||
<substitute key="timespan" value="FFG0624hr"/>
|
||||
<substitute key="model" value="FFG-TIR-HiRes"/>
|
||||
<substitute key="model" value="FFG-TIR"/>
|
||||
</contribute>
|
||||
</contribute>
|
||||
<contribute xsi:type="subMenu" menuText="SERFC" id="SERFCMenu">
|
||||
|
|
|
@ -78,6 +78,8 @@ import com.raytheon.viz.mpe.ui.rsc.MPEFieldResourceData.MPEFieldFrame;
|
|||
* since the start time in the file is one
|
||||
* hour less than the file time stamp.
|
||||
* Jul 02, 2013 2160 mpduff Changed how edited data are called for return.
|
||||
* Sep 17, 2013 16563 snaples Updated createFrameImage to handle trace precip
|
||||
* properly when mapping to screen.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -148,6 +150,7 @@ public class MPEFieldResource extends
|
|||
* @param frame
|
||||
* @return
|
||||
*/
|
||||
@SuppressWarnings("incomplete-switch")
|
||||
private short[] getEditedData(MPEFieldFrame frame) {
|
||||
short[] editedData = frame.getEditedData();
|
||||
if (editedData != null) {
|
||||
|
@ -413,16 +416,42 @@ public class MPEFieldResource extends
|
|||
.getColorMapParameters();
|
||||
UnitConverter dataToImage = params.getDataToImageConverter();
|
||||
short[] data = getEditedData(frame);
|
||||
DisplayFieldData cvuse = resourceData.getFieldData();
|
||||
int length = data.length;
|
||||
short[] imageData = new short[length];
|
||||
for (int i = 0; i < length; ++i) {
|
||||
short value = data[i];
|
||||
if (value == MISSING_VALUE) {
|
||||
imageData[i] = 0;
|
||||
} else {
|
||||
imageData[i] = (short) dataToImage.convert(value);
|
||||
switch (cvuse) {
|
||||
case Locbias:
|
||||
case Height:
|
||||
case Index:
|
||||
case Locspan:
|
||||
case mintempPrism:
|
||||
case maxtempPrism:
|
||||
for (int i = 0; i < length; ++i) {
|
||||
short value = data[i];
|
||||
if (value == MISSING_VALUE) {
|
||||
imageData[i] = 0;
|
||||
} else {
|
||||
imageData[i] = (short) dataToImage.convert(value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default :
|
||||
for (int i = 0; i < length; ++i) {
|
||||
short value = data[i];
|
||||
if (value == MISSING_VALUE) {
|
||||
imageData[i] = 0;
|
||||
} else if(value <= 0){
|
||||
imageData[i] = 1;
|
||||
} else if(value > 0 && value < 25){
|
||||
value = 10;
|
||||
imageData[i] = (short) dataToImage.convert(value);
|
||||
} else {
|
||||
imageData[i] = (short) dataToImage.convert(value);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new GriddedImageDisplay2(ShortBuffer.wrap(imageData),
|
||||
gridGeometry, this);
|
||||
}
|
||||
|
|
|
@ -275,8 +275,9 @@ public class MPEFieldResourceData extends AbstractMPEGriddedResourceData {
|
|||
case mintempPrism:
|
||||
case maxtempPrism:
|
||||
return NonSI.FAHRENHEIT;
|
||||
default:
|
||||
return NonSI.INCH;
|
||||
}
|
||||
return NonSI.INCH;
|
||||
}
|
||||
|
||||
public static Unit<?> getDataUnitsForField(DisplayFieldData fieldData) {
|
||||
|
@ -293,7 +294,9 @@ public class MPEFieldResourceData extends AbstractMPEGriddedResourceData {
|
|||
case mintempPrism:
|
||||
case maxtempPrism:
|
||||
return NonSI.FAHRENHEIT.divide(10);
|
||||
|
||||
default :
|
||||
return SI.MILLIMETER.divide(100);
|
||||
}
|
||||
return SI.MILLIMETER.divide(100);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,6 +96,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Jun 06, 2013 2072 bsteffen Fix concurrency problems when init is
|
||||
* called before time matching is done.
|
||||
* Jun 25, 2013 1869 bsteffen Fix plot sampling.
|
||||
* Sep 04, 2013 16519 kshresth Fix Metar Display Problem
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -348,6 +349,19 @@ public class PlotResource2 extends
|
|||
plots.put(normTime, list);
|
||||
}
|
||||
list.add(info);
|
||||
|
||||
// Sort this data in "backwards" so that the most recent observation
|
||||
// for a particular station display correctly
|
||||
Collections.sort(list, new Comparator<PlotInfo>() {
|
||||
|
||||
@Override
|
||||
public int compare(PlotInfo o1, PlotInfo o2) {
|
||||
return o1.dataTime.compareTo(o2.dataTime);
|
||||
}
|
||||
});
|
||||
|
||||
Collections.reverse(list);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -413,7 +427,7 @@ public class PlotResource2 extends
|
|||
samplePlot[0] = plot;
|
||||
List<PlotInfo[]> list = new ArrayList<PlotInfo[]>();
|
||||
list.add(samplePlot);
|
||||
Params params = Params.SAMPLE_ONLY;
|
||||
Params params = Params.PLOT_AND_SAMPLE;
|
||||
GetDataTask task = new GetDataTask(list, params);
|
||||
generator.queueStation(task);
|
||||
// End DR14996
|
||||
|
|
|
@ -78,7 +78,7 @@ public class PointDataCubeAdapter extends DefaultDataCubeAdapter {
|
|||
"goessounding", "bufrascat", "poessounding", "profiler", "bufrua",
|
||||
"ldadmesonet", "ldadhydro", "qc", "fssobs", "bufrmosAVN",
|
||||
"bufrmosETA", "bufrmosGFS", "bufrmosHPC", "bufrmosLAMP",
|
||||
"bufrmosMRF", "bufrmosNGM" };
|
||||
"bufrmosMRF", "bufrmosNGM", "airep", "pirep", "nctaf"};
|
||||
|
||||
protected AbstractPointDataInventory inventory;
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import com.raytheon.uf.common.activetable.ActiveTableMode;
|
|||
import com.raytheon.uf.common.activetable.ActiveTableRecord;
|
||||
import com.raytheon.uf.common.activetable.GetActiveTableRequest;
|
||||
import com.raytheon.uf.common.activetable.GetActiveTableResponse;
|
||||
import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
|
@ -48,6 +49,7 @@ import com.raytheon.viz.texteditor.util.VtecUtil;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Jul 23, 2013 2176 jsanchez Initial creation
|
||||
* Sep 4, 2013 2176 jsanchez Moved EmergencyType to a public class.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -62,38 +64,6 @@ public class EmergencyConfirmationMsg implements IWarnGenConfirmationable {
|
|||
|
||||
private String productMessage;
|
||||
|
||||
private static class EmergencyType {
|
||||
|
||||
private static final EmergencyType TORNADO = new EmergencyType(
|
||||
"TORNADO EMERGENCY", "TO.W");
|
||||
|
||||
private static final EmergencyType FLASH_FLOOD = new EmergencyType(
|
||||
"FLASH FLOOD EMERGENCY", "FF.W");
|
||||
|
||||
private final String value;
|
||||
|
||||
private final String phensig;
|
||||
|
||||
private final static EmergencyType[] values = new EmergencyType[] {
|
||||
TORNADO, FLASH_FLOOD };
|
||||
|
||||
private EmergencyType(String type, String phensig) {
|
||||
this.value = type;
|
||||
this.phensig = phensig;
|
||||
}
|
||||
|
||||
public static EmergencyType valueOf(String phensig) {
|
||||
EmergencyType type = null;
|
||||
for (EmergencyType t : values) {
|
||||
if (t.phensig.equals(phensig)) {
|
||||
type = t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return type;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Orders the ActiveTableRecord based on the issue time (ascending)
|
||||
*/
|
||||
|
@ -126,11 +96,11 @@ public class EmergencyConfirmationMsg implements IWarnGenConfirmationable {
|
|||
|
||||
// Check if the warning product is a valid EmergencyType.
|
||||
if (type != null) {
|
||||
boolean currentEmergency = body.contains("EMERGENCY");
|
||||
boolean currentEmergency = EmergencyType.isEmergency(body);
|
||||
if (action == WarningAction.NEW && currentEmergency) {
|
||||
// Only occurs when the warning is first issued and not any
|
||||
// other action
|
||||
productMessage = "This is a " + type.value;
|
||||
productMessage = "This is a " + type.getValue();
|
||||
} else if (action == WarningAction.CON
|
||||
|| action == WarningAction.EXT
|
||||
|| action == WarningAction.CANCON) {
|
||||
|
@ -159,14 +129,14 @@ public class EmergencyConfirmationMsg implements IWarnGenConfirmationable {
|
|||
new ActiveTableRecordComparator());
|
||||
ActiveTableRecord record = records
|
||||
.get(records.size() - 1);
|
||||
boolean wasEmergency = record.getRawmessage().contains(
|
||||
"EMERGENCY");
|
||||
boolean wasEmergency = EmergencyType.isEmergency(record
|
||||
.getRawmessage());
|
||||
if (!wasEmergency && currentEmergency) {
|
||||
productMessage = "This is an upgrade of a "
|
||||
+ type.value;
|
||||
+ type.getValue();
|
||||
} else if (wasEmergency && !currentEmergency) {
|
||||
productMessage = "This is a downgrade of a "
|
||||
+ type.value;
|
||||
+ type.getValue();
|
||||
}
|
||||
}
|
||||
} catch (VizException e) {
|
||||
|
|
|
@ -135,7 +135,7 @@ import com.raytheon.uf.common.site.SiteMap;
|
|||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||
import com.raytheon.uf.common.status.UFStatus;
|
||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||
import com.raytheon.uf.common.time.SimulatedTime;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
import com.raytheon.uf.edex.decodertools.time.TimeTools;
|
||||
import com.raytheon.uf.edex.services.textdbsrv.IQueryTransport;
|
||||
import com.raytheon.uf.edex.wmo.message.WMOHeader;
|
||||
|
@ -186,8 +186,6 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
|||
import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
||||
import com.raytheon.viz.ui.dialogs.SWTMessageBox;
|
||||
|
||||
// import com.raytheon.uf.viz.core.RGBColors;
|
||||
|
||||
/**
|
||||
* Main Text Editor dialog.
|
||||
*
|
||||
|
@ -329,8 +327,10 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox;
|
|||
* 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".
|
||||
* 04Sep2013 2176 jsanchez Changed the order of the QC check dialogs.
|
||||
* 12Sep2013 DR 2249 rferrel Change Time stamp in file name created by warngen to use
|
||||
* simulated time.
|
||||
* 20Sep2013 #2394 lvenable Fixed color memory leaks.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author lvenable
|
||||
|
@ -2947,8 +2947,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
|
||||
FontSizeCfg fontSizeCfg = TextEditorCfg.getTextEditorCfg()
|
||||
.getFontSizeCfg();
|
||||
SizeButtonCfg seldFontBtn = TextEditorCfg.getTextEditorCfg()
|
||||
.getSelectedFontButton();
|
||||
SizeButtonCfg seldFontBtn = TextEditorCfg.getSelectedFontButton();
|
||||
|
||||
for (SizeButtonCfg buttonCfg : fontSizeCfg.getButtons()) {
|
||||
MenuItem item = new MenuItem(fontSizeSubMenu, SWT.RADIO);
|
||||
|
@ -3939,36 +3938,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
});
|
||||
}
|
||||
|
||||
// private TextColorsCfg getTextColorCfg() {
|
||||
// TextColorsCfg textColorsCfg =
|
||||
// TextEditorCfg.getTextEditorCfg().getTextColorsCfg();
|
||||
//
|
||||
// // Perform Sanity Checks on configuration.
|
||||
// StringBuilder message = new StringBuilder();
|
||||
//
|
||||
// for (TextColorElement textElm : textColorsCfg.getTextColorElements()) {
|
||||
// String prmtName = textElm.getParamName();
|
||||
// if (prmtName == null) {
|
||||
// message.append("Item \"paramName\" problem!\n");
|
||||
//
|
||||
// }
|
||||
//
|
||||
// if( textElm.getColor() == null ) {
|
||||
// message.append("Item \"color\" data enter problem!\n");
|
||||
// }
|
||||
//
|
||||
// if (message.length() > 0) {
|
||||
// message.insert(0, "TextColorsCfg broblem(s): ");
|
||||
// IUFStatusHandler statusHandler = UFStatus
|
||||
// .getHandler(TextEditorDialog.class);
|
||||
// statusHandler.handle(Priority.PROBLEM, message.toString());
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// return textColorsCfg;
|
||||
// }
|
||||
|
||||
private void setDefaultTextColor(TextEditorCfg txtClrCfg) {
|
||||
textBackgroundClr = new Color(shell.getDisplay(),
|
||||
txtClrCfg.getTextBackgroundColor());
|
||||
|
@ -4854,14 +4823,14 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if (Boolean.TRUE.equals(returnValue)) {
|
||||
checkEmergencyProduct(resend);
|
||||
finishSendProduct(resend);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
wgcd.open();
|
||||
} else {
|
||||
checkEmergencyProduct(resend);
|
||||
finishSendProduct(resend);
|
||||
}
|
||||
} else {
|
||||
finishSendProduct(resend);
|
||||
|
@ -4911,7 +4880,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if (Boolean.TRUE.equals(returnValue)) {
|
||||
warngenCloseCallback(resend);
|
||||
checkEmergencyProduct(resend);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -4939,14 +4908,14 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
@Override
|
||||
public void dialogClosed(Object returnValue) {
|
||||
if (Boolean.TRUE.equals(returnValue)) {
|
||||
finishSendProduct(resend);
|
||||
warngenCloseCallback(resend);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
wgcd.open();
|
||||
} else {
|
||||
finishSendProduct(resend);
|
||||
warngenCloseCallback(resend);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4999,8 +4968,14 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
oup.setSource("TextWS");
|
||||
oup.setWmoType(fixNOR(prod.getBbbid()));
|
||||
oup.setUserDateTimeStamp(prod.getHdrtime());
|
||||
oup.setFilename(awipsID + ".wan"
|
||||
+ (System.currentTimeMillis() / 1000));
|
||||
StringBuilder fileName = new StringBuilder();
|
||||
|
||||
// The .wan extension followed by the 10 digit epoch seconds
|
||||
// of simulated time is used in EDEX's WarningDecoder to
|
||||
// determine the base time.
|
||||
fileName.append(awipsID).append(".wan")
|
||||
.append(TimeUtil.getUnixTime(TimeUtil.newDate()));
|
||||
oup.setFilename(fileName.toString());
|
||||
oup.setAddress(addressee);
|
||||
if ((attachedFile != null) && (attachedFilename != null)) {
|
||||
oup.setAttachedFile(attachedFile);
|
||||
|
@ -5144,7 +5119,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
* DR14613 - string currectDate is derived from Date now ensuring the
|
||||
* same time in WMO heading and in the MND heading.
|
||||
*/
|
||||
Date now = SimulatedTime.getSystemTime().getTime();
|
||||
Date now = TimeUtil.newDate();
|
||||
String currentDate = getCurrentDate(now);
|
||||
TextDisplayModel tdmInst = TextDisplayModel.getInstance();
|
||||
|
||||
|
@ -7209,8 +7184,8 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
xml = new String(b);
|
||||
}
|
||||
|
||||
rval = (StdTextProduct) SerializationUtil
|
||||
.unmarshalFromXml(xml);
|
||||
rval = SerializationUtil.unmarshalFromXml(
|
||||
StdTextProduct.class, xml);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Retrieval of product failed", e);
|
||||
|
@ -7252,13 +7227,6 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
return success;
|
||||
}
|
||||
|
||||
public void stopTimer() {
|
||||
if (timer != null) {
|
||||
timer.cancel();
|
||||
timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void setupTimer() {
|
||||
if (timer != null) {
|
||||
timer.cancel();
|
||||
|
@ -8325,7 +8293,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener,
|
|||
* Get the contents of file as a byte array.
|
||||
*
|
||||
* @param file
|
||||
* @return
|
||||
* @return bytes
|
||||
* @throws IOException
|
||||
*/
|
||||
private byte[] getBytesFromFile(File file) throws IOException {
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
<vbSource key="HI-RTMA" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HPCqpfNDFD" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HPCGuide" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HPCGuide-2.5km" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HPCqpf" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="HPE" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
<vbSource key="MPE-Local" category="SfcGrid" views="PLANVIEW TIMESERIES" />
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
<extension
|
||||
point="org.eclipse.ui.menus">
|
||||
<menuContribution
|
||||
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
|
||||
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=d2d-3">
|
||||
<toolbar
|
||||
id="plugins">
|
||||
<command
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.regex.Pattern;
|
|||
|
||||
import javax.jms.BytesMessage;
|
||||
import javax.jms.Connection;
|
||||
import javax.jms.DeliveryMode;
|
||||
import javax.jms.JMSException;
|
||||
import javax.jms.MessageProducer;
|
||||
import javax.jms.Session;
|
||||
|
@ -47,7 +48,7 @@ import com.raytheon.viz.texteditor.msgs.IWarngenObserver;
|
|||
import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
|
||||
|
||||
/**
|
||||
* TODO Add Description
|
||||
* Sends warning products to text workstation and text database.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
|
@ -58,6 +59,7 @@ import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
|
|||
* 01Jun2010 2187 cjeanbap Added operational mode functionality
|
||||
* 02Aug2010 2187 cjeanbap Update variable/method signature to be consistent.
|
||||
* 04Oct2010 7193 cjeanbap Add time-to-live value to MessageProducer.
|
||||
* Sep 13, 2013 2368 rjpeter Set delivery mode to PERSISTENT.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -65,209 +67,208 @@ import com.raytheon.viz.texteditor.util.SiteAbbreviationUtil;
|
|||
*/
|
||||
|
||||
public class WarningSender implements IWarngenObserver {
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(WarningSender.class);
|
||||
private static final transient IUFStatusHandler statusHandler = UFStatus
|
||||
.getHandler(WarningSender.class);
|
||||
|
||||
private String hostName = null;
|
||||
private final String hostName = null;
|
||||
|
||||
private boolean notifyError;
|
||||
private boolean notifyError;
|
||||
|
||||
private static final long MILLISECONDS_PER_SECOND = 1000;
|
||||
private static final long MILLISECONDS_PER_SECOND = 1000;
|
||||
|
||||
private static final long SECONDS_PER_MINUTE = 60;
|
||||
private static final long SECONDS_PER_MINUTE = 60;
|
||||
|
||||
private static final long TTL_MINUTES = 5;
|
||||
private static final long TTL_MINUTES = 5;
|
||||
|
||||
private static Pattern PATTERN = Pattern.compile("(\\d{1,1})");
|
||||
private static Pattern PATTERN = Pattern.compile("(\\d{1,1})");
|
||||
|
||||
private static final SimpleDateFormat sdf;
|
||||
private static final SimpleDateFormat sdf;
|
||||
|
||||
static {
|
||||
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
}
|
||||
static {
|
||||
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc) Incoming message was not a binary
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.viz.texteditor.msgs.IWarngenObserver#setTextWarngenDisplay
|
||||
* (java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setTextWarngenDisplay(String warning, boolean ne) {
|
||||
this.notifyError = ne;
|
||||
/*
|
||||
* (non-Javadoc) Incoming message was not a binary
|
||||
*
|
||||
* @see
|
||||
* com.raytheon.viz.texteditor.msgs.IWarngenObserver#setTextWarngenDisplay
|
||||
* (java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setTextWarngenDisplay(String warning, boolean ne) {
|
||||
this.notifyError = ne;
|
||||
|
||||
String number = "0";
|
||||
String host = TextWorkstationConstants.getId();
|
||||
long t0 = System.currentTimeMillis();
|
||||
String siteNode = SiteAbbreviationUtil.getSiteNode(LocalizationManager
|
||||
.getInstance().getCurrentSite());
|
||||
System.out.println("Get site node time: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
if (host == null) {
|
||||
statusHandler.handle(Priority.ERROR,
|
||||
"Text Workstation host not set in preferences.");
|
||||
} else {
|
||||
Matcher m = PATTERN.matcher(host);
|
||||
if (m.find()) {
|
||||
number = m.group();
|
||||
}
|
||||
}
|
||||
String number = "0";
|
||||
String host = TextWorkstationConstants.getId();
|
||||
long t0 = System.currentTimeMillis();
|
||||
String siteNode = SiteAbbreviationUtil.getSiteNode(LocalizationManager
|
||||
.getInstance().getCurrentSite());
|
||||
statusHandler.debug("Get site node time: "
|
||||
+ (System.currentTimeMillis() - t0));
|
||||
if (host == null) {
|
||||
statusHandler.handle(Priority.ERROR,
|
||||
"Text Workstation host not set in preferences.");
|
||||
} else {
|
||||
Matcher m = PATTERN.matcher(host);
|
||||
if (m.find()) {
|
||||
number = m.group();
|
||||
}
|
||||
}
|
||||
|
||||
String id = siteNode + "WRKWG" + number;
|
||||
boolean sentToTextDatabase = false;
|
||||
String id = siteNode + "WRKWG" + number;
|
||||
boolean sentToTextDatabase = false;
|
||||
|
||||
try {
|
||||
boolean messageNotSent = true;
|
||||
int connectCount = 0;
|
||||
t0 = System.currentTimeMillis();
|
||||
byte[] data = SerializationUtil.transformToThrift(id + ":"
|
||||
+ warning);
|
||||
while (messageNotSent && connectCount < 4) {
|
||||
Session s = null;
|
||||
MessageProducer mp = null;
|
||||
Connection conn = null;
|
||||
try {
|
||||
conn = JMSConnection.getInstance().getFactory()
|
||||
.createConnection();
|
||||
s = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
|
||||
mp = s.createProducer(s
|
||||
.createQueue(TextWorkstationConstants
|
||||
.getDestinationTextWorkstationQueueName()));
|
||||
mp.setTimeToLive(TTL_MINUTES * SECONDS_PER_MINUTE
|
||||
* MILLISECONDS_PER_SECOND);
|
||||
BytesMessage m = s.createBytesMessage();
|
||||
m.writeBytes(data);
|
||||
mp.send(m);
|
||||
long t1 = System.currentTimeMillis();
|
||||
System.out.println(WarningSender.getCurTimeString() + ": "
|
||||
+ id + " sent to text workstation in " + (t1 - t0)
|
||||
+ "ms in " + (connectCount + 1)
|
||||
+ (connectCount > 0 ? " tries" : " try"));
|
||||
messageNotSent = false;
|
||||
} catch (JMSException e) {
|
||||
if (notifyError) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Error trying to send product ["
|
||||
+ id
|
||||
+ "] to Text Workstation. Attempting to reconnect. ",
|
||||
e);
|
||||
notifyError = false;
|
||||
}
|
||||
} finally {
|
||||
if (mp != null) {
|
||||
try {
|
||||
mp.close();
|
||||
mp = null;
|
||||
} catch (Exception e) {
|
||||
mp = null;
|
||||
}
|
||||
}
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
s = null;
|
||||
} catch (Exception e) {
|
||||
s = null;
|
||||
}
|
||||
}
|
||||
if (conn != null) {
|
||||
try {
|
||||
conn.close();
|
||||
conn = null;
|
||||
} catch (Exception e) {
|
||||
conn = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (messageNotSent) {
|
||||
if (!sentToTextDatabase) {
|
||||
try {
|
||||
sendToTextDatabase(id, warning);
|
||||
sentToTextDatabase = true;
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to save product [" + id
|
||||
+ "] to Text Database: ", e);
|
||||
}
|
||||
}
|
||||
try {
|
||||
boolean messageNotSent = true;
|
||||
int connectCount = 0;
|
||||
t0 = System.currentTimeMillis();
|
||||
byte[] data = SerializationUtil.transformToThrift(id + ":"
|
||||
+ warning);
|
||||
while (messageNotSent && (connectCount < 4)) {
|
||||
Session s = null;
|
||||
MessageProducer mp = null;
|
||||
Connection conn = null;
|
||||
try {
|
||||
conn = JMSConnection.getInstance().getFactory()
|
||||
.createConnection();
|
||||
s = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
|
||||
mp = s.createProducer(s
|
||||
.createQueue(TextWorkstationConstants
|
||||
.getDestinationTextWorkstationQueueName()));
|
||||
mp.setTimeToLive(TTL_MINUTES * SECONDS_PER_MINUTE
|
||||
* MILLISECONDS_PER_SECOND);
|
||||
BytesMessage m = s.createBytesMessage();
|
||||
m.writeBytes(data);
|
||||
m.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
|
||||
mp.send(m);
|
||||
long t1 = System.currentTimeMillis();
|
||||
statusHandler.debug(id + " sent to text workstation in "
|
||||
+ (t1 - t0) + "ms in " + (connectCount + 1)
|
||||
+ (connectCount > 0 ? " tries" : " try"));
|
||||
messageNotSent = false;
|
||||
} catch (JMSException e) {
|
||||
if (notifyError) {
|
||||
statusHandler
|
||||
.handle(Priority.PROBLEM,
|
||||
"Error trying to send product ["
|
||||
+ id
|
||||
+ "] to Text Workstation. Attempting to reconnect. ",
|
||||
e);
|
||||
notifyError = false;
|
||||
}
|
||||
} finally {
|
||||
if (mp != null) {
|
||||
try {
|
||||
mp.close();
|
||||
mp = null;
|
||||
} catch (Exception e) {
|
||||
mp = null;
|
||||
}
|
||||
}
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
s = null;
|
||||
} catch (Exception e) {
|
||||
s = null;
|
||||
}
|
||||
}
|
||||
if (conn != null) {
|
||||
try {
|
||||
conn.close();
|
||||
conn = null;
|
||||
} catch (Exception e) {
|
||||
conn = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (messageNotSent) {
|
||||
if (!sentToTextDatabase) {
|
||||
try {
|
||||
sendToTextDatabase(id, warning);
|
||||
sentToTextDatabase = true;
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to save product [" + id
|
||||
+ "] to Text Database: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
connectCount++;
|
||||
switch (connectCount) {
|
||||
case 1:
|
||||
Thread.sleep(1000);
|
||||
break;
|
||||
case 2:
|
||||
Thread.sleep(5 * 1000);
|
||||
break;
|
||||
case 3:
|
||||
Thread.sleep(30 * 1000);
|
||||
break;
|
||||
case 4:
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Could not reconnect (" + id
|
||||
+ ") after 3 tries: ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
connectCount++;
|
||||
switch (connectCount) {
|
||||
case 1:
|
||||
Thread.sleep(1000);
|
||||
break;
|
||||
case 2:
|
||||
Thread.sleep(5 * 1000);
|
||||
break;
|
||||
case 3:
|
||||
Thread.sleep(30 * 1000);
|
||||
break;
|
||||
case 4:
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Could not reconnect (" + id
|
||||
+ ") after 3 tries: ");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!sentToTextDatabase) {
|
||||
try {
|
||||
sendToTextDatabase(id, warning);
|
||||
sentToTextDatabase = true;
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to save product [" + id
|
||||
+ "] to Text Database: ", e);
|
||||
}
|
||||
}
|
||||
} catch (UnknownHostException uhe) {
|
||||
if (notifyError) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"unable to map hostname, " + hostName
|
||||
+ ", to an ip address", uhe);
|
||||
notifyError = false;
|
||||
}
|
||||
if (!sentToTextDatabase) {
|
||||
try {
|
||||
sendToTextDatabase(id, warning);
|
||||
sentToTextDatabase = true;
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to save product [" + id
|
||||
+ "] to Text Database: ", e);
|
||||
}
|
||||
}
|
||||
} catch (UnknownHostException uhe) {
|
||||
if (notifyError) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"unable to map hostname, " + hostName
|
||||
+ ", to an ip address", uhe);
|
||||
notifyError = false;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to send product [" + id
|
||||
+ "] to Text Workstation: ", e);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Error trying to send product [" + id
|
||||
+ "] to Text Workstation: ", e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves a product to the text database.
|
||||
*
|
||||
* @param id
|
||||
* @param warning
|
||||
* @throws VizException
|
||||
*/
|
||||
public static void sendToTextDatabase(String id, String warning)
|
||||
throws VizException {
|
||||
CAVEMode mode = CAVEMode.getMode();
|
||||
boolean operationalMode = (CAVEMode.OPERATIONAL.equals(mode)
|
||||
|| CAVEMode.TEST.equals(mode) ? true : false);
|
||||
/**
|
||||
* Saves a product to the text database.
|
||||
*
|
||||
* @param id
|
||||
* @param warning
|
||||
* @throws VizException
|
||||
*/
|
||||
public static void sendToTextDatabase(String id, String warning)
|
||||
throws VizException {
|
||||
CAVEMode mode = CAVEMode.getMode();
|
||||
boolean operationalMode = (CAVEMode.OPERATIONAL.equals(mode)
|
||||
|| CAVEMode.TEST.equals(mode) ? true : false);
|
||||
|
||||
// Generate StdTextProduct and insert into db
|
||||
long t0 = System.currentTimeMillis();
|
||||
ThriftClient.sendRequest(new InsertStdTextProductRequest(id, warning,
|
||||
operationalMode));
|
||||
// Generate StdTextProduct and insert into db
|
||||
long t0 = System.currentTimeMillis();
|
||||
ThriftClient.sendRequest(new InsertStdTextProductRequest(id, warning,
|
||||
operationalMode));
|
||||
|
||||
System.out.println(WarningSender.getCurTimeString() + ": " + id
|
||||
+ " saved to textdb in " + (System.currentTimeMillis() - t0)
|
||||
+ "ms");
|
||||
}
|
||||
statusHandler.debug(id + " saved to textdb in "
|
||||
+ (System.currentTimeMillis() - t0) + "ms");
|
||||
}
|
||||
|
||||
public static String getCurTimeString() {
|
||||
String rval = null;
|
||||
synchronized (sdf) {
|
||||
rval = sdf.format(new Date());
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
public static String getCurTimeString() {
|
||||
String rval = null;
|
||||
synchronized (sdf) {
|
||||
rval = sdf.format(new Date());
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
|
|||
* Mar 25, 2013 1605 jsanchez Set ClosestPoint's prepGeom.
|
||||
* Apr 24, 2013 1944 jsanchez Updated calculateLocationPortion visibility to public.
|
||||
* May 2, 2013 1963 jsanchez Referenced calculatePortion from GisUtil if intersection less than DEFAULT_PORTION_TOLERANCE.
|
||||
* Sep 13, 2013 DR 16601 D. Friedman Fix from jsanchez: Allow cities outside the CWA.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -156,8 +157,6 @@ public class DbAreaSourceDataAdaptor extends AbstractDbSourceDataAdaptor {
|
|||
filter = new HashMap<String, RequestConstraint>();
|
||||
}
|
||||
|
||||
filter.put(cwaField, new RequestConstraint(localizedSite));
|
||||
|
||||
return filter;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ package com.raytheon.viz.warngen.gis;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 5, 2013 2177 jsanchez Initial creation
|
||||
* Sep 22, 2013 2177 jsanchez Updated EW_MASK.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -156,7 +157,7 @@ public class CoverageConstants {
|
|||
EW_MASK[i] = XEAST | EAST;
|
||||
} else if (i < 106) {
|
||||
EW_MASK[i] = WEST;
|
||||
} else if (i > 145) {
|
||||
} else if (i > 148) {
|
||||
EW_MASK[i] = EAST;
|
||||
} else if (i < 118) {
|
||||
EW_MASK[i] = CENTRAL_EW | WEST;
|
||||
|
|
|
@ -38,6 +38,7 @@ import com.vividsolutions.jts.geom.Geometry;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Aug 5, 2013 2177 jsanchez Initial creation
|
||||
* Sep 22, 2013 2177 jsanchez Updated logic.
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -71,9 +72,16 @@ public class PortionsUtil {
|
|||
countyOrZone.getUserData();
|
||||
EntityData entityData = gridUtil.calculateGrids(countyOrZone,
|
||||
warnedArea);
|
||||
EnumSet<Direction> portions = getAreaDesc(entityData.getMeanMask(),
|
||||
entityData.getCoverageMask(), entityData.getOctants(),
|
||||
useExtreme);
|
||||
EnumSet<Direction> portions = null;
|
||||
if (warnedArea.getArea() < countyOrZone.getArea() * .01) {
|
||||
// this is for the case when only a "sliver" of the county or zone
|
||||
// is warned
|
||||
portions = getPointDesc(entityData.getMeanMask(), true);
|
||||
} else {
|
||||
portions = getAreaDesc(entityData.getMeanMask(),
|
||||
entityData.getCoverageMask(), entityData.getOctants(),
|
||||
useExtreme);
|
||||
}
|
||||
return suppressPortions(entityID, portions);
|
||||
}
|
||||
|
||||
|
@ -127,6 +135,7 @@ public class PortionsUtil {
|
|||
// }
|
||||
|
||||
// Test for central by not being near adjacent borders.
|
||||
// Another possible case of a stripe across the middle.
|
||||
if (octants == 0
|
||||
|| ((octants & CoverageConstants.EXTREME_YES) == 0)
|
||||
&& (meanMask & CoverageConstants.CENTER) == CoverageConstants.CENTER) {
|
||||
|
@ -144,28 +153,28 @@ public class PortionsUtil {
|
|||
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) {
|
||||
if ((omerge & (CoverageConstants.NNE | CoverageConstants.ENE)) != 0) {
|
||||
ne = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.SSE | CoverageConstants.ESE)) > 0) {
|
||||
if ((omerge & (CoverageConstants.SSE | CoverageConstants.ESE)) != 0) {
|
||||
se = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.NNW | CoverageConstants.WNW)) > 0) {
|
||||
if ((omerge & (CoverageConstants.NNW | CoverageConstants.WNW)) != 0) {
|
||||
nw = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.SSW | CoverageConstants.WSW)) > 0) {
|
||||
if ((omerge & (CoverageConstants.SSW | CoverageConstants.WSW)) != 0) {
|
||||
sw = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.NNE | CoverageConstants.NNW)) > 0) {
|
||||
if ((omerge & (CoverageConstants.NNE | CoverageConstants.NNW)) != 0) {
|
||||
nn = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.SSE | CoverageConstants.SSW)) > 0) {
|
||||
if ((omerge & (CoverageConstants.SSE | CoverageConstants.SSW)) != 0) {
|
||||
ss = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.WNW | CoverageConstants.WSW)) > 0) {
|
||||
if ((omerge & (CoverageConstants.WNW | CoverageConstants.WSW)) != 0) {
|
||||
ww = 1;
|
||||
}
|
||||
if ((omerge & (CoverageConstants.ENE | CoverageConstants.ESE)) > 0) {
|
||||
if ((omerge & (CoverageConstants.ENE | CoverageConstants.ESE)) != 0) {
|
||||
ee = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.NORTH_SOUTH) == 0) {
|
||||
|
@ -180,23 +189,23 @@ public class PortionsUtil {
|
|||
// Identify extremes in use.
|
||||
int nnx, ssx, eex, wwx;
|
||||
nnx = ssx = eex = wwx = 0;
|
||||
if ((areaMask & CoverageConstants.XNORTH) > 0) {
|
||||
if ((areaMask & CoverageConstants.XNORTH) != 0) {
|
||||
nnx = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.XSOUTH) > 0) {
|
||||
if ((areaMask & CoverageConstants.XSOUTH) != 0) {
|
||||
ssx = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.XWEST) > 0) {
|
||||
if ((areaMask & CoverageConstants.XWEST) != 0) {
|
||||
wwx = 1;
|
||||
}
|
||||
if ((areaMask & CoverageConstants.XEAST) > 0) {
|
||||
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) {
|
||||
if ((octants & CoverageConstants.EXTREME_NO) != 0
|
||||
&& (areaMask & CoverageConstants.EXTREME) != 0) {
|
||||
areaMask &= CoverageConstants.NOT_EXTREME;
|
||||
meanMask &= CoverageConstants.NOT_EXTREME;
|
||||
}
|
||||
|
@ -220,12 +229,6 @@ public class PortionsUtil {
|
|||
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);
|
||||
|
@ -233,20 +236,6 @@ public class PortionsUtil {
|
|||
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
@ -259,7 +248,7 @@ public class PortionsUtil {
|
|||
// 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) {
|
||||
|| (meanMask & CoverageConstants.CENTRAL) != 0) {
|
||||
return getPointDesc2(meanMask, exYes, nn, ss, ee, ww);
|
||||
|
||||
} else {
|
||||
|
@ -273,28 +262,28 @@ public class PortionsUtil {
|
|||
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) {
|
||||
// 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) {
|
||||
// } 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) {
|
||||
// } 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) {
|
||||
// } else if (sw == 0 && (xxoctant & (NNE | ENE)) != 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
portions.add(Direction.EAST);
|
||||
}
|
||||
|
@ -318,7 +307,7 @@ public class PortionsUtil {
|
|||
|
||||
// add extreme for three quadrant case.
|
||||
if (!portions.isEmpty()) {
|
||||
if (exYes && ((areaMask & CoverageConstants.EXTREME)) > 0) {
|
||||
if (exYes && ((areaMask & CoverageConstants.EXTREME)) != 0) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
return portions;
|
||||
|
@ -334,25 +323,25 @@ public class PortionsUtil {
|
|||
ss = areaMask & CoverageConstants.SOUTHERN;
|
||||
ee = areaMask & CoverageConstants.EASTERN;
|
||||
ww = areaMask & CoverageConstants.WESTERN;
|
||||
if (ss > 0 && nn > 0 || q == 0) {
|
||||
if (ee == 0 && ww > 0) {
|
||||
if (ss != 0 && nn != 0 || q == 0) {
|
||||
if (ee == 0 && ww != 0) {
|
||||
portions.add(Direction.WEST);
|
||||
}
|
||||
if (ww == 0 && ee > 0) {
|
||||
if (ww == 0 && ee != 0) {
|
||||
portions.add(Direction.EAST);
|
||||
}
|
||||
} else if (ee > 0 && ww > 0 || q == 0) {
|
||||
if (nn == 0 && ss > 0) {
|
||||
} else if (ee != 0 && ww != 0 || q == 0) {
|
||||
if (nn == 0 && ss != 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
}
|
||||
if (ss == 0 && nn > 0) {
|
||||
if (ss == 0 && nn != 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
}
|
||||
}
|
||||
|
||||
// add extreme for simple direction case.
|
||||
if (!portions.isEmpty()) {
|
||||
if (exYes && ((areaMask & CoverageConstants.EXTREME)) > 0) {
|
||||
if (exYes && ((areaMask & CoverageConstants.EXTREME)) != 0) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
return portions;
|
||||
|
@ -372,9 +361,6 @@ public class PortionsUtil {
|
|||
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) {
|
||||
|
@ -406,7 +392,7 @@ public class PortionsUtil {
|
|||
portions.add(Direction.CENTRAL);
|
||||
}
|
||||
|
||||
if (exYes && ((int) (mask & CoverageConstants.EXTREME) > 0)) {
|
||||
if (exYes && ((int) (mask & CoverageConstants.EXTREME) != 0)) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
|
||||
|
@ -432,22 +418,22 @@ public class PortionsUtil {
|
|||
}
|
||||
|
||||
int counter = 0;
|
||||
if (nn > 0 && ss > 0) {
|
||||
if (nn != 0 && ss != 0) {
|
||||
;
|
||||
} else if (ss > 0) {
|
||||
} else if (ss != 0) {
|
||||
portions.add(Direction.SOUTH);
|
||||
counter++;
|
||||
} else if (nn > 0) {
|
||||
} else if (nn != 0) {
|
||||
portions.add(Direction.NORTH);
|
||||
counter++;
|
||||
}
|
||||
|
||||
if (ee > 0 && ww > 0) {
|
||||
if (ee != 0 && ww != 0) {
|
||||
;
|
||||
} else if (ww > 0) {
|
||||
} else if (ww != 0) {
|
||||
portions.add(Direction.WEST);
|
||||
counter++;
|
||||
} else if (ee > 0) {
|
||||
} else if (ee != 0) {
|
||||
portions.add(Direction.EAST);
|
||||
counter++;
|
||||
}
|
||||
|
@ -462,7 +448,7 @@ public class PortionsUtil {
|
|||
portions.add(Direction.CENTRAL);
|
||||
}
|
||||
|
||||
if (exYes && ((int) (mask & CoverageConstants.EXTREME) > 0)) {
|
||||
if (exYes && ((int) (mask & CoverageConstants.EXTREME) != 0)) {
|
||||
portions.add(Direction.EXTREME);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package com.raytheon.viz.warngen.gui;
|
||||
|
||||
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
||||
import com.raytheon.uf.common.time.SimulatedTime;
|
||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||
|
@ -39,6 +40,7 @@ import com.raytheon.uf.common.time.util.TimeUtil;
|
|||
* 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.
|
||||
* Sep 4,2013 2176 jsanchez Used EmergencyType class to identify emergency products.
|
||||
* </pre>
|
||||
*
|
||||
* @author rferrel
|
||||
|
@ -96,8 +98,8 @@ public class FollowupData extends AbstractWarningRecord {
|
|||
rval.append(buildExpStr(status, record));
|
||||
}
|
||||
|
||||
if (record.getRawmessage().contains("EMERGENCY")) {
|
||||
rval.append(" EMER");
|
||||
if (EmergencyType.isEmergency(record.getRawmessage())) {
|
||||
rval.append(" " + EmergencyType.EMER);
|
||||
}
|
||||
equvialentString = rval.substring(0,
|
||||
record.getProductClass().equals("T") ? 20 : 18);
|
||||
|
|
|
@ -148,6 +148,7 @@ import com.vividsolutions.jts.geom.Polygon;
|
|||
* 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.
|
||||
* Sep 17, 2013 DR 16496 D. Friedman Make editable state more consistent.
|
||||
* Sep 24, 2013 #2401 lvenable Fixed font memory leak.
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1343,11 +1344,9 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
* Box was selected, allow editing of box only
|
||||
*/
|
||||
private void boxSelected() {
|
||||
boxEditable = !polygonLocked;
|
||||
trackEditable = true;
|
||||
warngenLayer.getStormTrackState().editable = trackEditable;
|
||||
warngenLayer.setBoxEditable(boxEditable);
|
||||
warngenLayer.issueRefresh();
|
||||
boxEditable = true;
|
||||
trackEditable = false;
|
||||
realizeEditableState();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1356,20 +1355,16 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
private void trackSelected() {
|
||||
boxEditable = false;
|
||||
trackEditable = true;
|
||||
warngenLayer.getStormTrackState().editable = trackEditable;
|
||||
warngenLayer.setBoxEditable(boxEditable);
|
||||
warngenLayer.issueRefresh();
|
||||
realizeEditableState();
|
||||
}
|
||||
|
||||
/**
|
||||
* Box and track was selected, allow editing of both
|
||||
*/
|
||||
private void boxAndTrackSelected() {
|
||||
boxEditable = !polygonLocked;
|
||||
boxEditable = true;
|
||||
trackEditable = true;
|
||||
warngenLayer.getStormTrackState().editable = trackEditable;
|
||||
warngenLayer.setBoxEditable(boxEditable);
|
||||
warngenLayer.issueRefresh();
|
||||
realizeEditableState();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1624,7 +1619,6 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
* item from update list selected
|
||||
*/
|
||||
public void updateListSelected() {
|
||||
warngenLayer.setOldWarningPolygon(null);
|
||||
if (updateListCbo.getSelectionIndex() >= 0) {
|
||||
AbstractWarningRecord oldWarning = null;
|
||||
FollowupData data = (FollowupData) updateListCbo
|
||||
|
@ -1675,6 +1669,7 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
return;
|
||||
}
|
||||
|
||||
warngenLayer.setOldWarningPolygon(null);
|
||||
bulletList.setEnabled(true);
|
||||
durationList.setEnabled(true);
|
||||
totalSegments = 0;
|
||||
|
@ -2470,4 +2465,12 @@ public class WarngenDialog extends CaveSWTDialog implements
|
|||
}
|
||||
}
|
||||
|
||||
public void realizeEditableState() {
|
||||
boolean layerEditable = warngenLayer.isEditable();
|
||||
// TODO: Note there is no 'is track editing allowed' state yet.
|
||||
warngenLayer.getStormTrackState().editable = layerEditable && trackEditable;
|
||||
warngenLayer.setBoxEditable(layerEditable && boxEditable && !polygonLocked);
|
||||
warngenLayer.issueRefresh();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -188,6 +188,7 @@ import com.vividsolutions.jts.io.WKTReader;
|
|||
* 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.
|
||||
* 09/17/2013 DR 16496 D. Friedman Make editable state more consistent.
|
||||
* </pre>
|
||||
*
|
||||
* @author mschenke
|
||||
|
@ -3010,10 +3011,7 @@ public class WarngenLayer extends AbstractStormTrackResource {
|
|||
final boolean editable = isEditable();
|
||||
boxEditable = editable;
|
||||
displayState.editable = editable;
|
||||
if (editable) {
|
||||
boxEditable = dialog.boxEditable();
|
||||
displayState.editable = dialog.trackEditable();
|
||||
}
|
||||
dialog.realizeEditableState();
|
||||
final WarngenDialog dlg = dialog;
|
||||
dialog.getDisplay().asyncExec(new Runnable() {
|
||||
@Override
|
||||
|
|
|
@ -15,6 +15,7 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
|
|||
|
||||
import com.raytheon.uf.common.dataplugin.PluginDataObject;
|
||||
import com.raytheon.uf.common.dataplugin.warning.AbstractWarningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.warning.EmergencyType;
|
||||
import com.raytheon.uf.common.dataplugin.warning.PracticeWarningRecord;
|
||||
import com.raytheon.uf.common.dataplugin.warning.WarningRecord.WarningAction;
|
||||
import com.raytheon.uf.common.dataquery.requests.RequestConstraint;
|
||||
|
@ -78,6 +79,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory;
|
|||
* Remove frameAltered condition in matchesFrame. It prevented entries from being displayed.
|
||||
* Check if geometry is null when inspecting.
|
||||
* Jul 22, 2013 2176 jsanchez Updated the wire frame and text for EMERGENCY warnings.
|
||||
* Sep 4, 2013 2176 jsanchez Made the polygon line width thicker and made regular text not bold.
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
|
@ -131,7 +133,9 @@ public abstract class AbstractWWAResource extends
|
|||
/** map of dataURI to a warning entry **/
|
||||
protected Map<String, WarningEntry> entryMap;
|
||||
|
||||
protected IFont warningsFont;
|
||||
protected IFont warningsFont = null;
|
||||
|
||||
protected IFont emergencyFont = null;
|
||||
|
||||
protected RGB color;
|
||||
|
||||
|
@ -366,8 +370,8 @@ public abstract class AbstractWWAResource extends
|
|||
int outlineWidth = getCapability(OutlineCapability.class)
|
||||
.getOutlineWidth();
|
||||
// Make wire frame outline thicker for EMERGENCY warnings
|
||||
if (record.getRawmessage().contains("EMERGENCY")) {
|
||||
outlineWidth *= 2;
|
||||
if (EmergencyType.isEmergency(record.getRawmessage())) {
|
||||
outlineWidth *= 3;
|
||||
}
|
||||
|
||||
target.drawWireframeShape(
|
||||
|
@ -396,7 +400,10 @@ public abstract class AbstractWWAResource extends
|
|||
* paintProps.getZoomLevel() / 1000;
|
||||
String[] textToPrint = getText(record, mapWidth);
|
||||
if (warningsFont == null) {
|
||||
warningsFont = target.getDefaultFont().deriveWithSize(
|
||||
warningsFont = target.initializeFont(target
|
||||
.getDefaultFont().getFontName(), 11,
|
||||
new IFont.Style[0]);
|
||||
emergencyFont = target.getDefaultFont().deriveWithSize(
|
||||
11);
|
||||
}
|
||||
// DR14992: reverse the textToPrint array to plot the
|
||||
|
@ -416,15 +423,24 @@ public abstract class AbstractWWAResource extends
|
|||
params.verticallAlignment = VerticalAlignment.BOTTOM;
|
||||
params.magnification = getCapability(
|
||||
MagnificationCapability.class).getMagnification();
|
||||
target.drawStrings(params);
|
||||
|
||||
// Draws the string again to have it appear bolder
|
||||
if (textToPrintReversed[2].endsWith("EMER")) {
|
||||
params.setText(new String[] { "", "", "EMER", "" },
|
||||
color);
|
||||
target.drawStrings(params);
|
||||
if (EmergencyType.isEmergency(record.getRawmessage())) {
|
||||
// moves over text to add EMER in a different font
|
||||
textToPrintReversed[2] = String.format("%1$-21" + "s",
|
||||
textToPrintReversed[2]);
|
||||
params.setText(textToPrintReversed, color);
|
||||
|
||||
DrawableString emergencyString = new DrawableString(
|
||||
params);
|
||||
emergencyString.font = emergencyFont;
|
||||
emergencyString.setText(new String[] { "", "",
|
||||
" " + EmergencyType.EMER, "" }, color);
|
||||
target.drawStrings(emergencyString);
|
||||
}
|
||||
|
||||
target.drawStrings(params);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -583,12 +599,7 @@ public abstract class AbstractWWAResource extends
|
|||
textToPrint[0] += "." + vid;
|
||||
}
|
||||
textToPrint[0] += "." + record.getEtn();
|
||||
|
||||
if (record.getRawmessage().contains("EMERGENCY")) {
|
||||
textToPrint[1] = record.getPil() + " EMER";
|
||||
} else {
|
||||
textToPrint[1] = record.getPil();
|
||||
}
|
||||
textToPrint[1] = record.getPil();
|
||||
|
||||
SimpleDateFormat startFormat = DEFAULT_FORMAT;
|
||||
SimpleDateFormat endFormat = DEFAULT_FORMAT;
|
||||
|
|
|
@ -61,6 +61,7 @@ import com.vividsolutions.jts.geom.Geometry;
|
|||
* Apr 18, 2013 1877 jsanchez Ordered the records the same for update and initial load.
|
||||
* Removed no longer needed frameAltered. Do not set wire frame for a CAN.
|
||||
* Jul 24, 2013 DR16350 mgamazaychikov Fix the problem with plotting EXP warning
|
||||
* Sep 5, 2013 2176 jsanchez Disposed the emergency font.
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
|
@ -143,6 +144,10 @@ public class WarningsResource extends AbstractWWAResource {
|
|||
if (warningsFont != null) {
|
||||
warningsFont.dispose();
|
||||
}
|
||||
|
||||
if (emergencyFont != null) {
|
||||
emergencyFont.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -234,7 +239,7 @@ public class WarningsResource extends AbstractWWAResource {
|
|||
for (AbstractWarningRecord warnrec : recordsToLoad) {
|
||||
WarningAction act = WarningAction.valueOf(warnrec.getAct());
|
||||
if (act == WarningAction.CON || act == WarningAction.CAN
|
||||
|| act == WarningAction.EXT) {
|
||||
|| act == WarningAction.EXT) {
|
||||
AbstractWarningRecord createShape = null;
|
||||
for (String key : entryMap.keySet()) {
|
||||
WarningEntry entry = entryMap.get(key);
|
||||
|
|
|
@ -49,6 +49,7 @@ import com.vividsolutions.jts.geom.GeometryFactory;
|
|||
* Sep 27, 2012 1149 jsanchez Refactored methods from AbstractWarningsResource into this class.
|
||||
* May 06, 2013 1930 bsteffen Check for null in WatchesResource.
|
||||
* May 10, 2013 1951 rjpeter Updated ugcZones references
|
||||
* Sep 5, 2013 2176 jsanchez Disposed the emergency font.
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
|
@ -140,6 +141,10 @@ public class WatchesResource extends AbstractWWAResource {
|
|||
if (warningsFont != null) {
|
||||
warningsFont.dispose();
|
||||
}
|
||||
|
||||
if (emergencyFont != null) {
|
||||
emergencyFont.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
34
deltaScripts/13.4.1/resetNtransTable.sh
Normal file
34
deltaScripts/13.4.1/resetNtransTable.sh
Normal file
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
# This script will drop the ntrans table and remove the ntrans hdf5 files.
|
||||
#
|
||||
# This update needs to be performed when going from build 13.3.1 to build 13.4.1 (or 13.5.1).
|
||||
#
|
||||
|
||||
PSQL="/awips2/psql/bin/psql"
|
||||
SQL_COMMAND="DROP TABLE IF EXISTS ntrans; UPDATE plugin_info SET initialized='false' WHERE name='ntrans';"
|
||||
|
||||
if [ ! -f ${PSQL} ]; then
|
||||
echo "ERROR: The PSQL executable does not exist - ${PSQL}."
|
||||
echo "FATAL: Updated Failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Press Enter to perform the updates Ctrl-C to quit."
|
||||
read done
|
||||
|
||||
echo "INFO: Dropping the metadata ntrans table."
|
||||
${PSQL} -U awips -d metadata -c "${SQL_COMMAND}"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "FATAL: Updated Failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "INFO: Purging ntrans hdf5 files."
|
||||
if [ -d /awips2/edex/data/hdf5/ntrans ]; then
|
||||
rm -rfv /awips2/edex/data/hdf5/ntrans
|
||||
fi
|
||||
|
||||
echo "INFO: The update was successfully applied."
|
||||
|
||||
exit 0
|
34
deltaScripts/13.5.1/resetNtransTable.sh
Normal file
34
deltaScripts/13.5.1/resetNtransTable.sh
Normal file
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
# This script will drop the ntrans table and remove the ntrans hdf5 files.
|
||||
#
|
||||
# This update needs to be performed when going from build 13.3.1 to build 13.4.1 (or 13.5.1).
|
||||
#
|
||||
|
||||
PSQL="/awips2/psql/bin/psql"
|
||||
SQL_COMMAND="DROP TABLE IF EXISTS ntrans; UPDATE plugin_info SET initialized='false' WHERE name='ntrans';"
|
||||
|
||||
if [ ! -f ${PSQL} ]; then
|
||||
echo "ERROR: The PSQL executable does not exist - ${PSQL}."
|
||||
echo "FATAL: Updated Failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Press Enter to perform the updates Ctrl-C to quit."
|
||||
read done
|
||||
|
||||
echo "INFO: Dropping the metadata ntrans table."
|
||||
${PSQL} -U awips -d metadata -c "${SQL_COMMAND}"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "FATAL: Updated Failed!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "INFO: Purging ntrans hdf5 files."
|
||||
if [ -d /awips2/edex/data/hdf5/ntrans ]; then
|
||||
rm -rfv /awips2/edex/data/hdf5/ntrans
|
||||
fi
|
||||
|
||||
echo "INFO: The update was successfully applied."
|
||||
|
||||
exit 0
|
0
deltaScripts/13.5.2/addBufrmosDataURI.sh
Normal file → Executable file
0
deltaScripts/13.5.2/addBufrmosDataURI.sh
Normal file → Executable file
|
@ -12,8 +12,8 @@ export IH_DB_NAME=hd_ob92oax
|
|||
### flag to control grib deprecation ###
|
||||
if [ -z "$gribMode" ]; then
|
||||
# uncomment only one of the following two lines
|
||||
export gribMode=deprecated
|
||||
#export gribMode=future
|
||||
#export gribMode=deprecated
|
||||
export gribMode=future
|
||||
fi
|
||||
|
||||
## end of grib deprecation flag ###
|
||||
|
|
|
@ -246,7 +246,7 @@
|
|||
<level value="WARN"/>
|
||||
</logger>
|
||||
<logger name="org.hibernate" additivity="false">
|
||||
<level value="ERROR"/>
|
||||
<level value="FATAL"/>
|
||||
<appender-ref ref="HibernateLog" />
|
||||
</logger>
|
||||
<logger name="org.geotools">
|
||||
|
|
|
@ -12,10 +12,7 @@ qc.cron=0+2,7,12,17,22,27,32,37,42,47,52,57+*+*+*+?
|
|||
acarssounding.cron=00+10,30,50+*+*+*+?
|
||||
gfe.cron=0+15+*+*+*+?
|
||||
repack.cron=0+20+*+*+*+?
|
||||
# runs database and hdf5 archive for archive server to pull data from
|
||||
archive.cron=0+40+*+*+*+?
|
||||
# purge archives
|
||||
#archive.purge.cron=0+0+*+*+*+?
|
||||
archive.purge.cron=0+0+*+*+*+?
|
||||
|
||||
###purge configuration
|
||||
# Interval at which the purge job kicks off
|
||||
|
|
|
@ -40,8 +40,19 @@
|
|||
<property name="taskExecutor" ref="genericThreadPool" />
|
||||
</bean>
|
||||
|
||||
<bean id="jms-durable" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsDurableConfig" />
|
||||
<property name="taskExecutor" ref="genericThreadPool" />
|
||||
</bean>
|
||||
|
||||
<bean id="jmsGenericConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy" />
|
||||
factory-bean="jmsConfig" factory-method="copy"/>
|
||||
|
||||
<bean id="jmsDurableConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy">
|
||||
<property name="destinationResolver" ref="qpidDurableResolver" />
|
||||
<property name="deliveryPersistent" value="true"/>
|
||||
</bean>
|
||||
|
||||
<bean id="qpidNoDurableResolver" class="com.raytheon.uf.edex.esb.camel.spring.QpidDestinationNameResolver">
|
||||
<property name="queueNamePrefix" value="direct://amq.direct/"/>
|
||||
|
@ -71,6 +82,7 @@
|
|||
<property name="templateConnectionFactory" ref="jmsPooledConnectionFactory" />
|
||||
<property name="destinationResolver" ref="qpidNoDurableResolver" />
|
||||
<property name="disableReplyTo" value="true" />
|
||||
<property name="deliveryPersistent" value="false"/>
|
||||
<!--
|
||||
<property name="transacted" value="true" />
|
||||
<property name="acknowledgementModeName" value="TRANSACTED"/>
|
||||
|
@ -253,14 +265,14 @@
|
|||
<route id="alertVizNotify">
|
||||
<from uri="vm:edex.alertVizNotification" />
|
||||
<bean ref="serializationUtil" method="transformToThrift" />
|
||||
<to uri="jms-generic:topic:edex.alerts.msg?deliveryPersistent=false" />
|
||||
<to uri="jms-generic:topic:edex.alerts.msg" />
|
||||
</route>
|
||||
|
||||
<!-- Route to send text products to alarm/alert -->
|
||||
<route id="alarmAlertNotify">
|
||||
<from uri="vm:edex.alarmAlertNotification" />
|
||||
<bean ref="serializationUtil" method="transformToThrift" />
|
||||
<to uri="jms-generic:topic:edex.alarms.msg?deliveryPersistent=false" />
|
||||
<to uri="jms-generic:topic:edex.alarms.msg" />
|
||||
</route>
|
||||
|
||||
<!-- Route to periodically close any unused jms resources that have been pooled -->
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
<!-- LDAD (watch/warn) triggered script runner -->
|
||||
<route id="ldadWatchWarn">
|
||||
<from uri="jms-generic:queue:watchwarn?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-durable:queue:watchwarn"/>
|
||||
<doTry>
|
||||
<bean ref="ldadScriptRunner" method="runScripts" />
|
||||
<doCatch>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<bean id="binlightningDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="binlightning" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.binlightning?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.binlightning" />
|
||||
</bean>
|
||||
|
||||
<bean id="binlightningCamelRegistered" factory-bean="clusteredCamelContextMgr"
|
||||
|
@ -31,13 +31,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>binlightning</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.binlightning" />
|
||||
<to uri="jms-durable:queue:Ingest.binlightning" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin binlightning routes -->
|
||||
<route id="binlightningIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.binlightning?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.binlightning"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>binlightning</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<bean id="bufrmosDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="bufrmos" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.bufrmos?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.bufrmos" />
|
||||
</bean>
|
||||
|
||||
<bean id="bufrmosCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -30,13 +30,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>bufrmos</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.bufrmos" />
|
||||
<to uri="jms-durable:queue:Ingest.bufrmos" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin bufrmos routes -->
|
||||
<route id="bufrmosIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.bufrmos?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.bufrmos" />
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>bufrmos</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -32,13 +32,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>bufrua</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.bufrua"/>
|
||||
<to uri="jms-durable:queue:Ingest.bufrua"/>
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin BUFRUA routes -->
|
||||
<route id="bufruaIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.bufrua?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-durable:queue:Ingest.bufrua"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>bufrua</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -29,13 +29,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>ccfp</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.ccfp" />
|
||||
<to uri="jms-durable:queue:Ingest.ccfp" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin ccfp routes -->
|
||||
<route id="ccfpIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.ccfp?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.ccfp"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>ccfp</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -345,8 +345,8 @@
|
|||
<constructor-arg ref="jmsIscSendConfig"/>
|
||||
<property name="taskExecutor" ref="iscSendThreadPool"/>
|
||||
</bean>
|
||||
<bean id="jmsIscSendConfig" class="org.apache.camel.component.jms.JmsConfiguration" factory-bean="jmsConfig"
|
||||
factory-method="copy"/>
|
||||
<bean id="jmsIscSendConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="iscSendThreadPool" class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="2"/>
|
||||
<property name="maxPoolSize" value="2"/>
|
||||
|
@ -369,7 +369,7 @@
|
|||
<constructor-arg ref="jmsIscReceiveConfig"/>
|
||||
<property name="taskExecutor" ref="iscReceiveThreadPool"/>
|
||||
</bean>
|
||||
<bean id="jmsIscReceiveConfig" class="org.apache.camel.component.jms.JmsConfiguration" factory-bean="jmsConfig"
|
||||
<bean id="jmsIscReceiveConfig" class="org.apache.camel.component.jms.JmsConfiguration" factory-bean="jmsDurableConfig"
|
||||
factory-method="copy"/>
|
||||
<bean id="iscReceiveThreadPool" class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="2"/>
|
||||
|
@ -490,7 +490,7 @@
|
|||
<!-- ISC Data Receive route -->
|
||||
<route id="iscReceiveRoute">
|
||||
<from
|
||||
uri="jms-iscrec:queue:gfeIscDataReceive?concurrentConsumers=2&destinationResolver=#qpidDurableResolver"/>
|
||||
uri="jms-iscrec:queue:gfeIscDataReceive?concurrentConsumers=2"/>
|
||||
<doTry>
|
||||
<pipeline>
|
||||
<bean ref="serializationUtil" method="transformFromThrift"/>
|
||||
|
@ -510,7 +510,7 @@
|
|||
autoStartup="false">
|
||||
|
||||
<route id="iscSendJobQueueAggr">
|
||||
<from uri="jms-iscsend:queue:iscSendNotification?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-iscsend:queue:iscSendNotification"/>
|
||||
<doTry>
|
||||
<bean ref="serializationUtil" method="transformFromThrift"/>
|
||||
<bean ref="iscSendQueue" method="addSendJobs"/>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<constructor-arg ref="jmsSmartInitConfig"/>
|
||||
<property name="taskExecutor" ref="smartInitThreadPool"/>
|
||||
</bean>
|
||||
<bean id="jmsSmartInitConfig" class="org.apache.camel.component.jms.JmsConfiguration" factory-bean="jmsConfig"
|
||||
<bean id="jmsSmartInitConfig" class="org.apache.camel.component.jms.JmsConfiguration" factory-bean="jmsDurableConfig"
|
||||
factory-method="copy"/>
|
||||
<bean id="smartInitThreadPool" class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="${smartinit.threadpoolsize}"/>
|
||||
|
@ -48,7 +48,7 @@
|
|||
|
||||
<camelContext id="gfe-camel-spring" xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="errorHandler">
|
||||
<route id="SPCWatch">
|
||||
<from uri="jms-generic:queue:edex.spcWatch?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-durable:queue:edex.spcWatch"/>
|
||||
<doTry>
|
||||
<bean ref="spcWatch" method="handleSpcWatch"/>
|
||||
<doCatch>
|
||||
|
@ -60,7 +60,7 @@
|
|||
</route>
|
||||
|
||||
<route id="TPCWatch">
|
||||
<from uri="jms-generic:queue:edex.tpcWatch?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-durable:queue:edex.tpcWatch"/>
|
||||
<doTry>
|
||||
<bean ref="tpcWatch" method="handleTpcWatch"/>
|
||||
<doCatch>
|
||||
|
@ -83,7 +83,7 @@
|
|||
|
||||
<route id="gfeIngestNotification">
|
||||
<from
|
||||
uri="jms-generic:queue:gfeDataURINotification?destinationResolver=#qpidDurableResolver&concurrentConsumers=1"/>
|
||||
uri="jms-durable:queue:gfeDataURINotification"/>
|
||||
<doTry>
|
||||
<bean ref="serializationUtil" method="transformFromThrift"/>
|
||||
<bean ref="ifpServer" method="filterDataURINotifications"/>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<from
|
||||
uri="jms-generic:topic:edex.alerts"/>
|
||||
<doTry>
|
||||
<to uri="jms-generic:queue:gfeDataURINotification"/>
|
||||
<to uri="jms-durable:queue:gfeDataURINotification"/>
|
||||
<doCatch>
|
||||
<exception>java.lang.Throwable</exception>
|
||||
<to
|
||||
|
@ -169,7 +169,6 @@
|
|||
|
||||
</camelContext>
|
||||
|
||||
|
||||
<bean factory-bean="clusteredCamelContextMgr" factory-method="register">
|
||||
<constructor-arg ref="clusteredGfeIngestRoutes"/>
|
||||
</bean>
|
||||
|
|
|
@ -72,7 +72,6 @@ import com.raytheon.uf.edex.site.notify.SendSiteActivationNotifications;
|
|||
* Mar 20, 2013 #1774 randerso Changed to use GFED2DDao
|
||||
* May 02, 2013 #1969 randerso Moved updateDbs method into IFPGridDatabase
|
||||
* Jun 13, 2013 #2044 randerso Refactored to use IFPServer
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author njensen
|
||||
|
@ -99,7 +98,7 @@ public class GFESiteActivation implements ISiteActivationListener {
|
|||
|
||||
private boolean intialized = false;
|
||||
|
||||
private ExecutorService postActivationTaskExecutor = MoreExecutors
|
||||
private final ExecutorService postActivationTaskExecutor = MoreExecutors
|
||||
.getExitingExecutorService((ThreadPoolExecutor) Executors
|
||||
.newCachedThreadPool());
|
||||
|
||||
|
|
|
@ -107,6 +107,12 @@ import com.raytheon.uf.edex.database.purge.PurgeLogger;
|
|||
* 05/30/13 #2044 randerso Refactored to better match A1 design. Removed D2DParmIDCache.
|
||||
* 07/30/13 #2057 randerso Added support for marking obsoleted databases for removal and
|
||||
* eventually purging them
|
||||
* 09/12/13 #2348 randerso Added logging when database are added/removed from dbMap
|
||||
* Fixed the synchronization of dbMap with the database inventory
|
||||
* Changed to call D2DGridDatabase.getDatabase instead of calling
|
||||
* the constructor directly to ensure the data exists before creating
|
||||
* the D2DGridDatabase object
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author bphillip
|
||||
|
@ -786,7 +792,10 @@ public class GridParmManager {
|
|||
// if db not in map try to create it
|
||||
if (db == null) {
|
||||
if (dbId.getDbType().equals("D2D")) {
|
||||
db = D2DGridDatabase.getDatabase(config, dbId);
|
||||
String d2dModelName = config.d2dModelNameMapping(dbId
|
||||
.getModelName());
|
||||
db = D2DGridDatabase.getDatabase(config, d2dModelName,
|
||||
dbId.getModelDate());
|
||||
} else {
|
||||
ServerResponse<GridDatabase> status = createDB(dbId);
|
||||
if (status.isOkay()) {
|
||||
|
@ -910,10 +919,10 @@ public class GridParmManager {
|
|||
sr.addMessage("VersionPurge failed - couldn't get inventory");
|
||||
return sr;
|
||||
}
|
||||
List<DatabaseID> databases = sr.getPayload();
|
||||
List<DatabaseID> currentInv = sr.getPayload();
|
||||
|
||||
// sort the inventory by site, type, model, time (most recent first)
|
||||
Collections.sort(databases);
|
||||
Collections.sort(currentInv);
|
||||
|
||||
// process the inventory looking for "old" unwanted databases
|
||||
String model = null;
|
||||
|
@ -921,7 +930,7 @@ public class GridParmManager {
|
|||
String type = null;
|
||||
int count = 0;
|
||||
int desiredVersions = 0;
|
||||
for (DatabaseID dbId : databases) {
|
||||
for (DatabaseID dbId : currentInv) {
|
||||
// new series?
|
||||
if (!dbId.getSiteId().equals(site)
|
||||
|| !dbId.getDbType().equals(type)
|
||||
|
@ -944,7 +953,32 @@ public class GridParmManager {
|
|||
}
|
||||
}
|
||||
|
||||
createDbNotification(databases);
|
||||
List<DatabaseID> newInv = getDbInventory().getPayload();
|
||||
List<DatabaseID> additions = new ArrayList<DatabaseID>(newInv);
|
||||
additions.removeAll(currentInv);
|
||||
|
||||
List<DatabaseID> deletions = new ArrayList<DatabaseID>(currentInv);
|
||||
deletions.removeAll(newInv);
|
||||
|
||||
// kludge to keep dbMap in synch until GridParmManager/D2DParmICache
|
||||
// merge/refactor
|
||||
List<DatabaseID> toRemove = new ArrayList<DatabaseID>(dbMap.keySet());
|
||||
toRemove.removeAll(newInv);
|
||||
for (DatabaseID dbId : toRemove) {
|
||||
if (dbMap.remove(dbId) != null) {
|
||||
statusHandler
|
||||
.info("Synching GridParmManager with database inventory, removing "
|
||||
+ dbId);
|
||||
}
|
||||
|
||||
// add any removals to the deletions list
|
||||
// so notifications go to the other JVMs
|
||||
if (!deletions.contains(dbId)) {
|
||||
deletions.add(dbId);
|
||||
}
|
||||
}
|
||||
|
||||
createDbNotification(additions, deletions);
|
||||
|
||||
return sr;
|
||||
}
|
||||
|
@ -1077,8 +1111,11 @@ public class GridParmManager {
|
|||
private void deallocateDb(DatabaseID id, boolean deleteFile) {
|
||||
GridDatabase db = this.dbMap.remove(id);
|
||||
|
||||
if ((db != null) && deleteFile) {
|
||||
db.deleteDb();
|
||||
if (db != null) {
|
||||
statusHandler.info("deallocateDb called, removing " + id);
|
||||
if (deleteFile) {
|
||||
db.deleteDb();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1169,7 +1206,7 @@ public class GridParmManager {
|
|||
|
||||
for (Date refTime : D2DGridDatabase.getModelRunTimes(
|
||||
d2dModelName, desiredVersions)) {
|
||||
D2DGridDatabase db = new D2DGridDatabase(config,
|
||||
D2DGridDatabase db = D2DGridDatabase.getDatabase(config,
|
||||
d2dModelName, refTime);
|
||||
addDB(db);
|
||||
}
|
||||
|
@ -1198,13 +1235,11 @@ public class GridParmManager {
|
|||
D2DGridDatabase db = (D2DGridDatabase) this.dbMap.get(dbId);
|
||||
if (db == null) {
|
||||
// New database
|
||||
try {
|
||||
db = new D2DGridDatabase(config, d2dModelName, refTime);
|
||||
} catch (GfeException e) {
|
||||
statusHandler.error("Error creating D2DGridDatabase: "
|
||||
+ dbId, e);
|
||||
db = D2DGridDatabase.getDatabase(config, d2dModelName, refTime);
|
||||
if (db == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
addDB(db);
|
||||
statusHandler.info("filterGridRecords new D2D database: "
|
||||
+ dbId);
|
||||
|
@ -1390,17 +1425,6 @@ public class GridParmManager {
|
|||
return sr;
|
||||
}
|
||||
|
||||
private void createDbNotification(List<DatabaseID> prevInventory) {
|
||||
List<DatabaseID> newInventory = getDbInventory().getPayload();
|
||||
List<DatabaseID> additions = new ArrayList<DatabaseID>(newInventory);
|
||||
additions.removeAll(prevInventory);
|
||||
|
||||
List<DatabaseID> deletions = new ArrayList<DatabaseID>(prevInventory);
|
||||
deletions.removeAll(newInventory);
|
||||
|
||||
createDbNotification(additions, deletions);
|
||||
}
|
||||
|
||||
private void createDbNotification(List<DatabaseID> additions,
|
||||
List<DatabaseID> deletions) {
|
||||
if (!additions.isEmpty() || !deletions.isEmpty()) {
|
||||
|
@ -1422,19 +1446,25 @@ public class GridParmManager {
|
|||
|
||||
ServerResponse<GridDatabase> sr = new ServerResponse<GridDatabase>();
|
||||
for (DatabaseID dbId : invChanged.getAdditions()) {
|
||||
if (dbId.getDbType().equals("D2D")) {
|
||||
try {
|
||||
this.addDB(new D2DGridDatabase(config, dbId));
|
||||
statusHandler
|
||||
.info("handleGfeNotification new D2D database: "
|
||||
+ dbId);
|
||||
} catch (GfeException e) {
|
||||
statusHandler.error("Error creating D2DGridDatabase: "
|
||||
+ dbId, e);
|
||||
}
|
||||
} else {
|
||||
sr = this.createDB(dbId);
|
||||
}
|
||||
// TODO: This is pretty much just a duplicate of what's in
|
||||
// getDatabase.
|
||||
// Verify this works and then remove this commented code
|
||||
|
||||
// if (dbId.getDbType().equals("D2D")) {
|
||||
// String d2dModelName = config.d2dModelNameMapping(dbId
|
||||
// .getModelName());
|
||||
// D2DGridDatabase db = D2DGridDatabase.getDatabase(config,
|
||||
// d2dModelName, dbId.getModelDate());
|
||||
// if (db != null) {
|
||||
// this.addDB(db);
|
||||
// }
|
||||
// statusHandler
|
||||
// .info("handleGfeNotification new D2D database: "
|
||||
// + dbId);
|
||||
// } else {
|
||||
// sr = this.createDB(dbId);
|
||||
// }
|
||||
this.getDatabase(dbId);
|
||||
}
|
||||
if (!sr.isOkay()) {
|
||||
statusHandler.error("Error updating GridParmManager: "
|
||||
|
@ -1442,9 +1472,11 @@ public class GridParmManager {
|
|||
}
|
||||
|
||||
for (DatabaseID dbId : invChanged.getDeletions()) {
|
||||
statusHandler.info("handleGfeNotification removing database: "
|
||||
+ dbId);
|
||||
this.dbMap.remove(dbId);
|
||||
if (this.dbMap.remove(dbId) != null) {
|
||||
statusHandler
|
||||
.info("handleGfeNotification removing database: "
|
||||
+ dbId);
|
||||
}
|
||||
}
|
||||
} else if (notif instanceof GridUpdateNotification) {
|
||||
DatabaseID satDbId = D2DSatDatabase.getDbId(siteID);
|
||||
|
@ -1460,7 +1492,9 @@ public class GridParmManager {
|
|||
* @param db
|
||||
*/
|
||||
public void addDB(GridDatabase db) {
|
||||
this.dbMap.put(db.getDbId(), db);
|
||||
DatabaseID dbId = db.getDbId();
|
||||
statusHandler.info("addDB called, adding " + dbId);
|
||||
this.dbMap.put(dbId, db);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1489,48 +1523,56 @@ public class GridParmManager {
|
|||
}
|
||||
}
|
||||
|
||||
List<DatabaseID> added = new ArrayList<DatabaseID>(newInventory);
|
||||
added.removeAll(currentInventory);
|
||||
DatabaseID satDbid = D2DSatDatabase.getDbId(siteID);
|
||||
|
||||
// TODO why are we processing adds in a purge method. We should get adds
|
||||
// via other means
|
||||
// Verify and remove the commented code
|
||||
// List<DatabaseID> added = new ArrayList<DatabaseID>(newInventory);
|
||||
// added.removeAll(currentInventory);
|
||||
// Iterator<DatabaseID> iter = added.iterator();
|
||||
// while (iter.hasNext()) {
|
||||
// DatabaseID dbid = iter.next();
|
||||
// // remove satellite database and non-D2D databases from adds
|
||||
// if (!dbid.getDbType().equals("D2D") || dbid.equals(satDbid)) {
|
||||
// iter.remove();
|
||||
// } else {
|
||||
// // add the new database
|
||||
// try {
|
||||
// D2DGridDatabase db = new D2DGridDatabase(config, dbid);
|
||||
// addDB(db);
|
||||
// statusHandler.info("d2dGridDataPurged new D2D database: "
|
||||
// + dbid);
|
||||
// } catch (Exception e) {
|
||||
// statusHandler.handle(Priority.PROBLEM,
|
||||
// e.getLocalizedMessage(), e);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
List<DatabaseID> deleted = new ArrayList<DatabaseID>(currentInventory);
|
||||
deleted.removeAll(newInventory);
|
||||
|
||||
// remove satellite database and non-D2D databases from added
|
||||
DatabaseID satDbid = D2DSatDatabase.getDbId(siteID);
|
||||
Iterator<DatabaseID> iter = added.iterator();
|
||||
while (iter.hasNext()) {
|
||||
DatabaseID dbid = iter.next();
|
||||
if (!dbid.getDbType().equals("D2D") || dbid.equals(satDbid)) {
|
||||
iter.remove();
|
||||
} else {
|
||||
// add the new database
|
||||
try {
|
||||
D2DGridDatabase db = new D2DGridDatabase(config, dbid);
|
||||
addDB(db);
|
||||
statusHandler.info("d2dGridDataPurged new D2D database: "
|
||||
+ dbid);
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
iter = deleted.iterator();
|
||||
Iterator<DatabaseID> iter = deleted.iterator();
|
||||
while (iter.hasNext()) {
|
||||
DatabaseID dbid = iter.next();
|
||||
// remove satellite database and non-D2D databases from deletes
|
||||
if (!dbid.getDbType().equals("D2D") || dbid.equals(satDbid)) {
|
||||
iter.remove();
|
||||
} else {
|
||||
// remove the database
|
||||
statusHandler.info("d2dGridDataPurged removing database: "
|
||||
+ dbid);
|
||||
this.dbMap.remove(dbid);
|
||||
if (this.dbMap.remove(dbid) != null) {
|
||||
statusHandler.info("d2dGridDataPurged removing database: "
|
||||
+ dbid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((added.size() > 0) || (deleted.size() > 0)) {
|
||||
DBInvChangeNotification changed = new DBInvChangeNotification(
|
||||
added, deleted, siteID);
|
||||
// if ((added.size() > 0) || (deleted.size() > 0)) {
|
||||
// DBInvChangeNotification changed = new DBInvChangeNotification(
|
||||
// added, deleted, siteID);
|
||||
if (deleted.size() > 0) {
|
||||
DBInvChangeNotification changed = new DBInvChangeNotification(null,
|
||||
deleted, siteID);
|
||||
|
||||
SendNotifications.send(changed);
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ package com.raytheon.edex.plugin.gfe.server.database;
|
|||
|
||||
import java.awt.Rectangle;
|
||||
import java.nio.FloatBuffer;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -31,6 +32,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TimeZone;
|
||||
import java.util.TreeSet;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
@ -108,6 +110,9 @@ import com.raytheon.uf.edex.database.DataAccessLayerException;
|
|||
* 05/02/2013 #1969 randerso Removed unnecessary updateDbs method
|
||||
* 05/03/2013 #1974 randerso Fixed error handling when no D2D level mapping found
|
||||
* 06/13/2013 #2044 randerso Added convenience methods, general code cleanup
|
||||
* 09/12/2013 #2348 randerso Removed code that called getDb from getD2DDatabaseIdsFromDb
|
||||
* Added function to create a D2DGridDatabase object only if there is
|
||||
* data in postgres for the desired model/reftime
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -167,23 +172,25 @@ public class D2DGridDatabase extends VGridDatabase {
|
|||
* @return D2DGridDatabase or null if not available
|
||||
*/
|
||||
public static D2DGridDatabase getDatabase(IFPServerConfig config,
|
||||
DatabaseID dbId) {
|
||||
String gfeModelName = dbId.getModelName();
|
||||
Date refTime = dbId.getModelDate();
|
||||
|
||||
String d2dModelName = config.d2dModelNameMapping(gfeModelName);
|
||||
String d2dModelName, Date refTime) {
|
||||
try {
|
||||
GFED2DDao dao = new GFED2DDao();
|
||||
// TODO create query for single refTime
|
||||
List<Date> result = dao.getModelRunTimes(d2dModelName, -1);
|
||||
|
||||
if (result.contains(refTime)) {
|
||||
D2DGridDatabase db = new D2DGridDatabase(config, dbId);
|
||||
D2DGridDatabase db = new D2DGridDatabase(config, d2dModelName,
|
||||
refTime);
|
||||
return db;
|
||||
}
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
|
||||
SimpleDateFormat sdf = new SimpleDateFormat(
|
||||
DatabaseID.MODEL_TIME_FORMAT);
|
||||
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
"Unable to create D2DGridDatabase for " + d2dModelName
|
||||
+ "_" + sdf.format(refTime), e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -311,40 +318,20 @@ public class D2DGridDatabase extends VGridDatabase {
|
|||
|
||||
private Map<String, D2DParm> d2dParms = new HashMap<String, D2DParm>();
|
||||
|
||||
/**
|
||||
* Constructs a new D2DGridDatabase from a DatabaseID
|
||||
*
|
||||
* @param config
|
||||
* @param dbId
|
||||
* @throws GfeException
|
||||
*/
|
||||
public D2DGridDatabase(IFPServerConfig config, DatabaseID dbId)
|
||||
throws GfeException {
|
||||
super(config);
|
||||
|
||||
if (!dbId.getDbType().equals("D2D")) {
|
||||
throw new GfeException(
|
||||
"Attempting to create D2DGridDatabase for non-D2D DatabaseID: "
|
||||
+ dbId);
|
||||
}
|
||||
|
||||
String gfeModelName = dbId.getModelName();
|
||||
String d2dModelName = this.config.d2dModelNameMapping(gfeModelName);
|
||||
Date refTime = dbId.getModelDate();
|
||||
|
||||
init(d2dModelName, refTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new D2DGridDatabase
|
||||
*
|
||||
* For internal use only. External code should call
|
||||
* D2DGridDatabase.getDatabase(IFPServerConfig, String, Date) to ensure
|
||||
* objects are only created if data is present
|
||||
*
|
||||
* @param config
|
||||
* @param d2dModelName
|
||||
* @param refTime
|
||||
*
|
||||
* @throws GfeException
|
||||
*/
|
||||
public D2DGridDatabase(IFPServerConfig config, String d2dModelName,
|
||||
private D2DGridDatabase(IFPServerConfig config, String d2dModelName,
|
||||
Date refTime) throws GfeException {
|
||||
super(config);
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ import com.raytheon.uf.edex.core.EDEXUtil;
|
|||
* ------------ ---------- ----------- --------------------------
|
||||
* Oct 12, 2010 dgilling Initial creation
|
||||
* Jun 13, 2013 #2044 randerso Refactored to use IFPServer
|
||||
*
|
||||
* Sep 13, 2013 2368 rjpeter Used durable jms settings.
|
||||
* </pre>
|
||||
*
|
||||
* @author dgilling
|
||||
|
@ -94,7 +94,7 @@ public class SmartInitRequestHandler extends BaseGfeRequestHandler implements
|
|||
.append(SmartInitRecord.MANUAL_SMART_INIT_PRIORITY);
|
||||
|
||||
EDEXUtil.getMessageProducer().sendAsyncUri(
|
||||
"jms-generic:queue:manualSmartInit",
|
||||
"jms-durable:queue:manualSmartInit",
|
||||
manualInitString.toString());
|
||||
} else {
|
||||
sr.addMessage("No valid model data could be retrieved for model "
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<bean id="goessoundingDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg ref="goessoundingPluginName" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.goessounding?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.goessounding"/>
|
||||
</bean>
|
||||
|
||||
<bean id="goessoundingCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -35,13 +35,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>goessounding</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.goessounding" />
|
||||
<to uri="jms-durable:queue:Ingest.goessounding" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin GOES Sounding routes -->
|
||||
<route id="goessndgIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.goessounding?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.goessounding"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>goessounding</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -6,14 +6,11 @@
|
|||
<bean id="gribDecoder" class="com.raytheon.edex.plugin.grib.GribDecoder" />
|
||||
|
||||
<bean id="ingest-grib" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestGribConfig" />
|
||||
<constructor-arg ref="jmsGribConfig" />
|
||||
<property name="taskExecutor" ref="gribThreadPool" />
|
||||
</bean>
|
||||
|
||||
<bean id="jmsIngestGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy">
|
||||
</bean>
|
||||
|
||||
<bean id="jmsGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="gribThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="${grib-decode.count.threads}" />
|
||||
|
@ -61,7 +58,7 @@
|
|||
autoStartup="false">
|
||||
|
||||
<endpoint id="gribFileEndpoint" uri="file:${edex.home}/data/sbn/grib?noop=true&idempotent=false" />
|
||||
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}&destinationResolver=#qpidDurableResolver" />
|
||||
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}"/>
|
||||
|
||||
<route id="gribFileConsumerRoute">
|
||||
<from ref="gribFileEndpoint" />
|
||||
|
|
|
@ -6,14 +6,11 @@
|
|||
<bean id="gribDecoder" class="com.raytheon.edex.plugin.grib.GribDecoder" />
|
||||
|
||||
<bean id="ingest-grib" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestGribConfig" />
|
||||
<constructor-arg ref="jmsGribConfig" />
|
||||
<property name="taskExecutor" ref="gribThreadPool" />
|
||||
</bean>
|
||||
|
||||
<bean id="jmsIngestGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy">
|
||||
</bean>
|
||||
|
||||
<bean id="jmsGribConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="gribThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="${grib-decode.count.threads}" />
|
||||
|
@ -57,7 +54,7 @@
|
|||
autoStartup="false">
|
||||
|
||||
<endpoint id="gribFileEndpoint" uri="file:${edex.home}/data/sbn/grib?noop=true&idempotent=false" />
|
||||
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}&destinationResolver=#qpidDurableResolver" />
|
||||
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}"/>
|
||||
|
||||
<route id="gribFileConsumerRoute">
|
||||
<from ref="gribFileEndpoint" />
|
||||
|
|
|
@ -791,6 +791,11 @@
|
|||
<datasetId>HPCGuide</datasetId>
|
||||
<dt>6</dt>
|
||||
</info>
|
||||
<info>
|
||||
<title>HPCGuide-2.5km</title>
|
||||
<datasetId>HPCGuide-2.5km</datasetId>
|
||||
<dt>6</dt>
|
||||
</info>
|
||||
<info>
|
||||
<title>HPCGuide-AK</title>
|
||||
<datasetId>HPCGuide-AK</datasetId>
|
||||
|
|
|
@ -515,11 +515,6 @@
|
|||
<datasetId>FFG-TIR</datasetId>
|
||||
<dt>1</dt>
|
||||
</info>
|
||||
<info>
|
||||
<title>FFG-TIR-HiRes</title>
|
||||
<datasetId>FFG-TIR-HiRes</datasetId>
|
||||
<dt>1</dt>
|
||||
</info>
|
||||
<info>
|
||||
<title>QPE-TIR</title>
|
||||
<datasetId>QPE-TIR</datasetId>
|
||||
|
|
|
@ -383,6 +383,12 @@
|
|||
<versionsToKeep>2</versionsToKeep>
|
||||
<modTimeToWait>00-00:15:00</modTimeToWait>
|
||||
</rule>
|
||||
<!-- Purge rule for the HPCGuide (HPCGuide 2.5km) model -->
|
||||
<rule>
|
||||
<keyValue>HPCGuide-2.5km</keyValue>
|
||||
<versionsToKeep>2</versionsToKeep>
|
||||
<modTimeToWait>00-00:15:00</modTimeToWait>
|
||||
</rule>
|
||||
<!-- Purge rule for the GFSGuide (GFSGuide) model -->
|
||||
<rule>
|
||||
<keyValue>GFSGuide</keyValue>
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
<firstGridPointCorner>UpperLeft</firstGridPointCorner>
|
||||
<nx>137</nx>
|
||||
<ny>102</ny>
|
||||
<dx>0.5</dx>
|
||||
<dy>0.5</dy>
|
||||
<dx>0.50367647058823528</dx>
|
||||
<dy>0.50495049504950495</dy>
|
||||
<spacingUnit>degree</spacingUnit>
|
||||
<la2>-0.25</la2>
|
||||
<lo2>340.25</lo2>
|
||||
|
|
|
@ -2885,6 +2885,15 @@
|
|||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>HPCGuide-2.5km</name>
|
||||
<center>7</center>
|
||||
<subcenter>5</subcenter>
|
||||
<process>
|
||||
<id>183</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>HPCGuide-AK</name>
|
||||
<center>7</center>
|
||||
|
|
|
@ -1084,16 +1084,6 @@
|
|||
<name>FFG-TIR</name>
|
||||
<center>9</center>
|
||||
<subcenter>160</subcenter>
|
||||
<grid>240160</grid>
|
||||
<process>
|
||||
<id>151</id>
|
||||
</process>
|
||||
</model>
|
||||
|
||||
<model>
|
||||
<name>FFG-TIR-HiRes</name>
|
||||
<center>9</center>
|
||||
<subcenter>160</subcenter>
|
||||
<grid>250160</grid>
|
||||
<process>
|
||||
<id>151</id>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Product Discipline 0: Meteorological products, Parameter Category 1: Moisture
|
||||
#192-254 Reserved for local use
|
||||
192:192:Categorical Rain::CRAIN
|
||||
192:192:Weather::wxType
|
||||
193:193:Categorical Freezing Rain::CFRZR
|
||||
194:194:Categorical Ice Pellets::CICEP
|
||||
195:195:Categorical Snow::CSNOW
|
||||
|
|
|
@ -21,11 +21,11 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>ldad</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.ldad" />
|
||||
<to uri="jms-durable:queue:Ingest.ldad" />
|
||||
</route>
|
||||
|
||||
<route id="ldadIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.ldad" />
|
||||
<from uri="jms-durable:queue:Ingest.ldad" />
|
||||
<multicast>
|
||||
<try>
|
||||
<to uri="direct-vm:ldadmesonetIngest" />
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<bean id="ldadhydroDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="ldadhydro" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.ldadhydro?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.ldadhydro" />
|
||||
</bean>
|
||||
|
||||
<bean id="ldadhydroPointData" class="com.raytheon.edex.plugin.ldadhydro.dao.LdadhydroPointDataTransform"/>
|
||||
|
@ -28,7 +28,7 @@
|
|||
errorHandlerRef="errorHandler"
|
||||
autoStartup="false">
|
||||
<route id="ldadhydroIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.ldadhydro?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.ldadhydro"/>
|
||||
<doTry>
|
||||
<pipeline>
|
||||
<bean ref="stringToFile" />
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<bean id="ldadmanualDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="ldadmanual" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.ldadmanual?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.ldadmanual"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ldadmanualCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -26,7 +26,7 @@
|
|||
autoStartup="false">
|
||||
|
||||
<route id="ldadmanualIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.ldadmanual?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.ldadmanual"/>
|
||||
<doTry>
|
||||
<pipeline>
|
||||
<bean ref="stringToFile" />
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<bean id="ldadprofilerDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="ldadprofiler" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.ldadprofiler?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.ldadprofiler"/>
|
||||
</bean>
|
||||
|
||||
<bean id="ldadprofilerCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -37,13 +37,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>ldadprofiler</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.ldadprofiler" />
|
||||
<to uri="jms-durable:queue:Ingest.ldadprofiler" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin ldadprofiler routes -->
|
||||
<route id="ldadprofilerIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.ldadprofiler?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.ldadprofiler"/>
|
||||
<doTry>
|
||||
<pipeline>
|
||||
<bean ref="stringToFile" />
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<bean id="mdlsndgDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg ref="modelsoundingPluginName" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.modelsounding?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.modelsounding"/>
|
||||
</bean>
|
||||
|
||||
<bean id="modelsoundingCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -45,13 +45,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>modelsounding</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.modelsounding" />
|
||||
<to uri="jms-durable:queue:Ingest.modelsounding" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin Model Sounding routes -->
|
||||
<route id="modelsndgIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.modelsounding?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.modelsounding"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>modelsounding</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<bean id="obsDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="obs" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.obs?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.obs"/>
|
||||
</bean>
|
||||
|
||||
<bean id="obsCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -36,13 +36,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>obs</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.obs" />
|
||||
<to uri="jms-durable:queue:Ingest.obs" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin METAR routes -->
|
||||
<route id="metarIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.obs?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.obs"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>obs</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<bean id="poessoundingDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg ref="poessoundingPluginName" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.poessounding?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.poessounding"/>
|
||||
</bean>
|
||||
|
||||
<bean id="poessoundingCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -30,13 +30,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>poessounding</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.poessounding"/>
|
||||
<to uri="jms-durable:queue:Ingest.poessounding"/>
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin poes Sounding routes -->
|
||||
<route id="poessndgIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.poessounding?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-durable:queue:Ingest.poessounding"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>poessounding</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<bean id="profilerDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg ref="profilerPluginName" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.profiler?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.profiler"/>
|
||||
</bean>
|
||||
|
||||
<bean id="profilerCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -30,13 +30,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>profiler</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.profiler"/>
|
||||
<to uri="jms-durable:queue:Ingest.profiler"/>
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin Profiler routes -->
|
||||
<route id="profilerIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.profiler?destinationResolver=#qpidDurableResolver"/>
|
||||
<from uri="jms-durable:queue:Ingest.profiler"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>profiler</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -6,12 +6,11 @@
|
|||
<bean id="radarDecompressor" class="com.raytheon.edex.plugin.radar.RadarDecompressor"/>
|
||||
<bean id="radarDecoder" class="com.raytheon.edex.plugin.radar.RadarDecoder"/>
|
||||
<bean id="jms-radar" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestRadarConfig" />
|
||||
<constructor-arg ref="jmsRadarConfig" />
|
||||
<property name="taskExecutor" ref="radarThreadPool" />
|
||||
</bean>
|
||||
<bean id="jmsIngestRadarConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy">
|
||||
</bean>
|
||||
<bean id="jmsRadarConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="radarThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="2" />
|
||||
|
@ -54,7 +53,7 @@
|
|||
|
||||
<!-- Begin Radar routes -->
|
||||
<route id="radarIngestRoute">
|
||||
<from uri="jms-radar:queue:Ingest.Radar?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-radar:queue:Ingest.Radar"/>
|
||||
<setHeader headerName="dataType">
|
||||
<constant>radar-sbn</constant>
|
||||
</setHeader>
|
||||
|
@ -62,7 +61,7 @@
|
|||
</route>
|
||||
|
||||
<route id="radarRadarServerIngestRoute">
|
||||
<from uri="jms-radar:queue:Ingest.RadarRadarServer?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-radar:queue:Ingest.RadarRadarServer"/>
|
||||
<setHeader headerName="dataType">
|
||||
<constant>radar-local</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -33,13 +33,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>recco</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.recco" />
|
||||
<to uri="jms-durable:queue:Ingest.recco" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin RECCO routes -->
|
||||
<route id="reccoIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.recco?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.recco"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>recco</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
<bean id="redbookDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="redbook" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.redbook?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.redbook"/>
|
||||
</bean>
|
||||
|
||||
<!--
|
||||
|
@ -38,13 +38,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>redbook</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.redbook" />
|
||||
<to uri="jms-durable:queue:Ingest.redbook" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin Redbook routes -->
|
||||
<route id="redbookIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.redbook?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.redbook"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>redbook</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
|
||||
|
||||
<bean id="jms-satellite" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestSatelliteConfig" />
|
||||
<constructor-arg ref="jmsSatelliteConfig" />
|
||||
<property name="taskExecutor" ref="satelliteThreadPool" />
|
||||
</bean>
|
||||
<bean id="jmsIngestSatelliteConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy" />
|
||||
<bean id="jmsSatelliteConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="satelliteThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="1" />
|
||||
|
@ -47,13 +47,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>satellite</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.Satellite" />
|
||||
<to uri="jms-durable:queue:Ingest.Satellite" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin Sat routes -->
|
||||
<route id="satIngestRoute">
|
||||
<from uri="jms-satellite:queue:Ingest.Satellite?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-satellite:queue:Ingest.Satellite"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>satellite</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -91,7 +91,7 @@ public class SatelliteDecoder {
|
|||
|
||||
private IUFStatusHandler statusHandler = UFStatus.getHandler(getClass());
|
||||
|
||||
private String traceId = "";
|
||||
private final String traceId = "";
|
||||
|
||||
private static final int MAX_IMAGE_SIZE = 30000000;
|
||||
|
||||
|
@ -112,8 +112,9 @@ public class SatelliteDecoder {
|
|||
|
||||
SatelliteRecord record = null;
|
||||
|
||||
if (file == null || (file.length() < 1))
|
||||
if ((file == null) || (file.length() < 1)) {
|
||||
return new PluginDataObject[0];
|
||||
}
|
||||
RandomAccessFile f = new RandomAccessFile(file, "r");
|
||||
try {
|
||||
ITimer timer = TimeUtil.getTimer();
|
||||
|
@ -260,7 +261,7 @@ public class SatelliteDecoder {
|
|||
// Get the Satellite Height
|
||||
int satHeight = byteBuffer.getShort(53);
|
||||
|
||||
if (latSub != 0 || lonSub != 0 || satHeight != 0) {
|
||||
if ((latSub != 0) || (lonSub != 0) || (satHeight != 0)) {
|
||||
// Correct the longitude so negative is west
|
||||
lonSub *= -1;
|
||||
// Correct the height to be height above ground
|
||||
|
@ -543,14 +544,13 @@ public class SatelliteDecoder {
|
|||
// Allocate 30MB for a possible max size
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(MAX_IMAGE_SIZE);
|
||||
int totalBytesDecomp = 0;
|
||||
int decompByteCounter = 0;
|
||||
byte[] inputArray = new byte[1024 * 10];
|
||||
Inflater decompressor = new Inflater();
|
||||
int index = -1;
|
||||
try {
|
||||
while (totalBytesDecomp < zSatellite.length) {
|
||||
|
||||
int compChunkSize = zSatellite.length - totalBytesDecomp > 10240 ? 10240
|
||||
int compChunkSize = (zSatellite.length - totalBytesDecomp) > 10240 ? 10240
|
||||
: zSatellite.length - totalBytesDecomp;
|
||||
|
||||
// copy compChunkSize compressed data from zSatellite, offset by
|
||||
|
@ -574,9 +574,6 @@ public class SatelliteDecoder {
|
|||
throw new DecoderException(
|
||||
"Unable to decompress satellite data - input data appears to be truncated");
|
||||
}
|
||||
// add the total bytes decompressed from inflate call
|
||||
decompByteCounter += inflatedBytes;
|
||||
|
||||
// retrieve the total compressed bytes input so far
|
||||
totalBytesDecomp += decompressor.getTotalIn();
|
||||
|
||||
|
@ -645,9 +642,9 @@ public class SatelliteDecoder {
|
|||
|
||||
}
|
||||
|
||||
if (index != -1 && (index + 3 <= inflateArray.length - 1)) {
|
||||
if (!(inflateArray[index] == -1 && inflateArray[index + 1] == 0
|
||||
&& inflateArray[index + 2] == -1 && inflateArray[index + 3] == 0)) {
|
||||
if ((index != -1) && ((index + 3) <= (inflateArray.length - 1))) {
|
||||
if (!((inflateArray[index] == -1) && (inflateArray[index + 1] == 0)
|
||||
&& (inflateArray[index + 2] == -1) && (inflateArray[index + 3] == 0))) {
|
||||
index = getIndex(inflateArray, index + 1);
|
||||
}
|
||||
} else {
|
||||
|
@ -690,7 +687,7 @@ public class SatelliteDecoder {
|
|||
if (byteArray[0] < 0) {
|
||||
// remove the negative value
|
||||
byteArray[0] &= 127;
|
||||
latitude = byteArrayToFloat(byteArray) / 10000 * -1;
|
||||
latitude = (byteArrayToFloat(byteArray) / 10000) * -1;
|
||||
} else {
|
||||
latitude = byteArrayToFloat(byteArray) / 10000;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<bean id="sfcobsDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="sfcobs" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.sfcobs?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.sfcobs"/>
|
||||
</bean>
|
||||
|
||||
<bean id="sfcobsCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -37,13 +37,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>sfcobs</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.sfcobs" />
|
||||
<to uri="jms-durable:queue:Ingest.sfcobs" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin sfcobs routes -->
|
||||
<route id="sfcobsIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.sfcobs?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.sfcobs"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>sfcobs</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
|
||||
|
||||
<bean id="jms-shef" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestShefConfig" />
|
||||
<constructor-arg ref="jmsShefConfig" />
|
||||
<property name="taskExecutor" ref="shefThreadPool" />
|
||||
</bean>
|
||||
<bean id="jmsIngestShefConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy" />
|
||||
<bean id="jmsShefConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="shefThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="3" />
|
||||
|
@ -47,13 +47,13 @@
|
|||
factory-method="register">
|
||||
<constructor-arg value="shef" />
|
||||
<constructor-arg
|
||||
value="jms-dist:queue:Ingest.Shef?destinationResolver=#qpidDurableResolver" />
|
||||
value="jms-dist:queue:Ingest.Shef"/>
|
||||
</bean>
|
||||
|
||||
<bean id="shefHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="shef" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Shef?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Shef"/>
|
||||
</bean>
|
||||
|
||||
<bean id="shefCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -80,7 +80,7 @@
|
|||
<bean ref="manualProc" method="copyFileToArchive" />
|
||||
<bean ref="manualProc" />
|
||||
<to
|
||||
uri="jms-generic:queue:Ingest.ShefManual?destinationResolver=#qpidDurableResolver" />
|
||||
uri="jms-durable:queue:Ingest.ShefManual"/>
|
||||
</route>
|
||||
</camelContext>
|
||||
|
||||
|
@ -92,7 +92,7 @@
|
|||
<!-- Begin shef routes -->
|
||||
<route id="shefIngestRoute">
|
||||
<from
|
||||
uri="jms-shef:queue:Ingest.Shef?destinationResolver=#qpidDurableResolver" />
|
||||
uri="jms-shef:queue:Ingest.Shef"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>shef</constant>
|
||||
</setHeader>
|
||||
|
@ -103,7 +103,7 @@
|
|||
</route>
|
||||
<route id="shefStagedRoute">
|
||||
<from
|
||||
uri="jms-shef:queue:Ingest.ShefStaged?destinationResolver=#qpidDurableResolver" />
|
||||
uri="jms-shef:queue:Ingest.ShefStaged"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>shef</constant>
|
||||
</setHeader>
|
||||
|
@ -119,7 +119,7 @@
|
|||
<split streaming="true">
|
||||
<method bean="synopticToShef" method="iterate" />
|
||||
<bean ref="synopticToShef" method="transform" />
|
||||
<to uri="jms-generic:queue:Ingest.ShefStaged" />
|
||||
<to uri="jms-durable:queue:Ingest.ShefStaged" />
|
||||
</split>
|
||||
</pipeline>
|
||||
</route>
|
||||
|
@ -134,7 +134,7 @@
|
|||
<method bean="metarToShef" method="iterate" />
|
||||
<bean ref="metarToShef" method="transformMetar" />
|
||||
<to
|
||||
uri="jms-generic:queue:Ingest.ShefStaged?destinationResolver=#qpidDurableResolver" />
|
||||
uri="jms-durable:queue:Ingest.ShefStaged"/>
|
||||
</split>
|
||||
</pipeline>
|
||||
</route>
|
||||
|
@ -155,7 +155,7 @@
|
|||
|
||||
<route id="shefManualIngestRoute">
|
||||
<from
|
||||
uri="jms-shef:queue:Ingest.ShefManual?destinationResolver=#qpidDurableResolver" />
|
||||
uri="jms-shef:queue:Ingest.ShefManual"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>shef</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -41,6 +41,7 @@ import com.raytheon.uf.edex.database.dao.DaoConfig;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* June 15, 2011 9377 jnjanga Initial creation
|
||||
* Sep 05, 2013 16549 wkwock Fix the query
|
||||
*
|
||||
*
|
||||
* </pre>
|
||||
|
@ -147,7 +148,7 @@ class RecordMgr {
|
|||
|
||||
private static String modeSubClause() {
|
||||
if (options.getMode() == ReportMode.UNREPORTED)
|
||||
return " AND action_time IS NULL AND ";
|
||||
return " AND action_time IS NULL ";
|
||||
else
|
||||
return " ";
|
||||
}
|
||||
|
|
|
@ -62,7 +62,8 @@ import com.raytheon.uf.edex.database.dao.DaoConfig;
|
|||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* June 15, 2011 9377 jnjanga Initial creation
|
||||
* July 12, 2013 15711 wkwock Fix verbose, observe mode, etc
|
||||
* July 12, 2013 15711 wkwock Fix verbose, observe mode, etc
|
||||
* Sep 05, 2013 16539 wkwock Fix RECENT, NEAR_NOW,FRESH,and NEW_OR_INCREASED modes
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -84,8 +85,6 @@ class ReportWriter {
|
|||
|
||||
private Date now;
|
||||
|
||||
private long window;
|
||||
|
||||
private Date startTime;
|
||||
|
||||
private Date endTime;
|
||||
|
@ -102,9 +101,11 @@ class ReportWriter {
|
|||
this.reportData = new StringBuilder();
|
||||
this.opt = opt;
|
||||
this.now = now;
|
||||
window = opt.getMinutes() * 60;
|
||||
startTime = new Date(now.getTime() - window);
|
||||
endTime = new Date(now.getTime() + window);
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.add(Calendar.MINUTE, opt.getMinutes());
|
||||
endTime = cal.getTime();
|
||||
cal.add(Calendar.MINUTE, opt.getMinutes()*(-2));
|
||||
startTime = cal.getTime();
|
||||
|
||||
}
|
||||
|
||||
|
@ -376,8 +377,6 @@ class ReportWriter {
|
|||
|
||||
Alertalarmval maxfcst = findMaxfcst(grpData);
|
||||
Alertalarmval latestReport = findLatestAction(grpData);
|
||||
long latestActiontime = 0;
|
||||
long latestPosttime = 0;
|
||||
Date posttime = null;
|
||||
double latestValue = -88888.;
|
||||
|
||||
|
@ -448,6 +447,17 @@ class ReportWriter {
|
|||
}
|
||||
break;
|
||||
|
||||
case RECENT:
|
||||
for (Alertalarmval aav : grpData) {
|
||||
Date postingTime = aav.getPostingtime();
|
||||
if (postingTime.after(startTime)) {
|
||||
writeAAval(aav);
|
||||
updateDatabase(aav);
|
||||
alarmCount++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LATEST_MAXFCST:
|
||||
|
||||
if (grpTs0 == 'R' || grpTs0 == 'P') {
|
||||
|
@ -471,11 +481,13 @@ class ReportWriter {
|
|||
*/
|
||||
for (Alertalarmval aav : grpData) {
|
||||
|
||||
if ((grpTs0 == 'R' || grpTs0 == 'P') && latestReport != null) {
|
||||
if ((grpTs0 == 'R' || grpTs0 == 'P')) {
|
||||
Date validtime = aav.getId().getValidtime();
|
||||
latestActiontime = latestReport.getId().getValidtime()
|
||||
.getTime();
|
||||
if (validtime.after(new Date(latestActiontime + window))) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
if (latestReport != null)
|
||||
cal.setTime(latestReport.getId().getValidtime());
|
||||
cal.add(Calendar.MINUTE, opt.getMinutes());
|
||||
if (latestReport==null || validtime.after(cal.getTime())) {
|
||||
writeAAval(aav);
|
||||
updateDatabase(aav);
|
||||
alarmCount++;
|
||||
|
@ -485,9 +497,7 @@ class ReportWriter {
|
|||
if (grpTs0 == 'F' || grpTs0 == 'C') {
|
||||
if (maxfcst != null
|
||||
&& isNotNull(maxfcst.getActionTime().getTime())) {
|
||||
latestActiontime = maxfcst.getActionTime().getTime();
|
||||
Date latestActiondate = maxfcst.getActionTime();
|
||||
if (latestActiondate.before(startTime)) {
|
||||
if (maxfcst.getActionTime().before(startTime)) {
|
||||
writeAAval(maxfcst);
|
||||
updateDatabase(maxfcst);
|
||||
alarmCount++;
|
||||
|
@ -498,10 +508,13 @@ class ReportWriter {
|
|||
break;
|
||||
|
||||
case NEW_OR_INCREASED:
|
||||
Calendar cal = Calendar.getInstance();
|
||||
for (Alertalarmval aav : grpData) {
|
||||
if (latestReport != null) {
|
||||
latestPosttime = aav.getPostingtime().getTime();
|
||||
latestValue = aav.getValue();
|
||||
latestValue = latestReport.getValue();
|
||||
cal.setTime(latestReport.getPostingtime());
|
||||
} else {
|
||||
cal.setTimeInMillis(0);
|
||||
}
|
||||
|
||||
if (isNull(aav.getActionTime().getTime())) {
|
||||
|
@ -512,8 +525,9 @@ class ReportWriter {
|
|||
* has a higher value than the last posted record's value
|
||||
* (i.e. the report is 'increased'), then report it.
|
||||
*/
|
||||
cal.add(Calendar.MINUTE, opt.getMinutes());
|
||||
|
||||
if (posttime.after(new Date(latestPosttime + window))
|
||||
if (posttime.after(cal.getTime())
|
||||
|| (aav.getValue() > latestValue)) {
|
||||
writeAAval(aav);
|
||||
updateDatabase(aav);
|
||||
|
@ -553,8 +567,6 @@ class ReportWriter {
|
|||
|
||||
Alertalarmval latestReport = findLatestAction(grpData);
|
||||
Alertalarmval maxfcstVal = findMaxfcst(grpData);
|
||||
long latestActiontime = 0;
|
||||
long latestPosttime = 0;
|
||||
Date posttime = null;
|
||||
double latestValue = -88888.;
|
||||
|
||||
|
@ -579,18 +591,21 @@ class ReportWriter {
|
|||
* forecast value
|
||||
*/
|
||||
|
||||
if ((ts0 == 'R' || ts0 == 'P') && latestReport != null) {
|
||||
Date validtime = aav.getId().getValidtime();
|
||||
latestActiontime = latestReport.getId().getValidtime()
|
||||
.getTime();
|
||||
if (validtime.after(new Date(latestActiontime + window)))
|
||||
if ((ts0 == 'R' || ts0 == 'P') ) {
|
||||
if (latestReport == null)
|
||||
return true;
|
||||
|
||||
Date validtime = aav.getId().getValidtime();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(latestReport.getId().getValidtime());
|
||||
cal.add(Calendar.MINUTE, opt.getMinutes());
|
||||
if (validtime.after(cal.getTime()))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ts0 == 'F' || ts0 == 'C') {
|
||||
if (maxfcstVal != null
|
||||
&& isNotNull(maxfcstVal.getActionTime().getTime())) {
|
||||
latestActiontime = maxfcstVal.getActionTime().getTime();
|
||||
Date latestActiondate = maxfcstVal.getActionTime();
|
||||
if (latestActiondate.before(startTime))
|
||||
return true;
|
||||
|
@ -600,9 +615,12 @@ class ReportWriter {
|
|||
|
||||
case NEW_OR_INCREASED:
|
||||
/* get the last reported record and its time and value. */
|
||||
Calendar cal = Calendar.getInstance();
|
||||
if (latestReport != null) {
|
||||
latestPosttime = aav.getPostingtime().getTime();
|
||||
latestValue = aav.getValue();
|
||||
latestValue = latestReport.getValue();
|
||||
cal.setTime(latestReport.getPostingtime());
|
||||
} else {
|
||||
cal.setTimeInMillis(0);
|
||||
}
|
||||
|
||||
if (isNull(aav.getActionTime().getTime())) {
|
||||
|
@ -613,8 +631,9 @@ class ReportWriter {
|
|||
* has a higher value than the last posted record's value
|
||||
* (i.e. the report is 'increased'), then report it.
|
||||
*/
|
||||
cal.add(Calendar.MINUTE, opt.getMinutes());
|
||||
|
||||
if (posttime.after(new Date(latestPosttime + window))) {
|
||||
if (posttime.after(cal.getTime())) {
|
||||
return true;
|
||||
} else if (aav.getValue() > latestValue) {
|
||||
return true;
|
||||
|
@ -684,8 +703,10 @@ class ReportWriter {
|
|||
Object[] durData = getShefDurInfo(dur);
|
||||
if (durData == null)
|
||||
devbStr[0] = "Duration=" + dur;
|
||||
else
|
||||
devbStr[0] = (String) durData[2] + Constants.SPACE;
|
||||
else {
|
||||
Object[] aDurData = (Object[]) durData[0]
|
||||
; devbStr[0] = (String) aDurData[2] + Constants.SPACE;
|
||||
}
|
||||
|
||||
} else {
|
||||
devbStr[0] = Constants.SPACE;
|
||||
|
@ -837,9 +858,10 @@ class ReportWriter {
|
|||
private Alertalarmval findLatestAction(List<Alertalarmval> grpData) {
|
||||
TreeSet<Alertalarmval> actions = new TreeSet<Alertalarmval>(
|
||||
new ActiontimeComparator());
|
||||
for (Alertalarmval aav : grpData)
|
||||
for (Alertalarmval aav : grpData) {
|
||||
if (isNotNull(aav.getActionTime().getTime()))
|
||||
actions.add(aav);
|
||||
}
|
||||
return actions.isEmpty() ? null : actions.first();
|
||||
}
|
||||
|
||||
|
@ -986,7 +1008,7 @@ class ReportWriter {
|
|||
flushDataLimitsObj(limits);
|
||||
dateWithin = checkDateRange(validtime, mds, mde);
|
||||
if (dateWithin) {
|
||||
copyThresholds(limits, limRow, !locRangeFound);
|
||||
copyThresholds(limits, limRow, locRangeFound);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1148,7 +1170,7 @@ class ReportWriter {
|
|||
public static boolean isNull(long value) {
|
||||
boolean result = false;
|
||||
|
||||
if (value == getNullLong()) {
|
||||
if (value == getNullLong() || value==0) {
|
||||
result = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -80,6 +80,7 @@ import com.raytheon.uf.edex.database.dao.DaoConfig;
|
|||
* 02/24/2012 14535 W. Kwock Correct the duration value.
|
||||
* 11/29/2012 15530 lbousaidi corrected posting and production time for
|
||||
* latestobsvalue table.
|
||||
* 09/19/2013 16515 w. Kwock Fix the excessive digits in rawpp,lake,height...tables
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
|
@ -1065,7 +1066,7 @@ public class PostTables {
|
|||
cs.setString(5, shefData.getExtremum().getCode());
|
||||
cs.setTimestamp(6, new Timestamp(shefData.getObservationTimeObj()
|
||||
.getTime()));
|
||||
cs.setFloat(7, Float.parseFloat(dataValue));
|
||||
cs.setDouble(7, Double.parseDouble(dataValue));
|
||||
cs.setString(8, qualifier);
|
||||
cs.setInt(9, (int) qualityCode);
|
||||
|
||||
|
@ -1184,7 +1185,7 @@ public class PostTables {
|
|||
cs.setString(5, shefData.getExtremum().getCode());
|
||||
cs.setTimestamp(6, new java.sql.Timestamp(shefData
|
||||
.getObservationTimeObj().getTime()));
|
||||
cs.setFloat(7, Float.parseFloat(dataValue));
|
||||
cs.setDouble(7, Double.parseDouble(dataValue));
|
||||
cs.setString(8, qualifier);
|
||||
cs.setInt(9, (int) qualityCode);
|
||||
|
||||
|
@ -1316,7 +1317,7 @@ public class PostTables {
|
|||
timeStamp = new java.sql.Timestamp(basisDate.getTime());
|
||||
cs.setTimestamp(8, timeStamp);
|
||||
|
||||
cs.setFloat(9, Float.parseFloat(dataValue));
|
||||
cs.setDouble(9, Double.parseDouble(dataValue));
|
||||
|
||||
cs.setString(10, qualifier);
|
||||
|
||||
|
@ -1534,7 +1535,7 @@ public class PostTables {
|
|||
ps.setTimestamp(8, timeStamp2);
|
||||
|
||||
// ps.setFloat(9, Float.parseFloat(shefDataValue.getStringValue()));
|
||||
ps.setFloat(9, shefDataValue.getValue().floatValue());
|
||||
ps.setDouble(9, shefDataValue.getValue().floatValue());
|
||||
|
||||
if (updateFlag) {
|
||||
ps.setString(10, lid);
|
||||
|
|
|
@ -9,13 +9,13 @@
|
|||
<bean id="tafDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="taf" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.taf?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.taf"/>
|
||||
</bean>
|
||||
|
||||
<bean id="tafHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="taf" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.taf?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.taf"/>
|
||||
</bean>
|
||||
|
||||
<bean id="tafCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -36,13 +36,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>taf</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.taf" />
|
||||
<to uri="jms-durable:queue:Ingest.taf" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin TAF routes -->
|
||||
<route id="tafIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.taf?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.taf"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>taf</constant>
|
||||
</setHeader>
|
||||
|
@ -69,7 +69,5 @@
|
|||
</doCatch>
|
||||
</doTry>
|
||||
</route>
|
||||
|
||||
</camelContext>
|
||||
|
||||
</beans>
|
|
@ -11,13 +11,18 @@
|
|||
<bean id="textDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="text" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Text?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Text"/>
|
||||
</bean>
|
||||
|
||||
<bean factory-bean="manualProc"
|
||||
factory-method="registerSecondaryPlugin">
|
||||
<constructor-arg value="text" />
|
||||
</bean>
|
||||
|
||||
<bean id="textHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="text" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Text?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Text"/>
|
||||
</bean>
|
||||
|
||||
<!-- define the bean that handles automatic faxing of products. -->
|
||||
|
@ -28,12 +33,11 @@
|
|||
<bean id="textVersionPurge" class="com.raytheon.edex.plugin.text.TextVersionPurge" depends-on="textRegistered"/>
|
||||
|
||||
<bean id="jms-text" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestTextConfig" />
|
||||
<constructor-arg ref="jmsTextConfig" />
|
||||
<property name="taskExecutor" ref="textThreadPool" />
|
||||
</bean>
|
||||
<bean id="jmsIngestTextConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy">
|
||||
</bean>
|
||||
<bean id="jmsTextConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="textThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="2" />
|
||||
|
@ -61,7 +65,7 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>text</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.Text" />
|
||||
<to uri="jms-durable:queue:Ingest.Text" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
|
@ -115,7 +119,7 @@
|
|||
</route>
|
||||
|
||||
<route id="textUndecodedIngestRoute">
|
||||
<from uri="jms-text:queue:Ingest.Text?destinationResolver=#qpidDurableResolver&concurrentConsumers=2" />
|
||||
<from uri="jms-text:queue:Ingest.Text?concurrentConsumers=2" />
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>text</constant>
|
||||
</setHeader>
|
||||
|
@ -142,7 +146,7 @@
|
|||
<route id="textToWatchWarnRoute">
|
||||
<from uri="direct:textToWatchWarn" />
|
||||
<bean ref="textDecoder" method="transformToProductIds" />
|
||||
<to uri="jms-text:queue:watchwarn?destinationResolver=#qpidDurableResolver" />
|
||||
<to uri="jms-text:queue:watchwarn" />
|
||||
</route>
|
||||
|
||||
<route id="textSerializationRoute">
|
||||
|
@ -151,7 +155,7 @@
|
|||
<method bean="textDecoder" method="separator" />
|
||||
<bean ref="textDecoder" method="transformToSimpleString" />
|
||||
<bean ref="serializationUtil" method="transformToThrift"/>
|
||||
<to uri="jms-text:topic:edex.alarms.msg?timeToLive=60000" />
|
||||
<to uri="jms-generic:topic:edex.alarms.msg?timeToLive=60000" />
|
||||
</split>
|
||||
</route>
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<bean id="textlightningDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="textlightning" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.textlightning?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.textlightning"/>
|
||||
</bean>
|
||||
|
||||
<bean id="textlightningCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -31,13 +31,13 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>textlightning</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.textlightning" />
|
||||
<to uri="jms-durable:queue:Ingest.textlightning" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
<!-- Begin textlightning routes -->
|
||||
<route id="textlightningIngestRoute">
|
||||
<from uri="jms-generic:queue:Ingest.textlightning?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-durable:queue:Ingest.textlightning"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>textlightning</constant>
|
||||
</setHeader>
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
# 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.
|
||||
# Sep 12, 2013 DR2249 rferrel When incoming file from warngen adjust start time from file's timestamp.
|
||||
# </pre>
|
||||
#
|
||||
# @author rferrel
|
||||
|
@ -111,19 +112,24 @@ class StdWarningDecoder():
|
|||
self._rawMessage = text
|
||||
checkForWmo = True
|
||||
|
||||
#base time for decoder
|
||||
self._time = time.time() + self._timeOffset #present time
|
||||
|
||||
if TimeTools.allowArchive() :
|
||||
try:
|
||||
yyyymmddhh = TimeTools.getTimestamp(self._incomingFilename)
|
||||
if len(yyyymmddhh) < 10:
|
||||
timeTuple = time.strptime(yyyymmddhh, "%Y%m%d")
|
||||
else :
|
||||
timeTuple = time.strptime(yyyymmddhh, "%Y%m%d%H")
|
||||
self._time = time.mktime(timeTuple)
|
||||
except :
|
||||
LogStream.logProblem('Unable to get timestamp from filename: "%s"' % (self._incomingFilename))
|
||||
# base time for decoder
|
||||
warningTimestamp = TimeTools.getWarningTimestamp(self._incomingFilename)
|
||||
if warningTimestamp is None :
|
||||
# present time
|
||||
self._time = time.time() + self._timeOffset
|
||||
if TimeTools.allowArchive():
|
||||
try:
|
||||
yyyymmddhh = TimeTools.getTimestamp(self._incomingFilename)
|
||||
if len(yyyymmddhh) < 10:
|
||||
timeTuple = time.strptime(yyyymmddhh, "%Y%m%d")
|
||||
else :
|
||||
timeTuple = time.strptime(yyyymmddhh, "%Y%m%d%H")
|
||||
self._time = time.mktime(timeTuple)
|
||||
except :
|
||||
LogStream.logProblem('Unable to get timestamp from filename: "%s"' % (self._incomingFilename))
|
||||
else:
|
||||
# Use the epoch seconds in the file generated by TextEditorDialog.java.
|
||||
self._time = long(warningTimestamp)
|
||||
|
||||
os.umask(0) #ensure proper permissions
|
||||
|
||||
|
@ -155,9 +161,8 @@ class StdWarningDecoder():
|
|||
|
||||
def decode(self):
|
||||
#get pil and date-time group
|
||||
self._adjustIssueTime = True
|
||||
self._productPil, self._issueTime, linePos,\
|
||||
self._completeProductPil, self._issueTimeStr = self._getPilAndDTG()
|
||||
self._completeProductPil = self._getPilAndDTG()
|
||||
|
||||
# If this is a WCL - don't go any further. Run WCL procedure and exit.
|
||||
if self._productPil[0:3] == "WCL":
|
||||
|
@ -411,7 +416,7 @@ usage: VTECDecoder -f productfilename -d -a activeTableName
|
|||
LogStream.logVerbose("Pil=", pil_search.group(0))
|
||||
return (self._lines[count+1][0:3],
|
||||
self._dtgFromDDHHMM(dtg_search.group(1)), count+2,
|
||||
pil_search.group(0), dtg_search.group(1))
|
||||
pil_search.group(0))
|
||||
count = count + 1
|
||||
if count >= len(self._lines)-1:
|
||||
LogStream.logProblem("Did not find either the product DTG" +\
|
||||
|
@ -845,9 +850,6 @@ usage: VTECDecoder -f productfilename -d -a activeTableName
|
|||
template['seg'] = segment
|
||||
startTime, zeros = self._calcTime(search.group(6),
|
||||
search.group(7), self._issueTime * 1000)
|
||||
if self._adjustIssueTime :
|
||||
self._issueTime = self._dtgFromDDHHMM(self._issueTimeStr, startTime/1000.0)
|
||||
self._adjustIssueTime = False
|
||||
endTime, ufn = self._calcTime(search.group(8),
|
||||
search.group(9), self._maxFutureTime * 1000)
|
||||
template['startTime'] = long(startTime)
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
<bean id="warningDistRegistry" factory-bean="distributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="warning" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Warning?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Warning"/>
|
||||
</bean>
|
||||
|
||||
<bean id="warningHandleoupDistRegistry" factory-bean="handleoupDistributionSrv"
|
||||
factory-method="register">
|
||||
<constructor-arg value="warning" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Warning?destinationResolver=#qpidDurableResolver" />
|
||||
<constructor-arg value="jms-dist:queue:Ingest.Warning"/>
|
||||
</bean>
|
||||
|
||||
<bean id="warningCamelRegistered" factory-bean="contextManager"
|
||||
|
@ -23,12 +23,11 @@
|
|||
</bean>
|
||||
|
||||
<bean id="jms-warning" class="org.apache.camel.component.jms.JmsComponent">
|
||||
<constructor-arg ref="jmsIngestWarningConfig" />
|
||||
<constructor-arg ref="jmsWarningConfig" />
|
||||
<property name="taskExecutor" ref="warningThreadPool" />
|
||||
</bean>
|
||||
<bean id="jmsIngestWarningConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsConfig" factory-method="copy">
|
||||
</bean>
|
||||
<bean id="jmsWarningConfig" class="org.apache.camel.component.jms.JmsConfiguration"
|
||||
factory-bean="jmsDurableConfig" factory-method="copy"/>
|
||||
<bean id="warningThreadPool"
|
||||
class="com.raytheon.uf.edex.esb.camel.spring.JmsThreadPoolTaskExecutor">
|
||||
<property name="corePoolSize" value="1" />
|
||||
|
@ -49,7 +48,7 @@
|
|||
<setHeader headerName="pluginName">
|
||||
<constant>warning</constant>
|
||||
</setHeader>
|
||||
<to uri="jms-generic:queue:Ingest.Warning" />
|
||||
<to uri="jms-durable:queue:Ingest.Warning" />
|
||||
</route>
|
||||
-->
|
||||
|
||||
|
@ -57,7 +56,7 @@
|
|||
Warning routes
|
||||
-->
|
||||
<route id="warningIngestRoute">
|
||||
<from uri="jms-warning:queue:Ingest.Warning?destinationResolver=#qpidDurableResolver" />
|
||||
<from uri="jms-warning:queue:Ingest.Warning"/>
|
||||
<setHeader headerName="pluginName">
|
||||
<constant>warning</constant>
|
||||
</setHeader>
|
||||
|
@ -71,7 +70,7 @@
|
|||
<bean ref="pluginNotifier" method="send"/>
|
||||
<filter>
|
||||
<method bean="vtecFilter" method="hasVTEC" />
|
||||
<to uri="jms-warning:queue:activeTablePending?destinationResolver=#qpidDurableResolver" />
|
||||
<to uri="jms-warning:queue:activeTablePending"/>
|
||||
</filter>
|
||||
</multicast>
|
||||
</pipeline>
|
||||
|
@ -88,6 +87,5 @@
|
|||
<bean ref="processUtil" method="log" />
|
||||
<to uri="vm:stageNotification" />
|
||||
</route>
|
||||
|
||||
</camelContext>
|
||||
</beans>
|
|
@ -850,6 +850,7 @@ public class UAObs extends PersistablePluginDataObject implements
|
|||
return wmoHeader;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Column
|
||||
@Access(AccessType.PROPERTY)
|
||||
|
|
|
@ -66,7 +66,6 @@
|
|||
<alias base="HCY">HCLY</alias>
|
||||
<alias base="HSCLW">HTSLW</alias>
|
||||
<alias base="HTFL">FRZH</alias>
|
||||
<alias base="HTFL">HTFL</alias>
|
||||
<alias base="HTGL">HGHT</alias>
|
||||
<alias base="HTSLW">HTSLW</alias>
|
||||
<alias base="HYB">HYBL</alias>
|
||||
|
|
|
@ -59,7 +59,7 @@ import com.vividsolutions.jts.geom.Coordinate;
|
|||
* Mar 19, 2013 1804 bsteffen Reduce useless data stored in radar hdf5
|
||||
* Mar 19, 2013 1804 bsteffen Remove empty data structures from radar
|
||||
* hdf5.
|
||||
*
|
||||
* Sep 03, 2013 DR 13083 gzhang Add DHR Bias support for ADAD(38)/(46).
|
||||
* </pre>
|
||||
*
|
||||
* @author mnash
|
||||
|
@ -507,7 +507,7 @@ public class RadarRecordUtil {
|
|||
map.put(DHRValues.ZRMULTCOEFF, parseDHRValue(v[vi + 9]));
|
||||
map.put(DHRValues.ZRPOWERCOEFF, parseDHRValue(v[vi + 10]));
|
||||
map.put(DHRValues.MAXPRECIPRATEALLOW, parseDHRValue(v[vi + 25]));
|
||||
map.put(DHRValues.BIASAPPLIEDFLAG, parseDHRValue(v[vi + 37]));
|
||||
map.put(DHRValues.BIASAPPLIEDFLAG, parseDHRValue(v[vi + 37])); biasApplied = map.get(DHRValues.BIASAPPLIEDFLAG) > 0;// DR 13083
|
||||
s = v[46];
|
||||
if (s.equals("SUPL(15)")) {
|
||||
biasCalculated = parseDHRValue(v[71]);
|
||||
|
@ -524,10 +524,10 @@ public class RadarRecordUtil {
|
|||
map.put(DHRValues.MAXPRECIPRATEALLOW, parseDHRValue(v[vi + 25]));
|
||||
s = v[68];
|
||||
if (s.equals("BIAS(11)")) {
|
||||
map.put(DHRValues.BIASAPPLIEDFLAG, parseDHRValue(v[53]));
|
||||
map.put(DHRValues.BIASAPPLIEDFLAG, parseDHRValue(v[53])); biasApplied = map.get(DHRValues.BIASAPPLIEDFLAG) > 0;// DR 13083
|
||||
biasCalculated = parseDHRValue(v[77]);
|
||||
} else if (s.equals("BIAS( 9)")) {
|
||||
map.put(DHRValues.BIASAPPLIEDFLAG, parseDHRValue(v[53]));
|
||||
map.put(DHRValues.BIASAPPLIEDFLAG, parseDHRValue(v[53])); biasApplied = map.get(DHRValues.BIASAPPLIEDFLAG) > 0;// DR 13083
|
||||
biasCalculated = parseDHRValue(v[73]);
|
||||
}
|
||||
vi = nv;
|
||||
|
@ -537,7 +537,7 @@ public class RadarRecordUtil {
|
|||
map.put(DHRValues.FLAGZEROHYBRID, (double) flagZeroHybrid);
|
||||
if (!biasApplied) {
|
||||
biasCalculated = 1.0;
|
||||
}
|
||||
} else { if(biasCalculated < 0.01 || biasCalculated > 100.0) biasCalculated = 1.0; } // DR 13083
|
||||
map.put(DHRValues.BIAS, biasCalculated);
|
||||
|
||||
// Also include logic from A1 FFMPContainer::read(), FFMP_ORPG case
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
/**
|
||||
* 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.uf.common.dataplugin.warning;
|
||||
|
||||
/**
|
||||
* Helps manage and identify emergency products.
|
||||
*
|
||||
* <pre>
|
||||
*
|
||||
* SOFTWARE HISTORY
|
||||
*
|
||||
* Date Ticket# Engineer Description
|
||||
* ------------ ---------- ----------- --------------------------
|
||||
* Sep 4, 2013 2176 jsanchez Initial creation
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @author jsanchez
|
||||
* @version 1.0
|
||||
*/
|
||||
|
||||
public class EmergencyType {
|
||||
|
||||
public static final String EMER = "EMER";
|
||||
|
||||
private static final EmergencyType TORNADO = new EmergencyType(
|
||||
"TORNADO EMERGENCY", "TO.W");
|
||||
|
||||
private static final EmergencyType FLASH_FLOOD = new EmergencyType(
|
||||
"FLASH FLOOD EMERGENCY", "FF.W");
|
||||
|
||||
private final String value;
|
||||
|
||||
private final String phensig;
|
||||
|
||||
private final static EmergencyType[] values = new EmergencyType[] {
|
||||
TORNADO, FLASH_FLOOD };
|
||||
|
||||
private EmergencyType(String type, String phensig) {
|
||||
this.value = type;
|
||||
this.phensig = phensig;
|
||||
}
|
||||
|
||||
public static EmergencyType valueOf(String phensig) {
|
||||
EmergencyType type = null;
|
||||
for (EmergencyType t : values) {
|
||||
if (t.phensig.equals(phensig)) {
|
||||
type = t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks to see if the text product is an emergency product.
|
||||
*
|
||||
* @param rawmessage
|
||||
* @return
|
||||
*/
|
||||
public static boolean isEmergency(String rawmessage) {
|
||||
for (EmergencyType type : values) {
|
||||
if (rawmessage != null && rawmessage.contains(type.getValue())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue