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 [formerly 516ba4eaf5 [formerly 6828de5272fc41eff0cfc1e4be88e7abc533793c]]
Former-commit-id: 516ba4eaf5
Former-commit-id: 2dbc993fac
This commit is contained in:
Richard Peter 2013-09-26 14:14:15 -05:00
commit 63dbe78c7b
1058 changed files with 19152 additions and 11984 deletions

View file

@ -0,0 +1,5 @@
s2s
default : SKY_COVER_00
1 : SKY_COVER_00
4 : SKY_COVER_08
7 : SKY_COVER_06

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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>
*

View file

@ -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();
}

View file

@ -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>

View file

@ -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>

View file

@ -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" />

View file

@ -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>
*

View file

@ -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);
}

View file

@ -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) {

View file

@ -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

View file

@ -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);
}
}
});

View file

@ -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.

View file

@ -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) {

View file

@ -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];
}
}

View file

@ -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));
}
}

View file

@ -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;
}
}
}

View file

@ -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 &quot;issued by&quot; functionality
* Sep 8, 2008 njensen Initial creation
* Jan 15, 2010 3395 ryu Fix &quot;issued by&quot; 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) {

View file

@ -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>

View file

@ -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">

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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

View file

@ -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;

View file

@ -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) {

View file

@ -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 {

View file

@ -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" />

View file

@ -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

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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;

View file

@ -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);
}

View file

@ -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);

View file

@ -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();
}
}

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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

View 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

View 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
View file

View 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 ###

View file

@ -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">

View file

@ -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

View file

@ -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 -->

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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&amp;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"/>

View file

@ -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&amp;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>

View file

@ -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());

View file

@ -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);
}

View file

@ -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);

View file

@ -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 "

View file

@ -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>

View file

@ -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&amp;idempotent=false" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}&amp;destinationResolver=#qpidDurableResolver" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}"/>
<route id="gribFileConsumerRoute">
<from ref="gribFileEndpoint" />

View file

@ -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&amp;idempotent=false" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}&amp;destinationResolver=#qpidDurableResolver" />
<endpoint id="gribJmsEndpoint" uri="ingest-grib:queue:Ingest.Grib?concurrentConsumers=${grib-decode.count.threads}"/>
<route id="gribFileConsumerRoute">
<from ref="gribFileEndpoint" />

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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

View file

@ -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" />

View file

@ -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" />

View file

@ -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" />

View file

@ -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" />

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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;
}

View file

@ -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>

View file

@ -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>

View file

@ -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 " ";
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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>

View file

@ -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&amp;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>

View file

@ -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>

View file

@ -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)

View file

@ -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>

View file

@ -850,6 +850,7 @@ public class UAObs extends PersistablePluginDataObject implements
return wmoHeader;
}
@Override
@Column
@Access(AccessType.PROPERTY)

View file

@ -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>

View file

@ -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

View file

@ -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