From ddeed727772361dff007aebe35e1496c10e15a69 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Wed, 19 Dec 2018 11:02:38 -0700 Subject: [PATCH 01/13] add WarningLookups, phensigColors.xml, AbstractWWAResource updates to map values to colors --- .../localization/bundles/AllAdvisories.xml | 35 +++++ .../localization/bundles/AllWarnings.xml | 3 +- .../menus/warnings/baseWarnings.xml | 5 +- .../viz/warnings/rsc/AbstractWWAResource.java | 21 ++- .../warning/util/WarningLookups.java | 139 ++++++++++++++++++ .../base/warngen/phensigColors.xml | 109 ++++++++++++++ 6 files changed, 305 insertions(+), 7 deletions(-) create mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/WarningLookups.java create mode 100644 edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/phensigColors.xml diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml new file mode 100644 index 0000000000..98bde4c096 --- /dev/null +++ b/cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml index ad83ad28d9..6c2ccd71f3 100644 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml +++ b/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml @@ -31,7 +31,8 @@ - + + diff --git a/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml b/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml index fe78b27aa4..c4d00f58cf 100644 --- a/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml +++ b/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml @@ -24,6 +24,9 @@ + + - \ No newline at end of file + diff --git a/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java b/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java index f6862e9905..69c11a74fe 100644 --- a/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java +++ b/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java @@ -20,6 +20,7 @@ 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.dataplugin.warning.util.WarningLookups; import com.raytheon.uf.common.dataquery.requests.RequestConstraint; import com.raytheon.uf.common.dataquery.requests.RequestConstraint.ConstraintType; import com.raytheon.uf.common.geospatial.ReferencedCoordinate; @@ -32,6 +33,7 @@ import com.raytheon.uf.common.time.TimeRange; import com.raytheon.uf.common.time.util.TimeUtil; import com.raytheon.uf.viz.core.DrawableString; import com.raytheon.uf.viz.core.IGraphicsTarget; +import com.raytheon.uf.viz.core.RGBColors; import com.raytheon.uf.viz.core.IGraphicsTarget.HorizontalAlignment; import com.raytheon.uf.viz.core.IGraphicsTarget.LineStyle; import com.raytheon.uf.viz.core.IGraphicsTarget.VerticalAlignment; @@ -91,6 +93,7 @@ import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory; * Oct 16, 2015 4971 bsteffen Do not reverse order of text. * Nov 05, 2015 5070 randerso Adjust font sizes for dpi scaling * Aug 22, 2016 5842 dgilling Remove dependency on viz.texteditor plugin. + * Dec 19, 2018 ---- mjames@ucar Added phensig color table lookup. * * * @@ -367,6 +370,8 @@ public abstract class AbstractWWAResource extends entry.project = false; } + RGB displaycolor = RGBColors.getRGBColor(getColor(record)); + if (entry != null && entry.wireframeShape != null) { LineStyle lineStyle = LineStyle.SOLID; if (record.getProductClass() != null @@ -383,7 +388,7 @@ public abstract class AbstractWWAResource extends target.drawWireframeShape( entry.wireframeShape, - getCapability(ColorableCapability.class).getColor(), + displaycolor, outlineWidth, lineStyle); } else if (entry != null && entry.shadedShape != null) { target.drawShadedShape(entry.shadedShape, 1); @@ -406,6 +411,7 @@ public abstract class AbstractWWAResource extends double mapWidth = descriptor.getMapWidth() * paintProps.getZoomLevel() / 1000; String[] textToPrint = getText(record, mapWidth); + if (warningsFont == null) { warningsFont = target.initializeFont(target .getDefaultFont().getFontName(), 9, @@ -414,8 +420,7 @@ public abstract class AbstractWWAResource extends 12); } - DrawableString params = new DrawableString(textToPrint, - color); + DrawableString params = new DrawableString(textToPrint, displaycolor); params.font = warningsFont; params.setCoordinates(d[0], d[1]); params.horizontalAlignment = HorizontalAlignment.RIGHT; @@ -428,7 +433,7 @@ public abstract class AbstractWWAResource extends // moves over text to add EMER in a different font textToPrint[1] = String.format("%1$-23" + "s", textToPrint[1]); - params.setText(textToPrint, color); + params.setText(textToPrint, displaycolor); DrawableString emergencyString = new DrawableString( params); @@ -436,7 +441,7 @@ public abstract class AbstractWWAResource extends d[1] + (paintProps.getZoomLevel()) * 90); emergencyString.font = emergencyFont; emergencyString.setText(new String[] { "", "", - " " + EmergencyType.EMER, "" }, color); + " " + EmergencyType.EMER, "" }, displaycolor); target.drawStrings(emergencyString); } @@ -591,6 +596,12 @@ public abstract class AbstractWWAResource extends addRecord(sort(pdos)); } + protected String getColor(AbstractWarningRecord record){ + String phensig = record.getPhensig(); + WarningLookups lookup = new WarningLookups(); + return lookup.getPhensig(phensig).color; + } + protected String[] getText(AbstractWarningRecord record, double mapWidth) { String vid = record.getPhensig(); String phen = record.getPhen(); diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/WarningLookups.java b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/WarningLookups.java new file mode 100644 index 0000000000..794617e3d6 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/src/com/raytheon/uf/common/dataplugin/warning/util/WarningLookups.java @@ -0,0 +1,139 @@ +package com.raytheon.uf.common.dataplugin.warning.util; + +import java.io.File; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + +import com.raytheon.uf.common.localization.IPathManager; +import com.raytheon.uf.common.localization.LocalizationContext; +import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; +import com.raytheon.uf.common.localization.PathManagerFactory; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; + +/** + * Class for looking up phensig info for warnings/advisories. + * + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date          Ticket#  Engineer  Description
+ * ------------- -------- --------- --------------------------------------------
+ * Dec 19, 2018           mjames    Initial creation
+ * 
+ * 
+ * + * @author mjames + */ +public class WarningLookups { + private static final IUFStatusHandler theHandler = UFStatus.getHandler(WarningLookups.class); + + private static final String LOOKUP_DIR = "warngen"; + + public static class PhensigValue { + public PhensigValue() {} + + public PhensigValue(String name, String color) { + this.name = name; + this.color = color; + } + + @XmlAttribute + public String name; + + @XmlAttribute + public String color; + } + + @XmlAccessorType(XmlAccessType.NONE) + public static abstract class AbstractLookup { + public abstract Map getMap(); + } + + @XmlRootElement + @XmlAccessorType(XmlAccessType.FIELD) + public static class PhensigColors extends + AbstractLookup { + public HashMap map = new HashMap<>(); + + @Override + public Map getMap() { + return map; + } + } + + private PhensigColors phensigColorLookup; + + public WarningLookups() { + try { + init(); + } catch (Exception e) { + theHandler.error("Failed to initialize lookups", e); + } + } + + private void init() throws Exception { + JAXBContext context = JAXBContext.newInstance(PhensigColors.class); + Unmarshaller u = context.createUnmarshaller(); + phensigColorLookup = load(new PhensigColors(), "phensigColors.xml", u); + } + + private static , K, V> T load( + T combinedLookup, String fileName, Unmarshaller u) { + + IPathManager pm = PathManagerFactory.getPathManager(); + + List contexts = Arrays.asList(pm + .getLocalSearchHierarchy(LocalizationType.COMMON_STATIC)); + Collections.reverse(contexts); + + for (LocalizationContext ctx : contexts) { + File f = pm.getFile(ctx, LOOKUP_DIR + IPathManager.SEPARATOR + fileName); + if (f != null && f.isFile()) { + try { + @SuppressWarnings("unchecked") + T lookup = (T) u.unmarshal(f); + if (!combinedLookup.getClass().isAssignableFrom( + lookup.getClass())) { + throw new Exception(String.format( + "file contains %s' expected %s", + lookup.getClass(), combinedLookup.getClass())); + } + combinedLookup.getMap().putAll(lookup.getMap()); + } catch (Exception e) { + theHandler.error( + String.format("%s: %s", f, e.getMessage()), e); + } + } + } + return combinedLookup; + } + + public PhensigValue getPhensig(String phensigCode) { + return phensigColorLookup.map.get(phensigCode); + } + + private static WarningLookups instance; + + public static synchronized WarningLookups getInstance() { + if (instance == null) + instance = new WarningLookups(); + return instance; + } + + public static synchronized void reload() { + instance = new WarningLookups(); + } +} diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/phensigColors.xml b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/phensigColors.xml new file mode 100644 index 0000000000..3134eba84b --- /dev/null +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.warning/utility/common_static/base/warngen/phensigColors.xml @@ -0,0 +1,109 @@ + + + + AF.W + AF.Y + AQ.Y + AS.O + AS.Y + BH.S + BW.Y + BZ.A + BZ.W + CF.A + CF.W + CF.Y + CF.S + DS.W + DU.Y + EC.A + EC.W + EH.A + EH.W + EW.W + FA.A + FA.W + FA.Y + FF.A + FF.S + FF.W + FG.Y + FL.A + FL.W + HY.S + FL.S + FL.Y + FR.Y + FW.A + FW.W + FZ.A + FZ.W + GL.A + GL.W + HF.A + HF.W + HT.Y + HU.A + HU.S + HU.W + HW.A + HW.W + HZ.A + HZ.W + IS.W + LE.A + LE.W + LE.Y + LO.Y + LS.A + LS.S + LS.W + LS.Y + LW.Y + MA.A + MA.S + MA.W + MF.Y + MH.W + MH.Y + MS.Y + RB.Y + RP.S + SC.Y + SE.A + SE.W + SI.Y + SM.Y + SR.A + SR.W + SS.A + SS.W + SU.W + SU.Y + SV.A + SV.S + SV.W + SW.Y + TO.A + TO.W + TR.A + TR.W + TS.A + TS.W + TS.Y + TY.A + TY.W + UP.A + UP.W + UP.Y + WC.A + WC.W + WC.Y + WI.Y + WS.A + WS.W + WW.Y + ZF.Y + ZR.Y + + From 3b2cdb2c5d2a5a81364537f05603d1f9b76e0432 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Wed, 19 Dec 2018 11:02:59 -0700 Subject: [PATCH 02/13] cleanup cmc menu file --- .../localization/menus/grid/cmcFamilies.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cave/com.raytheon.viz.volumebrowser/localization/menus/grid/cmcFamilies.xml b/cave/com.raytheon.viz.volumebrowser/localization/menus/grid/cmcFamilies.xml index a5ede62d5b..f5d2be4fac 100644 --- a/cave/com.raytheon.viz.volumebrowser/localization/menus/grid/cmcFamilies.xml +++ b/cave/com.raytheon.viz.volumebrowser/localization/menus/grid/cmcFamilies.xml @@ -51,10 +51,6 @@ menuText="Lightning Threat" id="" useReferenceTime="true">
- - - @@ -188,4 +184,4 @@ --> - \ No newline at end of file + From 23204511d65406055e252bda27499524fe21167c Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Wed, 19 Dec 2018 11:03:41 -0700 Subject: [PATCH 03/13] mute logging in McidasSatelliteDecoder and ModelSoundingPersistenceManager --- .../modelsounding/ModelSoundingPersistenceManager.java | 6 +----- .../plugin/satellite/mcidas/McidasSatelliteDecoder.java | 3 --- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.modelsounding/src/com/raytheon/uf/edex/plugin/modelsounding/ModelSoundingPersistenceManager.java b/edexOsgi/com.raytheon.uf.edex.plugin.modelsounding/src/com/raytheon/uf/edex/plugin/modelsounding/ModelSoundingPersistenceManager.java index 772383f7d0..4e9c7d44a3 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.modelsounding/src/com/raytheon/uf/edex/plugin/modelsounding/ModelSoundingPersistenceManager.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.modelsounding/src/com/raytheon/uf/edex/plugin/modelsounding/ModelSoundingPersistenceManager.java @@ -140,10 +140,6 @@ public class ModelSoundingPersistenceManager implements IContextStateProcessor { EDEXUtil.getMessageProducer().sendSync( "modelSoundingPersistIndexAlert", pdos); timer.stop(); - logger.info("Stored container: " - + container.getKey() + ", size: " - + container.size() + ", in " - + timer.getElapsedTime() + "ms"); } catch (EdexException e) { logger.error("Failed to persist " + pdos.length + " PluginDataObject(s) for key: " @@ -275,4 +271,4 @@ public class ModelSoundingPersistenceManager implements IContextStateProcessor { @Override public void postStop() { } -} \ No newline at end of file +} diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/McidasSatelliteDecoder.java b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/McidasSatelliteDecoder.java index 3904e28fcd..178a286673 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/McidasSatelliteDecoder.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/McidasSatelliteDecoder.java @@ -574,9 +574,6 @@ public class McidasSatelliteDecoder { private String getAreaName(int ssn, int areaNumber) { String value = McidasSatelliteLookups.getInstance().getAreaName(ssn); - theHandler.info("Looking up ssn=" + ssn + " for areaNumber=" + areaNumber); - theHandler.info("return value=" + value); - return value != null ? value : String.format("AREA%04d", areaNumber); } From 1121c85c8aa5e3617c150ee480379d9a08425687 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Wed, 19 Dec 2018 11:04:17 -0700 Subject: [PATCH 04/13] cleanup edex qpid grepping --- rpms/awips2.upc/Installer.awips/programs/edex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpms/awips2.upc/Installer.awips/programs/edex b/rpms/awips2.upc/Installer.awips/programs/edex index 724275d0b8..f714f6db1d 100755 --- a/rpms/awips2.upc/Installer.awips/programs/edex +++ b/rpms/awips2.upc/Installer.awips/programs/edex @@ -405,7 +405,7 @@ edex_users(){ if [ "${args[1]}" != '' ]; then YMD=${args[1]} fi - userList=$(cat ${LOG_PATH}/edex-request-thriftSrv-${YMD}.log |grep ":CAVE:"|cut -d "[" -f 3| cut -d ":" -f 1|grep -v pluginName|sort | uniq) + userList=$(cat ${LOG_PATH}/edex-request-thriftSrv-${YMD}.log |grep ":CAVE:"|cut -d "[" -f 3| cut -d ":" -f 1|grep -v pluginName| grep -v ThriftSrvRequestLogger |sort | uniq) echo "" echo " -- EDEX Users ${YMD} --" echo "$userList" From a250604e5c5449b923b5f0c6e20fb21b9843cd02 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Thu, 20 Dec 2018 12:58:15 -0700 Subject: [PATCH 05/13] remove leftover binlightning plugins from edexOsgi (moved to awips2-nws) --- .../.classpath | 7 - .../.project | 28 - .../META-INF/MANIFEST.MF | 8 - .../build.properties | 4 - .../impl/BaseLightningDecoder.java | 155 ----- .../impl/FlashLightningDecoder.java | 132 ---- .../binlightning/impl/RTLightningDecoder.java | 174 ----- .../.classpath | 7 - .../.project | 28 - .../META-INF/MANIFEST.MF | 32 - .../build.properties | 6 - .../com.raytheon.edex.plugin.binlightning.ecl | 0 .../res/spring/binlightning-common.xml | 18 - .../res/spring/binlightning_ep-ingest.xml | 56 -- .../binlightning/BinLightningDecoder.java | 655 ------------------ .../binlightning/dao/BinLightningDao.java | 105 --- .../binlightning/filter/GeoFilterBbox.java | 136 ---- .../filter/GeoFilterException.java | 70 -- .../binlightning/filter/GeoFilterParser.java | 295 -------- .../binlightning/filter/GeoFilterResult.java | 90 --- .../binlightning/filter/GeoFilters.java | 127 ---- .../filter/LightningGeoFilter.java | 221 ------ .../impl/BinLightningFactory.java | 122 ---- .../binlightning/impl/IBinDataSource.java | 82 --- .../impl/IBinLightningDecoder.java | 75 -- .../impl/LightningDataSource.java | 121 ---- .../impl/LightningErrorDecoder.java | 96 --- .../binlightning/impl/package-info.java | 23 - .../plugin/binlightning/package-info.java | 24 - .../total/ChecksumByteBuffer.java | 184 ----- .../total/TotalLightningDecoder.java | 473 ------------- .../base/distribution/binlightning.xml | 30 - .../base/purge/binlightningPurgeRules.xml | 36 - 33 files changed, 3620 deletions(-) delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.classpath delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.project delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/META-INF/MANIFEST.MF delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/build.properties delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/BaseLightningDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/FlashLightningDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/RTLightningDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/.classpath delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/.project delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/META-INF/MANIFEST.MF delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/build.properties delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/com.raytheon.edex.plugin.binlightning.ecl delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning-common.xml delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning_ep-ingest.xml delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/BinLightningDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/dao/BinLightningDao.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterBbox.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterException.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterParser.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterResult.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilters.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/LightningGeoFilter.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/BinLightningFactory.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinDataSource.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinLightningDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningDataSource.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningErrorDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/package-info.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/package-info.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/ChecksumByteBuffer.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/TotalLightningDecoder.java delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/distribution/binlightning.xml delete mode 100644 edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/purge/binlightningPurgeRules.xml diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.classpath b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.classpath deleted file mode 100644 index eca7bdba8f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.project b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.project deleted file mode 100644 index b0d710aa27..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.raytheon.edex.plugin.binlightning.legacy - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/META-INF/MANIFEST.MF deleted file mode 100644 index e1968cb643..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/META-INF/MANIFEST.MF +++ /dev/null @@ -1,8 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: LegacyLightningDecoder -Bundle-SymbolicName: com.raytheon.edex.plugin.binlightning.legacy -Bundle-Version: 1.16.0 -Bundle-Vendor: RAYTHEON -Fragment-Host: com.raytheon.edex.plugin.binlightning;bundle-version="1.14.0" -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/build.properties b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/build.properties deleted file mode 100644 index 34d2e4d2da..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/BaseLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/BaseLightningDecoder.java deleted file mode 100644 index 592bb990ff..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/BaseLightningDecoder.java +++ /dev/null @@ -1,155 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Iterator; -import java.util.List; - -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.time.util.TimeUtil; - -/** - * Provide the base class for the binary lightning decoders. This class - * abstracts data and methods common to the current lightning decoder types. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * 20070912            379 jkorman     Code review cleanup.
- * May 14, 2014 2536       bclement    removed TimeTools
- * Jun 05, 2014 3226       bclement    parseDate() now returns calendar
- * 
- * - * @author jkorman - * @version 1.0 - */ -abstract class BaseLightningDecoder implements IBinLightningDecoder -{ - private final Calendar BASE_TIME = TimeUtil.newGmtCalendar(1980, 2, 29); - - private static final int DAYS_MASK = 0xFFFE; - - private static final int DAYS_SHFT = 1; - - private static final int HOURS_HI_BIT_MASK = 0x0001; - - private static final int HOURS_HI_BIT_SHFT = 0x0004; - - private static final int HOURS_LO_NYB_MASK = 0x00F0; - - private static final int HOURS_LO_NYB_SHFT = 0x0004; - - private static final int MIN_P1_MASK = 0x000F; - - private static final int MIN_P1_SHFT = 2; - - private static final int MIN_P2_MASK = 0x00C0; - - private static final int MIN_P2_SHFT = 6; - - private static final int SECONDS_MASK = 0x003F; - - // package private visibility - only sub-classes need to see these. - static final int FLASH_MSG_SIZE = 6; - - static final int RT_MSG_SIZE = 8; - - static final int TIME_SIZE = 4; - - private int lastError = NO_ERROR; - - private List strikes = new ArrayList(); - - /** - * Parse the date field from a given data source. It is assumed that the - * data source is pointing to the current date/time data. - * - * @return A Calendar object with the time fields set to the observation - * time. - */ - protected Calendar parseDate(IBinDataSource msgData) - { - //********* Don't reorder these reads!!! - int b1 = msgData.getU8(); - int b2 = msgData.getU8(); - int word1 = msgData.getU16(); - //********* Don't reorder these reads!!! - Calendar obsTime = (Calendar) BASE_TIME.clone(); - // number of days since BASE_TIME - int days = ((word1 & DAYS_MASK) >> DAYS_SHFT); - obsTime.add(Calendar.DAY_OF_MONTH, days); - - int hours = (word1 & HOURS_HI_BIT_MASK) << HOURS_HI_BIT_SHFT; - hours += (b2 & HOURS_LO_NYB_MASK) >>> HOURS_LO_NYB_SHFT; - obsTime.set(Calendar.HOUR, hours); - - int minutes = (b2 & MIN_P1_MASK) << MIN_P1_SHFT; - minutes += (b1 & MIN_P2_MASK) >>> MIN_P2_SHFT; - obsTime.set(Calendar.MINUTE, minutes); - - obsTime.set(Calendar.SECOND, (b1 & SECONDS_MASK)); - obsTime.set(Calendar.MILLISECOND, 0); - return obsTime; - } - - /** - * Add a strike report the strikes collection. - * @param strike A strike report. - */ - void addStrike(LightningStrikePoint strike) - { - strikes.add(strike); - } - - /** - * Set the current error code for this decoder. - * @param errorCode The error code. - */ - void setError(int errorCode) - { - lastError = errorCode; - } - - /** - * Get the last error code set for this decoder. - * @return The last error code. - */ - public int getError() - { - return lastError; - } - - /** - * Get an iterator to the decoded lightning strikes. - * @return The lightning strike iterator. - */ - @Override - public Iterator iterator() - { - return strikes.iterator(); - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/FlashLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/FlashLightningDecoder.java deleted file mode 100644 index 10e407327c..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/FlashLightningDecoder.java +++ /dev/null @@ -1,132 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -import java.util.Calendar; - -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgMsgType; -import com.raytheon.uf.common.time.util.TimeUtil; - -/** - * Decode one or more Flash lightning observations. Decode algorithm is taken - * from the NWS D2D binary lightning decoder. - * - *
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * Jun 05, 2014 3226       bclement    LightningStikePoint refactor
- * 
- * 
- * - * @author jkorman - * @version 1.0 - */ -public class FlashLightningDecoder extends BaseLightningDecoder -{ - /** - * Construct and decode a portion of a lightning observation. - * @param msgData Message data. - * @param count Number of flash reports contained in the message part. - */ - public FlashLightningDecoder(IBinDataSource msgData, int count) - { - super(); - doDecode(msgData,count); - } - - /** - * Perform the message decode. - * @param msgData Message data. - * @param count Number of flash reports contained in the message part. - */ - private void doDecode(IBinDataSource msgData, int count) - { - if(msgData.available(TIME_SIZE)) - { - Calendar baseTime = parseDate(msgData); - - if(msgData.available(FLASH_MSG_SIZE * count)) - { - for(int i = 0;i < count;i++) - { - double lon = getFlashLon(msgData); - double lat = getFlashLat(msgData); - - double strikeStrength = msgData.getS8() * 2.0; - - // strike count and 1/10s seconds - int u8 = msgData.getU8(); - int flashCount = u8 & 0x0F; - - Calendar obsTime = TimeUtil.newCalendar(baseTime); - obsTime.set(Calendar.MILLISECOND, ((u8 & 0xF0) >> 4) * 100); - - // Create the strike record from the report info and base - // time information. - LightningStrikePoint strikeData = new LightningStrikePoint( - lat, lon, baseTime, LtgMsgType.STRIKE_MSG_FL); - strikeData.setType(DEFAULT_FLASH_TYPE); - strikeData.setStrikeStrength(strikeStrength); - strikeData.setPulseCount(flashCount); - addStrike(strikeData); - } - } - else - { - setError(IBinLightningDecoder.NOT_ENOUGH_DATA); - } - } - else - { - setError(IBinLightningDecoder.NO_TIME_INFO); - } - } - - /** - * Calculate the lightning strike longitude. From D2D lightning decoder. - * @param msgData Message data source. - * @return The lightning longitude. - */ - private double getFlashLon(IBinDataSource msgData) - { - int value = msgData.getU16(); - double lon = (value * 0.001068115234) - 130.0; - - return lon; - } - - /** - * Calculate the lightning strike latitude. From D2D lightning decoder. - * @param msgData Message data source. - * @return The lightning latitude. - */ - private double getFlashLat(IBinDataSource msgData) - { - int value = msgData.getU16() & 0x7FFF; - double lat = (value * 0.001281738) + 18.0; - - return lat; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/RTLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/RTLightningDecoder.java deleted file mode 100644 index 662e480cfa..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning.legacy/src/com/raytheon/edex/plugin/binlightning/impl/RTLightningDecoder.java +++ /dev/null @@ -1,174 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -import java.util.Calendar; - -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgMsgType; - -/** - * Decode one or more Real Time Flash lightning observations. Decode algorithm - * is taken from the NWS D2D binary lightning decoder. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * 20070821            379 jkorman     Added default strike type.
- * 20080823            379 jkorman     getRTLat was using 24 bits instead of 23.
- * Jun 05, 2014 3226       bclement    LightningStikePoint refactor
- * 
- * - * @author jkorman - * @version 1.0 - */ -public class RTLightningDecoder extends BaseLightningDecoder { - /** - * Construct an instance of this decoder, and decode the message data. - * - * @param msgData - * Message data. - * @param count - * Number of flash reports contained in the message part. - */ - public RTLightningDecoder(IBinDataSource msgData, int count) { - super(); - doDecode(msgData, count); - } - - /** - * Perform the message decode for real time strike message. - * - * @param msgData - * Message data. - * @param count - * Number of flash reports contained in the message part. - */ - private void doDecode(IBinDataSource msgData, int count) { - if (msgData.available(TIME_SIZE + (RT_MSG_SIZE * count))) { - Calendar baseTime = parseDate(msgData); - // for now just consume some data - for (int i = 0; i < count; i++) { - long part = msgData.getU32(); - - double lon = getRTLon(part); - double strength = getSignalStrength(part); - - part = msgData.getU32(); - - double lat = getRTLat(part); - int strikeCount = getMult(part); - - LightningStrikePoint strikeData = new LightningStrikePoint(lat, - lon, baseTime, LtgMsgType.STRIKE_MSG_RT); - - strikeData.setStrikeStrength(strength); - strikeData.setPulseCount(strikeCount); - // ***** - // NCDC documents indicate that RT data can report both CC/CG - // but haven't seen any data nor is it in the D2D decoders. Set - // to default for now. - // ***** - strikeData.setType(DEFAULT_FLASH_TYPE); - strikeData.setMillis(0); - - addStrike(strikeData); - } - } else { - setError(IBinLightningDecoder.NO_TIME_INFO); - } - } - - /** - * Decode the Real Time lightning longitude. Data is in the lower 24 bits. - * - * @param msgPart - * Unsigned 32 bit value holding the coded longitude. - * @return The decoded longitude. - */ - private double getRTLon(long msgPart) { - int value = (int) (msgPart & 0xFFFFFFL); - double lon = (value / 16777216.0 * 360.0) - 180.0; - - return lon; - } - - /** - * Decode the Real Time lightning latitude. Data is in the lower 24 bits. - * - * @param msgPart - * Unsigned 32 bit value holding the coded latitude. - * @return The decoded latitude. - */ - private double getRTLat(long msgPart) { - int value = (int) (msgPart & 0x7FFFFFL); - - double lat = (value / 16777216.0 * 360.0) - 90.0; - - return lat; - } - - /** - * Decode the Real Time lightning signal strength. Data is in the upper 8 - * bits. - * - * @param msgPart - * Unsigned 32 bit value holding the coded strength. - * @return The decoded signal strength. - */ - private double getSignalStrength(long msgPart) { - final int SIGNMAG = 128; - - double sigStrength = 0; - int temp = (int) ((msgPart >> 24) & 0xFF); - // if the temp strength is greater than 127, the result should be - // negative. - if (temp >= SIGNMAG) { - temp = SIGNMAG - temp; - } - // Make signal strength in the range -254..254 - sigStrength = temp * 2; - - return sigStrength; - } - - /** - * Decode the number of strikes within the strike record. Data is encoded in - * bits 24..27. - * - * @param msgPart - * Unsigned 32 bit value holding the count. - * @return The number of strikes within the strike record. - */ - private int getMult(long msgPart) { - // TODO : Need to check this! There is data in bit 28-31 but none in - // 24..27 in current data. - // NCDC document 9603 indicates that RT_FLASH doesn't report mult so - // always zero would be correct - int temp = (int) ((msgPart >> 24) & 0x0F); - - return temp; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/.classpath b/edexOsgi/com.raytheon.edex.plugin.binlightning/.classpath deleted file mode 100644 index 1fa3e6803d..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/.project b/edexOsgi/com.raytheon.edex.plugin.binlightning/.project deleted file mode 100644 index fcb9c99beb..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - com.raytheon.edex.plugin.binlightning - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.edex.plugin.binlightning/META-INF/MANIFEST.MF deleted file mode 100644 index d39c4f6c5e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/META-INF/MANIFEST.MF +++ /dev/null @@ -1,32 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Binlightning Plug-in -Bundle-SymbolicName: com.raytheon.edex.plugin.binlightning -Bundle-Version: 1.14.0.qualifier -Bundle-Vendor: RAYTHEON -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Export-Package: com.raytheon.edex.plugin.binlightning.dao -Import-Package: com.raytheon.edex.esb, - com.raytheon.edex.exception, - com.raytheon.edex.plugin, - com.raytheon.uf.common.dataquery.requests, - com.raytheon.uf.common.geospatial, - com.raytheon.uf.common.geospatial.adapter, - com.raytheon.uf.common.localization, - com.raytheon.uf.common.localization.exception, - com.raytheon.uf.common.numeric, - com.raytheon.uf.common.serialization, - com.raytheon.uf.common.serialization.adapters, - com.raytheon.uf.common.status, - com.raytheon.uf.common.wmo, - com.vividsolutions.jts, - com.vividsolutions.jts.geom, - com.vividsolutions.jts.geom.prep, - com.vividsolutions.jts.io, - gov.noaa.nws.ost.edex.plugin.binlightning -Require-Bundle: com.raytheon.uf.common.dataplugin.binlightning;bundle-version="1.12.1174", - com.raytheon.uf.common.dataplugin;bundle-version="1.12.1174", - com.raytheon.uf.common.datastorage;bundle-version="1.12.1174", - com.raytheon.uf.edex.core;bundle-version="1.12.1174", - com.raytheon.uf.edex.database;bundle-version="1.0.0", - com.raytheon.uf.edex.decodertools;bundle-version="1.12.1174" diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/build.properties b/edexOsgi/com.raytheon.edex.plugin.binlightning/build.properties deleted file mode 100644 index 20a5272307..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/build.properties +++ /dev/null @@ -1,6 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - utility/,\ - .,\ - res/ diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/com.raytheon.edex.plugin.binlightning.ecl b/edexOsgi/com.raytheon.edex.plugin.binlightning/com.raytheon.edex.plugin.binlightning.ecl deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning-common.xml b/edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning-common.xml deleted file mode 100644 index 447574701f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning-common.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning_ep-ingest.xml b/edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning_ep-ingest.xml deleted file mode 100644 index b8c4aad5a3..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/res/spring/binlightning_ep-ingest.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - binlightning - - - - - - - ${in.header.header} regex '^SFPA42 KWBC.*' - - - - - - - - - - - - java.lang.Throwable - - - - - - - \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/BinLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/BinLightningDecoder.java deleted file mode 100644 index db0b7becec..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/BinLightningDecoder.java +++ /dev/null @@ -1,655 +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. - **/ -package com.raytheon.edex.plugin.binlightning; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.TimeZone; - -import javax.crypto.BadPaddingException; -import javax.crypto.IllegalBlockSizeException; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.binlightning.filter.LightningGeoFilter; -import com.raytheon.edex.plugin.binlightning.impl.BinLightningFactory; -import com.raytheon.edex.plugin.binlightning.impl.IBinDataSource; -import com.raytheon.edex.plugin.binlightning.impl.IBinLightningDecoder; -import com.raytheon.edex.plugin.binlightning.impl.LightningDataSource; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgStrikeType; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.time.DataTime; -import com.raytheon.uf.common.time.TimeRange; -import com.raytheon.uf.common.time.util.TimeUtil; -import com.raytheon.uf.common.wmo.WMOHeader; -import com.raytheon.uf.common.wmo.WMOTimeParser; -import com.raytheon.uf.edex.decodertools.core.DecoderTools; - -import gov.noaa.nws.ost.edex.plugin.binlightning.BinLightningAESKey; -import gov.noaa.nws.ost.edex.plugin.binlightning.BinLightningDataDecryptionException; -import gov.noaa.nws.ost.edex.plugin.binlightning.BinLightningDecoderUtil; -import gov.noaa.nws.ost.edex.plugin.binlightning.DecryptedLightningValidator; -import gov.noaa.nws.ost.edex.plugin.binlightning.EncryptedBinLightningCipher; - -/** - * AWIPS decoder adapter strategy for binary lightning data.
- * - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Aug 10, 2007 379        jkorman     Initial Coding from prototype.
- * Aug 17, 2007 379        jkorman     Changed log info to debug in decode().
- * Aug 21, 2007 379        jkorman     Added SFPA41 lightning data pattern.
- * Sep 12, 2007 379        jkorman     Code review cleanup.
- * Sep 20, 2007 379        jkorman     Check for null persistence time.
- * Sep 24, 2007 379        jkorman     Removed HDFGroup code. Set insert_time
- *                                     directly in decode.
- * Sep 26, 2007 379        jkorman     Updated to set DataTime.
- * Mar 18, 2008 1026       jkorman     Added debug strike info.
- * Apr 08, 2008 1039       jkorman     Added traceId for tracing data.
- * Nov 11, 2008 1684       chammack    Refactored for camel integration
- * May 03, 2013 DCS 112    Wufeng Zhou Modified to be able to handle both the
- *                                     new encrypted data and legacy bit-shifted
- *                                     data
- * Aug 30, 2013 2298       rjpeter     Make getPluginName abstract
- * Jan 24, 2014 DR 16774   Wufeng Zhou Modified for updated Bin-lightning data spec, 
- *                                     and to used WMO header to distinguish bit-shifted 
- *                                     GLD360 and NLDN data.
- * May 14, 2014 2536       bclement    moved WMO Header to common
- * Jun 03, 2014 3226       bclement    removed unused WMO patterns, switched to UFStatus
- *                                      removed TimeTools usage, removed constructDataURI() call
- *                                      added decodeBinLightningData() and decodeBitShiftedBinLightningData() from BinLightningDecoderUtil
- * Jun 05, 2014 3226       bclement    LightningStikePoint refactor, added extractPData()
- * Jun 09, 2014 3226       bclement    moved data array decrypt prep to EncryptedBinLightingCipher
- * Jun 10, 2014 3226       bclement    added filter support
- * Jun 19, 2014 3226       bclement    added validator callback
- * Aug 04, 2014 3488       bclement    added checkBinRange(), rebin() and finalizeRecords()
- * Mar 08, 2016 18336      amoore      Keep-alive messages should update the legend.
- * Apr 07, 2016 DR18763 mgamazaychikov Switched to using LightningWMOHeader.
- * May 02, 2016 18336      amoore      BinLightningRecord constructor takes source.
- * Jun 10, 2016 DR18939 mgamazaychikov Removed LightningWMOHeader.
- * Jul 29, 2016 19202      amoore      Decryption properties should be based on WMO ID.
- * Sep 02, 2016 19339      amoore      On failure of decryption and bit-shifting (returning -1 strikes),
- *                                     fail the bin lightning message rather than assume as keep-alive.
- * 
- * 
- * - * @author jkorman - */ -public class BinLightningDecoder { - - // Allow ingest up to 10 minutes into the future. - private static final long TEN_MINUTES = 10 * 60 * 1000L; - - private final SimpleDateFormat SDF; - - private static final IUFStatusHandler logger = UFStatus - .getHandler(BinLightningDecoder.class); - - private static final boolean REBIN_INVALID_DATA = Boolean - .getBoolean("rebin.invalid.binlightning"); - - /** - * Cipher properties prefix for bin lightning, to be prepended to WMO IDs. - */ - public static final String BINLIGHTNING_KEYSTORE_PREFIX = "binlightning"; - - /** - * Default lightning strike type for FLASH messages. RT_FLASH documents - * indicate no default, but D2D code defaults to STRIKE_CG also. - */ - public LtgStrikeType DEFAULT_FLASH_TYPE = LtgStrikeType.CLOUD_TO_GROUND; - - private String traceId = null; - - /** - * callback for validating decryption results - */ - private static DecryptedLightningValidator validator = new DecryptedLightningValidator() { - @Override - public boolean isValid(byte[] decryptedData) { - return BinLightningDecoderUtil.isKeepAliveRecord(decryptedData) - || BinLightningDecoderUtil - .isLightningDataRecords(decryptedData); - } - }; - - /** - * Construct a BinLightning decoder. Calling hasNext() after construction - * will return false, decode() will return a null. - */ - public BinLightningDecoder() { - SDF = new SimpleDateFormat("yyyyMMddHHmmss"); - SDF.setTimeZone(TimeZone.getTimeZone("Zulu")); - } - - /** - * Get the next decoded data record. - * - * @return One record of decoded data. - * @throws DecoderException - * Thrown if no data is available. - */ - public PluginDataObject[] decode(byte[] data, Headers headers) - throws DecoderException { - - // String traceId = null; - PluginDataObject[] rval = new PluginDataObject[0]; - - if (data != null) { - traceId = (String) headers.get(DecoderTools.INGEST_FILE_NAME); - - WMOHeader wmoHdr = new WMOHeader(data); - if (wmoHdr.isValid()) { - String fileName = (String) headers - .get(WMOHeader.INGEST_FILE_NAME); - Calendar baseTime = WMOTimeParser - .findDataTime(wmoHdr.getYYGGgg(), fileName); - - /* - * Because binary nature of the encrypted data, the string - * created with its byte[] array may not have the same length of - * the byte[] array length So when DecoderTools.stripWMOHeader() - * assumes byte[] length == String length in its logic, it is - * observed that it may return a shorter byte[] than the real - * data array. (Looks like a bug???) - */ - // byte[] pdata = DecoderTools.stripWMOHeader(data, - // SFUS_PATTERN); - // if (pdata == null) { - // pdata = DecoderTools.stripWMOHeader(data, SFPA_PATTERN); - // } - /* - * instead the following is used to strip WMO header a little - * more safely. - */ - byte[] pdata = extractPData(wmoHdr, data); - - if ((pdata == null) || (pdata.length == 0)) { - return new PluginDataObject[0]; - } - - /* - * Modified by Wufeng Zhou to handle both legacy bit-shifted and - * new encrypted data. - * - * If neither method works, throw an exception. - * - * Preserved the legacy decoding in - * BinLigntningDecoderUtil.decodeBitShiftedBinLightningData(), - * and added logic to process both encrypted data and legacy - * data. - */ - Collection strikes = decodeBinLightningData( - data, pdata, traceId, wmoHdr, baseTime.getTime()); - - /* - * Done MOD by Wufeng Zhou - */ - // post processing data - BinLightningRecord report = null; - if (strikes.size() > 0) { - // not a keep-alive - report = LightningGeoFilter.createFilteredRecord(strikes); - } else { - // keep-alive, get the source from WMO header - String source = getSourceFromHeader(wmoHdr); - - synchronized (SDF) { - logger.info( - traceId + ": found keep-alive record of base time [" - + SDF.format(baseTime.getTime()) - + "] and source [" + source + "]"); - } - - report = new BinLightningRecord(baseTime, source); - } - - Collection records = checkBinRange(report, - strikes); - rval = finalizeRecords(records, baseTime); - - } - } else { - logger.error("No WMOHeader found in data"); - } - - logger.debug(traceId + ": Returning array of [" + rval.length - + "] bin lightning records"); - - return rval; - } - - /** - * Perform final actions on each record and populate a PDO array with them. - * Any invalid records will be omitted from the return array. - * - * @param records - * @param baseTime - * @return - * @throws DecoderException - */ - private PluginDataObject[] finalizeRecords( - Collection records, Calendar baseTime) - throws DecoderException { - Calendar c = TimeUtil.newCalendar(baseTime); - if (c == null) { - throw new DecoderException(traceId + " - Error decoding times"); - } - ArrayList rval = new ArrayList<>(records.size()); - for (BinLightningRecord record : records) { - Calendar cStart = record.getStartTime(); - if (cStart - .getTimeInMillis() > (c.getTimeInMillis() + TEN_MINUTES)) { - synchronized (SDF) { - logger.info("Discarding future data for " + traceId + " at " - + SDF.format(cStart.getTime())); - } - } else { - Calendar cStop = record.getStopTime(); - - TimeRange range = new TimeRange(cStart.getTimeInMillis(), - cStop.getTimeInMillis()); - - DataTime dataTime = new DataTime(cStart, range); - record.setDataTime(dataTime); - - record.setTraceId(traceId); - rval.add(record); - } - } - return rval.toArray(new PluginDataObject[rval.size()]); - } - - /** - * Ensure that the record has a valid bin range. If it does, it will be the - * only record in the return value. Otherwise, {@link #REBIN_INVALID_DATA} - * is used to determine if no records should be returned or the strikes - * should be split into valid bin ranges uses {@link #rebin(Collection)} - * - * @param record - * @param strikes - * @return - */ - private Collection checkBinRange( - BinLightningRecord record, - Collection strikes) { - Collection rval = Collections.emptyList(); - Calendar cStart = record.getStartTime(); - Calendar cStop = record.getStopTime(); - long binRange = cStop.getTimeInMillis() - cStart.getTimeInMillis(); - if (binRange > TimeUtil.MILLIS_PER_DAY) { - if (REBIN_INVALID_DATA) { - rval = rebin(strikes); - } else { - String rangeStart; - String rangeEnd; - synchronized (SDF) { - rangeStart = SDF.format(cStart.getTime()); - rangeEnd = SDF.format(cStop.getTime()); - } - logger.error("Discarding data with invalid bin range of " - + rangeStart + " to " + rangeEnd); - } - } else { - rval = Arrays.asList(record); - } - return rval; - } - - /** - * Split the strikes into 1 day bins and create a new record for each bin - * - * @param strikes - * @return - */ - private Collection rebin( - Collection strikes) { - Map> binMap = new HashMap<>(1); - for (LightningStrikePoint strike : strikes) { - Calendar c = TimeUtil.newCalendar(strike.getTime()); - c.set(Calendar.HOUR_OF_DAY, 0); - c.set(Calendar.MINUTE, 0); - c.set(Calendar.SECOND, 0); - c.set(Calendar.MILLISECOND, 0); - long key = c.getTimeInMillis(); - Collection bin = binMap.get(key); - if (bin == null) { - bin = new ArrayList<>(strikes.size()); - binMap.put(key, bin); - } - bin.add(strike); - } - Collection rval = new ArrayList<>(binMap.size()); - for (Entry> e : binMap - .entrySet()) { - Collection bin = e.getValue(); - BinLightningRecord record = new BinLightningRecord(bin); - rval.add(record); - } - - return rval; - } - - /** - * Remove WMO header from data and return the remaining pdata - * - * @param wmoHdr - * @param data - * @return null if data is invalid - */ - public static byte[] extractPData(WMOHeader wmoHdr, byte[] data) { - byte[] pdata = null; - if (wmoHdr.isValid() && wmoHdr.getMessageDataStart() > 0) { - pdata = new byte[data.length - wmoHdr.getMessageDataStart()]; - System.arraycopy(data, wmoHdr.getMessageDataStart(), pdata, 0, - data.length - wmoHdr.getMessageDataStart()); - } - return pdata; - } - - /** - * Decode bin lightning data, able to handle both legacy bit-shifted and new - * encryted data - * - * The BinLightningDecoder.decode() method will use this method to decode - * data, which will try to decrypt first, and decode the old fashioned way - * (bit-shifting) when decryption fails - * - * @author Wufeng Zhou - * - * @param data - * - data content from file, including WMO header section - * @param pdata - * - data with WMO header stripped, optional, if null, will strip - * WMO header internally from passed in data parameter - * @param traceId - * - the file name of the data to be deoced - * @param wmoHdr - * - WMOHeader, added 12/24/2013 to help distinguish bit-shifted - * NLDN and GLD360 data (GLD data will have header starts like - * SFPA) - * @param dataDate - * - date of the data, optional, used as a hint to find - * appropriate encryption key faster - * @return null if keep-alive record, otherwise a list (could be empty) of - * LightningStrikePoint - * @throws DecoderException - * if neither decryption nor bit-shifting works. - */ - public static List decodeBinLightningData(byte[] data, - byte[] pdata, String traceId, WMOHeader wmoHdr, Date dataDate) - throws DecoderException { - if (pdata == null) { // if data without header not passed, we'll strip - // the WMO header here - WMOHeader header = new WMOHeader(data); - if (header.isValid() && header.getMessageDataStart() > 0) { - pdata = new byte[data.length - header.getMessageDataStart()]; - System.arraycopy(data, header.getMessageDataStart(), pdata, 0, - data.length - header.getMessageDataStart()); - } - } - - List strikes = new ArrayList<>(); - boolean needDecrypt = true; // set as default unless clear evidence says - // otherwise - boolean decodeDone = false; - EncryptedBinLightningCipher cipher = new EncryptedBinLightningCipher(); - - /* - * Using different WMO headers to indicate whether the data is encrypted - * or not would be a nice option. However, that idea has been discussed - * but not adopted. If in the future, WMO header can be different for - * legacy and encrypted data, or some other metadata can be used to - * decide whether deceyption is needed, logic can be added here. - * - * Before that happens, we'll use hints and trial & error to decode the - * data Hints: Per lightning data format spec, there are 3 bytes in the - * WMO header starting line that indicates the size of the encrypted - * block or the ASCII sequence # for legacy bit-shifted data However, - * the starting line is optional and AWIPS decode may not see it at all - * because TG will strip that starting line away We'll try to use this - * hint first, if is is not found, then trial and error way to decrypt - * and decode - * - * As of 11/05/2013, There is change in data spec. that the 3-bytes will - * not be encoded as encrypted block size anymore (it will always be - * transmission sequence # if present) So there should have some minor - * changes in the logic below for decoding the data. However, as reading - * into the - * com.raytheon.edex.plugin.binlightning.impl.BinLightningFactory - * .getDecoder () and follow-on code, we see the following data patterns - * for legacy bit-shifted data, which could be used to reduce guess-work - * in data decryption: The bit-shifted data will have multiple groups of - * the following patterns: 1-byte (unsigned byte): for size count 1-byte - * (unsigned byte): for flash type: 0x96 for FLASH_RPT (message size is - * 6 bytes each) 0x97 for RT_FLASH_RPT (message size is 8 bytes each) - * 0xd0 for OTHER_RPT (The D2D decoders declare but do not define this - * message, so unimplemented decoder) 0xd1 for COMM_RPT (The D2D - * decoders declare but do not define this message, so unimplemented - * decoder) 4-bytes: date time multiple of 6 or 8 bytes (as determined - * by 2nd byte flash type) with count indicated in 1st byte - * - * So this is be used to determine whether the data need to be - * decrypted. - */ - - /* - * // looks like previous assumption on block size bytes are not valid - * any more. 11/20/2013 if (data != null) { byte[] sizeSeqBytes = - * BinLigntningDecoderUtil.findSizeOrSeqBytesFromWMOHeader(data); if - * (sizeSeqBytes != null) { // if this is in the header (which may not), - * use that as a hint to determine which decoding route to go if - * (BinLigntningDecoderUtil - * .isPossibleWMOHeaderSequenceNumber(sizeSeqBytes) && - * BinLigntningDecoderUtil - * .getEncryptedBlockSizeFromWMOHeader(sizeSeqBytes) != pdata.length) { - * // looks like a sequence #, and if treat as size, it does not equal - * to the data block size, so most likely legacy data needDecrypt = - * false; } } } - */ - - if (needDecrypt) { - try { - byte[] encryptedData = EncryptedBinLightningCipher - .prepDataForDecryption(pdata, traceId); - - // use different suffix depending on header - String wmoID = wmoHdr.getTtaaii(); - logger.info( - "Decrypting a [" + wmoID + "] bin lightning record"); - byte[] decryptedData = cipher.decryptData(encryptedData, - dataDate, BINLIGHTNING_KEYSTORE_PREFIX + wmoID, - validator); - // decrypt ok, then decode, first check if keep-alive record - if (BinLightningDecoderUtil.isKeepAliveRecord(decryptedData)) { - logger.info(traceId - + " - Keep-alive record detected, no strike decoding."); - decodeDone = true; - return new ArrayList<>(0); - } - /* - * not necessarily keep-alive record, then check data validity - * and decode into an ArrayList of strikes - */ - if (BinLightningDecoderUtil - .isLightningDataRecords(decryptedData)) { - strikes = BinLightningDecoderUtil - .decodeDecryptedBinLightningData(decryptedData); - decodeDone = true; - } else { - logger.info(traceId - + " - Failed data validity check of the decrypted data, will try decode the old-fashioned way."); - decodeDone = false; - } - } catch (IllegalBlockSizeException e) { - logger.info(traceId + " - " + e.getMessage() - + ": Decryption failed, will try decode the old-fashioned way."); - decodeDone = false; - } catch (BadPaddingException e) { - logger.info(traceId + " - " + e.getMessage() - + ": Decryption failed, will try decode the old-fashioned way."); - decodeDone = false; - } catch (BinLightningDataDecryptionException e) { - logger.info(traceId + " - " + e.getMessage() - + ": Decryption failed, will try decode the old-fashioned way."); - decodeDone = false; - } - } - - if (decodeDone == false) { // not decoded through decrypt->decode - // process, try the legacy decoder - logger.info(traceId + " - decoding as bit-shifted data"); - /* - * bit-shifting data format check call here will get us some more - * information on the data, also can compare the strikes with the - * decoder result - */ - int estimatedStrikes = BinLightningDecoderUtil - .getBitShiftedDataStrikeCount(pdata); - - if (estimatedStrikes == -1) { - /** - * BinLightningDecoderUtil#getBitShiftedDataStrikeCount returns - * -1 if the data is not bit-shifted. - */ - throw new DecoderException(traceId + " - " - + "Cannot get strikes from message using either decryption or bit-shifting. Skipping this message."); - } else { - strikes = decodeBitShiftedBinLightningData(pdata, wmoHdr); - if (estimatedStrikes != strikes.size()) { - logger.warn( - traceId + ": bit-shifted decoder found " + strikes - + " strikes, which is different from estimate from data pattern examination: " - + estimatedStrikes); - } - } - } - - return strikes; - } - - /** - * extracted from the original {@link #decode(byte[], Headers)} method then - * modified by Wufeng Zhou - * - * @param pdata - * @param wmoHdr - * - WMOHeader, added 12/24/2013 to help distinguish bit-shifted - * NLDN and GLD360 data (GLD data will have header starts like - * SFPA) - * @return - */ - public static List decodeBitShiftedBinLightningData( - byte[] pdata, WMOHeader wmoHdr) { - List strikes = new ArrayList<>(); - - IBinDataSource msgData = new LightningDataSource(pdata); - - boolean continueDecode = true; - while (continueDecode) { - IBinLightningDecoder decoder = BinLightningFactory - .getDecoder(msgData); - - switch (decoder.getError()) { - case IBinLightningDecoder.NO_ERROR: { - for (LightningStrikePoint strike : decoder) { - String source = getSourceFromHeader(wmoHdr); - - strike.setLightSource(source); - strikes.add(strike); - } - break; - } - default: { - continueDecode = false; - } - } - } - return strikes; - } - - /** - * Get the data source from the given WMO header. - * - * @param wmoHdr - * the header. - * @return the data source according to text from the header. - */ - private static String getSourceFromHeader(WMOHeader wmoHdr) { - /* - * use WMO Header to distinguish NLDN or GLD360 data because no - * bit-shifted data spec available for GLD360. 12/24/2013, WZ The WMO - * header start string is defined in BinLightningAESKey.properties file - * (normally, GLD360 data will have WMO header starts with SFPA41, or - * SFPA99 for test data.) - */ - /* - * continually get the properties locally instead of as a constant - * because the properties file could be changed and reloaded by the - * user. - */ - String gld360WMOHeaderString = BinLightningAESKey.getProps() - .getProperty("binlightning.gld360WMOHeaderStartString", ""); - - String source = null; - - if (gld360WMOHeaderString.trim().equals("") == false - && wmoHdr.getWmoHeader().startsWith(gld360WMOHeaderString)) { - // GLD360 data based on the setup - source = "GLD"; - } - /* - * default source is NLDN, which is the only other option at this time - * for this decoder (5/2/2016, DR 18336). For future sources, add here - * and modify BinLightningAESKey.properties. - */ - - return BinLightningRecord.validateSource(source); - } - - /** - * Set a trace identifier for the source data. - * - * @param traceId - * A unique identifier associated with the input data. - */ - public void setTraceId(String traceId) { - this.traceId = traceId; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/dao/BinLightningDao.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/dao/BinLightningDao.java deleted file mode 100644 index e335229465..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/dao/BinLightningDao.java +++ /dev/null @@ -1,105 +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. - **/ - -package com.raytheon.edex.plugin.binlightning.dao; - -import java.util.Map; -import java.util.Map.Entry; - -import com.raytheon.uf.common.dataplugin.PluginException; -import com.raytheon.uf.common.dataplugin.annotations.DataURI; -import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord; -import com.raytheon.uf.common.dataplugin.binlightning.LightningConstants; -import com.raytheon.uf.common.dataplugin.persist.IPersistable; -import com.raytheon.uf.common.datastorage.DataStoreFactory; -import com.raytheon.uf.common.datastorage.IDataStore; -import com.raytheon.uf.common.datastorage.StorageException; -import com.raytheon.uf.common.datastorage.records.IDataRecord; -import com.raytheon.uf.edex.database.plugin.PluginDao; - -/** - * Data access object for access binlightning data - * - *
- * SOFTWARE HISTORY
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 1/08/09      1674       bphillip    Initial creation
- * Jun 05, 2014 3226       bclement    record now contains maps for data arrays
- * 
- * - * @author bphillip - * @version 1.0 - */ -public class BinLightningDao extends PluginDao { - - /** - * - * @param pluginName The name of this plugin. - * @throws PluginException - */ - public BinLightningDao(String pluginName) throws PluginException { - super(pluginName); - } - - /** - * Copy data from a Persistable object into a given DataStore container. - * @param dataStore DataStore instance to receive the Persistable data. - * @param obj The Persistable object to be stored. - * @throws Exception Any general exception thrown in this method. - */ - protected IDataStore populateDataStore(IDataStore dataStore, - IPersistable obj) throws Exception { - BinLightningRecord binLightningRec = (BinLightningRecord) obj; - Map strikeDataArrays = binLightningRec - .getStrikeDataArrays(); - populateFromMap(dataStore, obj, binLightningRec.getDataURI(), - strikeDataArrays); - Map pulseDataArrays = binLightningRec - .getPulseDataArrays(); - String pulseGroup = binLightningRec.getDataURI() + DataURI.SEPARATOR - + LightningConstants.PULSE_HDF5_GROUP_SUFFIX; - populateFromMap(dataStore, obj, pulseGroup, pulseDataArrays); - return dataStore; - } - - /** - * Adds each primitive data array object in map to the datastore using the - * provided group and the key of the map entry as the name - * - * @param dataStore - * @param obj - * @param group - * @param data - * @throws StorageException - */ - private void populateFromMap(IDataStore dataStore, IPersistable obj, - String group, Map data) - throws StorageException { - for (Entry e : data.entrySet()) { - String name = e.getKey(); - Object dataArray = e.getValue(); - IDataRecord record = DataStoreFactory.createStorageRecord(name, - group, dataArray); - record.setCorrelationObject(obj); - dataStore.addDataRecord(record); - } - } -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterBbox.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterBbox.java deleted file mode 100644 index a801e56c8f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterBbox.java +++ /dev/null @@ -1,136 +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. - **/ -package com.raytheon.edex.plugin.binlightning.filter; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; - -/** - * JAXB POJO for filter bounding box - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Jun 11, 2014 3226       bclement     Initial creation
- * 
- * 
- * - * @author bclement - * @version 1.0 - */ -@XmlAccessorType(XmlAccessType.NONE) -public class GeoFilterBbox { - - @XmlAttribute(required = true) - private double minx; - - @XmlAttribute(required = true) - private double maxx; - - @XmlAttribute(required = true) - private double miny; - - @XmlAttribute(required = true) - private double maxy; - - /** - * - */ - public GeoFilterBbox() { - } - - /** - * @param minx - * @param maxx - * @param miny - * @param maxy - */ - public GeoFilterBbox(double minx, double maxx, double miny, double maxy) { - this.minx = minx; - this.maxx = maxx; - this.miny = miny; - this.maxy = maxy; - } - - /** - * @return the minx - */ - public double getMinx() { - return minx; - } - - /** - * @param minx - * the minx to set - */ - public void setMinx(double minx) { - this.minx = minx; - } - - /** - * @return the maxx - */ - public double getMaxx() { - return maxx; - } - - /** - * @param maxx - * the maxx to set - */ - public void setMaxx(double maxx) { - this.maxx = maxx; - } - - /** - * @return the miny - */ - public double getMiny() { - return miny; - } - - /** - * @param miny - * the miny to set - */ - public void setMiny(double miny) { - this.miny = miny; - } - - /** - * @return the maxy - */ - public double getMaxy() { - return maxy; - } - - /** - * @param maxy - * the maxy to set - */ - public void setMaxy(double maxy) { - this.maxy = maxy; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterException.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterException.java deleted file mode 100644 index 7b1522c171..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterException.java +++ /dev/null @@ -1,70 +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. - **/ -package com.raytheon.edex.plugin.binlightning.filter; - -/** - * Exception thrown during lightning filter config parsing - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Jun 10, 2014 3226       bclement     Initial creation
- * 
- * 
- * - * @author bclement - * @version 1.0 - */ -public class GeoFilterException extends Exception { - - private static final long serialVersionUID = -7455324971125247083L; - - /** - * - */ - public GeoFilterException() { - } - - /** - * @param message - */ - public GeoFilterException(String message) { - super(message); - } - - /** - * @param cause - */ - public GeoFilterException(Throwable cause) { - super(cause); - } - - /** - * @param message - * @param cause - */ - public GeoFilterException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterParser.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterParser.java deleted file mode 100644 index a2118b1181..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterParser.java +++ /dev/null @@ -1,295 +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. - **/ -package com.raytheon.edex.plugin.binlightning.filter; - -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.xml.bind.JAXBException; -import javax.xml.stream.XMLStreamException; - -import com.raytheon.uf.common.dataquery.requests.RequestConstraint; -import com.raytheon.uf.common.geospatial.SpatialException; -import com.raytheon.uf.common.geospatial.SpatialQueryFactory; -import com.raytheon.uf.common.geospatial.SpatialQueryResult; -import com.raytheon.uf.common.serialization.JAXBManager; -import com.raytheon.uf.common.serialization.SerializationException; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.GeometryFactory; -import com.vividsolutions.jts.geom.prep.PreparedGeometry; -import com.vividsolutions.jts.geom.prep.PreparedGeometryFactory; - -/** - * Parses geographic filter configuration files.
- *
- * Example file: - * - *
- * {@code
- * 
- * 
- *     
- *     
- *     
- *     OAX
- *     DMX
- *     FSD
- *     
- *     POLYGON ((-101.24 41.4, -100.6 41.15, -101.01 40.75, -101.24 41.4))
- * 
- * }
- * 
- * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Jun 10, 2014 3226       bclement    Initial creation
- * Jul 08, 2016 5744       mapeters    Added example file to javadoc
- * 
- * 
- * - * @author bclement - */ -public class GeoFilterParser { - - private static final double LAT_MIN = -90; - - private static final double LAT_MAX = 90; - - private static final double LON_MIN = -180; - - private static final double LON_MAX = 180; - - /* CWA database constants */ - - private static final String CWA_TABLE = "cwa"; - - private static final String CWA_COLUMN = "cwa"; - - /* helper factories */ - - private static JAXBManager jaxbManager; - - private static volatile boolean initialized = false; - - private static final GeometryFactory GEOM_FACTORY = new GeometryFactory(); - - /** - * initialize jaxb manager - * - * @throws JAXBException - */ - private static synchronized void initialize() throws JAXBException { - if (!initialized) { - jaxbManager = new JAXBManager(GeoFilters.class); - initialized = true; - } - } - - /** - * Parse filter config file from input stream. Does not close input stream. - * Any non-fatal parsing errors are returned in result. - * - * @param in - * @return - * @throws JAXBException - * @throws SerializationException - */ - public static GeoFilterResult parse(InputStream in) throws JAXBException, - SerializationException { - if (!initialized) { - initialize(); - } - Object obj = jaxbManager.unmarshalFromInputStream(in); - if (obj instanceof GeoFilters) { - return parseInternal((GeoFilters) obj); - } else { - throw new SerializationException("Unexpected XML object type: " - + obj.getClass()); - } - } - - /** - * @see #parse - * @param filters - * jaxb pojo - * @return - * @throws XMLStreamException - */ - private static GeoFilterResult parseInternal(GeoFilters filters) { - List geoms = new ArrayList<>(); - List errors = new ArrayList<>(); - List bboxes = filters.getBboxes(); - if (bboxes != null && !bboxes.isEmpty()) { - for (GeoFilterBbox bbox : bboxes) { - try { - geoms.addAll(convertBbox(bbox)); - } catch (GeoFilterException e) { - errors.add(e); - } - } - } - List cwas = filters.getCwas(); - if (cwas != null && !cwas.isEmpty()) { - for (String cwa : cwas) { - try { - geoms.addAll(getCWA(cwa)); - } catch (GeoFilterException e) { - errors.add(e); - } - } - } - List geometries = filters.getGeometries(); - if (geometries != null) { - geoms.addAll(geometries); - } - List rval = new ArrayList<>(geoms.size()); - for (Geometry geom : geoms) { - rval.add(PreparedGeometryFactory.prepare(geom)); - } - return new GeoFilterResult(rval, errors); - } - - /** - * Get county warning area geometries by name. Performs a database lookup. - * - * @param cwa - * @return - * @throws GeoFilterException - */ - private static Collection getCWA(String cwa) - throws GeoFilterException { - Map map = new HashMap<>(); - map.put(CWA_COLUMN, new RequestConstraint(cwa)); - SpatialQueryResult[] results; - try { - results = SpatialQueryFactory.create().query(CWA_TABLE, null, null, - map, null); - } catch (SpatialException e) { - throw new GeoFilterException("Unable to query database for CWA: " - + cwa, e); - } - if (results == null || results.length == 0) { - return Collections.emptyList(); - } - List rval = new ArrayList<>(results.length); - for (SpatialQueryResult result : results) { - rval.add(result.geometry); - } - return rval; - } - - /** - * Validate bounding box coordinates in attributes. Converts bounding box to - * polygon. - * - * @param bbox - * @return - */ - private static Collection convertBbox(GeoFilterBbox bbox) - throws GeoFilterException { - - Coordinate upper = new Coordinate(bbox.getMaxx(), bbox.getMaxy()); - Coordinate lower = new Coordinate(bbox.getMinx(), bbox.getMiny()); - - if (lower.x > upper.x || lower.y > upper.y) { - throw new GeoFilterException( - "Invalid bounding box tag. Minimum coordinate values " - + "cannot be larger than maximum coordinate values: " - + lower + " " + upper); - } - - if (lower.y < LAT_MIN || upper.y > LAT_MAX) { - throw new GeoFilterException( - "Invalid bounding box tag. Box cannot cross poles: " - + lower.y + "," + upper.y); - } - - List rval = null; - lower.x = normalizeLon(lower.x); - upper.x = normalizeLon(upper.x); - /* - * if normalization switched order, it means it crossed the antimeridian - * and needs to be split into two boxes - */ - if (lower.x > upper.x) { - /* create a new box on the left of the map */ - Coordinate leftLower = new Coordinate(LON_MIN, lower.y); - Coordinate leftUpper = new Coordinate(upper.x, upper.y); - /* change the old box to only cover the right of the map */ - upper.x = LON_MAX; - Geometry left = createPolygon(leftLower, leftUpper); - Geometry right = createPolygon(lower, upper); - rval = Arrays.asList(left, right); - } else { - rval = Arrays.asList(createPolygon(lower, upper)); - } - return rval; - } - - /** - * @param lon - * @return longitude normalized to be between -180 and 180 - */ - private static double normalizeLon(double lon) { - /* 360 degrees */ - final double LON_TOTAL = LON_MAX * 2; - /* account for any far out degrees */ - double rval = lon % LON_TOTAL; - /* subtract or add to get in range */ - if (rval > LON_MAX) { - rval -= LON_TOTAL; - } else if (rval < LON_MIN) { - rval += LON_TOTAL; - } - return rval; - } - - /** - * @param mins - * @param maxes - * @return polygon defining a bounding box using corner points - */ - private static Geometry createPolygon(Coordinate mins, Coordinate maxes) { - Coordinate[] coordinates = new Coordinate[5]; - coordinates[0] = new Coordinate(mins.x, mins.y); - coordinates[1] = new Coordinate(mins.x, maxes.y); - coordinates[2] = new Coordinate(maxes.x, maxes.y); - coordinates[3] = new Coordinate(maxes.x, mins.y); - /* polygons need a closed ring */ - coordinates[4] = coordinates[0]; - return GEOM_FACTORY.createPolygon(coordinates); - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterResult.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterResult.java deleted file mode 100644 index 97572d1620..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilterResult.java +++ /dev/null @@ -1,90 +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. - **/ -package com.raytheon.edex.plugin.binlightning.filter; - -import java.util.Collection; -import java.util.Collections; - -import com.vividsolutions.jts.geom.prep.PreparedGeometry; - -/** - * Geographic filter parsing results. Wraps parsed data and any parsing errors. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Jun 10, 2014 3226       bclement     Initial creation
- * 
- * 
- * - * @author bclement - * @version 1.0 - */ -public class GeoFilterResult { - - private final Collection errors; - - private final Collection filters; - - - /** - * @param filters - */ - public GeoFilterResult(Collection filters) { - this(filters, Collections. emptyList()); - } - - /** - * @param filters - * @param errors - */ - public GeoFilterResult(Collection filters, - Collection errors) { - this.filters = filters; - this.errors = errors; - } - - /** - * @return true if any errors were encountered during parsing - * @see #getErrors() - */ - public boolean hasErrors() { - return !errors.isEmpty(); - } - - /** - * @return the errors - * @see #hasErrors() - */ - public Collection getErrors() { - return errors; - } - - /** - * @return the filters - */ - public Collection getFilters() { - return filters; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilters.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilters.java deleted file mode 100644 index fbaf5c4f80..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/GeoFilters.java +++ /dev/null @@ -1,127 +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. - **/ -package com.raytheon.edex.plugin.binlightning.filter; - -import java.util.List; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; - -import com.raytheon.uf.common.geospatial.adapter.GeometryAdapter; -import com.vividsolutions.jts.geom.Geometry; - -/** - * Root JAXB POJO for geographic filter configuration - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Jun 11, 2014 3226      bclement     Initial creation
- * 
- * 
- * - * @author bclement - * @version 1.0 - */ -@XmlRootElement(name = "filters") -@XmlAccessorType(XmlAccessType.NONE) -public class GeoFilters { - - @XmlElement(name = "wkt") - @XmlJavaTypeAdapter(value = GeometryAdapter.class) - private List geometries; - - @XmlElement(name = "cwa") - private List cwas; - - @XmlElement(name = "bbox") - private List bboxes; - - /** - * - */ - public GeoFilters() { - } - - /** - * @param geometries - * @param cwas - * @param bboxes - */ - public GeoFilters(List geometries, - List cwas, - List bboxes) { - this.geometries = geometries; - this.cwas = cwas; - this.bboxes = bboxes; - } - - /** - * @return the geometries - */ - public List getGeometries() { - return geometries; - } - - /** - * @param geometries - * the geometries to set - */ - public void setGeometries(List geometries) { - this.geometries = geometries; - } - - /** - * @return the cwas - */ - public List getCwas() { - return cwas; - } - - /** - * @param cwas - * the cwas to set - */ - public void setCwas(List cwas) { - this.cwas = cwas; - } - - /** - * @return the bboxes - */ - public List getBboxes() { - return bboxes; - } - - /** - * @param bboxes - * the bboxes to set - */ - public void setBboxes(List bboxes) { - this.bboxes = bboxes; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/LightningGeoFilter.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/LightningGeoFilter.java deleted file mode 100644 index f8e611fedd..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/filter/LightningGeoFilter.java +++ /dev/null @@ -1,221 +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. - **/ -package com.raytheon.edex.plugin.binlightning.filter; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.xml.bind.JAXBException; - -import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.localization.ILocalizationFile; -import com.raytheon.uf.common.localization.IPathManager; -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.LocalizationException; -import com.raytheon.uf.common.serialization.SerializationException; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.vividsolutions.jts.geom.Coordinate; -import com.vividsolutions.jts.geom.GeometryFactory; -import com.vividsolutions.jts.geom.Point; -import com.vividsolutions.jts.geom.prep.PreparedGeometry; - -/** - * Geographic filtering utility for lightning data. Configured in localization. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer     Description
- * ------------ ---------- -----------  --------------------------
- * Jun 10, 2014 3226       bclement     Initial creation
- * Jan 27, 2016 5237       tgurney      Replace LocalizationFile with
- *                                      ILocalizationFile
- * Jul 13, 2016 5744       mapeters     Get filter files from common_static
- *                                      instead of edex_static
- * 
- * 
- * - * @author bclement - * @see {@link GeoFilterParser} - */ -public class LightningGeoFilter { - - private static final IUFStatusHandler log = UFStatus - .getHandler(LightningGeoFilter.class); - - public static final String LOCALIZATION_FILTER_DIR = "binlightning" - + IPathManager.SEPARATOR + "filters"; - - private static final GeometryFactory GEOM_FACTORY = new GeometryFactory(); - - /** - * map of lightning source names to filter geometries - */ - private static final Map> geometryMap = new ConcurrentHashMap<>( - 4); - - private static volatile boolean initialized = false; - - /** - * read filter configuration files from localization. Threadsafe and - * idempotent - */ - private static void initialize() { - synchronized (geometryMap) { - if (!initialized) { - IPathManager pathMgr = PathManagerFactory.getPathManager(); - - LocalizationFile[] files = pathMgr - .listFiles( - pathMgr.getLocalSearchHierarchy(LocalizationType.COMMON_STATIC), - LOCALIZATION_FILTER_DIR, - new String[] { ".xml" }, true, true); - - for (ILocalizationFile file : files) { - Collection filters = getFilterGeometries(file); - if (!filters.isEmpty()) { - String bareName = getFileNameWithoutExtension(file - .getPath()); - geometryMap.put(bareName.toLowerCase(), filters); - } - } - initialized = true; - } - } - } - - /** - * Parse filter geometries from filter config file - * - * @param file - * @return empty list on error - */ - private static Collection getFilterGeometries( - ILocalizationFile file) { - Collection rval; - try (InputStream in = file.openInputStream()) { - GeoFilterResult result = GeoFilterParser.parse(in); - if (result.hasErrors()) { - for (GeoFilterException e : result.getErrors()) { - log.error(e.getLocalizedMessage(), e); - } - log.warn("Filter parsing included errors, filters will be incomplete"); - } - return result.getFilters(); - } catch (IOException | JAXBException | LocalizationException - | SerializationException e) { - log.error("Unable to parse filter file: " + file.getPath(), e); - rval = Collections.emptyList(); - } - return rval; - } - - /** - * Strip the bare file name from path. Removes path and file suffix (if - * either exist) - * - * @param path - * @return - */ - private static String getFileNameWithoutExtension(String path) { - int slashIndex = path.lastIndexOf(IPathManager.SEPARATOR); - int start = slashIndex < 0 ? 0 : slashIndex + 1; - int dotIndex = path.lastIndexOf('.'); - if (dotIndex < 0) { - return path.substring(start); - } else { - return path.substring(start, dotIndex); - } - } - - /** - * Applies data source filter to strikes. Source is determined from sample - * strike. If no filter exists for source, provided collection is returned. - * - * @param strikes - * @return - */ - public static Collection filterStrikes( - Collection strikes) { - if (!initialized) { - initialize(); - } - Collection rval = strikes; - if (!strikes.isEmpty()) { - LightningStrikePoint sample = strikes.iterator().next(); - String source = BinLightningRecord.getDataSource(sample); - Collection filter = geometryMap.get(source - .toLowerCase()); - if (filter != null && !filter.isEmpty()) { - rval = new ArrayList<>(strikes.size()); - for (LightningStrikePoint strike : strikes) { - if (passesFilter(filter, strike)) { - rval.add(strike); - } - } - } - } - return rval; - } - - /** - * @param filter - * @param strike - * @return true if strike is located in any of the filter geometries - */ - private static boolean passesFilter(Collection filter, - LightningStrikePoint strike) { - boolean passes = false; - Point p = GEOM_FACTORY.createPoint(new Coordinate( - strike.getLongitude(), strike.getLatitude())); - for (PreparedGeometry g : filter) { - /* covers instead of contains to include points at boundary */ - if (g.covers(p)) { - passes = true; - break; - } - } - return passes; - } - - /** - * Create a BinLightningRecord after applying data source filter to list of - * strikes - * - * @see #filterStrikes(Collection) - * @param strikes - * @return - */ - public static BinLightningRecord createFilteredRecord( - Collection strikes) { - return new BinLightningRecord(filterStrikes(strikes)); - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/BinLightningFactory.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/BinLightningFactory.java deleted file mode 100644 index affa69df7f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/BinLightningFactory.java +++ /dev/null @@ -1,122 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - - -import static com.raytheon.edex.plugin.binlightning.impl.IBinLightningDecoder.*; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - -import com.raytheon.edex.plugin.binlightning.BinLightningDecoder; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; - -/** - * Read from the message data source, isolate and create a decoder for the - * current sub-message. In the event that the message decoder can not be - * created, an instance of LightningErrorDecoder is created. - * - *
- *
- * SOFTWARE HISTORY
- *
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * 20160116          18408 Wufeng Zhou  Remove direct dependency on bit shifting decoder
- * 
- * 
- * 
- * - * @author jkorman - * @version 1.0 - */ -public class BinLightningFactory -{ - private static final IUFStatusHandler logger = UFStatus.getHandler(BinLightningDecoder.class); - - /** - * Read from the message data source, isolate and create a decoder for the - * current sub-message. In the event that the message decoder can not be - * created, an instance of LightningErrorDecoder is created. - * @param msgData The message data source. - * @return The decoder instance. - */ - public static IBinLightningDecoder getDecoder(IBinDataSource msgData) - { - IBinLightningDecoder decoder = null; - - int count = msgData.getU8(); - int decoderType = msgData.getU8(); - - switch(decoderType) - { - case FLASH_RPT : - { - String className = "com.raytheon.edex.plugin.binlightning.impl.FlashLightningDecoder"; - decoder = loadDecoderInstance(className, msgData, count); - break; - } - case RT_FLASH_RPT : - { - String className = "com.raytheon.edex.plugin.binlightning.impl.RTLightningDecoder"; - decoder = loadDecoderInstance(className, msgData, count); - break; - } - case OTHER_RPT : - { - // The D2D decoders declare but do not define this message. - decoder = new LightningErrorDecoder(UNIMPLEMENTED_DECODER); - break; - } - case COMM_RPT : - { - // The D2D decoders declare but do not define this message. - decoder = new LightningErrorDecoder(UNIMPLEMENTED_DECODER); - break; - } - default : - { - decoder = new LightningErrorDecoder(UNKNOWN_MESSAGE_TYPE); - break; - } - } - - return decoder; - } - - private static IBinLightningDecoder loadDecoderInstance(String className, IBinDataSource msgData, int count) { - IBinLightningDecoder decoder = null; - try { - Class clazz = BinLightningFactory.class.getClassLoader().loadClass(className); - Class[] types = {IBinDataSource.class, Integer.TYPE}; - Constructor constructor = clazz.getConstructor(types); - Object[] parameters = {msgData, count}; - decoder = (IBinLightningDecoder)constructor.newInstance(parameters); - logger.info("Loaded legacy binlightning decoder class " + className); - } catch (ClassNotFoundException | InstantiationException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - logger.error("Fail to load binlightning decoder class " + className + ". FYI, this is error only if you are authorized: " + e.getMessage()); - decoder = new LightningErrorDecoder(UNIMPLEMENTED_DECODER); - } - return decoder; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinDataSource.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinDataSource.java deleted file mode 100644 index 6b5672aa95..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinDataSource.java +++ /dev/null @@ -1,82 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -/** - * Implementations of this interface are adapters between some data source and - * the using client code. Note that the idea of big/small endian data is not - * addressed in the interface. This matter is specific to the data and is an - * implementation detail. - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 27 July 2007        411 jkorman     Initial Development
- * 20070912            379 jkorman     Code review cleanup.
- * 26 Sep 2014        3629 mapeters    Moved from uf.edex.decodertools.core.
- * 
- * 
- * - * @author jkorman - * @version 1 - */ -public interface IBinDataSource { - - /** - * Are there at least a specified number of bytes left in the data source? - * - * @param count - * Number of bytes to check for. - * @return - */ - public boolean available(int count); - - /** - * Get a signed 8 bit value from the data source. - * - * @return A signed 8 bit value. - */ - public int getS8(); - - /** - * Get an unsigned 8 bit value from the data source. - * - * @return An unsigned 8 bit value. - */ - public int getU8(); - - /** - * Get an unsigned 16 bit value from the data source. - * - * @return An unsigned 16 bit value. - */ - public int getU16(); - - /** - * Get an unsigned 32 bit value from the data source. - * - * @return An unsigned 32 bit value. - */ - public long getU32(); - -} \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinLightningDecoder.java deleted file mode 100644 index 09eee9e737..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/IBinLightningDecoder.java +++ /dev/null @@ -1,75 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgStrikeType; - -/** - * Declare the interface for binary lightning decoding. The decoders are - * expected to implement an Iterable interface. Data decoding will take place - * during construction of the element. - * - *
- * the recommended constructor for this interface is
- * 
- * @param data An IBinDataSource data source containing the data to be decoded.
- * @param count The number of records that this decoder should see.
- * public X (IBinDataSource data, int count)
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * 20070912            379 jkorman     Code review cleanup.
- * Jun 05, 2014 3226       bclement    LightningStikePoint refactor
- * 
- * 
- * - * @author jkorman - * @version 1.0 - */ -public interface IBinLightningDecoder extends Iterable -{ - public static final int NO_ERROR = 0; - public static final int NO_TIME_INFO = 1; - public static final int NOT_ENOUGH_DATA = 2; - - public static final int UNKNOWN_MESSAGE_TYPE = 98; - public static final int UNIMPLEMENTED_DECODER = 99; - - public static final int FLASH_RPT = 0x96; - public static final int RT_FLASH_RPT = 0x97; - public static final int OTHER_RPT = 0xD0; - public static final int COMM_RPT = 0xD1; - - public static final LtgStrikeType DEFAULT_FLASH_TYPE = LtgStrikeType.CLOUD_TO_GROUND; - - /* - */ - - /** - * Get the last error for the instance. - * @return The error code. - */ - public int getError(); - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningDataSource.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningDataSource.java deleted file mode 100644 index 1daeea465e..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningDataSource.java +++ /dev/null @@ -1,121 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -import java.io.ByteArrayInputStream; - - -/** - * Wraps a ByteArrayInputStream with access methods specific to binary - * lightning data. - * - *
- *
- * SOFTWARE HISTORY
- *
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * 
- * 
- * - * @author jkorman - * @version 1.0 - */ -public class LightningDataSource implements IBinDataSource -{ - private ByteArrayInputStream msgData = null; - - /** - * Create this data source from supplied byte array data. - * - * @param data - */ - public LightningDataSource(byte[] data) - { - msgData = new ByteArrayInputStream(data); - } - - /** - * Are there at least a given number of bytes available in the data source. - * @param A number of bytes to check for. - * @return Are the bytes available? - */ - public boolean available(int count) - { - return (msgData.available() >= count); - } - - /** - * Get a signed 8 bit value from the data source. NOTE : This conversion is - * not twos-complement! - * @return A signed 8 bit value as an int. - */ - public int getS8() - { - int s8 = msgData.read(); - int sign = (s8 & 0x80); - s8 = s8 & 0x7F; - - if(sign > 0) - { - s8 = 0 - s8; - } - return s8; - } - - /** - * Get a unsigned 8 bit value from the data source. - * @return An unsigned 8 bit value as an int. - */ - public int getU8() - { - int u8 = msgData.read(); - - return u8; - } - - /** - * Get a unsigned 16 bit value from the data source. - * @return An unsigned 16 bit value as an int. - */ - public int getU16() - { - int u16 = msgData.read(); - u16 |= (msgData.read() << 8); - - return u16 & 0xFFFF; - } - - /** - * Get a unsigned 32 bit value from the data source. - * @return An unsigned 32 bit value as a long. - */ - public long getU32() - { - long u32 = msgData.read(); - u32 |= (msgData.read() << 8); - u32 |= (msgData.read() << 16); - u32 |= (msgData.read() << 24); - - return u32 & 0xFFFFFFFFL; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningErrorDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningErrorDecoder.java deleted file mode 100644 index 62654038ef..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/LightningErrorDecoder.java +++ /dev/null @@ -1,96 +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. - **/ -package com.raytheon.edex.plugin.binlightning.impl; - -import java.util.Iterator; - -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; - - -/** - * Mock decoder that is returned from the lightning decoder factory in the event - * that a proper decoder could not be constructed. Instances are created by passing - * various "permanent" error codes that will always be returned by the instance. - *
- *
- * SOFTWARE HISTORY
- *
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * 20070810            379 jkorman     Initial Coding from prototype.
- * 
- * 
- * - * @author jkorman - * @version 1.0 - */ -public class LightningErrorDecoder implements IBinLightningDecoder -{ - private final int errorCode; - - /** - * Construct an instance of this decoder with a constant error code. - * @param errorCode The constant error code. - */ - public LightningErrorDecoder(int errorCode) - { - this.errorCode = errorCode; - } - - /** - * Get the error code for this decoder. - * @return The error code. - */ - @Override - public int getError() - { - return errorCode; - } - - /** - * This Iterator always returns, hasNext() = false, next = null. - * @return The "dummy" iterator for this class. - */ - @Override - public Iterator iterator() - { - return new Iterator() - { - - @Override - public boolean hasNext() - { - return false; - } - - @Override - public LightningStrikePoint next() - { - return null; - } - - @Override - public void remove() - { - } - }; - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/package-info.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/package-info.java deleted file mode 100644 index a1224385e1..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/impl/package-info.java +++ /dev/null @@ -1,23 +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. - **/ -/** - * Contains implementation classes for decoding binary lightning data. - */ -package com.raytheon.edex.plugin.binlightning.impl; \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/package-info.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/package-info.java deleted file mode 100644 index 92118a398f..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/package-info.java +++ /dev/null @@ -1,24 +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. - **/ -/** - * Binary Lightning decoder plugin specific code. These classes interface - * between the edex plugin proxy and the implemented decoder layer. - */ -package com.raytheon.edex.plugin.binlightning; \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/ChecksumByteBuffer.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/ChecksumByteBuffer.java deleted file mode 100644 index 65302c0bbc..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/ChecksumByteBuffer.java +++ /dev/null @@ -1,184 +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. - **/ -package com.raytheon.edex.plugin.binlightning.total; - -import java.nio.ByteBuffer; - -import com.raytheon.uf.common.numeric.UnsignedNumbers; - -/** - * ByteBuffer wrapper that keeps track of checksums - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Jun 03, 2014  3226      bclement    Initial creation
- * Jun 09, 2014 3226       bclement    Added ByteBuffer constructor
- * Jul 01, 2015 4581       skorolev    Added condition in the getSum(int)
- * 
- * 
- * - * @author bclement - * @version 1.0 - */ -public class ChecksumByteBuffer { - - private static final int SHORT_SIZE = Short.SIZE / Byte.SIZE; - - private static final int INT_SIZE = Integer.SIZE / Byte.SIZE; - - private static final int LONG_SIZE = Integer.SIZE / Byte.SIZE; - - private final ByteBuffer buff; - - private long totalSum; - - private long packetSum; - - /** - * @see ByteBuffer#wrap(byte[]) - * @param data - */ - public ChecksumByteBuffer(byte[] data) { - this.buff = ByteBuffer.wrap(data); - } - - /** - * @param buff - */ - public ChecksumByteBuffer(ByteBuffer buff) { - this.buff = buff; - } - - /** - * get the sum of the next numberOfBytes worth of data - * - * @param numberOfBytes - * @return - */ - private long getSum(int numberOfBytes) { - int start = buff.position(); - int end = start + numberOfBytes; - long rval = 0; - if (buff.remaining() < numberOfBytes) { - throw new IllegalArgumentException("Unable to get checksum for " - + numberOfBytes + " bytes, only " + buff.remaining() - + " bytes in buffer."); - } - for (int i = start; i < end; ++i) { - rval += UnsignedNumbers.ubyteToShort(buff.get(i)); - } - return rval; - } - - /** - * @see ByteBuffer#get() - * @return - */ - public byte get() { - byte rval = buff.get(); - short unsignedRval = UnsignedNumbers.ubyteToShort(rval); - totalSum += unsignedRval; - packetSum += unsignedRval; - return rval; - } - - /** - * @see ByteBuffer#getShort() - * @return - */ - public short getShort() { - long sum = getSum(SHORT_SIZE); - totalSum += sum; - packetSum += sum; - return buff.getShort(); - } - - /** - * @see ByteBuffer#getInt() - * @return - */ - public int getInt() { - long sum = getSum(INT_SIZE); - totalSum += sum; - packetSum += sum; - return buff.getInt(); - } - - /** - * @see ByteBuffer#getLong() - * @return - */ - public long getLong() { - long sum = getSum(LONG_SIZE); - totalSum += sum; - packetSum += sum; - return buff.getLong(); - } - - /** - * reset the current packet sum to zero - */ - public void resetPacketSum() { - packetSum = 0; - } - - /** - * reset all sums to zero - */ - public void resetAllSums() { - resetPacketSum(); - totalSum = 0; - } - - /** - * @return the totalSum - */ - public long getTotalSum() { - return totalSum; - } - - /** - * @return the packetSum - */ - public long getPacketSum() { - return packetSum; - } - - /** - * @see ByteBuffer#limit() - * @return - */ - public int size() { - return buff.limit(); - } - - /** - * @see ByteBuffer#position() - * @return - */ - public int position() { - return buff.position(); - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/TotalLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/TotalLightningDecoder.java deleted file mode 100644 index d168d026ab..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/src/com/raytheon/edex/plugin/binlightning/total/TotalLightningDecoder.java +++ /dev/null @@ -1,473 +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. - **/ -package com.raytheon.edex.plugin.binlightning.total; - -import gov.noaa.nws.ost.edex.plugin.binlightning.DecryptedLightningValidator; -import gov.noaa.nws.ost.edex.plugin.binlightning.EncryptedBinLightningCipher; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -import com.raytheon.edex.esb.Headers; -import com.raytheon.edex.exception.DecoderException; -import com.raytheon.edex.plugin.binlightning.BinLightningDecoder; -import com.raytheon.edex.plugin.binlightning.filter.LightningGeoFilter; -import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord; -import com.raytheon.uf.common.dataplugin.binlightning.impl.BaseLightningPoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningPulsePoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgMsgType; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgPulseType; -import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgStrikeType; -import com.raytheon.uf.common.numeric.UnsignedNumbers; -import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.time.util.TimeUtil; -import com.raytheon.uf.common.wmo.WMOHeader; -import com.raytheon.uf.common.wmo.WMOTimeParser; - -/** - * Decoder for Earth Networks Total Lightning data - * - *
- * 
- * SOFTWARE HISTORY
- * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * May 30, 2014 3226       bclement    Initial creation
- * Jun 09, 2014 3226       bclement    added encryption support
- * Jun 10, 2014 3226       bclement    added filter support
- * Jun 19, 2014 3226       bclement    added validator callback
- * Jul 07, 2015 4581       skorolev    Corrected decodeStrikes to avoid BufferUnderflowException.
- * Apr 07, 2016 DR18763 mgamazaychikov Switched to using LightningWMOHeader.
- * Apr 21, 2016 DR18849 mgamazaychikov Decrypt all data in decrypt method.
- * May 02, 2016 18336      amoore      Keep-alive messages should update the legend.
- * Jun 10, 2016 DR18939 mgamazaychikov Removed LightningWMOHeader.
- * 
- * 
- * - * @author bclement - * @version 1.0 - */ -public class TotalLightningDecoder { - - // flash types - public static final byte CLOUD_TO_GROUND_TYPE = 0x00; - - public static final byte CLOUD_TO_CLOUD_TYPE = 0x01; - - // pulse types - public static final byte RETURN_STROKE_TYPE = 0x00; - - public static final byte NON_RETURN_STROKE_TYPE = 0x01; - - public static final byte KEEP_ALIVE_TYPE = 0x09; - - // conversions - public static final double LONLAT_SCALE_FACTOR = 0.0000001; - - public static final double AMPS_PER_KILO_AMP = 1000.0; - - public static final double METERS_PER_KILOMETER = 1000.0; - - // constant metadata - public static final String DATA_SOURCE = "ENTLN"; - - /* in bytes, header is total size of flash and pulses */ - private static final int COMBINATION_PACKET_HEADER_SIZE = 2; - - /* in bytes, doesn't include checksum */ - private static final int FLASH_PACKET_SIZE = 25; - - private static final IUFStatusHandler log = UFStatus - .getHandler(TotalLightningDecoder.class); - - private static final EncryptedBinLightningCipher CIPHER = new EncryptedBinLightningCipher(); - - public static final String TOTAL_LIGHTNING_KEYSTORE_PREFIX = "total.lightning"; - - private static final DecryptedLightningValidator validator = new DecryptedLightningValidator() { - @Override - public boolean isValid(byte[] data) { - return validFlashPacket(data, COMBINATION_PACKET_HEADER_SIZE); - } - }; - - private static final int SHORT_SIZE = 2; - - /** - * Parse total lightning data into BinLightningRecords - * - * @param data - * @param headers - * @return - */ - public PluginDataObject[] decode(byte[] data, Headers headers) { - PluginDataObject[] rval; - WMOHeader wmoHdr = new WMOHeader(data); - String fileName = (String) headers.get(WMOHeader.INGEST_FILE_NAME); - if (wmoHdr.isValid()) { - byte[] pdata = BinLightningDecoder.extractPData(wmoHdr, data); - if (pdata != null) { - try { - rval = decodeInternal(wmoHdr, fileName, pdata); - } catch (Exception e) { - error(e, headers, wmoHdr); - rval = new PluginDataObject[0]; - } - } else { - warn("Unable to separate data from headers", fileName, wmoHdr); - rval = new PluginDataObject[0]; - } - } else { - warn("Invalid WMO header", fileName, wmoHdr); - rval = new PluginDataObject[0]; - } - return rval; - } - - /** - * @param data - * @param startIndex - * starting index of flash packet (not combination packet) - * @return true if there if a valid flash packet in data starting at index - */ - private static boolean validFlashPacket(byte[] data, int startIndex) { - /* plus one to include packet checksum */ - final int packetWithChecksum = FLASH_PACKET_SIZE + 1; - if (data.length < startIndex + packetWithChecksum) { - return false; - } - ChecksumByteBuffer buff = new ChecksumByteBuffer(ByteBuffer.wrap(data, - startIndex, packetWithChecksum)); - for (int i = 0; i < FLASH_PACKET_SIZE; ++i) { - /* build up sum in buffer */ - buff.get(); - } - return passesCheckSum(buff, false); - } - - /** - * Display warning message with file and header names - * - * @param msg - * @param fileName - * @param wmoHdr - */ - private void warn(String msg, String fileName, WMOHeader wmoHdr) { - log.warn(msg + ". File: " + fileName + ", WMO Header: " + wmoHdr); - } - - /** - * Display error message with file and header names - * - * @param e - * @param headers - * @param wmoHdr - */ - private void error(Exception e, Headers headers, WMOHeader wmoHdr) { - String fileName = (String) headers.get(WMOHeader.INGEST_FILE_NAME); - log.error(e.getLocalizedMessage() + ". File: " + fileName - + ", WMO Header: " + wmoHdr, e); - } - - /** - * @param wmoHdr - * @param fileName - * @param pdata - * data after WMO header is removed - * @return - * @throws DecoderException - */ - private PluginDataObject[] decodeInternal(WMOHeader wmoHdr, - String fileName, byte[] pdata) throws DecoderException { - byte[] pdataPreDecrypt = pdata; - // determine if the data is encrypted or not based on comparing - // checksums for flash packet - pdata = decrypt(wmoHdr, fileName, pdata); - boolean isDecryptedValid = validFlashPacket(pdata, - COMBINATION_PACKET_HEADER_SIZE); - boolean isPreDecryptedValid = validFlashPacket(pdataPreDecrypt, - COMBINATION_PACKET_HEADER_SIZE); - // assume that all data is encrypted, so decrypt it - if (!isDecryptedValid && isPreDecryptedValid) { - // this means that data is not encrypted, proceed without - // decryption - pdata = pdataPreDecrypt; - } - List strikes = decodeStrikes(fileName, pdata); - - BinLightningRecord record; - if (!strikes.isEmpty()) { - record = LightningGeoFilter.createFilteredRecord(strikes); - } else { - // keep-alive record - Calendar baseTime = WMOTimeParser.findDataTime(wmoHdr.getYYGGgg(), - fileName); - record = new BinLightningRecord(baseTime, DATA_SOURCE); - } - return new PluginDataObject[] { record }; - } - - /** - * @param wmoHdr - * @param fileName - * @param pdata - * @return - * @throws DecoderException - */ - private byte[] decrypt(WMOHeader wmoHdr, String fileName, - byte[] pdata) throws DecoderException { - Calendar baseTime = WMOTimeParser.findDataTime(wmoHdr.getYYGGgg(), - fileName); - pdata = EncryptedBinLightningCipher.prepDataForDecryption(pdata, - fileName); - try { - return CIPHER.decryptData(pdata, baseTime.getTime(), - TOTAL_LIGHTNING_KEYSTORE_PREFIX, validator); - } catch (Exception e) { - throw new DecoderException("Problem decrypting total lightning", e); - } - } - - /** - * Extract strike data from raw binary, ignoring keep-alive strikes. - * - * @param fileName - * @param pdata - * @return list of lightning strike points, ignoring keep-alive strikes. - * @throws DecoderException - */ - private List decodeStrikes(String fileName, - byte[] pdata) throws DecoderException { - List rval = new ArrayList(); - ChecksumByteBuffer buff = new ChecksumByteBuffer(pdata); - while (buff.position() < buff.size()) { - int startingPostion = buff.position(); - int totalBytes = 0; - if ((buff.size() - startingPostion) >= SHORT_SIZE) { - totalBytes = UnsignedNumbers.ushortToInt(buff.getShort()); - if (totalBytes > (buff.size() - startingPostion)) { - if (validFlashPacket(pdata, buff.position())) { - log.error("Truncated total lightning packet in file: " - + fileName); - } else { - int extra = buff.size() - startingPostion; - log.warn("Extra data at end of lightning packets: " - + extra + " bytes"); - } - break; - } - } else { - log.warn("Extra data at end of lightning packets: 1 byte"); - break; - } - /* start flash packet */ - buff.resetPacketSum(); - /* discard flash packet size byte */ - buff.get(); - - LtgStrikeType flashType = getStrikeType(buff.get()); - LightningStrikePoint strike = new LightningStrikePoint(null, - LtgMsgType.TOTAL_LIGHTNING); - strike.setLightSource(DATA_SOURCE); - strike.setType(flashType); - decodeCommonFields(strike, buff); - - int pulseCount = UnsignedNumbers.ubyteToShort(buff.get()); - strike.setPulseCount(pulseCount); - ensureCheckSum(buff, false); - - List pulses = new ArrayList( - pulseCount); - for (int i = 0; i < pulseCount; ++i) { - /* discard size of pulse packet (always 26) */ - buff.get(); - LtgPulseType pulseType = getPulseType(buff.get()); - LightningPulsePoint pulse = new LightningPulsePoint(null, - pulseType); - decodeCommonFields(pulse, buff); - /* discard pulse count (already set in strike) */ - buff.get(); - ensureCheckSum(buff, false); - pulses.add(pulse); - } - strike.setPulses(pulses); - ensureCheckSum(buff, true); - if (strike.getType() != LtgStrikeType.KEEP_ALIVE) { - rval.add(strike); - } - } - return rval; - } - - /** - * Extract fields common to both strikes and pulses - * - * @param point - * @param buff - */ - private static void decodeCommonFields(BaseLightningPoint point, - ChecksumByteBuffer buff) { - point.setTime(getTime(buff)); - point.setLatitude(getDouble(buff, LONLAT_SCALE_FACTOR)); - point.setLongitude(getDouble(buff, LONLAT_SCALE_FACTOR)); - point.setStrikeStrength(getKiloAmps(buff.getInt())); - /* discard reserved byte */ - buff.get(); - point.setElevation(getMeters(buff.getShort())); - point.setSensorCount(UnsignedNumbers.ubyteToShort(buff.get())); - } - - /** - * Create calendar from 4 byte UNIX time and 2 byte millisecond addition - * - * @param buff - * @return - */ - private static Calendar getTime(ChecksumByteBuffer buff) { - long unixTime = UnsignedNumbers.uintToLong(buff.getInt()); - int additionalMillis = UnsignedNumbers.ushortToInt(buff.getShort()); - long totalMillis = (unixTime * TimeUtil.MILLIS_PER_SECOND) - + additionalMillis; - return TimeUtil.newGmtCalendar(new Date(totalMillis)); - } - - /** - * @see #passesCheckSum(ChecksumByteBuffer, boolean) - * @param buff - * @param total - * @throws DecoderException - */ - private static void ensureCheckSum(ChecksumByteBuffer buff, boolean total) - throws DecoderException { - if (!passesCheckSum(buff, total)) { - throw new DecoderException("Checksum failed"); - } - } - - /** - * Ensure data integrity, resets appropriate sum(s) in buffer after check - * - * @param buff - * @param total - * true if total sum should be checked, otherwise checks packet - * sum - * @return true if checksum passes - */ - private static boolean passesCheckSum(ChecksumByteBuffer buff, boolean total) { - long rawsum = total ? buff.getTotalSum() : buff.getPacketSum(); - /* convert to overflowed unsigned byte */ - rawsum &= 0xFF; - /* checksum algorithm from total lightning spec */ - long mungedSum = (256 - rawsum) & 0xFF; - /* get expected after sum so it is not reflected in sum */ - long expected = UnsignedNumbers.ubyteToShort(buff.get()); - - boolean rval = mungedSum == expected; - if (!rval) { - log.debug("Checksum failed: expected " + expected + " got " - + mungedSum); - } - if (total) { - buff.resetAllSums(); - } else { - buff.resetPacketSum(); - } - return rval; - } - - /** - * Get scaled double from 4 byte integer field - * - * @param buff - * @param scaleFactor - * @return - */ - private static double getDouble(ChecksumByteBuffer buff, double scaleFactor) { - int raw = buff.getInt(); - return raw * scaleFactor; - } - - /** - * Convert amps to kiloamps - * - * @param amps - * @return - */ - private static double getKiloAmps(int amps) { - return amps / AMPS_PER_KILO_AMP; - } - - /** - * Convert kilometers to meters - * - * @param kilometers - * @return - */ - private static double getMeters(short kilometers) { - return kilometers * METERS_PER_KILOMETER; - } - - /** - * Map strike byte to internal enum - * - * @param type - * @return - * @throws DecoderException - */ - public static LtgStrikeType getStrikeType(byte type) - throws DecoderException { - switch (type) { - case CLOUD_TO_GROUND_TYPE: - return LtgStrikeType.CLOUD_TO_GROUND; - case CLOUD_TO_CLOUD_TYPE: - return LtgStrikeType.CLOUD_TO_CLOUD; - case KEEP_ALIVE_TYPE: - return LtgStrikeType.KEEP_ALIVE; - } - throw new DecoderException("Unknown flash type: " + type); - } - - /** - * Map pulse byte to internal enum - * - * @param type - * @return - * @throws DecoderException - */ - public static LtgPulseType getPulseType(byte type) throws DecoderException { - switch (type) { - case RETURN_STROKE_TYPE: - return LtgPulseType.RETURN_STROKE; - case NON_RETURN_STROKE_TYPE: - return LtgPulseType.NON_RETURN_STROKE; - case KEEP_ALIVE_TYPE: - return LtgPulseType.KEEP_ALIVE; - } - throw new DecoderException("Unknown pulse type: " + type); - } - -} diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/distribution/binlightning.xml b/edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/distribution/binlightning.xml deleted file mode 100644 index 7cc8122f66..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/distribution/binlightning.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - ^SFUS4[13] KWBC.* - ^SFPA4[123] KWBC.* - diff --git a/edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/purge/binlightningPurgeRules.xml b/edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/purge/binlightningPurgeRules.xml deleted file mode 100644 index c9775923f6..0000000000 --- a/edexOsgi/com.raytheon.edex.plugin.binlightning/utility/common_static/base/purge/binlightningPurgeRules.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - 36 - =00-01:00:00 - 00-01:00:00 - - From 4593b3d3f8dce77f4bd06ca10ecca146ea1c2f6a Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Thu, 20 Dec 2018 12:59:50 -0700 Subject: [PATCH 06/13] edex service manager cleanup --- build/setup.sh | 8 +++- rpms/awips2.upc/Installer.awips/programs/edex | 43 +++++++++++-------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/build/setup.sh b/build/setup.sh index 65de694229..4cfe029dd4 100755 --- a/build/setup.sh +++ b/build/setup.sh @@ -21,13 +21,17 @@ if [ $rpmname = "buildCAVE" ]; then for dn in `cat build/repos| grep -v static| grep -v nativelib |grep -v awips2-rpm` do echo $dn - if [ -d /awips2/repo/$dn ]; then dirs+=" -v /awips2/repo/${dn}:/awips2/repo/${dn} ";fi + if [ -d /awips2/repo/$dn ]; then + dirs+=" -v /awips2/repo/${dn}:/awips2/repo/${dn} " + fi done else for dn in `cat build/repos` do echo $dn - if [ -d /awips2/repo/$dn ]; then dirs+=" -v /awips2/repo/${dn}:/awips2/repo/${dn} ";fi + if [ -d /awips2/repo/$dn ]; then + dirs+=" -v /awips2/repo/${dn}:/awips2/repo/${dn} " + fi done fi diff --git a/rpms/awips2.upc/Installer.awips/programs/edex b/rpms/awips2.upc/Installer.awips/programs/edex index f714f6db1d..bed4a9621d 100755 --- a/rpms/awips2.upc/Installer.awips/programs/edex +++ b/rpms/awips2.upc/Installer.awips/programs/edex @@ -23,17 +23,19 @@ # # #-----------------------------------------------------------------------# # ChangeLog # -# 07/2011 M.James/Unidata Created # -# 10/2015 M.James/Unidata Log files fixed; purge check added # -# 11/2015 M.James/Unidata Added CAVE user count as "edex users" # -# 10/2016 M.James/Unidata No longer need to edit ldmd.conf # -# 06/2017 M.James/Unidata Restart # -# 09/2017 M.James/Unidata Rudimentary remote db password control, # -# remove pg_hba.conf edits # -# 01/2018 M.James/Unidata Added qpid-stat wrapper as edex qpid # -# 08/2018 M.James/Unidata Registry logging # -# 09/2018 M.James/Unidata Cleanup setup/editing # -# 10/2018 M.James/Unidata Check for edex_ldm on LDM start/stop # +# 07/2011 mjames Created # +# 10/2015 mjames Tailing log files ; purge check added # +# 11/2015 mjames Display ser count as "edex users" # +# 10/2016 mjames No longer editing ldmd.conf # +# 06/2017 mjames Added restart command # +# 09/2017 mjames Rudimentary remote db password control # +# remove pg_hba.conf edits # +# 01/2018 mjames Added qpid-stat wrapper as edex qpid # +# 08/2018 mjames Registry logging # +# 09/2018 mjames Cleanup setup/editing # +# 10/2018 mjames Check for edex_ldm on LDM start/stop # +# 12/2018 mjames Find a log file to tail if running modes other # +# than ingest # #-----------------------------------------------------------------------# . /etc/profile.d/awips2.sh # directories definitions @@ -222,7 +224,12 @@ edex_log() { exit; fi if [ -z ${args[1]} ]; then - echo ' :: No log specified - Defaulting to ingest log' + if [ -f ${LOG_PATH}/edex-ingest-${YMD}.log ]; then + LOG_FILE=${LOG_PATH}/edex-ingest-${YMD}.log + else + LOG_FILE=$(ls -tr $LOG_PATH/edex-ingest*${YMD}.log | grep -Ev 'wrapper|performance|hibernate|start' | tail -1) + fi + echo ' :: No log specified, but I found '$LOG_FILE tail_log exit; else @@ -233,20 +240,20 @@ edex_log() { } # -# Update placeholder "external.fqdn" with $(hostname -i) +# Update placeholder "external.fqdn" with $(hostname) # See /awips2/edex/bin/setup.env # edit_setup() { if grep -q external.fqdn "$EDEX_ENV_FILE"; then echo '[edex] EDEX IP and Hostname Setup' - sed -i.setup_$YMD 's/external.fqdn/'$(hostname -i)'/g' $EDEX_ENV_FILE - echo '[edit] '$(hostname -i)' added to '$EDEX_ENV_FILE + sed -i.setup_$YMD 's/external.fqdn/'$(hostname)'/g' $EDEX_ENV_FILE + echo '[edit] '$(hostname)' added to '$EDEX_ENV_FILE echo ' File backed up to '$EDEX_ENV_FILE'.setup_'$YMD fi # registry/data delivery fqdn shopt -s nullglob for f in /awips2/edex/conf/resources/*.properties; do - sed -i 's/external.fqdn/'$(hostname -i)'/g' $f + sed -i 's/external.fqdn/'$(hostname)'/g' $f done } @@ -388,14 +395,14 @@ edex_purge_reset() { # Show Qpid data ingest queues # edex_qpid() { - /awips2/python/bin/qpid-stat -q -S msgIn + /awips2/python/bin/qpid-stat -q -S msgIn } # # Qpid cleanup # edex_cleanup() { - rm -rf /awips2/qpid/edexMessageStore/edex/ + rm -rf /awips2/qpid/edexMessageStore/edex/ } # From dbd502eec9703bea240d4c0b7d1eabb2aaf31aae Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Thu, 20 Dec 2018 13:00:15 -0700 Subject: [PATCH 07/13] mute grib decoder perf logging --- .../com/raytheon/edex/plugin/grib/GribDecoder.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/GribDecoder.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/GribDecoder.java index a5dd13b5fc..6046405055 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/GribDecoder.java +++ b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/GribDecoder.java @@ -26,12 +26,8 @@ import org.apache.camel.Processor; import com.raytheon.edex.plugin.grib.exception.GribException; import com.raytheon.uf.common.dataplugin.grid.GridRecord; -import com.raytheon.uf.common.status.IPerformanceStatusHandler; import com.raytheon.uf.common.status.IUFStatusHandler; -import com.raytheon.uf.common.status.PerformanceStatus; import com.raytheon.uf.common.status.UFStatus; -import com.raytheon.uf.common.time.util.ITimer; -import com.raytheon.uf.common.time.util.TimeUtil; /** * Generic decoder for decoding grib files @@ -56,9 +52,6 @@ import com.raytheon.uf.common.time.util.TimeUtil; */ public class GribDecoder implements Processor { - private final IPerformanceStatusHandler perfLog = PerformanceStatus - .getHandler(""); - private final IUFStatusHandler statusHandler = UFStatus .getHandler(GribDecoder.class); @@ -74,9 +67,7 @@ public class GribDecoder implements Processor { exchange.getIn().setHeader("dataType", "grib" + gribEdition); //statusHandler.info("Decoding file: " + inMessage.getFileName()); - ITimer timer = TimeUtil.getTimer(); GridRecord[] records = null; - timer.start(); try { switch (gribEdition) { case 1: @@ -116,9 +107,6 @@ public class GribDecoder implements Processor { record.setDataURI(null); } } - timer.stop(); - perfLog.logDuration("Grib" + gribEdition + ": Time to Decode", - timer.getElapsedTime()); exchange.getIn().setBody(records); } From feae73b2f7160a00346e8874be6a486d4faadd6b Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Thu, 20 Dec 2018 16:25:42 -0700 Subject: [PATCH 08/13] WAA plugin reconfig --- .../localization/bundles/AllCWASPS.xml | 60 --- .../localization/bundles/AllLocalWarnings.xml | 325 --------------- .../bundles/AllMarineWarnings.xml | 75 ---- .../bundles/AllNationalWarnings.xml | 358 ----------------- .../bundles/AllRegionalWarnings-AR.xml | 364 ----------------- .../bundles/AllRegionalWarnings-CR.xml | 364 ----------------- .../bundles/AllRegionalWarnings-ER.xml | 364 ----------------- .../bundles/AllRegionalWarnings-PR.xml | 364 ----------------- .../bundles/AllRegionalWarnings-SR.xml | 364 ----------------- .../bundles/AllRegionalWarnings-WR.xml | 364 ----------------- .../bundles/AllRegionalWarnings.xml | 374 ------------------ .../bundles/{AllAdvisories.xml => AllWWA.xml} | 10 +- .../localization/bundles/AllWarnings.xml | 164 +------- .../localization/bundles/FloodWWA.xml | 37 ++ .../localization/bundles/FloodWarnings.xml | 103 ----- .../bundles/LocalCWAFloodWarnings.xml | 239 ----------- .../localization/bundles/LocalCWASPS.xml | 60 --- .../localization/bundles/LocalCWAWarnings.xml | 164 -------- .../LocalLocalizedExtremeWeatherWarnings.xml | 65 --- .../bundles/LocalMarineWarnings.xml | 65 --- .../bundles/LocalRegionalFloodWarnings.xml | 205 ---------- ...egionalLocalizedExtremeWeatherWarnings.xml | 66 ---- .../bundles/LocalRegionalMarineWarning.xml | 67 ---- .../localization/bundles/LocalRegionalSPS.xml | 61 --- .../bundles/LocalRegionalWarnings.xml | 199 ---------- .../bundles/LocalStormReportsLocal.xml | 54 --- .../bundles/LocalStormReportsNational.xml | 54 --- .../bundles/LocalStormReportsOffice.xml | 53 --- .../bundles/LocalStormReportsRegion.xml | 54 --- .../localization/bundles/MarineWWA.xml | 37 ++ .../localization/bundles/MarineWarning.xml | 66 ---- .../bundles/NationalConvWarnings.xml | 164 -------- .../bundles/NationalFloodWarnings.xml | 199 ---------- ...ationalLocalizedExtremeWeatherWarnings.xml | 65 --- .../bundles/RegionalCWAWarnings.xml | 167 -------- .../bundles/RegionalFloodWarnings-AR.xml | 200 ---------- .../bundles/RegionalFloodWarnings-CR.xml | 200 ---------- .../bundles/RegionalFloodWarnings-ER.xml | 200 ---------- .../bundles/RegionalFloodWarnings-PR.xml | 200 ---------- .../bundles/RegionalFloodWarnings-SR.xml | 200 ---------- .../bundles/RegionalFloodWarnings-WR.xml | 200 ---------- ...onalLocalizedExtremeWeatherWarnings-AR.xml | 65 --- ...onalLocalizedExtremeWeatherWarnings-CR.xml | 65 --- ...onalLocalizedExtremeWeatherWarnings-ER.xml | 65 --- ...onalLocalizedExtremeWeatherWarnings-PR.xml | 65 --- ...onalLocalizedExtremeWeatherWarnings-SR.xml | 65 --- ...onalLocalizedExtremeWeatherWarnings-WR.xml | 65 --- .../bundles/RegionalMarineWarning-AR.xml | 66 ---- .../bundles/RegionalMarineWarning-CR.xml | 66 ---- .../bundles/RegionalMarineWarning-ER.xml | 66 ---- .../bundles/RegionalMarineWarning-PR.xml | 66 ---- .../bundles/RegionalMarineWarning-SR.xml | 66 ---- .../bundles/RegionalMarineWarning-WR.xml | 66 ---- .../localization/bundles/RegionalSPS-AR.xml | 60 --- .../localization/bundles/RegionalSPS-CR.xml | 60 --- .../localization/bundles/RegionalSPS-ER.xml | 60 --- .../localization/bundles/RegionalSPS-PR.xml | 60 --- .../localization/bundles/RegionalSPS-SR.xml | 60 --- .../localization/bundles/RegionalSPS-WR.xml | 68 ---- .../bundles/RegionalWarnings-AR.xml | 200 ---------- .../bundles/RegionalWarnings-CR.xml | 200 ---------- .../bundles/RegionalWarnings-ER.xml | 200 ---------- .../bundles/RegionalWarnings-PR.xml | 200 ---------- .../bundles/RegionalWarnings-SR.xml | 200 ---------- .../bundles/RegionalWarnings-WR.xml | 200 ---------- .../localization/bundles/StormReports.xml | 19 - .../localization/bundles/Warnings.xml | 71 ---- .../bundles/{WindWarnings.xml => WindWWA.xml} | 9 +- .../menus/warnings/baseWarnings.xml | 26 +- .../localization/menus/warnings/index.xml | 19 - .../viz/warnings/rsc/AbstractWWAResource.java | 50 +-- 71 files changed, 123 insertions(+), 9419 deletions(-) delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllCWASPS.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllLocalWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllMarineWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllNationalWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-AR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-CR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-ER.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-PR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-SR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-WR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings.xml rename cave/com.raytheon.viz.warnings/localization/bundles/{AllAdvisories.xml => AllWWA.xml} (76%) create mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/FloodWWA.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/FloodWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAFloodWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalCWASPS.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalLocalizedExtremeWeatherWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalMarineWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalFloodWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalLocalizedExtremeWeatherWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalMarineWarning.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalSPS.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsLocal.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsNational.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsOffice.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsRegion.xml create mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/MarineWWA.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/MarineWarning.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/NationalConvWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/NationalFloodWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/NationalLocalizedExtremeWeatherWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalCWAWarnings.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-AR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-CR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-ER.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-PR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-SR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-WR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-AR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-CR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-ER.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-PR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-SR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-WR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-AR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-CR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-ER.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-PR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-SR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-WR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-AR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-CR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-ER.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-PR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-SR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-WR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-AR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-CR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-ER.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-PR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-SR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-WR.xml delete mode 100644 cave/com.raytheon.viz.warnings/localization/bundles/Warnings.xml rename cave/com.raytheon.viz.warnings/localization/bundles/{WindWarnings.xml => WindWWA.xml} (81%) diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllCWASPS.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllCWASPS.xml deleted file mode 100644 index 07b630c602..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllCWASPS.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllLocalWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllLocalWarnings.xml deleted file mode 100644 index 23b40454d6..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllLocalWarnings.xml +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllMarineWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllMarineWarnings.xml deleted file mode 100644 index 80927d587c..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllMarineWarnings.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllNationalWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllNationalWarnings.xml deleted file mode 100644 index 80c097b0a6..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllNationalWarnings.xml +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-AR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-AR.xml deleted file mode 100644 index b2a3740c0b..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-AR.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-CR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-CR.xml deleted file mode 100644 index dfd922e6ad..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-CR.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-ER.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-ER.xml deleted file mode 100644 index 4646632bd4..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-ER.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-PR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-PR.xml deleted file mode 100644 index 989dfc8536..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-PR.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-SR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-SR.xml deleted file mode 100644 index 69230d1cc4..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-SR.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-WR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-WR.xml deleted file mode 100644 index 005947d7e0..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings-WR.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings.xml deleted file mode 100644 index 935431b4bf..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllRegionalWarnings.xml +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml similarity index 76% rename from cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml rename to cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml index 98bde4c096..a6cb75cedc 100644 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllAdvisories.xml +++ b/cave/com.raytheon.viz.warnings/localization/bundles/AllWWA.xml @@ -7,8 +7,7 @@ - + @@ -18,11 +17,8 @@ - - - - + isRequeryNecessaryOnTimeMatch="true" name="All Advisories and Warnings"> + diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml index 6c2ccd71f3..cae0e32d68 100644 --- a/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml +++ b/cave/com.raytheon.viz.warnings/localization/bundles/AllWarnings.xml @@ -9,7 +9,7 @@ - + + isRequeryNecessaryOnTimeMatch="true" name="Warnings"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/FloodWWA.xml b/cave/com.raytheon.viz.warnings/localization/bundles/FloodWWA.xml new file mode 100644 index 0000000000..ad2584ca8c --- /dev/null +++ b/cave/com.raytheon.viz.warnings/localization/bundles/FloodWWA.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/FloodWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/FloodWarnings.xml deleted file mode 100644 index 1d7b67c454..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/FloodWarnings.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAFloodWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAFloodWarnings.xml deleted file mode 100644 index bf236763e2..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAFloodWarnings.xml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWASPS.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWASPS.xml deleted file mode 100644 index 0f2836f0d3..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWASPS.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAWarnings.xml deleted file mode 100644 index 0f2be082c0..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalCWAWarnings.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalLocalizedExtremeWeatherWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalLocalizedExtremeWeatherWarnings.xml deleted file mode 100644 index 0f4833a67c..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalLocalizedExtremeWeatherWarnings.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalMarineWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalMarineWarnings.xml deleted file mode 100644 index f91cda74f2..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalMarineWarnings.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalFloodWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalFloodWarnings.xml deleted file mode 100644 index ce4a029a53..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalFloodWarnings.xml +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalLocalizedExtremeWeatherWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalLocalizedExtremeWeatherWarnings.xml deleted file mode 100644 index a3326fd980..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalLocalizedExtremeWeatherWarnings.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalMarineWarning.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalMarineWarning.xml deleted file mode 100644 index 4d42f301a3..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalMarineWarning.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalSPS.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalSPS.xml deleted file mode 100644 index a42c5efa34..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalSPS.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalWarnings.xml deleted file mode 100644 index 699a76b47d..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalRegionalWarnings.xml +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsLocal.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsLocal.xml deleted file mode 100644 index d3be467859..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsLocal.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsNational.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsNational.xml deleted file mode 100644 index abf8a35b4a..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsNational.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsOffice.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsOffice.xml deleted file mode 100644 index 26e4935e8d..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsOffice.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsRegion.xml b/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsRegion.xml deleted file mode 100644 index bf10182ab9..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/LocalStormReportsRegion.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/MarineWWA.xml b/cave/com.raytheon.viz.warnings/localization/bundles/MarineWWA.xml new file mode 100644 index 0000000000..ae4f7a13f3 --- /dev/null +++ b/cave/com.raytheon.viz.warnings/localization/bundles/MarineWWA.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/MarineWarning.xml b/cave/com.raytheon.viz.warnings/localization/bundles/MarineWarning.xml deleted file mode 100644 index 160d2ff1fd..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/MarineWarning.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/NationalConvWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/NationalConvWarnings.xml deleted file mode 100644 index 0978f14133..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/NationalConvWarnings.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/NationalFloodWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/NationalFloodWarnings.xml deleted file mode 100644 index 6630e84bed..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/NationalFloodWarnings.xml +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/NationalLocalizedExtremeWeatherWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/NationalLocalizedExtremeWeatherWarnings.xml deleted file mode 100644 index 3d31bc2d69..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/NationalLocalizedExtremeWeatherWarnings.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalCWAWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalCWAWarnings.xml deleted file mode 100644 index 67e11359e1..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalCWAWarnings.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-AR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-AR.xml deleted file mode 100644 index 135761af52..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-AR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-CR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-CR.xml deleted file mode 100644 index 4ea31d0ffa..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-CR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-ER.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-ER.xml deleted file mode 100644 index 2a5fa600d7..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-ER.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-PR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-PR.xml deleted file mode 100644 index a83adea911..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-PR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-SR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-SR.xml deleted file mode 100644 index 8c28acff9e..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-SR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-WR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-WR.xml deleted file mode 100644 index 082506a371..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalFloodWarnings-WR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-AR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-AR.xml deleted file mode 100644 index 7d6857c01e..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-AR.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-CR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-CR.xml deleted file mode 100644 index 3d95231fc3..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-CR.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-ER.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-ER.xml deleted file mode 100644 index 621a41a620..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-ER.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-PR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-PR.xml deleted file mode 100644 index f48e3732bc..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-PR.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-SR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-SR.xml deleted file mode 100644 index b53aaa0bc5..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-SR.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-WR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-WR.xml deleted file mode 100644 index ede1a36334..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalLocalizedExtremeWeatherWarnings-WR.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-AR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-AR.xml deleted file mode 100644 index d0fbcdd00a..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-AR.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-CR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-CR.xml deleted file mode 100644 index 075b2dde41..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-CR.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-ER.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-ER.xml deleted file mode 100644 index 03f8b78c01..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-ER.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-PR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-PR.xml deleted file mode 100644 index 2b1ff5e05f..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-PR.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-SR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-SR.xml deleted file mode 100644 index e82d528666..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-SR.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-WR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-WR.xml deleted file mode 100644 index 75d4efee75..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalMarineWarning-WR.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-AR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-AR.xml deleted file mode 100644 index 58851450de..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-AR.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-CR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-CR.xml deleted file mode 100644 index b659a5546b..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-CR.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-ER.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-ER.xml deleted file mode 100644 index 5d1bf33e42..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-ER.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-PR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-PR.xml deleted file mode 100644 index fd65bdfeb7..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-PR.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-SR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-SR.xml deleted file mode 100644 index c8294ba075..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-SR.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-WR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-WR.xml deleted file mode 100644 index 87589eed8d..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalSPS-WR.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-AR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-AR.xml deleted file mode 100644 index fb770508b3..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-AR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-CR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-CR.xml deleted file mode 100644 index ef8bf42707..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-CR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-ER.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-ER.xml deleted file mode 100644 index 790f4a8504..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-ER.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-PR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-PR.xml deleted file mode 100644 index 62a0acceff..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-PR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-SR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-SR.xml deleted file mode 100644 index 22ee279b55..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-SR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-WR.xml b/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-WR.xml deleted file mode 100644 index 141891a8ab..0000000000 --- a/cave/com.raytheon.viz.warnings/localization/bundles/RegionalWarnings-WR.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/StormReports.xml b/cave/com.raytheon.viz.warnings/localization/bundles/StormReports.xml index 68b47d7f6f..ec1af35f18 100644 --- a/cave/com.raytheon.viz.warnings/localization/bundles/StormReports.xml +++ b/cave/com.raytheon.viz.warnings/localization/bundles/StormReports.xml @@ -1,23 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/cave/com.raytheon.viz.warnings/localization/bundles/WindWarnings.xml b/cave/com.raytheon.viz.warnings/localization/bundles/WindWWA.xml similarity index 81% rename from cave/com.raytheon.viz.warnings/localization/bundles/WindWarnings.xml rename to cave/com.raytheon.viz.warnings/localization/bundles/WindWWA.xml index a38b61420d..8217e68841 100644 --- a/cave/com.raytheon.viz.warnings/localization/bundles/WindWarnings.xml +++ b/cave/com.raytheon.viz.warnings/localization/bundles/WindWWA.xml @@ -8,7 +8,7 @@ - + + isRequeryNecessaryOnTimeMatch="true" name="Wind Watches, Warnings, Advisories"> - - - - + diff --git a/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml b/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml index c4d00f58cf..f6165748e9 100644 --- a/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml +++ b/cave/com.raytheon.viz.warnings/localization/menus/warnings/baseWarnings.xml @@ -19,29 +19,27 @@ further_licensing_information. --> - + + - + - + - + - + - - - - diff --git a/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java b/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java index 69c11a74fe..22bacfb927 100644 --- a/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java +++ b/cave/com.raytheon.viz.warnings/src/com/raytheon/viz/warnings/rsc/AbstractWWAResource.java @@ -247,6 +247,9 @@ public abstract class AbstractWWAResource extends } sb.append(text); } + sb.append("\n\n"); + sb.append(record.getOverviewText()); + sb.append(record.getSegText()); return sb.toString(); } } @@ -257,7 +260,7 @@ public abstract class AbstractWWAResource extends } } - return "NO DATA"; + return null; } protected void disposeEntry(final WarningEntry entry) { @@ -369,8 +372,11 @@ public abstract class AbstractWWAResource extends initShape(target, entry.record); entry.project = false; } - - RGB displaycolor = RGBColors.getRGBColor(getColor(record)); + + RGB displaycolor = color; + if ( ! record.getPil().equals("SPS")) { + displaycolor = RGBColors.getRGBColor(getPhensigColor(record.getPhensig())); + } if (entry != null && entry.wireframeShape != null) { LineStyle lineStyle = LineStyle.SOLID; @@ -596,26 +602,26 @@ public abstract class AbstractWWAResource extends addRecord(sort(pdos)); } - protected String getColor(AbstractWarningRecord record){ - String phensig = record.getPhensig(); + protected String getPhensigColor(String phensig){ WarningLookups lookup = new WarningLookups(); return lookup.getPhensig(phensig).color; } + protected String getPhensigName(String phensig){ + WarningLookups lookup = new WarningLookups(); + return lookup.getPhensig(phensig).name; + } + protected String[] getText(AbstractWarningRecord record, double mapWidth) { - String vid = record.getPhensig(); - String phen = record.getPhen(); - String[] textToPrint = new String[] { "", "", "", "" }; + + String[] textToPrint = new String[] { "", "" }; - textToPrint[0] = record.getProductClass(); - if ((vid != null && phen != null) - && (vid.equals("TO.A") || vid.equals("SV.A") - || phen.equals("FL") || phen.equals("FA"))) { - textToPrint[0] += "." + vid; + if ( ! record.getPil().equals("SPS")) { + textToPrint[0] = getPhensigName(record.getPhensig()); + } else { + textToPrint[0] = "Special Weather Statement"; } - textToPrint[0] += "." + record.getEtn(); - textToPrint[1] = record.getPil(); - + String startFormatString = DEFAULT_FORMAT; String endFormatString = DEFAULT_FORMAT; if (mapWidth == 0) { @@ -627,14 +633,14 @@ public abstract class AbstractWWAResource extends } DateFormat startFormat = new SimpleDateFormat(startFormatString); - startFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE); - textToPrint[2] = "Valid " - + startFormat.format(record.getStartTime().getTime()); - DateFormat endFormat = new SimpleDateFormat(endFormatString); + + startFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE); endFormat.setTimeZone(TimeUtil.GMT_TIME_ZONE); - textToPrint[3] = "Thru " - + endFormat.format(record.getEndTime().getTime()); + + textToPrint[1] = startFormat.format(record.getStartTime().getTime()) + + "-" + endFormat.format(record.getEndTime().getTime());; + return textToPrint; } From 232ad5409589f1b25b19a8fc7fb067a74a396100 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Fri, 21 Dec 2018 09:38:35 -0700 Subject: [PATCH 09/13] Revert "rm com.raytheon.uf.viz.server.edex.feature, move grib plugins to com.raytheon.uf.viz.grid.feature" This reverts commit eaf5c09761feb4905ab87409cbbcf56ee8e798b8. --- cave/build/features.txt | 1 + cave/build/p2-build.xml | 3 +++ cave/com.raytheon.uf.viz.grid.feature/feature.xml | 14 -------------- .../feature.xml | 4 ++++ cave/com.raytheon.viz.product.awips/awips.product | 1 + cave/com.raytheon.viz.product.awips/nawips.product | 1 + 6 files changed, 10 insertions(+), 14 deletions(-) diff --git a/cave/build/features.txt b/cave/build/features.txt index 8c8abd122a..f3228d019e 100644 --- a/cave/build/features.txt +++ b/cave/build/features.txt @@ -48,6 +48,7 @@ com.raytheon.uf.viz.d2d.skewt.feature gov.noaa.gsd.viz.ensemble.feature gov.noaa.nws.mdl.viz.awipsref.feature gov.noaa.nws.obs.viz.geodata.feature +com.raytheon.uf.viz.server.edex.feature com.raytheon.uf.viz.dat.feature com.raytheon.uf.viz.datadelivery.feature edu.wisc.ssec.cimss.viz.convectprob.feature diff --git a/cave/build/p2-build.xml b/cave/build/p2-build.xml index 377b8e9ebb..eb489433af 100644 --- a/cave/build/p2-build.xml +++ b/cave/build/p2-build.xml @@ -313,6 +313,9 @@ + + + diff --git a/cave/com.raytheon.uf.viz.grid.feature/feature.xml b/cave/com.raytheon.uf.viz.grid.feature/feature.xml index 66e4d4de11..90ab5d3c57 100644 --- a/cave/com.raytheon.uf.viz.grid.feature/feature.xml +++ b/cave/com.raytheon.uf.viz.grid.feature/feature.xml @@ -25,20 +25,6 @@ - - - - + + diff --git a/cave/com.raytheon.viz.product.awips/awips.product b/cave/com.raytheon.viz.product.awips/awips.product index 026c3f6cdf..11548ce210 100644 --- a/cave/com.raytheon.viz.product.awips/awips.product +++ b/cave/com.raytheon.viz.product.awips/awips.product @@ -122,6 +122,7 @@ + diff --git a/cave/com.raytheon.viz.product.awips/nawips.product b/cave/com.raytheon.viz.product.awips/nawips.product index cdecaf3856..cc7d333fe7 100644 --- a/cave/com.raytheon.viz.product.awips/nawips.product +++ b/cave/com.raytheon.viz.product.awips/nawips.product @@ -112,6 +112,7 @@ + From eed5bf6a2a9492f465b807799875279e661e730d Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Fri, 21 Dec 2018 09:43:57 -0700 Subject: [PATCH 10/13] merge origin/master_18.1.3 updaes --- .../GFESuite/gfeclient.sh | 2 +- .../procedures/TCStormSurgeThreat.py | 11 +- .../raytheon/viz/grid/inv/GridUpdater.java | 6 +- .../mpe/ui/actions/OtherPrecipOptions.java | 10 +- .../viz/mpe/util/AbstractPrismDataReader.java | 16 +- .../raytheon/viz/mpe/util/DailyQcUtils.java | 7 +- .../viz/mpe/util/MeanMonthlyPrecip.java | 11 +- .../viz/mpe/util/MeanMonthlyTemp.java | 10 +- .../edex/plugin/grib/Grib1Decoder.java | 69 +- .../NCEP/gribModels_NCEP-7_NationalBlend.xml | 16 - .../base/grid/master_grib2_lookup.txt | 6 +- .../com.raytheon.uf.tools.cli/impl/capture | 776 ++++++++++++++++++ 12 files changed, 865 insertions(+), 75 deletions(-) create mode 100755 edexOsgi/com.raytheon.uf.tools.cli/impl/capture diff --git a/cave/com.raytheon.viz.gfe/GFESuite/gfeclient.sh b/cave/com.raytheon.viz.gfe/GFESuite/gfeclient.sh index 8eddb59d56..71ae5ca4e4 100644 --- a/cave/com.raytheon.viz.gfe/GFESuite/gfeclient.sh +++ b/cave/com.raytheon.viz.gfe/GFESuite/gfeclient.sh @@ -74,7 +74,7 @@ then else echo "Display not set, creating offscreen x on port $$" extendLibraryPath "-noX" - Xvfb :$$ -screen 0 1280x1024x24 -nolisten tcp & + Xvfb :$$ -screen 0 1280x1024x30 -nolisten tcp & xvfb=$! export DISPLAY=":$$.0" #don't use shader when no display set diff --git a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py index b72b5c68cd..5f642539b8 100644 --- a/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py +++ b/cave/com.raytheon.viz.gfe/localization/gfe/userPython/procedures/TCStormSurgeThreat.py @@ -54,6 +54,7 @@ # the TPCSurgeProb and PETSS dbs. # 03/20/2018 Check in Pablo's fix. # 4/3/2018 - Additional fixes needed to enable Manual options to work out to 102 hours. +# 9/18/2018 - Make ISC default and have 8-hour InundationMax grid created when running # ---------------------------------------------------------------------------- ## @@ -84,9 +85,9 @@ VariableList = [("DEFAULT: Typical. Should only be changed in coordination with "Higher (40% Exceedance; for well-behaved systems within 6 hours of the event)", "Highest (50% Exceedance; for well-behaved systems at time of the event)"]), ("Grid Smoothing?", "Yes", "radio", ["Yes","No"]), - ("Make grids from \nPHISH, PETSS, ISC, or Manually?", "PHISH", "radio", ["PHISH", "PETSS", "ISC", "Manually Replace", "Manually Add", "UpdateInunMax (Edit Inundation Timing Grids)"]), + ("Make grids from \nPHISH, PETSS, ISC, or Manually?", "ISC", "radio", ["PHISH", "PETSS", "ISC", "Manually Replace", "Manually Add", "UpdateInunMax (Edit Inundation Timing Grids)"]), ("Manual Inundation settings: Time ranges below relative to advisory model cycle", "", "label"), - ("Inundation Height:", 1.0, "scale", [0.0, 3.0], 0.1), + ("Inundation Height:", 1.1, "scale", [0.0, 3.0], 0.1), ("Start Hour for Inundation Timing", 0, "scale", [0.0, 96.0], 6.0), ("End Hour for Inundation Timing", 6, "scale", [0.0, 102.0], 6.0), ] @@ -728,8 +729,8 @@ class Procedure (TropicalUtility.TropicalUtility): "SurgeHtPlusTideNAVD","SurgeHtPlusTideMHHW"] # make a new timeRange that will be used to create new grids - timeRange = self.makeNewTimeRange(6) - + timeRange = self.makeNewTimeRange(8) + # Remove old guidance grids and replace them with the new grids # Delete the old grids first cTime = int(self._gmtime().unixTime()/ 3600) * 3600 @@ -789,4 +790,4 @@ class Procedure (TropicalUtility.TropicalUtility): LogStream.logEvent("Finished TCStormSurgeThreat in %f.4 ms" % ((t1-t0) * 1000)) return - + \ No newline at end of file diff --git a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java index c1b96c0780..1052861180 100644 --- a/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java +++ b/cave/com.raytheon.viz.grid/src/com/raytheon/viz/grid/inv/GridUpdater.java @@ -25,8 +25,8 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; @@ -64,6 +64,7 @@ import com.raytheon.viz.grid.GridExtensionManager; * Mar 03, 2016 5439 bsteffen Allow grid derived parameters from edex * Aug 15, 2017 6332 bsteffen Move radar specific logic to extension * Aug 23, 2017 6125 bsteffen Split common updating code to GridInventoryUpdater. + * Nov 30, 2018 7673 bsteffen Prevent full queue from blocking. * * * @@ -121,8 +122,7 @@ public class GridUpdater extends GridInventoryUpdater { private final Map> updateMap = new HashMap<>(); - private final BlockingQueue uriUpdateQueue = new ArrayBlockingQueue<>( - 512); + private final BlockingQueue uriUpdateQueue = new LinkedBlockingQueue<>(); private final Job sendDerivedAlerts = new Job( "Sending Derived Grid Alerts") { diff --git a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/actions/OtherPrecipOptions.java b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/actions/OtherPrecipOptions.java index 2cf55ab5f1..7b9bfc4e36 100644 --- a/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/actions/OtherPrecipOptions.java +++ b/cave/com.raytheon.viz.mpe.ui/src/com/raytheon/viz/mpe/ui/actions/OtherPrecipOptions.java @@ -44,8 +44,6 @@ import com.raytheon.viz.mpe.util.MakeMat; import com.raytheon.viz.mpe.util.MakeRsel; import com.raytheon.viz.mpe.util.QCStations; import com.raytheon.viz.mpe.util.QCTStations; -import com.raytheon.viz.mpe.util.ReadFreezingStationList; -import com.raytheon.viz.mpe.util.ReadTemperatureStationList; import com.raytheon.viz.mpe.util.RenderPcp; import com.raytheon.viz.mpe.util.RenderT; import com.raytheon.viz.mpe.util.RenderT6; @@ -67,6 +65,7 @@ import com.raytheon.viz.mpe.util.WriteQPFGrids; * been retrieved. * Dec 15, 2017 6547 bkowal Remove unnecessary adjustment now that the larger underlying problem * has been resolved. + * Oct 3, 2018 7496 smanoj Fix temperature and freezing station size error. * * * @@ -684,9 +683,7 @@ public class OtherPrecipOptions { } else if (clientdata == 2) { int m; - int num_zstations; - ReadFreezingStationList rfl = new ReadFreezingStationList(); - num_zstations = rfl.getNumZstations(); + int num_zstations = DailyQcUtils.freezing_stations.size(); RenderZ rz = new RenderZ(); /* render Grids and MAZ for four 6hr precipitation */ @@ -823,8 +820,7 @@ public class OtherPrecipOptions { // logMessage ("Gridding temperature and building MATs"); - ReadTemperatureStationList rt = new ReadTemperatureStationList(); - int num_tstations = rt.getNumTstations(); + int num_tstations = DailyQcUtils.temperature_stations.size(); BadTValues bt = new BadTValues(); bt.update_bad_tvalues(DailyQcUtils.pcpn_day); diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/AbstractPrismDataReader.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/AbstractPrismDataReader.java index 130d666ea6..f8e683af48 100644 --- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/AbstractPrismDataReader.java +++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/AbstractPrismDataReader.java @@ -39,7 +39,8 @@ import com.raytheon.viz.mpe.core.MPEDataManager; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Sep 29, 2017 6407 bkowal Initial creation - * + * Sep 26, 2018 7482 smanoj Fix the issue with data conversion + * * * * @author bkowal @@ -123,8 +124,8 @@ public abstract class AbstractPrismDataReader { + " does not contain sufficient data. Expected data length = " + (MaxX * MaxY) + "; actual data length = " + xmrgFile.getData().length + "."); - } - + } + final short[] data = xmrgFile.getData(); int index = 0; for (int i = MaxY - 1; i >= 0; i--) { @@ -137,7 +138,8 @@ public abstract class AbstractPrismDataReader { } else { f = (float) dataToImage.convert(s); } - float aa = (float) (Math.floor((f * 10))); + + float aa = (float) (Math.floor((f * getconvFactor()))); int bb = (int) aa; destination[monthIndex][i][j] = bb; } @@ -145,7 +147,11 @@ public abstract class AbstractPrismDataReader { return null; } - + + protected abstract float getconvFactor(); + protected abstract float handleNegativeValue( final UnitConverter dataToImage, final short value); + + } \ No newline at end of file diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/DailyQcUtils.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/DailyQcUtils.java index 606bb4c12b..99af2929e7 100644 --- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/DailyQcUtils.java +++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/DailyQcUtils.java @@ -88,7 +88,8 @@ import com.vividsolutions.jts.geom.Coordinate; * after closing and reopening DQC. * Dec 15, 2017 6547 bkowal Remove unnecessary adjustment now that the larger underlying problem * has been resolved. - * Jan 24, 2018 6547 bkowal Adjust station quality function index order. + * Jan 24, 2018 6547 bkowal Adjust station quality function index order. + * Sep 26, 2018 7482 smanoj Fix the issue with Month in the filenames * * * @@ -1831,7 +1832,7 @@ public class DailyQcUtils { dbuf = String.format("%s%s_%04d%02d%02d", zgrid_file, ztimefile[dqcTimeStringIndex][k], otime.get(Calendar.YEAR), - otime.get(Calendar.MONTH + 1), + otime.get(Calendar.MONTH) + 1, otime.get(Calendar.DAY_OF_MONTH)); num = 100 + (m * 4) + kk; @@ -1882,7 +1883,7 @@ public class DailyQcUtils { dbuf = String.format("%s%s_%04d%02d%02d", tgrid_file, ttimefile[dqcTimeStringIndex][k], otime.get(Calendar.YEAR), - otime.get(Calendar.MONTH + 1), + otime.get(Calendar.MONTH) + 1, otime.get(Calendar.DAY_OF_MONTH)); if (k < 4) { diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java index 2ee5272b5d..3b6ba50ad2 100644 --- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java +++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyPrecip.java @@ -36,6 +36,8 @@ import javax.measure.unit.SI; * Feb 3, 2015 16993 snaples fixed color scale data conversion issue. * Mar 2, 2015 15660 snaples Fixed problem with color scale using wrong values. Causing grids to be all zeros. * Oct 03, 2017 6407 bkowal Cleanup. Updated to extend {@link AbstractPrismDataReader}. + * Sep 27, 2018 7482 smanoj Fix the issue with data conversion + * * * * @author snaples @@ -46,7 +48,9 @@ public class MeanMonthlyPrecip extends AbstractPrismDataReader { private final String VERSION = "111511"; private static Isoh isoh; - + + private static final float convFactor = 25.4f; + public MeanMonthlyPrecip() { super(NonSI.INCH, SI.MILLIMETER); } @@ -115,4 +119,9 @@ public class MeanMonthlyPrecip extends AbstractPrismDataReader { short value) { return 0; } + + @Override + protected float getconvFactor(){ + return convFactor; + } } \ No newline at end of file diff --git a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyTemp.java b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyTemp.java index 81f99d1c93..cb2fb5a436 100644 --- a/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyTemp.java +++ b/cave/com.raytheon.viz.mpe/src/com/raytheon/viz/mpe/util/MeanMonthlyTemp.java @@ -34,6 +34,7 @@ import javax.measure.unit.NonSI; * Apr 16, 2012 mgamazaychik DR9602 - changed how max and min * temperature data are read from PRISM * Oct 03, 2017 6407 bkowal Cleanup. Updated to extend {@link AbstractPrismDataReader}. + * Sep 27, 2018 7482 smanoj Fix the issue with data conversion * * * @@ -43,7 +44,9 @@ import javax.measure.unit.NonSI; public class MeanMonthlyTemp extends AbstractPrismDataReader { private static MaxMin maxmin; - + + private static final float convFactor = 10.0f; + public MeanMonthlyTemp() { super(NonSI.FAHRENHEIT, NonSI.FAHRENHEIT.divide(10)); } @@ -126,4 +129,9 @@ public class MeanMonthlyTemp extends AbstractPrismDataReader { return (float) dataToImage.convert(value); } } + + @Override + protected float getconvFactor(){ + return convFactor; + } } \ No newline at end of file diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/Grib1Decoder.java b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/Grib1Decoder.java index 415de9b3fe..a51001896c 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/Grib1Decoder.java +++ b/edexOsgi/com.raytheon.edex.plugin.grib/src/com/raytheon/edex/plugin/grib/Grib1Decoder.java @@ -21,14 +21,12 @@ package com.raytheon.edex.plugin.grib; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashSet; -import java.util.List; import java.util.Set; import com.raytheon.edex.plugin.grib.exception.GribException; @@ -87,6 +85,7 @@ import ucar.nc2.time.CalendarDate; import ucar.nc2.time.CalendarPeriod.Field; import ucar.unidata.geoloc.Earth; import ucar.unidata.geoloc.EarthEllipsoid; +import ucar.unidata.io.InMemoryRandomAccessFile; import ucar.unidata.io.RandomAccessFile; /** @@ -120,6 +119,8 @@ import ucar.unidata.io.RandomAccessFile; * (like older ucar version) * Aug 23, 2018 7397 mapeters Fix forecast times for intervals * Sep 11, 2018 7450 tjensen Limit decoding to a single grib record + * Sep 25, 2018 7450 mapeters Fix extraction of the record to decode from + * the grib file * * * @@ -208,42 +209,50 @@ public class Grib1Decoder { */ public GridRecord[] decode(GribDecodeMessage message) throws GribException { String fileName = message.getFileName(); - try (RandomAccessFile raf = new RandomAccessFile(fileName, "r")) { - raf.order(RandomAccessFile.BIG_ENDIAN); - raf.seek(message.getStartPosition()); - Grib1RecordScanner g1i = new Grib1RecordScanner(raf); - List gribRecords = new ArrayList<>(); + try (RandomAccessFile fileRaf = new RandomAccessFile(fileName, "r")) { /* - * Limit decoding to a single record, as a decode message should be - * processed for each individual record. + * We want to limit decoding to a single record, as a decode message + * should be generated for each individual record. The + * Grib1RecordScanner doesn't support this very well, as its + * constructor seeks back to the start of the random access file, as + * does the first call of its hasNext(). So, we extract the + * individual record's bytes from the file and wrap them in an + * InMemoryRandomAccessFile, so that the start of the "file" is the + * start of the record, which makes seeking back to the start of it + * okay. */ - if (g1i.hasNext()) { - Grib1Record grib1rec = g1i.next(); - if (grib1rec == null) { - /* - * If the file is truncated or otherwise corrupt such that - * the end section of the grib file is not found then the - * scanner returns null despite the fact that hasNext() - * returned true. - */ - if (gribRecords.isEmpty()) { - throw new GribException("Invalid grib1 message."); - } else { + fileRaf.order(RandomAccessFile.BIG_ENDIAN); + fileRaf.seek(message.getStartPosition()); + byte[] recordBytes = new byte[(int) message.getMessageLength()]; + fileRaf.read(recordBytes); + try (RandomAccessFile recordRaf = new InMemoryRandomAccessFile( + fileName, recordBytes)) { + recordRaf.order(RandomAccessFile.BIG_ENDIAN); + Grib1RecordScanner g1i = new Grib1RecordScanner(recordRaf); + + if (g1i.hasNext()) { + Grib1Record grib1rec = g1i.next(); + if (grib1rec == null) { /* - * If some records were decoded, just log so they can be - * processed normally. + * If the file is truncated or otherwise corrupt such + * that the end section of the grib file is not found + * then the scanner returns null despite the fact that + * hasNext() returned true. */ - statusHandler - .error("Invalid grib1 message in " + fileName); + throw new GribException("Invalid grib1 message in " + + fileName + " at position " + + message.getStartPosition()); + } + GridRecord gribRecord = decodeRecord(grib1rec, recordRaf, + fileName); + if (gribRecord != null) { + return new GridRecord[] { gribRecord }; } } - GridRecord rec = decodeRecord(grib1rec, raf, fileName); - if (rec != null) { - gribRecords.add(rec); - } + + return new GridRecord[0]; } - return gribRecords.toArray(new GridRecord[] {}); } catch (IOException e) { throw new GribException( "IO failure decoding grib1 file: [" + fileName + "]", e); diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grib/models/NCEP/gribModels_NCEP-7_NationalBlend.xml b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grib/models/NCEP/gribModels_NCEP-7_NationalBlend.xml index 94eeee7853..795ac13cf6 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grib/models/NCEP/gribModels_NCEP-7_NationalBlend.xml +++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grib/models/NCEP/gribModels_NCEP-7_NationalBlend.xml @@ -55,22 +55,6 @@ - - - NationalBlend -
7
- 14 - - NBMv3 - - - 96 - -
- diff --git a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt index 8ef011ff1f..d83e9fc9e4 100644 --- a/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt +++ b/edexOsgi/com.raytheon.edex.plugin.grib/utility/common_static/base/grid/master_grib2_lookup.txt @@ -55,8 +55,8 @@ ThP_T170L42A-NCEP-MDL_1073x689_10800-0 ThP3hr // GFSLAMPGrid 2.5km ThP_LAMP-NCEP-MDL_2145x1377_7200-0 PROLGHT2hr // 2.5km MOSGuide -TP0.254mm_T170L42A-NCEP-MDL_2145x1377_21600-0 POP6hr -TP0.254mm_T170L42A-NCEP-MDL_2145x1377_43200-0 POP12hr +TP0.254mm_T170L42A-NCEP-MDL_2345x1597_21600-0 POP6hr +TP0.254mm_T170L42A-NCEP-MDL_2345x1597_43200-0 POP12hr // MOSGuide Alaska TP0.254mm_T170L42A-NCEP-MDL_1649x1105_21600-0 POP6hr TP0.254mm_T170L42A-NCEP-MDL_1649x1105_43200-0 POP12hr @@ -221,7 +221,7 @@ SnD_NMM-NCEP_21600-0 snowd6hr // Catchall that always maps probability of precip over 0.245mm(1/100 in) to POP. TP0.254mm POP -// Throw 1-hr and 2-hr precip on the floor for RAP13 +// Throw 1-hr and 2-hr precip on the floor for RUC13 CP_RUC2-NCEP_165x165_7200-0 PWS64 CP_RUC2-NCEP_165x165_10800-0 PWS64 LgSP_RUC2-NCEP_165x165_7200-0 PWS64 diff --git a/edexOsgi/com.raytheon.uf.tools.cli/impl/capture b/edexOsgi/com.raytheon.uf.tools.cli/impl/capture new file mode 100755 index 0000000000..2d06129e3b --- /dev/null +++ b/edexOsgi/com.raytheon.uf.tools.cli/impl/capture @@ -0,0 +1,776 @@ +#!/bin/bash +# base path to save capture data to, will create subdirectory for each workstation +basePath="/data/fxa/cave" + +edexGrepString="edex.run.mode=" + +xorgLogPath="/var/log" + +# the remote servers to grab top on. Use to get general state of servers +if [ ! -z "${DX_SERVERS}" ]; then + REMOTE_SERVERS_TO_CHECK="${DX_SERVERS}" +else + REMOTE_SERVERS_TO_CHECK="dx1f dx2f dx3 dx4" +fi +if [ ! -z "${PX_SERVERS}" ]; then + REMOTE_SERVERS_TO_CHECK="${REMOTE_SERVERS_TO_CHECK} ${PX_SERVERS}" +else + REMOTE_SERVERS_TO_CHECK="${REMOTE_SERVERS_TO_CHECK} px1 px2" +fi + +# the database host to grab current running queries for +DATABASE_HOST="dx1f" + +# Flags to control what data capture grabs, to enable flag must be YES, anything else will be considered off. +RUN_JSTACK="Y" +JSTACK_ITERATIONS="15" +RUN_JMAP="Y" +RUN_QPID_STAT="Y" +MOVE_ALL_HS_ERR_PID="Y" +# For remote top you must have ssh keys setup to allow automatic login, otherwise password prompt will get sent to log file and script will never exit +GRAB_REMOTE_TOP="Y" +GRAB_REMOTE_VMSTAT="Y" +GRAB_CAVE_AND_ALERTVIZ_LOGS="Y" +GRAB_SCREENSHOT="Y" +GRAB_CURRENT_QUERIES="Y" +GRAB_XORG_LOG="Y" +EDEX_MODE="N" +FORCE="N" +TGZ_OUTPUT="Y" +RUN_VERSIONS="Y" +ACCCUM="N" + +cavePid="" +edexProcCount=0 + +# print usage message +usage() { + echo "Script for capturing information about cave/edex and general server health." + echo + echo "Following options allowed" + echo -e "-quick" + echo " Turns off jmap and reduces jstack iterations to 5" + echo + echo -e "-c \"{host names}\"\tdefault [$REMOTE_SERVERS_TO_CHECK]" + echo " The servers to grab top information from, make sure list is quoted and space delimited" + echo + echo -e "-d {y/n}\t\tdefault [$RUN_JMAP]" + echo " Run jmap to grab the heap dump information" + echo + echo -e "-e {request/ingest/ingestGrib/ingestDat}" + echo " Run edex mode and grab information about the jvm passed. May be used multiple times to grab data about multiple jvms" + echo + echo -e "-f {y/n}\t\tdefault [$FORCE]" + echo " Force a jstack/jmap by default" + echo + echo -e "-l {y/n}\t\tdefault [$GRAB_CAVE_AND_ALERTVIZ_LOGS]" + echo " Captures the cave and alertviz logs. If run for a specific pid the only cave log captured will be for that pid" + echo + echo -e "-m {y/n}\t\tdefault [$MOVE_ALL_HS_ERR_PID]" + echo " Captures all hs_err_pid's found" + echo + echo -e "-p {PID}\t\tdefault none" + echo " Run capture for a specific PID, crash information will not be captured. Defaults to none and runs against all pids found." + echo + echo -e "-q {y/n}\t\tdefault [$RUN_QPID_STAT]" + echo " Run qpid-stat" + echo + echo -e "-Q {y/n}\t\tdefault [$GRAB_CURRENT_QUERIES]" + echo " Grab current running database queries" + echo + echo -e "-r \"Reason for capture\"" + echo " The reason for capture, so popup will not be shown" + echo + echo -e "-s {y/n}\t\tdefault [$RUN_JSTACK]" + echo " Run jstack to grab the thread stack information" + echo + echo -e "-screen {y/n}\t\tdefault [$GRAB_SCREENSHOT]" + echo " Screen print the current workstation (local user must be running capture)" + echo + echo -e "-t {y/n}\t\tdefault [$GRAB_REMOTE_TOP]" + echo " Captures top information from servers, auto login must be enabled" + echo + echo -e "-v {y/n}\t\tdefault [$GRAB_REMOTE_VMSTAT]" + echo " Captures vmstat information from servers, auto login must be enabled" + echo + echo -e "-V {y/n}\t\tdefault [$RUN_VERSIONS]" + echo " Grab version information" + echo + echo -e "-z {y/n}\t\tdefault [$TGZ_OUTPUT]" + echo " Tar and gzip the captured data" + echo + echo -e "-h" + echo " Display this usage statement" + exit 0 +} + +# ensure directory is created and has write permissions +checkDir() { + dir="$1" + if [ ! -d "$dir" ]; then + mkdir -p $dir + if [ ! -d "$dir" ]; then + message="Unable to create capture data directory\n$dir" + zenity --error --no-wrap --title="Capture Failed" --text="$message" > /dev/null 2>&1 & + + echo -e "Capture failed: $message" + exit 1 + fi + fi + + if [ ! -w "$dir" ]; then + message="Do not have write permissions to capture data directory\n$dir" + zenity --error --no-wrap --title="Capture Failed" --text="$message" > /dev/null 2>&1 & + + echo -e "Capture failed: $message" + exit 1 + fi +} + +checkYes() { + local __resultvar="$1" + if [ $2 == "YES" -o $2 == "Y" -o $2 == "yes" -o $2 == "y" ]; then + eval $__resultvar="y" + else + eval $__resultvar="n" + fi +} + +#check if at least 1 GB of free mem exists to run jmap +checkJmapMem() { + CAP_MEM=1000 + let freeMem=`free -m | grep Mem | awk '{print $7}'` + + if [ $freeMem -gt $CAP_MEM ]; then + echo "${t1}: ${freeMem}M free, running jmap" >> $processFile + return 1 + else + echo "${t1}: ${freeMem}M free, skipping jmap" >> $processFile + return 0 + fi +} + + +# runs import to grab screen shot of users desktop +grabScreenShot() { + if [ "$GRAB_SCREENSHOT" == "y" ]; then + echo "Capturing screen shot of desktop" + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: Capturing screen shot of desktop" >> $processFile + possibleScreens=`w -hs $user | awk '{print $3}' | sort -u` + count=0 + for pScreen in $possibleScreens; + do + if [[ $pScreen =~ :[0-9]+\.[0-9]+ ]]; then + import -window root -display $pScreen ${dataPath}/screenShot_${count}.png > ${dataPath}/screenShot_${count}.log 2>&1 & + let "count+=1" + fi + done + fi +} + +# runs import to grab screen shot of users desktop +grabXorgLog() { + if [ "$GRAB_XORG_LOG" == "y" ]; then + echo "Capturing Xorg logs" + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: Capturing Xorg logs" >> $processFile + cp ${xorgLogPath}/Xorg*.log* ${dataPath} >> $processFile 2>&1 & + fi +} + +# runs ssh command to grab top on a remote server, requires auto login to be setup +grabRemoteTop() { + if [ "$GRAB_REMOTE_TOP" == "y" ]; then + echo "Capturing top on remote servers" + for server in ${REMOTE_SERVERS_TO_CHECK}; + do + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: Capturing top for $server" >> $processFile + out_file="${dataPath}/top_$server.log" + ssh $server "sh -c 'export COLUMNS=160; top -b -c -n1' " >> $out_file 2>&1 & + done + fi +} + +# runs ssh command to grab vmstat on a remote server, requires auto login to be setup +grabRemoteVmstat() { + if [ "$GRAB_REMOTE_VMSTAT" == "y" ]; then + echo "Capturing vmstat on remote servers" + for server in ${REMOTE_SERVERS_TO_CHECK}; + do + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: Capturing vmstat for $server" >> $processFile + out_file="${dataPath}/vmstat_$server.log" + ssh $server "sh -c 'vmstat -w 1 5' " >> $out_file 2>&1 & + done + fi +} + +grabCurrentDatabaseQueries() { + if [ "$GRAB_CURRENT_QUERIES" == "y" ]; then + echo "Capturing current database queries" + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: Capturing current database queries" >> $processFile + out_file="${dataPath}/database_queries.log" + echo "dx1f:5432:metadata:awips:awips" > ~/.pgpass; chmod 600 ~/.pgpass + psql -d metadata -U awips -h ${DATABASE_HOST} -c "select datname, pid, client_addr, query, now()-xact_start as runningTime from pg_stat_activity where state != 'idle' order by runningTime desc;" >> $out_file 2>&1 & + fi +} + +checkForProcsAsOtherUsers() { + if [ ! -z "$procs" ]; then + numMyProcs=`echo "$myProcs" | wc -l` + numProcs=`echo "$procs" | wc -l` + + if [ "$numMyProcs" -ne "$numProcs" ]; then + notMyProcs=`echo "$procs" | grep -v $user` + + # preserve IFS and set it to line feed only + PREV_IFS=$IFS + IFS=$'\n' + usersFound=0 + + for proc in $notMyProcs + do + procUser=`echo $proc | awk '{print $1}'` + + count=0 + found=0 + + while [ "$count" -lt "$usersFound" ]; do + if [ "${procUsers[$count]}" == "$procUser" ]; then + found=1 + fi + let "count+=1" + done + + if [ "$found" -eq "0" ]; then + procUsers[$usersFound]="$procUser" + let "usersFound+=1" + fi + done + + # restore IFS + IFS=$PREV_IFS + + message="Processes found running as other users, please run capture as:\n" + count=0 + while [ "$count" -lt "$usersFound" ]; do + message="${message}\n${procUsers[$count]}" + let "count+=1" + done + + zenity --info --no-wrap --title="!!! Capture Must Be Rerun !!!" --text="$message" > /dev/null 2>&1 & + echo -e "Capture Must Be Rerun:\n$message\n" + fi + fi +} + +# gets the reason for running capture +reasonForCapture() { + if [ -z "$reason" ]; then + reason=`zenity --list --title "Reason for Running Capture " --width 300 --height 260 --text "Select reason for running capture\n" --radiolist --column "Cause" --column "Reason" --editable TRUE "Received Out of Memory Error" FALSE "Cave slow down" FALSE "Cave unresponsive/froze" FALSE "Cave crashed" FALSE "Other"` + rerun=0 + + if [ -z "$reason" ]; then + rerun=1 + elif [ "$reason" == "Other" ]; then + rerun=1 + fi + + if [ "$rerun" -eq "1" ]; then + reason=`zenity --text-info --title "Please Enter Reason for Running Capture" --editable --width 400 --height 250` + fi + fi + + echo $reason >> ${dataPath}/capture_reason.log +} + +# for a specified pid run jstack a specified number of times in a row +runJstack() { + local pid="$1" + local numIterations="$2" + local options="-l" + + if [ "$FORCE" == "y" ]; then + options="${options} -F" + fi + + local cmd="/awips2/java/bin/jstack" + local count=1 + local prePath="${dataPath}/pid_${pid}_" + local log="" + while [ "$count" -le "$numIterations" ]; do + t1=`date "+%Y%m%d %H:%M:%S"` + log="${prePath}jstack_${count}.log" + + echo "${t1}: Running command: ${cmd} ${options} ${pid} >> ${log} 2>&1" >> $processFile + echo "Running for $t1" >> $log + ${cmd} ${options} ${pid} >> ${log} 2>&1 + + if [[ "$?" != "0" && $FORCE != "y" ]]; then + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: jstack for $pid failed to connect, rerunning with -F" >> $processFile + ${cmd} ${options} -F ${pid} >> ${log} 2>&1 + fi + let "count+=1" + done +} + +# Launchs a background process for each PID to pull jstacks +launchJstacks() { + # grab all jstacks + if [ "${RUN_JSTACK}" == "y" ]; then + if [ ! -z ${cavePid} ]; then + echo "Capturing thread stack for pid $cavePid" + else + echo "Capturing all process thread stacks" + fi + + local count=0 + while [ "$count" -lt "$numProcs" ]; do + runJstack ${pids[$count]} ${JSTACK_ITERATIONS} & + let "count+=1" + done + fi +} + +# runs jmap in background, if it fails will run again with -F +runJmap() { + local pid=$1 + local prePath="${dataPath}/pid_${pid}_" + local options="" + + if [ "$FORCE" == "y" ]; then + options="${options} -F" + fi + + local t1=`date "+%Y%m%d %H:%M:%S"` + local log="${prePath}dump.log" + local dumpPath="${prePath}dump" + local heapPath="${prePath}heap" + + if [ "$ACCUM" == "y" ]; then + # accum needs to change hprof by date + local t2=`date "+%Y%m%d_%H%M%S"` + dumpPath="${dumpPath}_${t2}.hprof" + heapPath="${heapPath}_${t2}.txt" + else + dumpPath="${dumpPath}.hprof" + heapPath="${heapPath}.txt" + fi + + echo "${t1}: Running command: /awips2/java/bin/jmap -heap $pid" >> $processFile + /awips2/java/bin/jmap -heap $pid >> ${heapPath} 2>&1 + + # Java 1.7 has a bug that causes jmap to crash processes using the G1 garbage collector + # more info at http://stackoverflow.com/questions/20571004/garbage-collector-first-and-jmap-eof-bug + # workaround is to add the 'live' option to jmap to limit the dump to only live objects + local cmd="/awips2/java/bin/jmap -dump:live,format=b,file=${dumpPath}" + echo "${t1}: Running command: $cmd $options $pid >> $log 2>&1" >> $processFile + $cmd $options $pid >> $log 2>&1 + + if [[ "$?" != "0" && $FORCE != "y" ]]; then + t1=`date "+%Y%m%d %H:%M:%S"` + echo "${t1}: jmap for $pid failed to connect, rerunning with -F" >> $processFile + $cmd $options -F $pid >> $log 2>&1 + fi +} + +# Launchs a background process for each PID to pull jmap +launchJmaps() { + # grab all jmaps + if [ "$RUN_JMAP" == "y" ]; then + if [ ! -z ${cavePid} ]; then + echo "Capturing process heap dump for pid $cavePid" + else + echo "Capturing all Heap Dumps" + fi + + local count=0 + while [ "$count" -lt "$numProcs" ]; do + runJmap ${pids[$count]} & + let "count+=1" + done + fi +} + +# runs qpid-stat +runQpidStat() { + local qpidHost=cp1f + local prePath="${dataPath}/" + local t1=`date "+%Y%m%d %H:%M:%S"` + local cmd="/awips2/python/bin/qpid-stat -q -Smsg -L500 ${qpidHost}" + local log="${prepath}qpid-stat-queues.log" + echo "${t1}: Running command: $cmd >> $log 2>&1 &" >> $processFile + if [ "$ACCUM" == "y" ]; then + echo >> $log + echo >> $log + echo "Running for $t1" >> $log + fi + $cmd >> $log 2>&1 & + + log="${prepath}qpid-stat-sessions.log" + cmd="/awips2/python/bin/qpid-stat -s -Smsg -L500 ${qpidHost}" + echo "${t1}: Running command: $cmd >> $log 2>&1 &" >> $processFile + if [ "$ACCUM" == "y" ]; then + echo >> $log + echo >> $log + echo "Running for $t1" >> $log + fi + $cmd >> $log 2>&1 & +} + +# runs versions.sh to grab version info +runVersions() { + local t1=`date "+%Y%m%d %H:%M:%S"` + local cmd="/awips2/cave/versions.sh" + echo "${t1}: Running command: $cmd >> ${dataPath}/versions.log 2>&1" >> $processFile + $cmd >> ${dataPath}/versions.log 2>&1 +} + +# take in pid, output process name without args +getCommandName() { + ps --no-header c -p $1 -o cmd +} + +# take in pid, output parent process id +getParentPid() { + ps --no-header -p $1 -o ppid +} + +# take in pid, output associated cave executable pid if found, otherwise output given pid +determineCaveProcess() { + local RVAL=$1 + # check if supplied PID is for the cave executable + local CMD_NAME=$(getCommandName $1) + if [[ ! $CMD_NAME =~ cave ]] + then + # worker pid probably provided, check parent + RVAL=$(getParentPid $1) + if [[ ! $(getCommandName $RVAL) =~ cave ]] + then + # parent wasn't cave either... continue on using PID provided + echo "${t1}: Unable to find cave process for pid $1, proceeding with provided PID" >> $processFile + RVAL=$1 + fi + fi + echo $RVAL +} + +# parse command line +while [ ! -z "$1" ]; do + arg=$1 + shift 1 + + case $arg in + -a) ACCUM="$1"; shift 1;; + -d) RUN_JMAP="$1"; shift 1;; + -e) EDEX_MODE="Y"; edexProcs[$edexProcCount]="$1"; shift 1; let "edexProcCount+=1";; + -f) FORCE="$1"; shift 1;; + -l) GRAB_CAVE_AND_ALERTVIZ_LOGS="$1"; shift 1;; + -m) MOVE_ALL_HS_ERR_PID="$1"; shift 1;; + -p) cavePid="$1"; shift 1;; + -q) RUN_QPID_STAT="$1"; shift 1;; + -Q) GRAB_CURRENT_QUERIES="$1"; shift 1;; + -r) REMOTE_SERVERS_TO_CHECK="$1"; shift 1;; + -s) RUN_JSTACK="$1"; shift 1;; + -screen) GRAB_SCREENSHOT="$1"; shift 1;; + -t) GRAB_REMOTE_TOP="$1"; shift 1;; + -v) GRAB_REMOTE_VMSTAT="$1"; shift 1;; + -V) RUN_VERSIONS="$1"; shift 1;; + -z) TGZ_OUTPUT="$1"; shift 1;; + -quick) RUN_JMAP="N"; JSTACK_ITERATIONS=5;; + -h|*) usage;; + esac +done + +# validate inputs +checkYes RUN_JSTACK $RUN_JSTACK +checkYes RUN_JMAP $RUN_JMAP +checkYes RUN_QPID_STAT $RUN_QPID_STAT +checkYes FORCE $FORCE +checkYes MOVE_ALL_HS_ERR_PID $MOVE_ALL_HS_ERR_PID +checkYes GRAB_REMOTE_TOP $GRAB_REMOTE_TOP +checkYes GRAB_REMOTE_VMSTAT $GRAB_REMOTE_VMSTAT +checkYes GRAB_CURRENT_QUERIES $GRAB_CURRENT_QUERIES +checkYes GRAB_CAVE_AND_ALERTVIZ_LOGS $GRAB_CAVE_AND_ALERTVIZ_LOGS +checkYes EDEX_MODE $EDEX_MODE +checkYes TGZ_OUTPUT $TGZ_OUTPUT +checkYes ACCCUM $ACCCUM +checkYes RUN_VERSIONS $RUN_VERSIONS +checkYes GRAB_SCREENSHOT $GRAB_SCREENSHOT +checkYes GRAB_XORG_LOG $GRAB_XORG_LOG + +# if PID mode don't grab other hs_err_pids +if [ ! -z $cavePid ]; then + MOVE_ALL_HS_ERR_PID="n" +fi + +# if accum don't tgz +if [ "$ACCUM" == "y" ]; then + TGZ_OUTPUT="n" + RUN_VERSIONS="n" +fi + +if [ "$EDEX_MODE" == "y" ]; then + reason="n" + GRAB_CAVE_AND_ALERTVIZ_LOGS="n" + MOVE_ALL_HS_ERR_PID="n" + GRAB_REMOTE_TOP="n" + GRAB_REMOTE_VMSTAT="n" + GRAB_XORG_LOG="n" +fi + +umask 0002 + +checkDir $basePath + +user=`whoami` + +hostName=`hostname -s` +fullHostName=`hostname` +# remove the -testBed items +strippedHostName=${hostName%-} +hostPath="${basePath}/${hostName}" + +checkDir $hostPath + +curTime=`date +%Y%m%d_%H%M%S` +curDir=`pwd` + +if [ "${ACCUM}" == "y" ]; then + curDay=`date +%Y%m%d` + dataPath="${hostPath}/captureData_${curDay}" +else + dataPath="${hostPath}/captureData_${curTime}" +fi + +checkDir $dataPath + +cd $dataPath +processFile=${dataPath}/capture_info.log +export COLUMNS=160 +top -b -c -n1 >> "${dataPath}/top_$hostName.log" +vmstat -w 1 5 >> "${dataPath}/vmstat_$hostName.log" + +if [ "$ACCUM" == "y" ]; then + echo "" >> "${dataPath}/top_$hostName.log" + echo "" >> "${dataPath}/top_$hostName.log" + echo "" >> "${dataPath}/vmstat_$hostName.log" +fi + + +if [ "$EDEX_MODE" == "y" ]; then + grepString="$edexGrepString(" + count=0 + + while [ "$count" -lt "$edexProcCount" ]; do + if [ "$count" -ne "0" ]; then + grepString="${grepString}|" + fi + + grepString="${grepString}${edexProcs[$count]}" + let "count+=1" + done + + grepString="${grepString}) " + procs=`ps -ef | grep -E "$grepString" | grep -v "grep"` +else + #list of cave process ids to get ps output for + caveProcNums="" + for parent in $(pgrep '^cave$') + do + # the cave process starts a new JVM as a child process + # find all children of the cave process + children=$(pgrep -P $parent) + if [[ -z $children ]] + then + # no children, assume that this is a main cave process + caveProcNums="$caveProcNums $parent" + else + # otherwise, only get ps output for children + caveProcNums="$caveProcNums $children" + fi + done + if [ ! "${caveProcNums}" = "" ]; then + procs=$(ps --no-header -fp $caveProcNums) + fi +fi + +if [ ! -z "$cavePid" ]; then + # limit cave procs to the requested PID + echo "Running in PID mode, only requesting for pid $cavePid" >> $processFile + procs=`echo "$procs" | grep "$cavePid"` +fi + +myProcs=`echo "$procs" | grep "$user"` + +echo "${procs}" >> $processFile +echo "" >> $processFile +echo "" >> $processFile + +checkForProcsAsOtherUsers + +if [ ! -z "${myProcs}" ]; then + t1=`date "+%Y%m%d %H:%M:%S"` + echo "Processes found for user $user, capturing data to $dataPath" + echo "${t1}: Processes found for user $user, capturing data to $dataPath" >> $processFile + echo "" >> $processFile + numProcs=`echo "$myProcs" | wc -l` + + # preserve IFS and set it to line feed only + PREV_IFS=$IFS + IFS=$'\n' + count=0 + + # grab the pids for future use + for proc in $myProcs + do + pids[$count]=`echo "$proc" | awk '{print $2}'` + let "count+=1" + done + IFS=$PREV_IFS + + launchJstacks + + checkJmapMem + let rc=$? + if [ $rc -eq 1 ]; then + launchJmaps + fi + +else + t1=`date "+%Y%m%d %H:%M:%S"` + echo "*** NO processes found for user $user, capturing limited data to $dataPath" + echo "${t1}: NO processes found for $user" >> $processFile + echo "" >> $processFile +fi + +# grab Xorg logs +grabXorgLog + +# grab top for servers +grabRemoteTop + +# grab vm stat for servers +grabRemoteVmstat + +# grab current database queries +grabCurrentDatabaseQueries + +# grab screen shot, spawns background process for each screen +grabScreenShot + +# grab qpid stat +runQpidStat + +# ls users home directory to check nas performance +/usr/bin/time -p ls -la ~ > ${dataPath}/nas_check_ls_home.txt 2>&1 & + +# get reason for running capture +if [ "$reason" != "n" ]; then + reasonForCapture & +fi + +# move all hs_err_pid from user's home directory to capture directory +if [ "${MOVE_ALL_HS_ERR_PID}" == "y" ]; then + numErrFiles=`ls ${HOME}/hs_err_pid* 2> /dev/null | wc -l` + t1=`date "+%Y%m%d %H:%M:%S"` + + if [ "${numErrFiles}" == "0" ]; then + echo "*** NO hs_err_pid files to capture" + echo "${t1}: No hs_err_pid files to capture" >> $processFile + else + echo "Capturing ${numErrFiles} hs_err_pids" + echo "${t1}: Capturing ${numErrFiles} hs_err_pids" >> $processFile + mv ${HOME}/hs_err_pid* ${dataPath} + fi + + echo "" >> $processFile +fi + +# Grab the cave console logs for the last 24 hours as well as the current alertviz database, if pid mode only grab cave for that pid +if [ "${GRAB_CAVE_AND_ALERTVIZ_LOGS}" == "y" ]; then + dir="${HOME}/caveData/logs/${hostName}" + if [ ! -d $dir ]; then + dir="${HOME}/caveData/logs/${strippedHostName}" + if [ ! -d $dir ]; then + dir="${HOME}/caveData/logs/${fullHostName}" + fi + fi + + t1=`date "+%Y%m%d %H:%M:%S"` + if [ -d $dir ]; then + echo "Capturing alertviz logs" + echo "${t1}: Capturing alertviz logs" >> $processFile + mkdir ${dataPath}/alertVizDatabase + cp -r $dir ${dataPath}/alertVizDatabase + else + echo "*** NO alertviz logs to capture" + echo "${t1}: *** Can't find alertviz logs to capture" >> $processFile + echo "" >> $processFile + fi + + dir="${HOME}/caveData/logs/consoleLogs/${hostName}" + if [ ! -d $dir ]; then + dir="${HOME}/caveData/logs/consoleLogs/${strippedHostName}" + if [ ! -d $dir ]; then + dir="${HOME}/caveData/logs/consoleLogs/${fullHostName}" + fi + fi + + t1=`date "+%Y%m%d %H:%M:%S"` + # grab any logs written to in last 2 hours, or pid mode only that log + if [ -d $dir ]; then + echo "Capturing cave logs" + echo "${t1}: Capturing cave logs" >> $processFile + mkdir -p ${dataPath}/consoleLogs + if [ ! -z ${cavePid} ]; then + # logs have cave executable pid or worker pid in the name (-o means OR) + find $dir -type f -name "*$(determineCaveProcess ${cavePid})*" -o -name "*${cavePid}*" -exec cp {} ${dataPath}/consoleLogs \; + else + find $dir -type f -mmin -120 -exec cp {} ${dataPath}/consoleLogs \; + fi + else + echo "*** NO cave logs to capture" + echo "${t1}: *** Can't find cave logs to capture" >> $processFile + echo "" >> $processFile + fi +fi + +# grab the version information +if [ "$RUN_VERSIONS" == "y" ]; then + runVersions +fi + +# wait for any backgrounded processes by this script to finish +wait + +message="" + +# tar/gz the output +if [ "${TGZ_OUTPUT}" == "y" ]; then + echo "Tar/zipping captured data" + if [ ! -z ${cavePid} ]; then + tgzFile="${hostPath}/captureData_${curTime}_pid_${cavePid}.tgz" + else + tgzFile="${hostPath}/captureData_${curTime}.tgz" + fi + + cd .. + tar -czf $tgzFile --remove-files captureData_${curTime} + rm -rf ${dataPath} + message="Data captured to $tgzFile" +else + message="Data captured to ${dataPath}" +fi + +zenity --info --no-wrap --title="Capture Done" --text="$message" > /dev/null 2>&1 & +echo +echo $message +rm ~/.pgpass + +cd $curDir + From 9271bd5950a1c3bb7fabdb0d28806f95165a0e80 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Fri, 21 Dec 2018 10:42:26 -0700 Subject: [PATCH 11/13] doc update, version update 18.1.1-4 --- build/buildEnvironment.sh | 2 +- docs/appendix/maps-database.md | 516 +++++++++++++++++++++++++++++++++ docs/images/gempak-d2d.png | Bin 0 -> 408079 bytes docs/install/install-cave.md | 8 +- docs/install/install-edex.md | 2 +- 5 files changed, 522 insertions(+), 6 deletions(-) create mode 100644 docs/appendix/maps-database.md create mode 100644 docs/images/gempak-d2d.png diff --git a/build/buildEnvironment.sh b/build/buildEnvironment.sh index eed7046075..782c1bec0b 100755 --- a/build/buildEnvironment.sh +++ b/build/buildEnvironment.sh @@ -1,7 +1,7 @@ #!/bin/bash # Version export AWIPSII_VERSION="18.1.1" -export AWIPSII_RELEASE="3" +export AWIPSII_RELEASE="4" # Author export AWIPSII_BUILD_VENDOR="UCAR" export AWIPSII_BUILD_SITE="Unidata" diff --git a/docs/appendix/maps-database.md b/docs/appendix/maps-database.md new file mode 100644 index 0000000000..96cbe0b97b --- /dev/null +++ b/docs/appendix/maps-database.md @@ -0,0 +1,516 @@ + +## mapdata.airport + +| Column | Type | +|------------|-----------------------| +| arpt_id | character varying(4) | +| name | character varying(42) | +| city | character varying(40) | +| state | character varying(2) | +| siteno | character varying(9) | +| site_type | character varying(1) | +| fac_use | character varying(2) | +| owner_type | character varying(2) | +| elv | integer | +| latitude | character varying(16) | +| longitude | character varying(16) | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(Point,4326) | + +ok + +## mapdata.allrivers + +| Column | Type | +|----------------|--------------------------------| +| ihabbsrf_i | double precision | +| rr | character varying(11) | +| huc | integer | +| type | character varying(1) | +| pmile | double precision | +| pname | character varying(30) | +| owname | character varying(30) | +| pnmcd | character varying(11) | +| ownmcd | character varying(11) | +| dsrr | double precision | +| dshuc | integer | +| usdir | character varying(1) | +| lev | smallint | +| j | smallint | +| termid | integer | +| trmblv | smallint | +| k | smallint | +| the_geom | geometry(MultiLineString,4326) | + + + +## mapdata.artcc +| Column | Type | +|------------|-----------------------------| +| artcc | character varying(4) | +| alt | character varying(1) | +| name | character varying(30) | +| type | character varying(5) | +| city | character varying(40) | +| id | double precision | +| the_geom | geometry(MultiPolygon,4326) | + + + + +## mapdata.basins +| Column | Type | +|----------------|-----------------------------| +| rfc | character varying(7) | +| cwa | character varying(5) | +| id | character varying(8) | +| name | character varying(64) | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(MultiPolygon,4326) | +| the_geom_0 | geometry(MultiPolygon,4326) | +| the_geom_0_064 | geometry(MultiPolygon,4326) | +| the_geom_0_016 | geometry(MultiPolygon,4326) | +| the_geom_0_004 | geometry(MultiPolygon,4326) | +| the_geom_0_001 | geometry(MultiPolygon,4326) | + + + + +## mapdata.canada +| Column | Type | +|----------------|-----------------------------| +| f_code | character varying(5) | +| name_en | character varying(25) | +| nom_fr | character varying(25) | +| country | character varying(3) | +| cgns_fid | character varying(32) | +| the_geom | geometry(MultiPolygon,4326) | + + + + +## mapdata.city +| Column | Type | +|------------|------------------------| +| st_fips | character varying(4) | +| sfips | character varying(2) | +| county_fip | character varying(4) | +| cfips | character varying(4) | +| pl_fips | character varying(7) | +| id | character varying(20) | +| name | character varying(39) | +| elevation | character varying(60) | +| pop_1990 | numeric | +| population | character varying(30) | +| st | character varying(6) | +| warngenlev | character varying(16) | +| warngentyp | character varying(16) | +| watch_warn | character varying(3) | +| zwatch_war | double precision | +| prog_disc | integer | +| zprog_disc | double precision | +| comboflag | double precision | +| land_water | character varying(16) | +| recnum | double precision | +| lon | double precision | +| lat | double precision | +| f3 | double precision | +| f4 | character varying(254) | +| f6 | double precision | +| state | character varying(25) | +| the_geom | geometry(Point,4326) | + +## mapdata.county +| Column | Type | +|----------------|-----------------------------| +| state | character varying(2) | +| cwa | character varying(9) | +| countyname | character varying(24) | +| fips | character varying(5) | +| time_zone | character varying(2) | +| fe_area | character varying(2) | +| lon | numeric | +| lat | numeric | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.customlocations +| Column | Type | +|------------|-----------------------------| +| bullet | character varying(16) | +| name | character varying(64) | +| cwa | character varying(12) | +| rfc | character varying(8) | +| lon | numeric | +| lat | numeric | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.cwa +| Column | Type | +|----------------|-----------------------------| +| cwa | character varying(9) | +| wfo | character varying(3) | +| lon | numeric | +| lat | numeric | +| region | character varying(2) | +| fullstaid | character varying(4) | +| citystate | character varying(50) | +| city | character varying(50) | +| state | character varying(50) | +| st | character varying(2) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.firewxaor +| Column | Type | +|----------------|-----------------------------| +| cwa | character varying(3) | +| wfo | character varying(3) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.firewxzones +| Column | Type | +|----------------|-----------------------------| +| state | character varying(2) | +| zone | character varying(3) | +| cwa | character varying(3) | +| name | character varying(254) | +| state_zone | character varying(5) | +| time_zone | character varying(2) | +| fe_area | character varying(2) | +| lon | numeric | +| lat | numeric | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.fix +| Column | Type | +|------------|-----------------------| +| id | character varying(30) | +| type | character varying(2) | +| use | character varying(5) | +| state | character varying(2) | +| min_alt | integer | +| latitude | character varying(16) | +| longitude | character varying(16) | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(Point,4326) | + +## mapdata.highaltitude +| Column | Type | +|------------|--------------------------------| +| awy_des | character varying(2) | +| awy_id | character varying(12) | +| awy_type | character varying(1) | +| airway | character varying(16) | +| newfield1 | double precision | +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.highsea +| Column | Type | +|----------------|-----------------------------| +| wfo | character varying(3) | +| name | character varying(250) | +| lat | numeric | +| lon | numeric | +| id | character varying(5) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.highway +| Column | Type | +|----------------|--------------------------------| +| prefix | character varying(2) | +| pretype | character varying(6) | +| name | character varying(30) | +| type | character varying(6) | +| suffix | character varying(2) | +| class | character varying(1) | +| class_rte | character varying(1) | +| hwy_type | character varying(1) | +| hwy_symbol | character varying(20) | +| route | character varying(25) | +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.hsa +| Column | Type | +|----------------|-----------------------------| +| wfo | character varying(3) | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.interstate +| Column | Type | +|----------------|--------------------------------| +| prefix | character varying(2) | +| pretype |Ushy
Hwy
Ave
Cord
Rt
Loop
I
Sthy| +| name | character varying(30) | +| type | character varying(6) | +| suffix | character varying(2) | +| hwy_type |I
U
S | +| hwy_symbol | character varying(20) | +| route | character varying(25) | +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.isc +| Column | Type | +|------------|-----------------------------| +| wfo | character varying(3) | +| cwa | character varying(3) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.lake +| Column | Type | +|----------------|-----------------------------| +| name | character varying(40) | +| feature | character varying(40) | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.latlon10 +| Column | Type | +|------------|--------------------------------| +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.lowaltitude +| Column | Type | +|------------|--------------------------------| +| awy_des | character varying(2) | +| awy_id | character varying(12) | +| awy_type | character varying(1) | +| airway | character varying(16) | +| newfield1 | double precision | +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.majorrivers +| Column | Type | +|----------------|--------------------------------| +| rf1_150_id | double precision | +| huc | integer | +| seg | smallint | +| milept | double precision | +| seqno | double precision | +| rflag | character varying(1) | +| owflag | character varying(1) | +| tflag | character varying(1) | +| sflag | character varying(1) | +| type | character varying(1) | +| segl | double precision | +| lev | smallint | +| j | smallint | +| k | smallint | +| pmile | double precision | +| arbsum | double precision | +| usdir | character varying(1) | +| termid | integer | +| trmblv | smallint | +| pname | character varying(30) | +| pnmcd | character varying(11) | +| owname | character varying(30) | +| ownmcd | character varying(11) | +| dshuc | integer | +| dsseg | smallint | +| dsmlpt | double precision | +| editrf1_ | double precision | +| demand | double precision | +| ftimped | double precision | +| tfimped | double precision | +| dir | double precision | +| rescode | double precision | +| center | double precision | +| erf1__ | double precision | +| reservoir_ | double precision | +| pname_res | character varying(30) | +| pnmcd_res | character varying(11) | +| meanq | double precision | +| lowq | double precision | +| meanv | double precision | +| lowv | double precision | +| worka | double precision | +| gagecode | double precision | +| strahler | double precision | +| rr | character varying(11) | +| dsrr | double precision | +| huc2 | smallint | +| huc4 | smallint | +| huc6 | integer | +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.marinesites +| Column | Type | +|------------|-----------------------| +| st | character varying(3) | +| name | character varying(50) | +| prog_disc | bigint | +| warngenlev | character varying(14) | +| the_geom | geometry(Point,4326) | + +## mapdata.marinezones +| Column | Type | +|----------------|-----------------------------| +| id | character varying(6) | +| wfo | character varying(3) | +| gl_wfo | character varying(3) | +| name | character varying(254) | +| ajoin0 | character varying(6) | +| ajoin1 | character varying(6) | +| lon | numeric | +| lat | numeric | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.mexico +| Column | Type | +|----------------|-----------------------------| +| area | double precision | +| perimeter | double precision | +| st_mx_ | double precision | +| st_mx_id | double precision | +| name | character varying(66) | +| country | character varying(127) | +| continent | character varying(127) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.navaid +| Column | Type | +|------------|------------------------| +| id | character varying(30) | +| clscode | character varying(11) | +| city | character varying(40) | +| elv | integer | +| freq | double precision | +| name | character varying(30) | +| status | character varying(30) | +| type | character varying(25) | +| oprhours | character varying(11) | +| oprname | character varying(50) | +| latdms | character varying(16) | +| londms | character varying(16) | +| airway | character varying(254) | +| sym | smallint | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(Point,4326) | + +## mapdata.offshore +| Column | Type | +|------------|-----------------------------| +| id | character varying(50) | +| wfo | character varying(10) | +| lon | numeric | +| lat | numeric | +| location | character varying(70) | +| name | character varying(90) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.railroad +| Column | Type | +|----------------|--------------------------------| +| fnode_ | double precision | +| tnode_ | double precision | +| lpoly_ | double precision | +| rpoly_ | double precision | +| length | numeric | +| railrdl021 | double precision | +| railrdl020 | double precision | +| feature | character varying(18) | +| name | character varying(43) | +| state | character varying(2) | +| state_fips | character varying(2) | +| the_geom | geometry(MultiLineString,4326) | + +## mapdata.rfc +| Column | Type | +|----------------|-----------------------------| +| site_id | character varying(3) | +| state | character varying(2) | +| rfc_name | character varying(18) | +| rfc_city | character varying(25) | +| basin_id | character varying(5) | +| the_geom | geometry(MultiPolygon,4326) | + +## mapdata.specialuse +| Column | Type | +|------------|-----------------------------| +| name | character varying(32) | +| code | character varying(16) | +| yn | smallint | +| alt_desc | character varying(128) | +| artcc | character varying(4) | +| ctr_agen | character varying(128) | +| sch_agen | character varying(128) | +| state | character varying(2) | +| the_geom | geometry(MultiPolygon,4326) | + + + +## mapdata.states +| Column | Type | +|----------------|-----------------------------| +| state | character varying(2) | +| name | character varying(24) | +| fips | character varying(2) | +| lon | numeric | +| lat | numeric | +| the_geom | geometry(MultiPolygon,4326) | + + + +## mapdata.timezones +| Column | Type | +|------------|-----------------------------| +| name | character varying(50) | +| time_zone | character varying(1) | +| standard | character varying(9) | +| advanced | character varying(10) | +| unix_time | character varying(19) | +| lon | double precision | +| lat | double precision | +| the_geom | geometry(MultiPolygon,4326) | + + +## mapdata.warngenloc +| Column | Type | +|------------|-----------------------------| +| name | character varying(254) | +| st | character varying(3) | +| state | character varying(20) | +| population | integer | +| warngenlev | integer | +| cwa | character varying(4) | +| goodness | double precision | +| lat | numeric | +| lon | numeric | +| usedirs | numeric(10,0) | +| supdirs | character varying(20) | +| landwater | character varying(3) | +| recnum | integer | +| the_geom | geometry(MultiPolygon,4326) | + + + +## mapdata.world +| Column | Type | +|------------|-----------------------------| +| name | character varying(30) | +| count | double precision | +| first_coun | character varying(2) | +| first_regi | character varying(1) | +| the_geom | geometry(MultiPolygon,4326) | + + + +## mapdata.zone +| Column | Type | +|----------------|-----------------------------| +| state | character varying(2) | +| cwa | character varying(9) | +| time_zone | character varying(2) | +| fe_area | character varying(2) | +| zone | character varying(3) | +| name | character varying(254) | +| state_zone | character varying(5) | +| lon | numeric | +| lat | numeric | +| shortname | character varying(32) | +| the_geom | geometry(MultiPolygon,4326) | diff --git a/docs/images/gempak-d2d.png b/docs/images/gempak-d2d.png new file mode 100644 index 0000000000000000000000000000000000000000..8511ca0db70b8f0ace2d0ab7eab8efc668a9f190 GIT binary patch literal 408079 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

V+<r zaqPOx1!Z7=o;Jgfva4J=)bsbl;dQNNHmxjKe7eLu%5Qs7rQJc^rLFQxvdk6kAe!Jl zJ@u*VyfeRv+rcNfd3GvhHXFy4@-aO9{A6&sD|?(wFTybyH3L#7_U8Z^Wf~+_dDG=m zggr9eR_*yjP5v!SwtZEzVGgSJR)NllFflA}I_YkuG6!!3l3zW^rZdGRm?0*OGM&0&YpnYX!n zbKCjoqX|(~Tr_uh2m$1PvK!5&>D=xN9)35G>M~~`mt|<-@~|bcd83spmSD+k@F3L$ zD^B_agP*a+Aqg~hHHfZ2Sl(0k8B4pY42xY{nB$VY~+f5^#!W^kpd}6DA z^M_8G`*ecTs3dKljFU!wA4@*JryC9ovXcp#>|}gUKvCSy#Xzs8xyvgLtw0I0mP(1?Q3p4{&q- z42jV>ca^^9e~Y~bpn&oc^eWUlNFE(-AQse33gUx;crPK_sT2m7esy@L!n&QA4Cn*k z4+h=uwty7!V}WxohrEHR6K_l6ic=6bZ3Ie7b)v@yk+HMGCSI|lM&!-Chtl|n6%Vmv z51rpx?RIg((>sC);IWF=X2zVt{bZl!4Jhp3U?H z;Dbk^Ak%X7jCRI0Mp+LUxI9+8^s}-Ge&ykCQkkeYx;-ud==*};}glZ53n<0(O|>EKcr&+OaAN&U?u2Z zd-S9^LSf;g|9QdxNv7q0AL8)Gzsx}Z1L5&O$jN}- z{&%|npPvlCzO51-0=JkYL`+o1s7{!Z$<^w-gN4bKVzj?tfn4| zO+T%_!>Frp$uCO5sgxK7|pp$!SQaVzgvDk#ri&P_S>jxK+!42T zyAJj`&?e+a>>fJ%e{#qvP2Dj!;=l_hva6+sBpK=+aV)Ij$F_^9g68%n$vkTWJ0{Z| z zsYoIaHfUpw1vY!yLZdCmrlTIrKK06`T>YAeS0}^2w44{p8W$Xw*?mWj=y4-5v~CgY zZV+RN96b#J(<-c5g`6|gpVM}nG|v*gz!i-eM`4bs zFJ?o|2!bAI6OdMRQ?W#|C>O*QTG$5YVyF<8iH7g9D^qW-8C5u&em}O<`?_=NGPu}` zaQt$S=ovr3g$@w!wvxfG21-E`E5KU)vNG#cMEL}nmcU^pgqz5igc5c^tW=c)`Q6wq zJXNn+TUFewVE}9jQcLtfgW2{p67Ml~ohv$<2SeZ-wQq66-&^0@&pID^=x_)%vM(Tx zVCv6{fszi)c{x*(<0s?_In-3>=R2lG)Wj}|&q&hi*Qrg?vD2ZALn$-H4;Fc;qo@d2R7rt`VENct?Jnwq!r))>0rWaVpuTMfmo1t@@ zmcusA^+S@PkY@8Ce^fYP_G+ZS+u*=)`!x;9J;?rC%-M{EtLQYpa5)x-HkSA<^!jaeODSq&hNaL1Ie=LC(X!4k?kT`tj2;!y zIqhS>ezX<$W;XasnUW_J6&t4^056YUc9>wHJ2vt|ZaV_QsD1x_=;v<~pFn=~0$hLD zwI6{sAoCw-pch+X_QPM$@{?eC0+X<+I~?P##a(kPP>Mx(!p0V>(ZVvgR?%-H^{Hy` z$4KtdUGL=lDm@UcUILp*CY&73vTL277>>?`c&u~D!G^9MqE_(V4wD4v93GrFA%PY&0fj}i z?l8ZlSI4vZIH^7)S9jXDTxCXK{*XRjdqTa6OWJgbs*zSo{hw7WN9OcxoOq%4cM3c-Gf95s zhUrx+GZ2&tuT zZXDmYL&sEQogL@&R+CA32YU~*Y*hCH-2+B~$TpO%*`w40abxty7iyjr`&58D|8>xe z97R&;SLNW@R@J<`?y%uhC=r*CHXQ3lE`og#^2r`YHUG0Y7ki#Wa4fbFjzyx=cl%R|l^@=kMES*LMTHMX^CsmML{Z$j*Ulf+hl z;?O#^e=3aq?gTogZ=3TIph+@ONGI1-md}nT%4oJ6&#NfBy2vFmF?***aH~n)$mP<5W*K zkC|Lb|8e(+?glYd4sIVae1;*ksu#sphnA9rt7Dtx=aTHz4PNz|wdlYDK#vkcB0)klevA7QZ&TK2!2lDSk-i7ty-i7nh8Z6!*5>^*i4 zm~zccU)(bvM2sJl_u@UEUTX?LG6l_qc?vzNJjS0Sg?<`;F3AgeH`gRX?Cxlex&-IxnSDScO$=oeRE|D zcDk}taoF0zs~VSCT%BRH^Z2un8jaKGJfV?o7TGl3vX@HN<0JJf{P_ZjLcv{mYh

    oE=XU0kOuLmFR>%qr6+o+yUt(YS`QU7f%C6To< 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

    SX13 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%0A9DaVS32-| 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 wvI?^2$=&(S^0!~K^ZnEeB z@bS13rj_!oiXmE$?%f6Z!#sb^_HvhOC$GHvKNdM-$ZV9yie(`;d=a@h0h+i0!p67r zptX5a!q4VkuX$I!UAod1Y#ZVb&U{DQHY~t)uco%zY4VeybL7Z3`bm$KrR8zAZa7CC zn>9hYHI-mK#|e4)%BxwA5Z)p80q>n8+)%s_y=sN?l}}w~957Atw^?^Zab9ud7yE^Oq7dX-#|_u^G7*;O@XUh9a{-edEp2YfeXW#IZmkC`BGPH-TD%%z?SGmT`GmX`II3KV}L$|V(e4R}m z%YK`h;(u_eL>E_oaKRwMhGQknXZ!6ZZ!Y|+4D8x^pVDQif0mcpEOIKLK_8^e?f$6C z(#W6_1~CF(aLJ$Y((r5zTj8($Z>L>UW`&O396z`tP!IAiKnwp_hMcP$@DfgW+oDW|B)v6mdr7a3b#5w~Jwx@h z+Xi%YuyO2iU*5&bhwFo9mF?r#p5d@nXuD^zgLax+C2z?f86%5ic9GRJ@}BgQk+MYQ z7h%4H=HYdkD31Sp^dh}VuYzFjCH9CIdrKtISQ5n+u=n1( zqOnGe8jTubON<4LG4>eSKUNS_R8Ro{MUeJ!|M~4P_xA1EyLWf*UirRn7v8tKvoo`^ zb9;NYbF;g0kBPiGToa)nnMD2q;wl5A%~`i0uI|d!d~D1McYi*rnm6dZI;aMF#MHt2 zS3ZjeC8a0A+6=f&zczTMmc6M{i`D6!?;mSWh8UU9mO-thUl@Z!RG*J36E=dQpE@dI zC$6bXpml?c^bPQ^^#$QwOR*_uLu`XhpL#p$>U?h?^k1B?G=T|hec056jc*zlykXYv z_%rI#s$W3fmX}m^)D&>G2S;ODoA^Z$p}2@voP)mosD-CFVIDm+xXQo zO!Uy0+EmN>ZpgCL-7@xeXEY!wi#mJ4e`$RkJ9eF&r>b9;nO{7uhlQ4 z*XQ5Q%aq&M@3a^FcfkYHz11LEx8rVf z=NG>*xYb^^AsJ!fYR`6kbXqaC2uzGF$O~;)-$Xe=vGGwM)#x8-gNRqlZHX(Z^kcNi zW{i=xCXJ;(*y!3c@2Hm0>ScY~tWAgiI=9xZW^^8zBXMtY!2$d17A<~; zuxCvBcI~KHvu3N(ZI#RSqQ#48Wf|Rjby-SH%K!pC#Re^u1HTwvsWR0HeKp$|Rd-aG zt~>qO3Op{Y;8!!Y$#0XVl5N5XGcd+r62l_~Z+h9e=8Z6E^&|RELZ1ZJb}g$3+oH>X z^g2)U5MG&g7j4n?ARgPB)3Ybdr2RL!Kb2^mTlS&vR(u^8VHVYYOBYSuG!?HnMA#qZ zx}E(AkB*OP`TdI7YHy9X%RZ$&dS5_OfB3gT8Pnqg>cUGsHtPIy8ePAWas`hv#OQoo zI++G~v>K`ij(x9NK-jzW2s(B6%XG=dTLiGM1g>LN_ZU25@XI=ge8prfRxWboj4=1B z4Lf0ofl&rOsY`In6~~peT=mxqU*E{W#*(o)4+2bJP2&sXwM}esy`W3ty&G*ouBVSv z{GHUsquMZOgUC^9Z4r4OpDC-zY{p`Ifk8%$G6FMkv&t{wP2@jbg!Ksdp*0_zWWvR; zCvA({E^r2}9C@8zQ+`f(=R^HmlKO1)4(2q_&^1t!A;xU{bAP#qHeG)nZMWaA=;L=k zqYkUJ4^S=~^o2^Rn{F?ncP2khuRQi3ZL!CG^xl-Igp-u8lxg&KV`<9tPXoF*3EbqB zzM0KBWuS?Y17#*%oc2``CrbWG%2DmQYiA6r zUu9sF`8OZ?Dkmq2jv-?;+mQA?75S?vd!?^0+I-*432GDO&DkJx=6URiQ(l7q5vUv7$bRle$e0K#nkkOLCrq@+-8S>{f;*gev*xh z(-ysqZ0sOy)CrRIo3!oK>uhLg(OZ#L<7HCaiH}DFsJ2vWRg7Ff8GKCxMJLaqCe1f(+5>_wTh)@hKjJ_CL_zPYs^}zTd{Tgwp#+XuMG5e+8pK>48rM~{FtIS(vwz=fY3;-MD>%*=`bFPs5{-GH$Av5AuxBLp zYwTMAG|QJqDKlfef9Pr8fv?FMa1#$O z2`B?i6prAQ8ds{Ga5+6*iZoR%MZ!`wj3wBY1^vVpL^rmwB(UnYJ11?FEM^(JVTSRM zwa?DEMlnG7onIWPmL}ymmYxD%ThRNYTnim$qXA4NtEEm9bhL)E$hV{X??GZjEei+=ui<_4|jXqxKe*Pt&@VE8&MdV#J zt-#|7{Z#L_Xph-pSywgBa)(7`qVE>^n{M8<-$13;gC3lr z;yZW~L_KV|=g-xtN~1>%55Sx4whw(Y?USMpn1G{tX^*m86D_K;Z`+_Cy(ks(p)o5?hYbf#-lQk}$u8W3}mX|Sn`NPOLW<^t*BS);c7GGC|*%zCVyK#E4^mHCn*mYzSrZElDf4TNTWN9q4yU~ zrk{47NF8}!uEPi3PtzB@O8=b8u4^fSTu+;hrA%iHyrgZ=>1#bL%x6hob8J7JUo-Qa0fQkzOuLY%nQvvD1Ll zKuir_vtC9m`0R%%nB*X=qFyS>?lI34>=65m- zSlfz~oAt-dC*d203%FTk=HtkNzSO*~rPsUlNbl;=-zc8QH>+zATkmn|0S>NxQW>N0 zqsrpSRE&pN-myhbZ&ZgJ)emJz@7n7uZ^GcmRk~lBbyDdKyv(}HHbj+2m9duq_QOsk zmnlOf^Kr)t$Yg834OUEky-v_4;gJNlm>jOWwEil6zE=9Z-j^gTahz-I`c`TEA&!n6 zPUF&XrXDeT19Jbcf9;YogI^xD*Jj38|`8GB@xkh2_Dt29jJ`7LF z)AA3at0Y|7R%+iVmA;Z~j#C$o{oS(b!St`WH_~!%NkFn)_oL~>Z*QY|Z&?7VWJ2$A za_yq(7yM$laq*(+s>QM-?fTFB+!9q=TZ-w>MiT~uTv_r%J^0$klO5}qK#_xuFtlTj z<7wH-9|cqpn>sUPZC=-k+VjTM*bq1@M77Q27sewgJS)CYvg%AJqt)vxh5!#wF#rHS07*naR2#;_!L!joHN0cOB)9d;FkAmC^CxXu6z?crBA<;ujZA51!sOe!+hM#1!a_cYB;AQ4VSG!0+w`RK6MgD1 zJzb2xSa}rxVzjy(l}JM#kvENOLZ61V675S`$K*Lz(HNevZrA;&JkplU+VY+;mj#>k z<`tGPllIyayB=xzma(asu}0gX+An?9tT2kk#Er`1WSqtI3#=$v)nPI(W{hdY{de;& zzviVfTM~N!ndB-jvf26uj4*4gwl(eA>rA?0+O}5uD4_6+!l_i5Tz_eARJ}HwDEjWL zhR|;Y+`~)VdMmbQH};D`o;_sfq@mB#rF;#t2;dEu{E7YIag%FcYZJ%cF$TsLJiT>Po6*uejJp&o z!D+FgfkJ^&v{>;X#oe`dA-HRh0!0eN-Q9{y&=z-!1=j$Yx%M|ctz!1Du<3X-1Xk<{YnC%Uj<1Ym=6}Q)V!h&C!nE% zVrUBS_7OOBzmGd|r{k_9zKOtv(%t+Fo09Jx8~ISarZHOn%3bT1x>Zr*jGV(YHyQR$ z;$CHf-1KqL%oo>mzaS=ZXj!7h6A7p=K4P0Nc^0Lh;*)br_PlH2%g%I{5z5Ox5`^%= zTioi|v;V9`heZsPMc=8BX1VafdLjEe;A5GVc>J1OZka9Pk5_VF;OFUqP;ENU%evU# z1X%4FGpm)Z*bJTY{M_}6hY1|~cjRKZ;vWgT3Ej(^Z zrInU2LDl>5>v?l}NVAuchT8 z+Egs+X8Y6Z!&=9zwc6VLO)6D)uF3UpagwTdzg=o)n8HT`t<~JJvBWPTejU)u2Jbs_ zd_m*QQeWhN5rd)H2a7>>s}W6w4%)ufh2?ak(uS;Uw?I@4_BPpU+%v>kqMk46wtkvQ zIXOC*C%BQO4!Jt@ilGuAh9)B`w@MisX!53le%PD|Sje@3ACa-3!d9B>*0GWEr^Z&3Ipcl=U#;$IMc#K+!!0hi{Ki4Nd6`;KeMQl+%4t zk7)HN73}AvbR~8ThTV;#VLX+@Jhbm+PtHkow3~p+v0oca?{r2e`p7ki!My(rHkrZg zpT$FHVm@17Hv8hSvHp9y3-;)n44j^u@zNsAxeZ`wavpE(O5Tq-SYZb&bM!*wNAt}+ zHE;rT6_pqUf2Y)QA%is)J($W0&oKWhZdc6xf!mOB_{|DeMFi2PKcVA-SS6uI^{Sc( z7x-^)!%WauFscrp2IPdz^}IfL(bWy6y_& zD~m?ikun|<+B`l_Oy_hfPD&ENw$*k%mV5U z)V_L24kJjGNQP1#N)1)w|IPf{!%E4C0>pv$id|5f#m_g zektSi%(xa0Rs7c_T~70?;=QcR<>3;@m?f|o_)Fwr?z4XH$(sF(lj$Qciu2!Twf*R& zG>kia70CdMeKJV;2XTog9^)Akee_$$H8wdg?=TaJ&c5HL_HL1c(j%n!_bo@6Nwv+} z!%;J~A8M)0MlIK(UDi$f)iJ1Yr+1a_-uP=(S7aoV*DTf-zF97`dTqk}4_{$r^7Hv1 z0R7H2XM_Ix5y@O};f*OdP-jF^!9lE>*OMzeLq24KfwVnA#KUgis z_AU~wCP#=dC@{58-sOw0ap{gs=U037sJW1!cNvm;|Xj~`#{_?k)#bu*WPX)zH@^#jl(08kC zvA@498T}Sb0Cd&qwoI9@Sh6R5#HcO4U&= z-zeKc*?f)K&{Ve6PVK+x6Fhk zFdR8`Xk}A%&YCj|C)4kG>qYLD&6`E?@Z_{mfaoBWX< z2xE5Dpr5v$e3jlVyb~IHID9C31qj)fkzEe30VgMfSY^ z8_NdfYD;V$^<212;<4dc_-#nfYgVu1TSS}=N+xnUd>gacGqcHRlnVO(t~|#E8QSg? zCGe4f@WOquki+iTzes4Pk&2%#vrVP;ds0Wu2fZB_j(da7^~r_y9bF33OLVZE_lOyc zvG;k@$z$p$xlyzOjtriilIzV~i?C?86!g0;AK|Yf_%@ns692 zW&0MwB6k|L3NDGEWl%;V<#}^IWrX>yM)&04AZ0s*R+?>RUS4|U-pv`;$-_|MonG3= zL?Gp=+9KO-TiaCT>9wO+%C*5GUXxT!cT23ik^c3LimgG-@)1ji(58r_j(eKFqEJ9H z@gD<0X)*VH_N^Z{CSvjO83{jRO}=*(U)s-9qBHmg3N$&aWzZuIXVI8cy2#rM%T7jI zM~m_i_F8)Jp*cz4UZ;iq-JStl{+Nveyxm3)rS^xMw3w%SZ=J3`S}2?L6xv1fLD2Qe zE%_l~Q{*#b`$@(_0s@2EE<38|DthRnFACP9+@vd@rDxEzurEWJ@>HfW!LDFlJ7m7? z?AJ+`I3mY(LYARI9lT;&#C7DoJ_pnR&Nig_NtO`!D%1_((sJId%l*13*z4~6eiL`+ zK0hZCK;r?pbZ#ooDr@4xI5zBV`_z=&|> z@_Eh{(v{E5Uv4npdHa;V1da#58Q&G`cASlrcr5lvTq;N^QGmO>UVbsh4iGfu_sYB} zi@RO1%9*OTd>)8+YS=$_=E^4kBS>eH>qc?DS%8F37OE^r(Qwf|2{edR<{UrnKGB zPqAzaGSQobm4$UH4x#6R4tabQ;wKNG(Zs^|A(ToV&i;oc?d&bP_wJZEtwr4AYe8o} z{u=0^9hurPxy=TjooAQAjD|BgouJQlr`g5l+V4!NYCcX+V(`a{rN&b6bwY9CB`bSH zbi})ane`-`noGfh`s%T5lemtmPP-Mm3&pV#YM)Z=Uz2*;KK5Wl+6c+n+(#O(wH)K@ zo1qY!RM3fO5Y^&WY3hX=pY~g*3dK{J(v!T7@=Eg?ZV&IL*{da*-OHXA{r7W|Weh~x z5ZYN5q&&pn_pXs`r>gH{)b+~b7UB**@0Bn)6l*LXtMp@{J|P{=aqgsLwqediP*+6< zi`jdCF>H<% zU}s6LPx%2E?8-PW>i!HvB@?0v=#>myueCjl(%|c1e%B#WtE^Qhfl{dA3SjP?y9@sN z(&N434w^x$c|7wMaHsjpg+O@|?mJ%M)3;4EsEW|H3cG*rKNGV@De zzArdTecQlY1S8GnQ7u6=jD=J_TXi&&%KO+eeDPR76#S#0D`HsFBUuh8 zEQM><_q!t;1G}w73vwZU`kqeB^d%fcD+Y{8mga(td!lBM{?wGQhcL}rves3t;b9oU zhM$oHi|Ui5`j{Tyx6%CVz3$9Z&=RnaAsTDkEx07QVdDp8!keYBk?ySaID1VCp4fKd z;;y_%-UnW9i#a1*-`_}-0~`K3y!z4725}PP`{lBZ>mYFbnQ5LMu!by-%~DK5j!5}T z2jnnTkC2=Xu~Vpg#6gLhn8u@$>UR_C2k? zr?MziWmd_l{preTKKjdyBQ&6!R#TIK>zrV{gKHGdy_&cnH%U zKOxfA6v^a)oHom>v9mht8TpoPSe1$_$>0C&mY8>q^K!QXuy+TSQ z(OO;I%0pcX+}-8@sy(3>5zSs5Y%N@Z z=01HbP`%e^(GESRX;7_KBrjs(l={f%;r?$Cw(}Zy={+2WaNnZKP=|&qM0V=+F$iaZ z1olHDhV%=n)ajV;Th^3N>MF6jF?G;DxV{$gfUHuNky`I;E2I~ zEM7XDAy>N+)RJJwcQ3pL_8t90M?L7sIjexuiXxMTx20Ssl12C&p@~HJN-Hi-wY-SR z%~QZpPDOc+5+7;8O7NJ2mF>)SU zF1T^OT$9!_GRpHxU#-}vDp5h0d;WI&&ja34BZ)kz1u=cmi-jCTy(C=*l(4^8$!`Y~ zumHb!VmP!32U8vuDL7zi*04)80PhWI6IrV{1OB&tC;JO6;e*Gh*>c2PjKC4U$ zIr27YR8ChBQnJXlW)y3`t&vFa?%Ybj+~v@ z!@Dvn-~H%+N%ctm=v(a8q|?mWwg>msGX3#`d1W~!PGM<2bwZ`a_x^NfQt9$E7n!fPVyy!LLF6OP-x*ef>|wHzEKGa z0dEpm1dmRp>~TiU=Ro1FGKAkoBx0Gq{{<1uAWpPrd?nI!z^~lF+-fG;xAEhri-H8{ z`@Ut%-vM?WtXEoZAy0y4W6-{3{5$1;iV1EGK{;TvgiSBnxUOAksY?>S>Y-If3rraxm8 zHS@TSvVOzr_)*7|h>GZT|EQDavZ-J;k_FrNKYLM(3QDbnAC~DExr=-qo-<7Lxx#n)dH9Ab*}Nqv{060*wig`1Fjxpobx}EGccwUbh`b5Qd=M~CrMSQqvQQkXLJiQO zho0j`ikrV=hW)*! zg#-wipkA6ZvSWjJ(5Q7ZonQl)vaPbydJqYz6~B3AD^Fy?iQ z<5hpCe}fP2@vXG{XVZ`f#7!{w=fSOEZr$l>NgB?Fjy6%;eP-pQ1I9KQ%P;%HTuGEM z#R~S|%yd+#;0D0{$&l*JZPKuWj6gvh-ez$Jqxi@+;d;i+9INQB>$0PQ0GCQqXWFUFF(NafplN zL%Xo<@pMvO_?hafG@dV)0i45Ox(QvwuGdOAtum?>sZUwhX7NXMl6wtA^!Z0H-YL$~ zl@J-xf9J!0->~roEMIpaeA2S%IO8O0^v)l9hp=G5tlyKjBsiix*q*9nXQ}4s&ozB+ z8l@7aG`NF6?u3Hrz9%TJa8Nk3L+Go1ZQi1>#n9)8Q=@}Mi}*r+VhPsS7wAmm+Wb$- zWM4<9knJUu8hs|{qY3x`j&M{x=SHFhY!4;08Uo*mskgtC-pMHglmHN}WGyI)9`66`Fy8RvK6IYw1k2fj8ij8_vfXwTZQ4=LefgRaEu({u=|Uy{ zUNub{^0U(&dz-pwL`*`4OGVhkldye zB;*RM`{yh-IgJ_f{lmzj?8kAxdT%p1_Uxa$=`j7hT3pL_8b_TGr5qhZf*PlsYvxhjA<{%nv7Xj(d=M#7N27-7z*`h z)z@g(cjwi-n{WP6E`KTR_{ri^QuEQt^uhS`k(FN2RXcRH)@QQCg2lvXk4^CWQH#g zFXup2{DRl{b9dL;(X+Si`J(NwCJKqo*xQqm=jzdUJ@>Hk%Tkl)(SG8$``({cOhYU< z8+tL;2cMceeO!E8{CloY7qIKk(7lO98+b<=h6mnV78zE&F@6)vk>&&4!1-#CaOJ?| zp|yv~2lbnJRog?Obm|M>t)tGrX-dc@1A+^RjIz!EyL>W`(o=6C&`Ft#9PfSbOW ztf8X;3eHK9J5;2}d>kJy*)hNsnMxb@Q93hc7MOiL&0HfLOW)hN4YyoKo>6i-8l>%a zTHqv#pJeH!_-XF?laE?plqmvxtj8*ulY`wbV1~hb=Gm{sC@Pz=eRJ!QobWnwO6YKI zhr^l>i{~SsX!!Qif86(f&9V~p4zG_`r|(iZ+f1QcK{`3CdjnF%#*+|VagneRju&t-iH+@z3lvgFit!#%sbG7 z&rNRgd@*j@`)Pl#G?!E0Mg2w=ed~vYm_g>Dhr$fF|GY^ko%eD2a|oF-J_6Ev9GO&+MjC-w6!xHE5gLzx_Zs3&t84epM$P@$nPC2~lqm(Mq~g=nl6E z$BX?!v`@mOhTiI0BjYt@VdrUbo$_k+AG~zhtqxeVNmnG<8nw}|J^uelwbYexe?kyo z*4{#`?DjKH#p6+yen+H}kfD}&ViXxkUcL85YGA;;dH~a;W>Wums?RZ@$&II6=g?-R zSP>`SnI5c)f*x@je#9dciC>uqiEA<&_R(jFuOIIxLrrD}&B09=$vekyBr1 z=O(S*#qmxX!w1bDxrpLn4jgqIvyoSAkX&s4tQh|4FXeyitQ3@V%D%PvAOnIJtnCbZ z&>udeyl6W0jbU$@jN_z_Vsaf89DLv-O5DXw2h3 zJbYfZ?DRx?uSPo&@sbGG^(1E+^}Vm{a(AXoKB44j@kN8rL^ht^G-lfLg8ME`3{q(I zzf(fpiDepguv{+jX!F!5;Cx3Z<(sUGf|j2WtvLTfV*ssQ8hcgtKl&H>Lsj4#CA>sj zEkm(kCA0U&*QQ~2NTlfCsEC2ZDT1Q=6}8#6h>S{VRa_HFf$==|{yX&P`*eVXy<96E z?(0X%^5lDRP=m6|*1*S#%b9~h!$=Axn<<^xxy{jESoZ4ZgOHNS?Bv~a+Y4@1`KkjR zcjko2&eNCdevG5Wlgw5JnO%Jw3t{bGt0ze-Mzi(|6QW0=yQ`n zPs(_ia8&Hx>yU1{G*|fc@z@2Jcg|K`x|~cdePPk%UE#mojHtMy*9&jRBG@zjA78Qv z)%Dr0NVXfRjx63zVycj30wc*G;5PG(rh<#gvfCc#tIYRPZ@eQ0s$gkM*|3`0()nT;meiv^+f*$0M+Bx((WWq5+1g|qR)?pL5#?L5 zc!h6a_M5HWWu`~zJGY8|JZlLmm8N^*Xwmfb(5S+`y&LtL8muIMM16qvVMGqITZ#_T zNSn>qC|Xy7CjDPv+9bd@!MqZtHtMki-=m!tX19B~$Owz` zVKL2^-ZdgB{9fTCU-S2wEG>{-mdBc~hh`VpplWF$3)isTHwo!b`edBow4ea2(eg1} zA+-As(m|KQ@X>#{Qm@ROMn=r-am!d!VDy_>YC&DQV-k$lt< z>8j|2O6Ynt7V!C_2r4?`ql0oPbKanl*o61#8K5`nE)GU{s^b64nu-fhL4r%Hej3&@ z5u$rR{WG#xCa~;ue_UzN@)C;UlRCqqA}$45?LdGi?wS48Xi{OBgs2*4hZSc2t;khx z{vH}L;pcMkdY`s166=y|w&_k2dg<81$GFJImURvo2FZ75BW`QcDPich!l}-+fJgn< z0Ot8~4DD0hU)LJ8M7wmUF~Cj8Bu&M7i;1ZF86{M;YGIy)#-&8O*>Elhe z%*~oo<7Py-Vc1QA;yaE&m4nK8fl=#O#|qZ}szN3&9$XQw>P{9cWpv4=ZGh+P4!0m%{e% z&mJFWoL^Km|6Jddjdc?~>yVx;CY)+NBJF$1#xJOmSa z0eb-#b%AK%GqFSE_w|yZ<51$`8#Ir*9`ul%A?Hq6_?XFVf4-Y7@D!?JYzCCF_)u2W z!rFeNoges|IqUt}Z_>*$3*~spCOZDToMQC1<>;Ywg|?1t#E?Xks&KGv%fG1V){nrt z5(b|r9H%7L$q3KqN146sOcUhr1sR*{jL?7nLL?CKFky>>zHk|UbWFI{I*Y!qQ~vt% z+H=P35QCb>?WW9vp|r;sx3yizgPskEKZ1Qq>}K(N;zI%sG#X<=;x>0152^&by1%zb zph!hEk1racSAx%K-nH%u$4oONz=x9k#tn%kN&IVe=bAR;h9qf?yEP;vHShR?jW(9$5uL(3_dOZP2e?uzMA+H-vfMmLvX-_f4Omd6$%=m@=N2 zNm%bQETVB`9O0NEGCfc<{G+&w%Z~BBuxZz~K;(G8snmg@gCR?3%cus44n}+a_`&17 zwXKrzaZPBwmJILr+Y#p{zl*=Z{b!+~>^K`5)k8wYOJg6*H%vOd{rTj0RP86Kqih^_LvxQ3o+RbIf327)g;_3W5&bltg7WYXerM?P|zPVe}-KzUOP)_z; z#oXY&z|?7F_x1@U9q^cYG&=%}d~jsO-#%LV7g?Z&PVDrO3hw>>17*GX$IV-dXo;aj zj}*r@7X2DMH;*^&SNL>l`=M@~#@QYqVu`GTgsxEWLg=fwC$Dw?yVkz-m(TDLapG)C zEX0eBUtZT^i{7LubtI7ci?IhESGBrVuX~of)*sxA4s71%*P?E(dT6j3lDFnT(!V; z3{Ji7L4-!2j_`QG&ubx=clGtJdiviXaYdk+ydJDyY&2pk#BF19nVd$+3HqiQAAyO8 zoMk&_c-mNq^-YTNC|?yU#_JkrUFf-ClNdS2prcvS`oJ6S*sNEryuXN}$qVtj&Io+Q zjUPZtY*KmtEHKb?cJzi`-icolfW}gHpmlYSqnV+hWZycIZa)Up$^FzUr*wB=@}NXMOI)cbpw$coL{^sr1l&>k|k3X}#ZCDDhYh zorm8v{4M?y;3e)4gR8=K|8*B>|5={iLWIM25}Y+_I#rpnUzEaXib^#0N+2`4dpqJY zTVs2el<8Ui#Hf?K_z`S!9@7e4Uf@#-^-n(t!`Ng7k|#qLP3T-zB=p@)4ktHj!fGaN zx8ji><+#K+$Z1av7xO`sFS@q+rEyH&UDd>i1R!S)HC`6Vg9c$r!gYK-)Yt3l&-Dp? z-4Ef&Z*2CepZ1VBnOnr-X`1+@&M(HG(t5k)_6e@MXwto6O#rrt>M>^DzMx^z+Q7Ab z5kd6lYDh(hWeYbK5B6X;&n3zEGYDJC$cTuLo*~if&%0>vY4z*Lj`t+X8eFwz8vcV= z^hjB4PX*?ygT({Q!F&9gqJLgDuJUoOec)3M!1GB4(E{&~?7e@OF@%D{H>%M(7Jgi- zoc{Mo7q3IHF-{p)7kV z3rXGJNIbuv3a3P5OTr!`P5VE-u;dCC!h|uKa#@9D;=!zaA6z8}fsEeNeFo@I8Z>xJ z!0kde0`wqju=&cppYU!?T(q|smnm~#tqrc-5GM*Q92@81JRSU(gqv$_uHlfuZ%K*pD!)}N>kUZ8aa|=ClJbX4u>&R&Z+NIa~XQ63aJWJ6SsYG^ps;#dP?a{nphgLDPiK7#2aI2JqIZ z#cwEQcnmV>3+?b8*oZBPv$FP3aRruiiEB?375D`eD7g_yQ*)@7m zk1v}5Y`i^iGGzkiQvhja(VYQ)D!U3XLlKm+_{3-dz1JI3nmjdt^QiZ?roO(i*cX^L z;bXvy0sI0l=L;Bx$xTczrLSL`#NnF@?*p(sc9(Tu1Ew)wGq6n~5~TLgCa1eOZknRY zBjn}6*Bt-h`-wn5x}WrX9T?25UtwIRbif2$Qw^QE)^vIB%@zM>zpAMD?T&b9zhk6c znzx7~(3;9J71)}X$wq=obhv>VHac`3#RnQov;I{Qt;sc^^s6I5;#%zE26sr!aECH` zA_;tp1pQxuVTXC2sQF}Ip|K!2$iPW9`;>yo%GKP@Y)I$sV8&mK+b?`UOr=L!)ZC*D zgjS5e1K#0TZWcM?MbsQx|AXPx`~MI+XI`(S17Xu``*Lk&lL;e$r?GoE6aH80-wYV8 zCjxg(MSHc4Jz859KjrNYGDQ%^qe{SbaNClQ&-gd808GeIe*E_X{+JBwKqTER^!#m( z=-Qi5Ap(eoKP`p6KNkhS9PGSL3|RMQ&9Lr|>ih8g@KF?8(6Oxv0>tQmPYIcz#UuP2 z6Id^Zq31?kcUQ}z<{P*eOH05hK3st4QybAZ*C1y92ln^&^qnRyJ8{zFvE< zJ*TMb=dYJh2kSYaVC;{Pwy!l= zh=`p9esyIrx&-f-eOvVbjc7iUHQ1+9#S*(AA*4xo?L59Z5f zdlSU-d8(x_dggnlz`KVl$cgHFuY!I*4sXZ zd*rY00I{X?dB#Cf&;qCqiY=H4HRyOPdYa@4?2Ls(6VsE9ssO5_H}=J^;UdWwJC z7J83?dV^!y`h?d180w36^YXN=mT`?2CKKEu`#uC*1e;BA)jA|O;~uf0vfvsdwqT*L zPf3dbX9kV6W)!M=H|0*4J*U;WTrbJkUbebEt(k10hV6|UlAR*-RJv|8}o2Bt7+dWvY0nMj=9m%;bFBb1{%gAfE#MoI9;NkXnH~6 z>Y|{Lx2%SXlYp^*-V#(z9`cqC>(38Qp@a%%erQCnx-#z6(^qj^Y$Ra&Mjg%^KChq zNW4fr62*qlQm4kdJiah zMPDJeK~RANe0Sv9#ga?v6ra3mZd2#sMnS}H!@m)#|AE3(&D%cvLY3nUFUqaY*jN%C znkx5E|K}Oq&}f=2k7d<|H>T#OwfCLxltG(RAJC~scG-ZIulWbjHMT`F>d!Qgcal@q~!N#QX#nN z0B6(vfhYEhemjMZN@mZXb4&@0<9`^&dNde*r*qHv6KU>$&u>n9a5a8VE1BH}w~%yD zP2JQn;1j&&4U+wprBx0w^`5$abK6UU<1czhF0#%95rQmQZdf_kuakpIgpCNL2-ryP zC%pra`$G&nfi}yh5l$9J+~qwxQd`^dG8?ruXJZQeOa(CH(w=?yorP-8_Lv~@azEy$ zd07Wnp?`EWQY~=yA^Pd<5r+OjRjG_8MMZ&pMIN$}57WQXLvirXgW^Bvw*WWc0AG(J zlO32~&{mPVriqgU0{D(ZecX3RzZrc3#2f%${YLX>&4S8O@|=$HTlZ3d-M{NUnNz=k z|KaGxsfOJexoj%7Z^~)NYgsIj87^)9<;v#U!bGQ5rma~eSgytou8oKN#P_F&dae;x%+&bfdYF?);2{D-4a>1B z>JKj;Ze$&!U5`wF;jane#`OJy?j9yN;+3zNE6AcOo$QiV29BA_G;({Kb^t0<9C9z8 z;Qkl+3?_s%@ou2OTs3JTxXoI(3}#P00e7p7sc6V6g?I?XQbT;*0BQukH*0TeFbaTx z2WHKO9>4UXV9^x=NFdm{maa9*+J&sWpN_Tq)OxzF#ygx#JGP$W4ar?MZ^Nx7PR(V6 z$YkEky%COCNO{MR@I+XE5q}Wj3Q!^#3}uR`&PyF>#lQQ`bE6w`PECW^PeVGSP$2QD z2Y}vBcZv!Rcf)Xe7`s2hK$Um5U^4I?FjXethx9P9+8fF~hYm4{+L`K77)FQUSuneF zZ*&FUn6<_6zQE4Rw*ZlX*LlBL9K1?(H*eFV1@-|{>hp!A!C$z~gS|8G@eyMm0Yn?2 z%TCHpKRt630=#+fxG&!V%mhy!lzd#~6*4ZXS)~DH-wr{fXOz6j^v@CUB9#A)CdzYB zLE;1cFQcLc!5BrUN@7hfk9-s>ehWKs6nC48@QCxO zBGxPBaFOk}YOs&@a)Ic*hyZ{aFG&wE@EC^|5+xJ|F#8-2+-R~4J1^pX!0!hipK0jo z)8TZ`!15EKb+md0wi0#bb>!xZyiUqRF*g1L?XcOQtzHv@*7qUIt~m7#tDLsuy5ATc z%-<_$TSddHXkZ})&-FXT2CLgvM8xVV!1zYwyO6Q)%~p2!wy|c?TZ=44KbRTxD=Gbx z$EoX@QGo<$Lsfm%pPP?T+E|DFtDRspL`Ph{qU8id!w3twwCUw^99%%f`C@tzT<}mz zE5FVG<`-CG-sOxvpI=7+HW-zEZbQvX$itus6M-jv3l6Pfp$k_>sIZ}Ohj@FE7B+mQQN&8G|er4_~ZOLE6Uerbu77;Vy0yj@s0E7qBgaw z+)myHEU#(L$4gj9a%Kxey@=j3=g^#zta7G1UXF-z9Jdy96OhWI#}4U>{|M9)Ai!vq zaLq~O+!(gtBJO)z;Xd)F1{0bCZn$G1l)xrdI3@{2DFA;(xyn0#>f0wq$3l>Fq`z<> z5X|9_@mn_JP2B{7EA|Tk_Pcs|)K8bZ) zf=Nq@8`o2^&rZw_cjb%t`n$@x(f{c#YwG1tS$`(s*mt>TNS8@I3qZC`URl6mg}Z)dKr*8=P6qx$&<`X-`XZif1#^b6gJKyq8_# zBTwKnx#DmYJF1^e;>018NL;+G?uC~0t ztogn!&Fn7Z5blO?_+9^02MKOt2q(s-VXzCw`(mo?6Si;Qn$sIE`j@p34jDs*HR&P* zx+^)echBcU+lFT@V~UXMdHicZkj#$LkdE{kD2G7jVP3a?k8McDm(vHd7SmP!HQKdm z$>HN%tVP+*az)o5Vnb6N4G{nBB`DYApyXI3-(#5P1`m?0jYsTHEbN9+F&R@0T9WEf z8+DNgl8g7E@Xksn{27y)wm=S(Wk59<#xNG0QU}2;HvcF+lM{H`GHi7E-0|*9d!YY9 z!LFNxM1w*~_PvuQ(L@BZOWzu5!jhmBpb(1LSOh4)1hz<{u$ebey9qp7dqGP(@`r3W zqiCpSv%{lS*dj{Gz}atqGelQx@p zhTAP$*IAqRqSj&!AVi%?x=6LHdud~*Zi=y|^HQ~&eyv5}{L5qb5YwZseHrBqZ~W%9 zbyv;46O{KbVs-yHQ4{h-&=kXSi(ZoI6nEngN}m%!zL954rMBe$`9KZwS}<{Uv(D(# z`M_g>U;}pkD74jKDt6$lwq!)DF9|{(v?$Ecv5ml|_q|{j5xv1I!DI{R0itpc;`^^M z3b+c%psy1y7{|`j{MpS-oFv-KPuT2-AV zI0ts~zeJ=S{u2YYUwnI``3x=gtP!4C1Cc?1;rbEvP8YA30dc|ZY)F?r;+5yurGmQIZHA`+^DHIgODg_xSEz$48 zmodRQFRpcZbxZ=ziP5^Y(I}OKec-U(#Y{AjIrOf@e(8_TKk+B%{V;#@0G}1RlO{MK zlFB0a|CWmz% z`Kzci#GS^o*fsR$8j?A^^t`*)bBjk<#%#B*O{#;$yf-M&)r6@`YM&##$HM1g?$7}t>cZ1f?rAvo^=G&Zgeb0~^eKLdT?W=TX9&y#N z3AmvhY|9jI;TR;~n1u`RI35dm9C%SX_5M0)D$O-tc`wpR<#y9&A9Vr4M^+-KjyyYj z@k|~KqAuD1cO|#lr@Z;Mm&44~svBRta0FD#EV~XSp&jtHHgitD4-5p(T>2W5npN_ ze(|C(o|@1xRS~q8M((DkGE{#2mX8jP0L7Kw+FT$pP148~v`IqS=@{B1uX+Ckk}6^B z-X@ZIwgFWwR|eyO|AVF*=tBR9Jp zB0udQ4wHCVv7GHXDlb_A@ac;FUQKWVg=ri?cT?ClW;2<&DtH~Get+63W=;*0twNnL z3%dj5a3Z^Auy{aieCL8>RKxVAC1>5Iua6r>=qV=(=W^JZZIYwcbua9$epua~lNJT8 z^eQn6-t{Xr14KSEumaN`HZdt&S|y?3Us6dFo`YB3vYMnzuGWqah`^VcY;Q}$L9Z<& z2r%?6!W6K17Wdz(p3zIS# z|IvUhFhfiJbAch8y;Ys>wg*X9zrqq{rEblBkkxC8S6YJ{rJS0~@Ht#Kyz`*#jqAxNow^VZYd{})sptK#b~a`{$4P3TM5 zKoa|j=*AWxoHyd#0PnDWtzEFuBn&lT_yZ#Lp@A_F0VnsM3@{iCC4dHf&xE5~%J@ri z;sBnYM_u5p2PuPWm@q*u$R~NhHQ~^QZJ!nB3wlcu*z-+ofQ$PZ_p%;v9dSJ|wZQe1 zypAJjEKy=_f*@c*DU(nEVyS|TBk;H}#u=G>qhI6Rum#*df`@WUw{%?Ghq!lf|KXmM zAaLZ(GTi4dG~oVbFO|F?WqCj?1A~LPXOTIU;$9UTltmd^fGcCHR3qah#ypIVVF6<* zaBX8~7>x}M`E;X;;GhkAf`Dfv?hmQUhx&hUpP5s67;NxaPQ2hS$_`?By_pV*?aBXskoQTb|~1!XkfMG-Kb})Vf26B z|DA@k+q}uN+ch*B4al1t{PU+?g>9benzOBcS-;Y+0s#}`C= z^}|IAa_uuzWUk2sNo_NAkvz@hAH@~cxWhqkJw#t28 zYCl9@C`S;vYUN%jM;jearvayd>S+MSZNrQ3i~nrkKhrW8ldCkZVaM|ax$w@1$^j~L`j4bl$b zBM;&$Mt#ZkPUa;^IbW;|I_*sd^t+K;wvz7o;z+ez33NiE^Aecw%`(>O3F8}9|MuN~ zM?>3hMza@8qxCzne;kKCZAMYcy0&!Z7l+c3`zBv%mvb6$8mI*gM2)e*vNn$&ZXBZCiQ=>+s;)Tn4GkxeAx0iF5?89R zzdZU_dTjEu^y8`pX-k4LpK=ns@jrh}?9x?>%#i< zU$5gH^Z^@Z>OI~%pUp645FG)ow?&7WG)eNpvlM=_mwrqG+O9|IcHAwfx>xHpsCivW z1*`l19|eY(V)aRRls<#XT%u8F07jUtyZ)A5UvNJk@%}okvD!9`s(r38mDhlbCuwRf zg*Hunj;1^sNaN8Wd%&cjEl(?Imuo|Nc~2uRj4*h&IePG;bk;{B6JHD&OR{+HN?f@k za2jwLXpkC6HCC~QUmChJG!0Uzn$Y>Pa;?CYltCP2wh8L3mtRDq*BEXiRj@;jKZT}# z@@Z&!SixKGy&o81!f@iiZ4Vz?JHX54{Q~2Rz=clN3FrilG=f>)pA7~hSKH1nT=jPa zZzTh1GTE~5ICt9C2O!^kG{&UcR$F#1)$-_u*)JsNAXUTKTyv4EKY(D8)UKq=6V zSso|<-omE{KRuMPS#KP<^}1ZTacQ7^^DfkbH-Cl^M#2a-#_0V*;9>n*%3a(vG*HSH zAoMHOk1E?ww&`{Ry)y4kTJG^0pcDaKEwZs7$jv-pD7V2)*mvLa<}ourq`JOqf-DHK zp`DWlT-_UQ|k54f(PpGQ>zj!v^f@@3@;*YtP$lhlH8f?zjp;9yaozlsrU{w!pxG zpnJlI(M1)+{3HCr(7*Wc9l}o!yjibWn)J+^YjkkpbU9xFM3}gB#KjZ7)r$4LATkuY zhJxqf#;1YR+pI|&cG`#Jv@P@xj0{tL__y`cBUH=kIlpf=G3-8l67W{>l*QYbYVAV5DJdqO@a1sViw2=K_ASF&F!3iSz zDN0y!gi{!>><9r)zBut=@eiA+HTFIxBGVGW#k;)!(p@yF8@S6o5YTvOUytX$26TtDY?&nHftNPqq7U&~cZ zW_%xh_+k30Sv&G(f5~4amPGF5Wg20gdg>`!XPtFu%$PCs-h1yw%JeTjzk0-o5ejGP zt+%FW)BGi?0KCj+Ru3LLIFcTP8*Q`^KbvRKn|y}+>ikgNfX}D?x`@pJa&^U#SF6IB zd@l8O@&$!qQ>IMele0ST(b{Y9a%5g}yedqeKAqnW+A6u0@(Q0+h8SUH#_xVK#ROG7 zkB18$D2Vm6{*ciPE@F^@;JOD4@`5LP0Bh*sPhTFv-Z;5EW5U{lHY4bI3&RyWp^Ua^p7Ib+89Jf7!@8ZU-f%d$A)4H8@r%o+-cEkaDIko3ad;7Iriw+-n zAAR}byK3JUT??)c>Dq8X+{TJ!F-aD{(3MLF7I%8oI~gq5RS$J1$`7BsLL z57wA~Bd*oZna{-T!)GhE!#Uy=2ua5&5eY`3Ewut5VA#l643nwK9fRq1g@O{7o1U<+D_K^`P}jP!)}y3j=CEk+kH zxS%?u5zI1ytHO-`U|*OvOZd&M3cowbhUYhquTC^g!d!~#ldB`r)q%|O3F;D{1 z@PvUuxKqpCbnPcQt1(Fwgz?CYNurI)#5?vljxPRqbK0`&K_yoRV@$CC;|x4wiUpjm zM6=$fHhqUF)TV5N!OOS=c}dq_(4|a|ikpV zMbzvnaT;h;8hGfThiKPbcU1os}gI>LQ1x6Qv z<;Ay5UI@?of*(Hw3Sc%ofhECz`{}={v&KPV`|(lLs_qY;pRCG93>};&%f~PMQ^AJ} z=${9NEHnP|f-39ZXLXM!N_jsvuJA`H2O-U!bS+950phtrHUixlR(t&Gh@_PW!wh4nD_pTj1&zm^p32$(_O@lrJ zeY&wPxlT*zhud{O%KKT*)4W#A+IknS`LV~|Z+X|F6y90Ts+SJDY$Sa5%A)RC;34mV zrYr&v(@PlKyZhxR+gaSpg1kfBDN_26)$A zd#%D*ym+yaalwKGc{Ka%vrmAFesc58H|Le_w%cxb<+tB{yDHy#=baV&&O7hS!{2eo z9aBAr*a+i!D_44KfbrP);ITJMUcJ(XWlWU3#5(+qH{MWfU4Q-ctvrP0`RAYamM>rK zZMD@_9($yCbLYyevrZ9W-c=l`k7-RC(XNeXZr-#ojPpeSN*hOOZS_ zyeK^Oyzy{dzWL@GkG)_NjF%}XUibqzd%-9;d&Veun>KA!zA7Fu2TnMF+O^GJHo}by zf_TIH;>h2rBdTY7$&0GBu+L#fDfrBcQ?>BkgF5(4K zPEVHt;TiydCkIN(a(@lc`AeOsScmKC(s6Wn6pe}J@=gOb4WMs@^*bG3`d}PfozA73 zrUu@Aq%{p~zXhHB(I`52z#SzkLHeICa{W*=Q9RzR`_a_4Sx0(y?j+t6pVtC$xOmN+ z=Y?>nhECO|p;ZF-o-pZ7n~*j%q?lj4195F%LG|(gu>mC@zuqosj}D7!j>jHV@PPS# zh5xRLG2qOP{JjvO=v}PkcFd_f0lBFQ)6pQqHIHc-wdXUC?imdc;WI)MHaOQf9(kzOb)eIC6@& zT8r-L*(Z9ldBmWs6#e0aA&OqTP{<325$kmPQkv?Eq|T$3(`nl$bb4It?JPyUA3ylS zyJXGj!TV+BmVLawZPr#EGDvr9(JQjQl~T8(jlP$iej1m4;&{Zs6Gprl&N=5C4_**A z+;D^PZdkZ*p?Aa)N2vSp{PWNE#CzrR(@$4;z{L;VC`TWCba3DDo-}#oz+uCQ;(6$y zhblaHSnx#NW5bDpA9KtxDi0Wb;#mPtm?cY=D4fF%J52F?^wCFE9^M(eWJvK-o+}FK zd2F-^cs>2}(>`?WtU$iF{rsQ*$12M_jmvtEylHOebS`jA|=s(8e( zk~0nb@}$0KODxRsPGow#*kFRM$0nU#W~R-rXpqAe1W(E(Z^O+Rrq^ZaDeJl%Kc|6O z*Fchc0AJ4a`={31=H#os2G;4g3q3je(nvwjr^5PSoc<;_VLT!$Z$gFJcRz;rce;Z; zVHOAa=A}ti4Tw&yg%LpY*=AL_p4Rtz(cwBP9Y^4{FNRXq&|`klR!xvLrfE+pv}x*# zL({t1YTU;b@mnX}!TkU^(cU!jg0B6*4d{|JKcNN7XDWur4SAa1X`55K=3NNsg}i6k zmD9JA>RjwJ;51N14Zynvzw^#JPo1vB#uhsHNFiT>JYqGB;ceSJz(=!{Mg8%z(}((Ku1w&c-O$QW&HT@bobqN zD{q%y|N7SikC@$e-#yRk1q7(`fd?K?c*x^KrUf6qL#+oT_qyAD%gw=pw%d0cEnBus zrQ`mQ@ll=)ap_)o;RUr}E-y<`ClvkUCqGep(%__|O*h>%@ARa&Jj;Q{%cYdZ6gD8X zdCN2kLyYZ()@E?A!IaX+@ZZUH^(QgN=p3S6=%lP#FVIrIF0V^F4LA+hHQ??SyIvgB zt^u6P^ZvrgG-v5_n(!1G<;Tt=Y{+g4u5a12k}Zrqljy$-9w5XBV|$)LE$iCR4m~EQ zWlGP^xt3OV{y_ny)(oSHZgA1l;B7OyMAa!1`6!%*R3=7=q%YjkMtNbEe67T7nsuOa zN4!gIns=m$xaTtnXe-_kF^1IjTRY&0rAj!y`kW~_SWxH^P6JK@W!C@BVR4*#`vcs6>ZNF!dW9C%e_Iarj;GT=gVccBvz5Ld8>F(F(5W=AcE_FR$NKN7TdM)|^GzO6Jbu#k zH}v}h|3>Y)*3-UMZ9(5I`z#f28<9M3T%WdShv>Pv*Hf!za@?nQ5(8IH+iBB4bz_Te zh|%Fm_{zIjwcoLl$ZW$EBMizKdRwG@Xw%Zgb@b;WJJG_~&6E+&Y+G8Rlhom2rvayd z#;JiTue_3YnG&6G#u;?iU3UeIyylu~)SfN@poSANuJh8QlBJYq9T;u6&RVhg!T3_^ z0ejf+x+S%TjVWuWAqI%%1H~k6NO|2bql_{!4KTJg%8M_`!d`w&xJ&?b8sTH&+UiUK zgAr!0)i0vkW*p!QF-a8Xa2ve_M*s0=+qAf0bJIw zl6UZ3usr_&i?UYem^%$P4diJ6ONrp=a{cw!t7S?srr5&87hkOKZoT!^pcotbPMI== zc&`|0-@d)_gn?HLCh7<SBc~IJbX9e#OLmO_mA-(m~->9xv{{mK6mc*wP5tb!=_~D0n<*&Z_s#>D7(MB5) z?+KGvmPKa7h!OPh#~%})(nNehlRBOo^{Y>XNM zEUp(!R9j`zW!-K;k2$i8tX@h7;`ba_Oa)5^wOU_Kd*^ML13A zrkie3bl4jPd&KbOy~?n1$t9Nr{4fbW@x&8@JQ7!3brr#Ag8<`ZGLk^XDt?7I@-Jn>H;-WB(T^6B<3{&3qNE4nw+08e&W(l#-VRa$FuJ zzL}59Ck$`L9>>%DvnJB;_FIObIJnb5lh;7j_g#}$s8c{94alSn6FqtH5LjGBt`Eo6 zR3Y9oye|wk@695>>jhph_+{Y%W0Ohxh*=iZXT*pQg=6wdnvbfZob@J^GY&r5a^2Xj z{=QC3FoD81*%f1r@Ws7&>6+~ImT>@I$l-$1fYU%_Gynq%etM8R_Jx6=1{3ZH6D9;l zSi=Z|Wk#}@F7Qq`;RMA3MiSiv0-O8ZcH3>L3^*{lz(@iE3<8Wm@C3ne)4EXxW!Osw z_~XWn3-AGlp#=f^&tL;y$hY_2dn*|JfIp7Gj@m?5-bDhUgb6-1N_oP-7=t}qaFjHk z(nPPk@=793A_qKT5agKdu3ftZd@8a33k*4Cz>(Dwh7TXEj4(JZTLQdc)IK``u*CiP z^`lv{X65y7S`*yI}K{LF+Kn7&2-p+d+5HI6Y0w( z|7%E1aI!iLI1M-rG&&7n-bBa=5(HfYX3o1Mq6W&lX@{ z5hDxAVVDuG738r@NjAqtUV@1SxQT1xz=+eLMT@|=g1l}(fl)^cFH%o294viWzI?f$ zDiBIAg1LF(~GP~@u3t_oXoFM$b$7XPu|G`_tt}6W1qZxG>y#b*P z{S+$HA+*?xcqMSPfRm+QP_dN(P0BTrAPFN2_IZ&2BawazQdoI0xbui<1O^y%3f~B` z3H_UmFmlwPbQTvo4LA)r4LA){PXo5)N+OLuF_xDQDRXhQ8W2y0ti6dU;T4ls6MFvw zk5c;>=p~rE1zxLhR2Dl=@82dBHHU^UgafW70qV@ekT!i!D@I#|ca8a)6I5)b$w>fWyY~ zFj^4802398mFu*{ykEk~O}I0}=vr;S=^c7Zq`%BMf#xs&vH`ckiS9JuG~hJQG&LZT zT6wvUd|GXk(*q=}Ox2{z+W1nE4!kU6KXZ-O>6+*r5h zpO&u7|LUAp#w6D&Z5@uzX~1cq>1d!*V|uv^Ft#hDzc)$RhF6QQ{|Df&U<-`{OP>G$ N002ovPDHLkV1kXVxU2vG literal 0 HcmV?d00001 diff --git a/docs/install/install-cave.md b/docs/install/install-cave.md index 642049eb16..69f57147d4 100644 --- a/docs/install/install-cave.md +++ b/docs/install/install-cave.md @@ -1,6 +1,6 @@ ## Download and Install CAVE -> [Release 18.1.1-1, September 20, 2018](https://www.unidata.ucar.edu/blogs/news/category/AWIPS) +> [Release 18.1.1-4, December 26, 2018](https://www.unidata.ucar.edu/blogs/news/category/AWIPS) ## Linux | | | @@ -10,13 +10,13 @@ ## macOS | | | |:----------------------------------------:|:--| -|

    |

    Download and install both
    [awips-cave-18.1.1-1.dmg ](https://www.unidata.ucar.edu/downloads/awips2/awips-cave-18.1.1-1.dmg)
    [awips-python.pkg ](https://www.unidata.ucar.edu/downloads/awips2/awips-python.pkg)

    **Supported Graphics Devices for macOS**

  1. Intel HD Graphics
  2. Intel Iris
  3. NVIDIA GeForce
  4. **Unsupported Graphics Devices for macOS**

  5. AMD Radeon R9
  6. AMD Radeon Pro
  7. AMD FirePro D300
  8. Writes and syncs files to ~/Library/caveData.

    **awips-python.pkg** is not a prerequisite, and CAVE will still run and display data without it, but to use any derived parameter functions such as wind barbs/arrows and grid parameters on various vertical coordinates, jep must be installed in some way (it is assumed in /Library/Python/2.7/site-packages/jep/)

    | +|

    |

    Download and install both
    [awips-cave-18.1.1-4.dmg ](https://www.unidata.ucar.edu/downloads/awips2/awips-cave-18.1.1-4.dmg)
    [awips-python.pkg ](https://www.unidata.ucar.edu/downloads/awips2/awips-python.pkg)

    **Supported Graphics Devices for macOS**

  9. Intel HD Graphics
  10. Intel Iris
  11. NVIDIA GeForce
  12. **Unsupported Graphics Devices for macOS**

  13. AMD Radeon R9
  14. AMD Radeon Pro
  15. AMD FirePro D300
  16. Writes and syncs files to ~/Library/caveData.

    **awips-python.pkg** is not a prerequisite, and CAVE will still run and display data without it, but to use any derived parameter functions such as wind barbs/arrows and grid parameters on various vertical coordinates, jep must be installed in some way (it is assumed in /Library/Python/2.7/site-packages/jep/)

    | ## Windows | | | |:----------------------------------------:|:--| -|

    |

    [awips-cave-18.1.1-1.msi ](https://www.unidata.ucar.edu/downloads/awips2/awips-cave-18.1.1-1.msi)

    Writes files to **~/caveData** (in your user home directory)

    Requires Python 3, Numpy, and Jep be installed

    Requires **PYTHONHOME** be defined

    In addition to the application directory, the MSI installer will attempt to copy the *[gridslice](https://github.com/mjames-upc/gridslice)* shared library to `$PYTHONHOME/Dlls`. If the `$PYTHONHOME` environmental variable is not defined, *gridslice* will not be installed. You can always rerun the installer after defining `$PYTHONHOME` and then check that the file `gridslice.pyd` is installed in `$PYTHONHOME/Dlls`.

    CAVE will still run without gridslice, but certain bundles which use derived parameters, such as [isentropic analyses](../cave/d2d-grids/#isentopic-analysis-270k-320k), will not load.

    | +|

    |

    [awips-cave-18.1.1-4.msi ](https://www.unidata.ucar.edu/downloads/awips2/awips-cave-18.1.1-3.msi)

    Writes files to **~/caveData** (in your user home directory)

    Requires Python 3, Numpy, and Jep be installed

    Requires **PYTHONHOME** be defined

    In addition to the application directory, the MSI installer will attempt to copy the *[gridslice](https://github.com/mjames-upc/gridslice)* shared library to `$PYTHONHOME/Dlls`. If the `$PYTHONHOME` environmental variable is not defined, *gridslice* will not be installed. You can always rerun the installer after defining `$PYTHONHOME` and then check that the file `gridslice.pyd` is installed in `$PYTHONHOME/Dlls`.

    CAVE will still run without gridslice, but certain bundles which use derived parameters, such as [isentropic analyses](../cave/d2d-grids/#isentopic-analysis-270k-320k), will not load.

    | @@ -25,7 +25,7 @@
    -

    1) Download and install Miniconda Python 3.7 for Windows

    • Allow Miniconda3 to set PATH and other environment variables.
    • Ensure that PYTHONHOME is set to the Miniconda3 location.

      If PYTHONHOME is not set, the gridslice Python module will not be installed or available.

    2) Install dependent Python packages

    • pip install numpy==1.15.1 jep==3.8.2

    3) Run awips-cave-18.1.1-1.msi

    +

    1) Download and install Miniconda Python 3.7 for Windows

    • Allow Miniconda3 to set PATH and other environment variables.
    • Ensure that PYTHONHOME is set to the Miniconda3 location.

      If PYTHONHOME is not set, the gridslice Python module will not be installed or available.

    2) Install dependent Python packages

    • pip install numpy==1.15.1 jep==3.8.2

    3) Run awips-cave-18.1.1-4.msi

    --- diff --git a/docs/install/install-edex.md b/docs/install/install-edex.md index 214f185c72..1dd1cfaa9c 100644 --- a/docs/install/install-edex.md +++ b/docs/install/install-edex.md @@ -1,7 +1,7 @@ ## Download and Install EDEX -> [Release 18.1.1-1, September 20, 2018](https://www.unidata.ucar.edu/blogs/news/category/AWIPS) +> [Release 18.1.1-4, December 26, 2018](https://www.unidata.ucar.edu/blogs/news/category/AWIPS) | | | |:----------------------------------------:|:--| From 458f37654f29456f9cc71955cdcfb9efa92e3028 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Fri, 21 Dec 2018 13:31:13 -0700 Subject: [PATCH 12/13] remove cave/com.raytheon.uf.viz.localization.edex.config/plugin.xml --- .../plugin.xml | 62 ------------------- 1 file changed, 62 deletions(-) delete mode 100644 cave/com.raytheon.uf.viz.localization.edex.config/plugin.xml diff --git a/cave/com.raytheon.uf.viz.localization.edex.config/plugin.xml b/cave/com.raytheon.uf.viz.localization.edex.config/plugin.xml deleted file mode 100644 index 7b0faa2b66..0000000000 --- a/cave/com.raytheon.uf.viz.localization.edex.config/plugin.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - From 3d8cf5e249e3e478f62f215e63aa3420a8226961 Mon Sep 17 00:00:00 2001 From: mjames-upc Date: Fri, 21 Dec 2018 13:31:31 -0700 Subject: [PATCH 13/13] grib wizard cleanup --- .../viz/grib/wizard/save/GribWizardSave.java | 4 +++- .../uf/common/grib/tables/GribTableLookup.java | 18 ++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/cave/com.raytheon.uf.viz.grib/src/com/raytheon/uf/viz/grib/wizard/save/GribWizardSave.java b/cave/com.raytheon.uf.viz.grib/src/com/raytheon/uf/viz/grib/wizard/save/GribWizardSave.java index b442ecc59d..f63272218b 100644 --- a/cave/com.raytheon.uf.viz.grib/src/com/raytheon/uf/viz/grib/wizard/save/GribWizardSave.java +++ b/cave/com.raytheon.uf.viz.grib/src/com/raytheon/uf/viz/grib/wizard/save/GribWizardSave.java @@ -61,7 +61,9 @@ public abstract class GribWizardSave { GridModel model = data.getOrCreateModel(); String centerName = GribTableLookup.getInstance() - .getTableValue(-1, -1, "0", model.getCenter()).toString(); + .getTableValue(model.getCenter(), Integer.parseInt(model.getSubCenter()), + "0", model.getCenter()).toString(); + if (centerName == null || centerName.isEmpty()) { centerName = "UNK"; } else { diff --git a/edexOsgi/com.raytheon.uf.common.grib/src/com/raytheon/uf/common/grib/tables/GribTableLookup.java b/edexOsgi/com.raytheon.uf.common.grib/src/com/raytheon/uf/common/grib/tables/GribTableLookup.java index cb777a8b8b..629c3fb767 100644 --- a/edexOsgi/com.raytheon.uf.common.grib/src/com/raytheon/uf/common/grib/tables/GribTableLookup.java +++ b/edexOsgi/com.raytheon.uf.common.grib/src/com/raytheon/uf/common/grib/tables/GribTableLookup.java @@ -195,7 +195,7 @@ public class GribTableLookup { /** * Initializes predefined tables. The predefined tables are stored as flat - * files in the utility directy to be access by the localization service + * files in the utility directory to be accessed by the localization service *

    * The localization service reads in all files and populates the cached * tables accordingly @@ -209,13 +209,7 @@ public class GribTableLookup { LocalizationLevel.BASE), "/grib/tables") .getPath(); - String sitePath = pm - .getFile(pm.getContext(LocalizationType.COMMON_STATIC, - LocalizationLevel.SITE), "/grib/tables") - .getPath(); - initTablesFromPath(commonPath); - initTablesFromPath(sitePath); } @@ -427,14 +421,14 @@ public class GribTableLookup { private final int centerid; - private final int subcenteris; + private final int subcenterid; private final int hashcode; - public TableMapKey(int centerid, int subcenteris) { + public TableMapKey(int centerid, int subcenterid) { this.centerid = centerid; - this.subcenteris = subcenteris; - this.hashcode = 31 * (31 + centerid) + subcenteris; + this.subcenterid = subcenterid; + this.hashcode = 31 * (31 + centerid) + subcenterid; } @Override @@ -457,7 +451,7 @@ public class GribTableLookup { if (centerid != other.centerid) { return false; } - if (subcenteris != other.subcenteris) { + if (subcenterid != other.subcenterid) { return false; } return true;