From 4b747b5fe5bcba1b757ea55a49841da2771a2d25 Mon Sep 17 00:00:00 2001 From: ucar-tmeyer Date: Fri, 16 Jun 2023 18:23:19 +0000 Subject: [PATCH 1/2] Add back in the changes to decode and ingest UNIWISC Satellite files ---------------------------------------------------------------------- These were all changes Michael had made to previous Unidata versions on AWIPS Main plugin: com.raytheon.uf.edex.plugin.satellite.mcidas -Add couple new packages -org.apache.commons.codec -ar.com.jhg.pngj -Added quite a bit back into McidasSatellite.java -McidasSatelliteLookups.java -Changed area lookup name to sensor source -Mcidas Configs: -creatingEntities.xml -physicalElements.xml -areaNames.xml This brought up a few errors, pointing to updates I needed to make to -com.raytheon.uf.common.geospatial: MapUtil.java -Added decoding of GVAR native projection products -com.raytheon.edex.plugin.satellite: SatSpatialFactory.java -Added GVAR native projection support. -South polar stereogrpahic support added. -com.raytheon.edex.plugin.satellite: SatMapCoverageDao.java -Add criteria for line element/res -Update satellite menus to have mcidas/UNIWISC entries -com.raytheon.uf.common.dataplugin.satellite: SatMapCoverage.java -Added McIDAS GVAR native projection support. -Un-deprecate projection and fix for goesr ingest. --- .../satellite/dao/SatMapCoverageDao.java | 5 + .../util/satellite/SatSpatialFactory.java | 88 ++++ .../base/menus/satellite/baseSatellite.xml | 197 +++++---- .../base/menus/satellite/index.xml | 4 +- .../dataplugin/satellite/SatMapCoverage.java | 271 ++++++++++++- .../META-INF/MANIFEST.MF | 4 +- .../mcidas/McidasSatelliteDecoder.java | 383 +++++++++++++----- .../mcidas/util/McidasSatelliteLookups.java | 5 +- .../base/distribution/satellite.mcidas.xml | 2 + .../base/satellite/mcidas/areaNames.xml | 25 ++ .../satellite/mcidas/creatingEntities.xml | 39 +- .../satellite/mcidas/physicalElements.xml | 106 ++++- 12 files changed, 904 insertions(+), 225 deletions(-) create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/areaNames.xml diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/plugin/satellite/dao/SatMapCoverageDao.java b/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/plugin/satellite/dao/SatMapCoverageDao.java index d58bf1fc9e..4603261d3b 100644 --- a/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/plugin/satellite/dao/SatMapCoverageDao.java +++ b/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/plugin/satellite/dao/SatMapCoverageDao.java @@ -50,6 +50,7 @@ import com.raytheon.uf.edex.database.dao.DaoConfig; * Jun 27, 2012 798 jkorman Corrected id query type. * Oct 02, 2013 2333 mschenke Removed unused code * Nov 05, 2014 3788 bsteffen add getOrCreateCoverage + * Apr 30, 2016 ---- mjames add Criteria for line element/res * Mar 25, 2020 8103 randerso Fixed ContraintViolationException handling * * @@ -144,6 +145,10 @@ public class SatMapCoverageDao extends CoreDao { crit.add(Restrictions.eq("ny", coverage.getNy())); crit.add(Restrictions.eq("dx", coverage.getDx())); crit.add(Restrictions.eq("dy", coverage.getDy())); + crit.add(Restrictions.eq("upperLeftElement", coverage.getUpperLeftElement())); + crit.add(Restrictions.eq("upperLeftLine", coverage.getUpperLeftLine())); + crit.add(Restrictions.eq("elementRes", coverage.getElementRes())); + crit.add(Restrictions.eq("lineRes", coverage.getLineRes())); crit.add(Restrictions.eq("minX", coverage.getMinX())); crit.add(Restrictions.eq("minY", coverage.getMinY())); crit.add(Restrictions.eq("crsWKT", coverage.getCrsWKT())); diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/util/satellite/SatSpatialFactory.java b/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/util/satellite/SatSpatialFactory.java index 7907d6dfe8..014c7635aa 100644 --- a/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/util/satellite/SatSpatialFactory.java +++ b/edexOsgi/com.raytheon.edex.plugin.satellite/src/com/raytheon/edex/util/satellite/SatSpatialFactory.java @@ -20,6 +20,8 @@ package com.raytheon.edex.util.satellite; +import java.awt.geom.Rectangle2D; + import org.geotools.geometry.DirectPosition2D; import org.opengis.referencing.crs.ProjectedCRS; import org.opengis.referencing.operation.MathTransform; @@ -29,6 +31,8 @@ import com.raytheon.edex.plugin.satellite.dao.SatMapCoverageDao; import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage; import com.raytheon.uf.common.geospatial.MapUtil; import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.io.WKTReader; /** * @@ -47,6 +51,8 @@ import org.locationtech.jts.geom.Envelope; * Sep 15, 2014 17303 jgerth Support for second standard latitude * Nov 05, 2014 2714 bclement replaced DecoderException with SatelliteDecoderException * Nov 05, 2014 3788 bsteffen use getOrCreateCoverage in place of queryByMapId + * May 11, 2015 mjames South polar stereographic support added. + * May 19, 2015 mjames Added GVAR native projection support. * * * @@ -62,6 +68,8 @@ public class SatSpatialFactory { public static final int PROJ_LAMBERT = 3; public static final int PROJ_POLAR = 5; + + public static final int PROJ_GVAR = 7585; public static final int PROJ_CYLIN_EQUIDISTANT = 7; @@ -209,6 +217,58 @@ public class SatSpatialFactory { return getCoverageSingleCorner(crsType, nx, ny, lov, latin, latin, la1, lo1, dx, dy); } + + public SatMapCoverage getCoverageNative(int crsType, int nx, int ny, + double reflon, int upperLeftElement, int upperLeftLine, + int xres, int yres, ProjectedCRS crs) + throws SatelliteDecoderException { + try { + + // Construct the polygon constructor String + StringBuffer buffer = new StringBuffer(); + buffer.append("POLYGON(("); + buffer.append(reflon - 90. + " -90.0,"); + buffer.append(reflon + 90. + " -90.0,"); + buffer.append(reflon + 90. + " 90.0,"); + buffer.append(reflon - 90. + " 90.0,"); + buffer.append(reflon - 90. + " -90.0"); + buffer.append("))"); + // Create the geometry from the constructed String + Geometry geometry = new WKTReader().read(buffer.toString()); + + // Construct rectangle + double minX = upperLeftElement; + int maxX = upperLeftElement + (nx * xres); + double minY = upperLeftLine + (ny * yres); + minY = -minY; + int maxY = -1 * upperLeftLine; + Rectangle2D rect = new Rectangle2D.Double(minX, + minY, maxX, maxY); + + SatMapCoverage coverage = createCoverageFromNative(crsType, nx, ny, + reflon, upperLeftElement, upperLeftLine, + xres, yres, crs, geometry ); + + return checkPersisted(coverage); + + } catch (Exception e) { + StringBuilder buf = new StringBuilder(); + buf.append( + "Error getting or constructing SatMapCoverage for values: ") + .append("\n\t"); + buf.append("crsType=" + crsType).append("\n\t"); + buf.append("nx=" + nx).append("\n\t"); + buf.append("ny=" + ny).append("\n\t"); + buf.append("reflon=" + reflon).append("\n\t"); + buf.append("upperLeftElement=" + upperLeftElement).append("\n\t"); + buf.append("upperLeftLine=" + upperLeftLine).append("\n\t"); + buf.append("xres=" + xres).append("\n\t"); + buf.append("yres=" + yres).append("\n\t"); + throw new SatelliteDecoderException(buf.toString(), e); + } + } + + /** * * Create a {@link SatMapCoverage} with an area defined by two corners. The @@ -309,6 +369,24 @@ public class SatSpatialFactory { envelope.getMinY(), nx, ny, dx, dy, crs); } + /** + * Create a SatMapCoverage from native projection + */ + private static SatMapCoverage createCoverageFromNative(Integer crsType, + Integer nx, Integer ny, double reflon, int upperLeftElement, + int upperLeftLine, int xres, int yres, ProjectedCRS crs, + Geometry geometry) { + float dx = 999999.f; + float dy = 999999.f; + double minX, minY; + minX = upperLeftElement; + minY = upperLeftLine + (ny * yres); + minY = -minY; + return new SatMapCoverage(crsType, minX, minY, nx, ny, + dx, dy, upperLeftElement, upperLeftLine, + xres, yres, crs, geometry); + } + /** * Create a {@link ProjectedCRS} from a crsType and some parameters. * @@ -336,6 +414,11 @@ public class SatSpatialFactory { switch (crsType) { case PROJ_MERCATOR: return createMercatorCrs(latin, cm); + case PROJ_POLAR: + if (latin >= 0.) + return createNorthPolarStereoCrs(lov); + else + return createSouthPolarStereoCrs(latin, lov); case PROJ_LAMBERT: return createLambertCrs(latin, latin2, lov); case PROJ_CYLIN_EQUIDISTANT: @@ -365,5 +448,10 @@ public class SatSpatialFactory { return MapUtil.constructNorthPolarStereo(MapUtil.AWIPS_EARTH_RADIUS, MapUtil.AWIPS_EARTH_RADIUS, 60, lov); } + + private static ProjectedCRS createSouthPolarStereoCrs(double latin, double lov) { + return MapUtil.constructSouthPolarStereo(MapUtil.AWIPS_EARTH_RADIUS, + MapUtil.AWIPS_EARTH_RADIUS, latin, lov); + } } diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml index abe4871f1a..6edd3102d9 100644 --- a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml +++ b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml @@ -1,80 +1,121 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml index a21d767c54..3be4f18446 100644 --- a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml +++ b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml @@ -3,9 +3,7 @@ - + diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.satellite/src/com/raytheon/uf/common/dataplugin/satellite/SatMapCoverage.java b/edexOsgi/com.raytheon.uf.common.dataplugin.satellite/src/com/raytheon/uf/common/dataplugin/satellite/SatMapCoverage.java index f305695ce2..71f7cb02ed 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.satellite/src/com/raytheon/uf/common/dataplugin/satellite/SatMapCoverage.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.satellite/src/com/raytheon/uf/common/dataplugin/satellite/SatMapCoverage.java @@ -21,6 +21,8 @@ package com.raytheon.uf.common.dataplugin.satellite; import java.awt.geom.Rectangle2D; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.persistence.Column; import javax.persistence.Entity; @@ -37,22 +39,30 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.geotools.coverage.grid.GeneralGridEnvelope; import org.geotools.coverage.grid.GridEnvelope2D; import org.geotools.coverage.grid.GridGeometry2D; import org.geotools.geometry.Envelope2D; +import org.geotools.geometry.GeneralEnvelope; import org.geotools.referencing.crs.DefaultGeographicCRS; +import org.geotools.referencing.operation.DefaultMathTransformFactory; +import org.hibernate.annotations.Type; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Polygon; import org.opengis.coverage.grid.GridEnvelope; import org.opengis.geometry.Envelope; +import org.opengis.parameter.ParameterValueGroup; import org.opengis.referencing.FactoryException; +import org.opengis.referencing.NoSuchIdentifierException; import org.opengis.referencing.crs.CoordinateReferenceSystem; +import org.opengis.referencing.crs.ProjectedCRS; import com.raytheon.uf.common.dataplugin.annotations.DataURI; import com.raytheon.uf.common.dataplugin.persist.PersistableDataObject; import com.raytheon.uf.common.geospatial.CRSCache; import com.raytheon.uf.common.geospatial.IGridGeometryProvider; +import com.raytheon.uf.common.geospatial.MapUtil; import com.raytheon.uf.common.geospatial.adapter.GeometryAdapter; import com.raytheon.uf.common.geospatial.util.EnvelopeIntersection; import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; @@ -81,6 +91,8 @@ import com.raytheon.uf.common.status.UFStatus; * Apr 11, 2014 2947 bsteffen Fix equals * Oct 16, 2014 3454 bphillip Upgrading to Hibernate 4 * Nov 05, 2014 3788 bsteffen Make gid a sequence instead of a hash. + * May 19, 2015 mjames Added McIDAS GVAR native projection support. + * Apr 03, 2017 mjames Un-deprecate projection and fix for goesr ingest. * Mar 20, 2019 6140 tgurney Hibernate 5 GeometryType fix * May 8, 2019 6140 tgurney Lower the log level of some previously * ignored exceptions (from error to debug) @@ -88,15 +100,19 @@ import com.raytheon.uf.common.status.UFStatus; * */ @Entity -@Table(name = "satellite_spatial", uniqueConstraints = { - @UniqueConstraint(columnNames = { "minX", "minY", "dx", "dy", "nx", - "ny", "crsWKT" }) }) +@Table(name = "satellite_spatial", uniqueConstraints = { @UniqueConstraint(columnNames = { + "minX", "minY", "dx", "dy", "nx", "ny", "projection", "upperLeftElement", + "upperLeftLine", "elementRes", "lineRes", "crsWKT" }) }) @SequenceGenerator(name = "SATELLITE_SPATIAL_GENERATOR", sequenceName = "satspatial_seq", allocationSize = 1) @XmlAccessorType(XmlAccessType.NONE) @DynamicSerialize public class SatMapCoverage extends PersistableDataObject implements IGridGeometryProvider { + public static final int PROJ_GVAR = 7585; + + public static final Integer VAL_MISSING = new Integer(-9999998); + private static final long serialVersionUID = 1L; private static final IUFStatusHandler logger = UFStatus @@ -157,7 +173,31 @@ public class SatMapCoverage extends PersistableDataObject @DynamicSerializeElement private double dy; - @Column(length = 2047) + /** image element coordinate of area line 0, element 0 */ + @Column + @XmlAttribute + @DynamicSerializeElement + private int upperLeftElement; + + /** image line coordinate of area line 0, element 0 */ + @Column + @XmlAttribute + @DynamicSerializeElement + private int upperLeftLine; + + /** element resolution */ + @Column + @XmlAttribute + @DynamicSerializeElement + private int elementRes; + + /** line resolution */ + @Column + @XmlAttribute + @DynamicSerializeElement + private int lineRes; + + @Column(length = 5120) @XmlAttribute @DynamicSerializeElement private String crsWKT; @@ -166,7 +206,7 @@ public class SatMapCoverage extends PersistableDataObject private CoordinateReferenceSystem crsObject; /** The map coverage */ - @Column(name = "the_geom", columnDefinition = "geometry") + @Column(name = "the_geom") @XmlJavaTypeAdapter(value = GeometryAdapter.class) @DynamicSerializeElement private Geometry location; @@ -232,6 +272,10 @@ public class SatMapCoverage extends PersistableDataObject this.ny = ny; this.dx = dx; this.dy = dy; + setUpperLeftElement(VAL_MISSING); + setUpperLeftLine(VAL_MISSING); + setElementRes(VAL_MISSING); + setLineRes(VAL_MISSING); this.crsObject = crs; if (latLonGeometry == null) { try { @@ -251,8 +295,67 @@ public class SatMapCoverage extends PersistableDataObject } /** - * @deprecated This field is only useful for GINI satellite format decoding - * and should not be in the coverage object + * Constructs a new SatMapCoverage Object + * + * @param projection + * the projection id value + * @param minX + * minimum x value in crs space + * @param minY + * minimum y value in crs space + * @param nx + * number of x points in the satellite grid + * @param ny + * number of y points in the satellite grid + * @param dx + * spacing between grid cells in crs x space + * @param dy + * spacing between grid cells in crs y space + * @param upperLeftElement + * + * @param upperLeftLine + * + * @param xres + * + * @param yres + * + * @param crs + * the satellite data crs + * @param latLonGeometry + * A Geometry representing the satellite bounds in lat/lon space + */ + public SatMapCoverage(int projection, double minX, double minY, int nx, + int ny, double dx, double dy, int upperLeftElement, int upperLeftLine, + int xres, int yres, CoordinateReferenceSystem crs, Geometry latLonGeometry) { + this.projection = projection; + this.minX = minX; + this.minY = minY; + this.nx = nx; + this.ny = ny; + this.dx = dx; + this.dy = dy; + setUpperLeftElement(upperLeftElement); + setUpperLeftLine(upperLeftLine); + setElementRes(xres); + setLineRes(yres); + + this.crsObject = crs; + if (latLonGeometry == null) { + try { + latLonGeometry = EnvelopeIntersection + .createEnvelopeIntersection( + getGridGeometry().getEnvelope(), + new Envelope2D(DefaultGeographicCRS.WGS84, + -180, -90, 360, 180), 1.0, 10, 10) + .getEnvelope(); + } catch (Exception e) { + // Ignore exception, null location + } + } + this.location = latLonGeometry; + } + + /** * @return */ @Deprecated @@ -326,6 +429,38 @@ public class SatMapCoverage extends PersistableDataObject this.dy = dy; } + public int getUpperLeftElement() { + return upperLeftElement; + } + + public void setUpperLeftElement(int upperLeftElement) { + this.upperLeftElement = upperLeftElement; + } + + public int getUpperLeftLine() { + return upperLeftLine; + } + + public void setUpperLeftLine(int upperLeftLine) { + this.upperLeftLine = upperLeftLine; + } + + public int getElementRes() { + return elementRes; + } + + public void setElementRes(int elementRes) { + this.elementRes = elementRes; + } + + public int getLineRes() { + return lineRes; + } + + public void setLineRes(int lineRes) { + this.lineRes = lineRes; + } + public String getCrsWKT() { if (crsWKT == null && crsObject != null) { crsWKT = crsObject.toWKT(); @@ -334,7 +469,7 @@ public class SatMapCoverage extends PersistableDataObject } public void setCrsWKT(String crsWKT) { - this.crsWKT = crsWKT; + this.crsWKT = crsWKT.replaceAll("\r\n", "");; if (crsObject != null) { crsObject = null; } @@ -387,8 +522,18 @@ public class SatMapCoverage extends PersistableDataObject public CoordinateReferenceSystem getCrs() { if (crsObject == null && crsWKT != null) { try { - crsObject = CRSCache.getInstance() - .getCoordinateReferenceSystem(crsWKT); + if (this.projection != null) { + if (this.projection == PROJ_GVAR) { + crsObject = constructCRSfromWKT(crsWKT); + } else { + crsObject = CRSCache.getInstance() + .getCoordinateReferenceSystem(crsWKT); + } + } else { + crsObject = CRSCache.getInstance() + .getCoordinateReferenceSystem(crsWKT); + } + } catch (FactoryException e) { logger.debug("Error in getting the Coordinate Reference System", e); @@ -400,10 +545,108 @@ public class SatMapCoverage extends PersistableDataObject @Override public GridGeometry2D getGridGeometry() { - GridEnvelope gridRange = new GridEnvelope2D(0, 0, getNx(), getNy()); - Envelope crsRange = new Envelope2D(getCrs(), new Rectangle2D.Double( - minX, minY, getNx() * getDx(), getNy() * getDy())); - return new GridGeometry2D(gridRange, crsRange); + /* + * Native projections + */ + if (this.projection != null) { + + if (projection == PROJ_GVAR) { + GridEnvelope gridRange = new GeneralGridEnvelope(new int[] { + 0, 0 }, new int[] { getNx(),getNy() }, false); + GeneralEnvelope crsRange = new GeneralEnvelope(2); + crsRange.setCoordinateReferenceSystem( getCrs() ); + + int minX = getUpperLeftElement(); + int maxX = getUpperLeftElement() + ( getNx() * getElementRes() ); + int minY = getUpperLeftLine() + ( getNy() * getLineRes() ); + minY = -minY; + int maxY = -1 * getUpperLeftLine(); + crsRange.setRange(0, minX, maxX); + crsRange.setRange(1, minY, maxY); + return new GridGeometry2D(gridRange, crsRange); + } else { + GridEnvelope gridRange = new GridEnvelope2D(0, 0, getNx(), getNy()); + Envelope crsRange = new Envelope2D(getCrs(), new Rectangle2D.Double( + minX, minY, getNx() * getDx(), getNy() * getDy())); + return new GridGeometry2D(gridRange, crsRange); + } + } else { + GridEnvelope gridRange = new GridEnvelope2D(0, 0, getNx(), getNy()); + Envelope crsRange = new Envelope2D(getCrs(), new Rectangle2D.Double( + minX, minY, getNx() * getDx(), getNy() * getDy())); + return new GridGeometry2D(gridRange, crsRange); + + } + } + + public static ProjectedCRS constructCRSfromWKT(String crsWKT) { + Pattern AREA_PATTERN = Pattern + .compile("PROJCS\\[\"MCIDAS\\sAREA\\s(.*)\""); + Pattern NAV_BLOCK_PATTERN = Pattern.compile( + "\\[\"NAV_BLOCK_BASE64\",\\s\"(.*)\"\\]", Pattern.MULTILINE + | Pattern.DOTALL); + Matcher m = AREA_PATTERN.matcher(crsWKT); + m.find(); + ProjectedCRS crsObject = null; + + if (m.groupCount() == 1) { + String type = m.group(1); + m = NAV_BLOCK_PATTERN.matcher(crsWKT); + boolean found = m.find(); + if (found) { + String navBlock = m.group(1); + crsObject = constructCRS(type, navBlock); + } + } + + return crsObject; + } + + public static ProjectedCRS constructCRS(String type, String encoded) { + ParameterValueGroup pvg = null; + DefaultMathTransformFactory dmtFactory = new DefaultMathTransformFactory(); + try { + pvg = dmtFactory.getDefaultParameters("MCIDAS_AREA_NAV"); + } catch (NoSuchIdentifierException e1) { + e1.printStackTrace(); + } + /* + * semi_major and semi_minor parameters are set to 1, so that no global + * scaling is performed during coordinate transforms by + * org.geotools.referencing.operation.projection.MapProjection based on + * the radius of earth + */ + pvg.parameter("semi_major").setValue(1.0); + pvg.parameter("semi_minor").setValue(1.0); + pvg.parameter("central_meridian").setValue(0.0); + pvg.parameter("NAV_BLOCK_BASE64").setValue(encoded); + + String projectionName = "MCIDAS AREA " + type; + ProjectedCRS mcidasCRS = null; + try { + mcidasCRS = MapUtil.constructProjection(projectionName, pvg); + } catch (FactoryException e) { + e.printStackTrace(); + } + return mcidasCRS; + } + + public GridGeometry2D getGridGeometryNativeProjection() { + GridEnvelope gridRange = new GeneralGridEnvelope(new int[] { 0, 0 }, new int[] { getNx(),getNy() }, false); + GeneralEnvelope crsRange = new GeneralEnvelope(2); + crsRange.setCoordinateReferenceSystem( constructCRSfromWKT(crsWKT) ); + int minX = getUpperLeftElement(); + int maxX = getUpperLeftElement() + ( getNx() * getElementRes() ); + int minY = getUpperLeftLine() + ( getNy() * getLineRes() ); + minY = -minY; + int maxY = -1 * getUpperLeftLine(); + crsRange.setRange(0, minX, maxX); + crsRange.setRange(1, minY, maxY); + return new GridGeometry2D(gridRange, crsRange); + } + + public Geometry getGeometry() { + return getLocation(); } @Override diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF index 097a4642b4..21398aeb45 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF @@ -11,7 +11,9 @@ Require-Bundle: com.raytheon.edex.common, javax.persistence, com.raytheon.uf.common.dataplugin.satellite, com.raytheon.edex.plugin.satellite, - javax.xml.bind + org.apache.commons.codec, + javax.xml.bind, + ar.com.hjg.pngj;bundle-version="2.1.1" Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: com.raytheon.uf.common.localization, com.raytheon.uf.common.menus, 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 34a1061304..0a6b8bff04 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 @@ -19,20 +19,32 @@ **/ package com.raytheon.uf.edex.plugin.satellite.mcidas; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.Charset; +import java.util.Arrays; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; +import org.apache.commons.codec.binary.Base64; +import org.opengis.referencing.crs.ProjectedCRS; + +import ar.com.hjg.pngj.ImageLineByte; +import ar.com.hjg.pngj.PngReaderByte; + import com.raytheon.edex.esb.Headers; import com.raytheon.edex.exception.DecoderException; +import com.raytheon.edex.plugin.satellite.SatelliteDecoderException; import com.raytheon.edex.util.satellite.SatSpatialFactory; import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.satellite.SatMapCoverage; import com.raytheon.uf.common.dataplugin.satellite.SatelliteRecord; import com.raytheon.uf.common.datastorage.records.IDataRecord; +import com.raytheon.uf.common.geospatial.MapUtil; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.time.DataTime; @@ -71,6 +83,12 @@ import com.raytheon.uf.edex.plugin.satellite.mcidas.util.McidasSatelliteLookups. * IDataRecord required by the SatelliteDao * 12/03/2013 DR 16841 D. Friedman Allow record overwrites * 09/18/2014 3627 mapeters Updated deprecated method calls. + * 05/11/2015 ---- mjames PS (south and north) stereogrpahic support added. + * 05/19/2015 ---- mjames Added decoding of GVAR native projection products + * 07/12/2015 ---- mjames Account for GOES E and W UNIWISC AREA file numbers + * 01/21/2016 ---- mjames Cleanup + * 10/24/2017 ---- mjames Native support for PNG-compressed AREA files. + * 08/14/2018 ---- mjames Find and use position of PNG header. * Sep 23, 2021 8608 mapeters Handle PDO.traceId changes * * @@ -87,6 +105,12 @@ public class McidasSatelliteDecoder { private static final int EXPECTED_IMAGE_TYPE_LE = 4; private static final int EXPECTED_IMAGE_TYPE_BE = 0x04000000; + + private static final int RADIUS = 6371200; + + final int SIZE_OF_AREA = 256; + + private final byte[] PNG_HDR = { -119, 80, 78, 71 }; private static final double HALFPI = Math.PI / 2.; @@ -132,6 +156,14 @@ public class McidasSatelliteDecoder { * @throws Exception */ private PluginDataObject[] decodeMcidasArea(byte[] data) throws Exception { + + byte[] area = new byte[SIZE_OF_AREA]; + byte[] nonAreaBlock = new byte[data.length - SIZE_OF_AREA]; + + System.arraycopy(data, 0, area, 0, SIZE_OF_AREA); + System.arraycopy(data, SIZE_OF_AREA, nonAreaBlock, 0, + nonAreaBlock.length); + ByteBuffer buf = ByteBuffer.wrap(data); buf.order(ByteOrder.LITTLE_ENDIAN); @@ -146,80 +178,96 @@ public class McidasSatelliteDecoder { formatError(UNEXPECTED_HEADER_VALUE); } } - int sensorSourceNumber = buf.getInt(); - int yyyddd = buf.getInt(); - int hhmmss = buf.getInt(); - int ulImageLine = buf.getInt(); - int ulImageElement = buf.getInt(); - buf.getInt(); // reserved - int nLines = buf.getInt(); - int nElementsPerLine = buf.getInt(); - int nBytesPerElement = buf.getInt(); - int lineResolution = buf.getInt(); - int elementResolution = buf.getInt(); - int nBands = buf.getInt(); - int linePrefixLength = buf.getInt(); - /* int projectNumber = */buf.getInt(); - /* int creationYyyddd = */buf.getInt(); - /* int creationHhmmss = */buf.getInt(); - int bandMap1to32 = buf.getInt(); - int bandMap33to64 = buf.getInt(); - // sensor specific - buf.position(buf.position() + (4 * 4)); - // memo - buf.position(buf.position() + (4 * 8)); + + int sensorSourceNumber = buf.getInt(); // W3 + int yyyddd = buf.getInt(); // W4 + int hhmmss = buf.getInt(); // W5 + int ulImageLine = buf.getInt(); // W6 + int ulImageElement = buf.getInt(); // W7 + buf.getInt(); // W8 reserved + int nLines = buf.getInt(); // W9 + int nElementsPerLine = buf.getInt(); // W10 + int nBytesPerElement = buf.getInt(); // W11 + int lineResolution = buf.getInt(); // W12 + int elementResolution = buf.getInt(); // W13 + int nBands = buf.getInt(); // W14 + int linePrefixLength = buf.getInt(); // W15 + /* int projectNumber = */buf.getInt(); // W16 + /* int creationYyyddd = */buf.getInt(); // W17 + /* int creationHhmmss = */buf.getInt(); // W18 + /* + 32-bit filter band map for multichannel + images; if a bit is set, data exists for the band; + band 1 is the least significant byte (rightmost) + */ + int bandMap1to32 = buf.getInt(); // W19 + /* + * W20-24 + satellite specific information + */ + int bandMap33to64 = buf.getInt(); // W20 + buf.position(buf.position() + (4 * 4)); // sensor specific + buf.position(buf.position() + (4 * 8)); // memo int areaNumber = buf.getInt(); int dataBlockOffset = buf.getInt(); int navBlockOffset = buf.getInt(); /* int validityCode = */buf.getInt(); - buf.position(buf.position() + (8 * 4)); // PDL - buf.getInt(); - // GOES AA band 8 + buf.position(buf.position() + (8 * 4)); // PDL + buf.getInt(); // GOES AA band 8 /* int imageYyyddd = */buf.getInt(); /* int imageHhmmssOrMillis = */buf.getInt(); /* int imageStartScan = */buf.getInt(); /* int prefixDocLength = */buf.getInt(); - /* int prefixCalibrationLength = */buf.getInt(); - /* int prefixBandListLength = */buf.getInt(); - // source type - buf.getInt(); - // cal type - buf.getInt(); - buf.position(buf.position() + (3 * 4)); - // reserved - /* int originalSourceType = */buf.getInt(); - // actually a 4cc? - /* int units = */buf.getInt(); - // also 4cc? + int prefixCalibrationLength = buf.getInt(); // W50 + /* int prefixBandListLength = */buf.getInt(); // W51 + buf.getInt(); // W52 source type + String calType = get4cc(buf); // W53 cal type + buf.position(buf.position() + (3 * 4)); // reserved + /* int originalSourceType = */buf.getInt(); // actually a 4cc? + /* int units = */buf.getInt(); // also 4cc? /* int scaling = */buf.getInt(); /* int supplementalBlockOffset = */buf.getInt(); - buf.getInt(); - // reserved - /* int calibrationOffset = */buf.getInt(); - // comment cards - buf.getInt(); + buf.getInt(); // reserved + int calibrationOffset = buf.getInt(); // W63 + int numberOfComments = buf.getInt(); // W64 comment cards + + /* Nav block */ + int navsize; + if (calibrationOffset == 0){ + navsize = dataBlockOffset - navBlockOffset; + } else { + navsize = calibrationOffset - navBlockOffset; + } + byte[] navigation = new byte[navsize]; + System.arraycopy(nonAreaBlock, 0, navigation, 0, navigation.length); + + byte[] nonNavBlock = new byte[nonAreaBlock.length - navsize]; + System.arraycopy(nonAreaBlock, navsize, nonNavBlock, 0, nonNavBlock.length); + + /* PNG block */ + int PNG_HDR_POS = indexOf(nonNavBlock, PNG_HDR); + byte[] pngBlock = new byte[nonNavBlock.length - PNG_HDR_POS]; + System.arraycopy(nonNavBlock, PNG_HDR_POS, pngBlock, 0, pngBlock.length); long bandBits = ((long) bandMap33to64 << 32) | bandMap1to32; - if (nBands != Long.bitCount(bandBits)) { - formatError( - "Specified number of bands does not match number of bits in band map"); + long bandBitsCount = Long.bitCount(bandBits); + if (nBands != bandBitsCount && nBands > 1) { + formatError("Specified number of bands does not match number of bits in band map"); } // Decode the navigation block buf.position(navBlockOffset); SatMapCoverage coverage = decodeNavigation(elementResolution, lineResolution, ulImageElement, ulImageLine, nElementsPerLine, - nLines, buf); + nLines, buf, navigation); // Decode the data block, creating a SatelliteRecord for each band. PluginDataObject[] result = new PluginDataObject[nBands]; int bitIndex = 0; - for (int ri = 0; ri < nBands; ++ri) { + RECORD: for (int ri = 0; ri < nBands; ++ri) { while ((bandBits & (1L << bitIndex)) == 0) { - ++bitIndex; - if (bitIndex >= 64) { - // shouldn't happen - return result; + if (++bitIndex >= 64) { + break RECORD; // shouldn't happen } } SatelliteRecord rec = new SatelliteRecord(); @@ -231,18 +279,20 @@ public class McidasSatelliteDecoder { bitIndex + 1); rec.setPhysicalElement(pev.name); rec.setUnits(pev.units); - rec.setSectorID(getAreaName(areaNumber)); + rec.setSectorID(getAreaName(sensorSourceNumber, areaNumber)); rec.setCoverage(coverage); // TODO: Line pad if not a multiple of four bytes - if ((linePrefixLength == 0) && (nBytesPerElement == 1) - && (nBands == 1)) { - byte[] imageBytes = new byte[nLines * nElementsPerLine]; - buf.position(dataBlockOffset); - buf.get(imageBytes); - - rec.setMessageData(imageBytes); - + if ((linePrefixLength == 0) && (nBytesPerElement == 1) && (nBands == 1)) { + if (isPngCompressed(pngBlock)) { + byte[] pngBytes = decompressPngSatellite(pngBlock); + rec.setMessageData(pngBytes); + } else { + byte[] imageBytes = new byte[nLines * nElementsPerLine]; + buf.position(dataBlockOffset); + buf.get(imageBytes); + rec.setMessageData(imageBytes); + } } else if (nBytesPerElement == 1) { byte[] imageBytes = new byte[nLines * nElementsPerLine]; int si = dataBlockOffset + (ri * nBytesPerElement); @@ -251,8 +301,7 @@ public class McidasSatelliteDecoder { for (int y = 0; y < nLines; ++y) { si += linePrefixLength; for (int x = 0; x < nElementsPerLine; ++x) { - imageBytes[di] = buf.get(si); - ++di; + imageBytes[di++] = buf.get(si); si += eincr; } } @@ -260,11 +309,10 @@ public class McidasSatelliteDecoder { unimplemented("non-byte elements"); } - rec.setSourceTraceId(traceId); + rec.setTraceId(traceId); rec.setPersistenceTime(TimeUtil.newGmtCalendar().getTime()); rec.setOverwriteAllowed(true); - // Set the data into the IDataRecord // Set the data into the IDataRecord IDataRecord dataRec = SatelliteRecord.getDataRecord(rec); if (dataRec != null) { @@ -281,47 +329,119 @@ public class McidasSatelliteDecoder { result = new PluginDataObject[0]; } } - return result; } + /** + * + * from guava/guava/src/com/google/common/primitives/Bytes.java + * + * @param array + * @param target + * @return + */ + public static int indexOf(byte[] array, byte[] target) { + if (target.length == 0) { + return 0; + } + outer: + for (int i = 0; i < array.length - target.length + 1; i++) { + for (int j = 0; j < target.length; j++) { + if (array[i + j] != target[j]) { + continue outer; + } + } + return i; + } + return -1; + } + + /** + * Method to check if file is PNG-compressed. + * + * @param messageData + * @return + */ + private boolean isPngCompressed(byte[] messageData) { + byte[] buffer = new byte[4]; + System.arraycopy(messageData, 0, buffer, 0, buffer.length); + boolean compressed = Arrays.equals(buffer, PNG_HDR); + return compressed; + } + + /** + * Method to handle Unidata PNG compressed satellite data. + * + * @param messageData + * @return + * @throws DecoderException + */ + private byte[] decompressPngSatellite(byte[] messageData) + throws SatelliteDecoderException { + + InputStream stream = new ByteArrayInputStream(messageData); + PngReaderByte png = new PngReaderByte(stream); + + int MAX_IMAGE_SIZE = 30000000; + ByteArrayOutputStream bos = new ByteArrayOutputStream(MAX_IMAGE_SIZE); + byte[] inflated = null; + + for (int row=0;row< png.getImgInfo().rows;row++){ + ImageLineByte line = png.readRowByte(); + byte [] buf = line.getScanlineByte(); + bos.write(buf, 0, buf.length); + } + + inflated = bos.toByteArray(); + bos = null; + return inflated; + } + /** * Reference: * http://www.ssec.wisc.edu/mcidas/doc/prog_man/2006/formats-13a.html * */ private SatMapCoverage decodeNavigation(int xImgRes, int yImgRes, int ulX, - int ulY, int nx, int ny, ByteBuffer buf) throws Exception { + int ulY, int nx, int ny, ByteBuffer buf, byte[] navigation) + throws Exception { SatMapCoverage result = new SatMapCoverage(); String navType = get4cc(buf); - if ("MERC".equals(navType)) { - int lineOfEquator = buf.getInt(); - int elementOfEquator = buf.getInt(); - int stdLatDDMMSS = buf.getInt(); - int spacingAtStdLatInMeters = buf.getInt(); - int nrmlLonDDMMSS = buf.getInt(); + int lineOfEquator = buf.getInt(); + int elementOfEquator = buf.getInt(); + int stdLatDDMMSS = buf.getInt(); + int spacingAtStdLatInMeters = buf.getInt(); + int nrmlLonDDMMSS = buf.getInt(); + + + // NOTE: We do not check the following for compatibility with WGS84. + int radiusInMeters = buf.getInt(); + /* int eccentricity = */buf.getInt(); + /* boolean geodetic = */buf.getInt()/* >= 0 */; - // NOTE: We do not check the following for compatibility with WGS84. - int radiusInMeters = buf.getInt(); - /* int eccentricity = */buf.getInt(); - /* boolean geodetic = */buf.getInt()/* >= 0 */; + boolean westPositive = buf.getInt() >= 0; + float la1, lo1, la2, lo2; + double dy; - boolean westPositive = buf.getInt() >= 0; - float la1, lo1, la2, lo2; + /* + * The following is based on + * gov.noaa.nws.ncep.edex.plugin.mcidas/src + * /gov/noaa/nws/ncep/edex/plugin/mcidas/decoder/McidasDecoder.java + */ - /* - * The following is based on - * gov.noaa.nws.ncep.edex.plugin.mcidas/src - * /gov/noaa/nws/ncep/edex/plugin/mcidas/decoder/McidasDecoder.java - */ + double clon = flipLon(unpackDdmmss(nrmlLonDDMMSS), westPositive); + double clat = unpackDdmmss(stdLatDDMMSS); + double dx = spacingAtStdLatInMeters * xImgRes; - double clon = flipLon(unpackDdmmss(nrmlLonDDMMSS), westPositive); - double clat = unpackDdmmss(stdLatDDMMSS); - double dx = spacingAtStdLatInMeters * xImgRes; - - double phi0r = clat * DTR; - double rxp = (((double) (elementOfEquator - ulX) / xImgRes) + 1.); - double ryp = (ny - ((double) (lineOfEquator - ulY) / yImgRes)); + double phi0r = clat * DTR; + double sign = 1.; + if (phi0r < 0.) { + sign = -1.; + } + double rxp = (((double) (elementOfEquator - ulX) / xImgRes) + 1.); + double ryp = (ny - ((double) (lineOfEquator - ulY) / yImgRes)); + + if (navType.equals("MERC")) { double dxp = 1. - rxp; double dyp = 1. - ryp; @@ -337,12 +457,61 @@ public class McidasSatelliteDecoder { la2 = (float) (((2. * Math.atan(arg)) - HALFPI) * RTD); lo2 = (float) prnlon((clon + (((dx * dxp) / rcos) * RTD))); lo2 = (float) prnlon(lo2); - + result = SatSpatialFactory.getInstance().getCoverageTwoCorners( SatSpatialFactory.PROJ_MERCATOR, nx, ny, (float) clon, (float) clat, la1, lo1, la2, lo2); + + } else if (navType.trim().equals("PS")) { + + dy = (float) spacingAtStdLatInMeters * yImgRes; + double dxp = (1. - rxp) * dx; + double dyp = (1. - ryp) * dy; + double alpha = 1. + Math.sin(Math.abs(phi0r)); + double rm = Math.sqrt(((dxp * dxp) + (dyp * dyp))) / alpha; + la1 = (float) (sign * ((HALFPI - (2. * Math.atan(rm / RADIUS)))) * RTD); + double thta; + if (dyp != 0) { + dyp = (-dyp) * sign; + thta = (Math.atan2(dxp, dyp)) * RTD; + lo1 = (float) prnlon((clon + thta)); + } else { + lo1 = (float) clon; + } + + /* + * Compute lat/lon of the upper-right corner + */ + dxp = (nx - rxp) * dx; + dyp = (ny - ryp) * dy; + rm = Math.sqrt(((dxp * dxp) + (dyp * dyp))) / alpha; + la2 = (float) (sign * ((HALFPI - (2. * Math.atan(rm / RADIUS)))) * RTD); + + if (dyp != 0) { + dyp = (-dyp) * sign; + thta = (Math.atan2(dxp, dyp)) * RTD; + lo2 = (float) prnlon((clon + thta)); + } else { + lo2 = (float) clon; + } + + result = SatSpatialFactory.getInstance().getCoverageTwoCorners( + SatSpatialFactory.PROJ_POLAR, nx, ny, (float) clon, + (float) clat, la1, lo1, la2, lo2); + } else { - unimplemented(String.format("navigation type \"%s\"", navType)); + /* + * Native projection + */ + //unimplemented(String.format("navigation type \"%s\"", navType)); + clon = nrmlLonDDMMSS / 10000000.f; + clon = (float) Math.toDegrees(clon); + ProjectedCRS crs = MapUtil.constructNative(navType, encodeNavBlock(navigation)); + + result = SatSpatialFactory.getInstance().getCoverageNative( + SatSpatialFactory.PROJ_GVAR, nx, ny, (float) clon, + ulX, ulY, xImgRes, yImgRes, crs); + } return result; @@ -391,24 +560,22 @@ public class McidasSatelliteDecoder { } private String getCreatingEntity(int sensorSourceNumber) { - String value = McidasSatelliteLookups.getInstance() - .getCreatingEntity(sensorSourceNumber); - return value != null ? value - : String.format("Unknown-%d", sensorSourceNumber); + String value = McidasSatelliteLookups.getInstance().getCreatingEntity( + sensorSourceNumber); + return value != null ? value : String.format("Unknown-%d", + sensorSourceNumber); } private PhysicalElementValue getPhysicalElement(int ssn, int bandIndex) { PhysicalElementValue value = McidasSatelliteLookups.getInstance() .getPhysicalElement(ssn, bandIndex); - return value != null ? value - : new PhysicalElementValue( - String.format("Unknown-%d", bandIndex), null); + return value != null ? value : new PhysicalElementValue(String.format( + "Unknown-%d", bandIndex), null); } - private String getAreaName(int areaNumber) { - String value = McidasSatelliteLookups.getInstance() - .getAreaName(areaNumber); - return value != null ? value : String.format("AREA%04d", areaNumber); + private String getAreaName(int ssn, int areaNumber) { + String value = McidasSatelliteLookups.getInstance().getAreaName(ssn); + return value != null ? value : String.format("AREA%04d", areaNumber); } private void formatError(String message) throws DecoderException { @@ -416,8 +583,14 @@ public class McidasSatelliteDecoder { } protected void unimplemented(String feature) throws DecoderException { - throw new DecoderException( - String.format("%s: unimplemented: %s", traceId, feature)); + throw new DecoderException(String.format("%s: unimplemented: %s", + traceId, feature)); } + private String encodeNavBlock(byte[] navigation) { + Base64 b64 = new Base64(); + byte[] coded = b64.encode(navigation); + + return new String(coded); + } } diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/util/McidasSatelliteLookups.java b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/util/McidasSatelliteLookups.java index 541ea80d63..86d8ed2524 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/util/McidasSatelliteLookups.java +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/src/com/raytheon/uf/edex/plugin/satellite/mcidas/util/McidasSatelliteLookups.java @@ -54,6 +54,7 @@ import com.raytheon.uf.common.status.UFStatus; * Jul 29, 2011 dfriedma Initial creation * Jul 14, 2016 5744 mapeters Initial javadoc creation, config files moved * from edex_static to common_static + * Aug 2018 mjames Changed area lookup name to sensor source * * * @@ -217,8 +218,8 @@ public class McidasSatelliteLookups { return creatingEntityLookup.map.get(sensorSource); } - public String getAreaName(int areaNumber) { - return areaNameLookup.map.get(areaNumber); + public String getAreaName(int sensorSource) { + return areaNameLookup.map.get(sensorSource); } private static McidasSatelliteLookups instance; diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/distribution/satellite.mcidas.xml b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/distribution/satellite.mcidas.xml index be6b719e3d..3276c1b536 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/distribution/satellite.mcidas.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/distribution/satellite.mcidas.xml @@ -26,4 +26,6 @@ --> AREA[0-9]{4}.* + pnga2area + .*uniwisc.* diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/areaNames.xml b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/areaNames.xml new file mode 100644 index 0000000000..e56fd3f648 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/areaNames.xml @@ -0,0 +1,25 @@ + + + + 401Arctic + 400Antarctic + 185GOES-Sounder + 71GOES-Sounder + 184GOES-West + + + diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/creatingEntities.xml b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/creatingEntities.xml index 08be2e1972..55ca4357d8 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/creatingEntities.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/creatingEntities.xml @@ -26,8 +26,39 @@ different localization levels will be combined. --> - - 84MTSAT-1R - 85MTSAT-2 - + + 3SOUNDER3 + 9COMP9 + 10SOUNDER10 + 12GMS + 13GMS + 30GOES6 + 31GOES6 + 32GOES7 + 33GOES7 + 35FYC + 36FYC + 51METEOSAT8 + 52METEOSAT9 + 53METEOSAT10 + 54METEOSAT3 + 56METEOSAT5 + 57METEOSAT6 + 58METEOSAT7 + 70GOES8 + 74GOES10 + 76GOES-11(L) + 77DPD + 78GOES-12(M) + 84MTSAT-1R + 85MTSAT-2 + 86HIMAWARI-8 + 180UNIWISC + 184UNIWISC + 185UNIWISC + 400UNIWISC + 401UNIWISC + 71UNIWISC + 72UNIWISC + diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/physicalElements.xml b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/physicalElements.xml index 04dd616e01..709f85fad1 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/physicalElements.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/utility/common_static/base/satellite/mcidas/physicalElements.xml @@ -30,23 +30,93 @@ different localization levels will be combined. --> - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /> + + + + + + + /> + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 733cd561650673d3be25291e8491b1945d7c4781 Mon Sep 17 00:00:00 2001 From: ucar-tmeyer Date: Tue, 20 Jun 2023 18:51:27 +0000 Subject: [PATCH 2/2] More updates to the Satellite Menus (VIRRS and legacy UNIWISC data) -Moved NPP/VIIRS/NUCAPS menus/bundles/etc from CAVE to EDEX side -Updated menus to have the new menu items and reorganized the satellite menu a bit --- .../build.properties | 1 - .../build.properties | 1 - cave/com.raytheon.uf.viz.npp/build.properties | 1 - .../base/menus/satellite/baseSatellite.xml | 1 + .../base/menus/satellite/index.xml | 2 +- .../base/bundles/npp/nucapsAvailability.xml | 26 +++++++ .../base/bundles/npp/soundingAvailability.xml | 2 +- .../base}/menus/npp/nucaps/index.xml | 0 .../menus/npp/nucaps/nucapsMenuItems.xml | 0 .../base}/nucaps/nucapsConfig.xml | 0 .../npp/viirs/singlePanelComposite.xml | 0 .../npp/viirs/viirsDayNightBandImagery.xml | 9 +-- .../base}/bundles/npp/viirs/viirsImagery.xml | 0 .../base}/menus/npp/viirs/index.xml | 0 .../viirs/jpss/viirsBundleItems_AK_JPSS.xml | 23 +------ .../npp/viirs/jpss/viirsBundleItems_JPSS.xml | 2 +- .../menus/npp/viirs/viirsBundleItems.xml | 2 +- .../menus/npp/viirs/viirsBundleItems_AK.xml | 7 +- .../base}/menus/npp/viirs/viirsMenuItems.xml | 68 ++++++++++--------- .../menus/npp/viirs/viirsRGBBundleItems.xml | 0 .../build.properties | 3 +- .../common_static/base}/menus/npp/index.xml | 4 +- .../base}/menus/npp/nppMenuItems.xml | 12 ++-- .../META-INF/MANIFEST.MF | 2 +- 24 files changed, 89 insertions(+), 77 deletions(-) create mode 100644 edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/nucapsAvailability.xml rename cave/com.raytheon.uf.viz.npp.nucaps/localization/bundles/npp/nucapsAvailability.xml => edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/soundingAvailability.xml (96%) rename {cave/com.raytheon.uf.viz.npp.nucaps/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base}/menus/npp/nucaps/index.xml (100%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.nucaps/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base}/menus/npp/nucaps/nucapsMenuItems.xml (100%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.nucaps/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base}/nucaps/nucapsConfig.xml (100%) rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/bundles/npp/viirs/singlePanelComposite.xml (100%) rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/bundles/npp/viirs/viirsDayNightBandImagery.xml (99%) rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/bundles/npp/viirs/viirsImagery.xml (100%) rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/index.xml (100%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml (65%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml (95%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/viirsBundleItems.xml (96%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/viirsBundleItems_AK.xml (97%) rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/viirsMenuItems.xml (61%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp.viirs/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base}/menus/npp/viirs/viirsRGBBundleItems.xml (100%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base}/menus/npp/index.xml (90%) mode change 100644 => 100755 rename {cave/com.raytheon.uf.viz.npp/localization => edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base}/menus/npp/nppMenuItems.xml (81%) diff --git a/cave/com.raytheon.uf.viz.npp.nucaps/build.properties b/cave/com.raytheon.uf.viz.npp.nucaps/build.properties index 370759338c..ef36a70027 100644 --- a/cave/com.raytheon.uf.viz.npp.nucaps/build.properties +++ b/cave/com.raytheon.uf.viz.npp.nucaps/build.properties @@ -1,6 +1,5 @@ output.com.raytheon.uf.viz.npp.nucaps.jar = bin/ bin.includes = META-INF/,\ - localization/,\ plugin.xml,\ com.raytheon.uf.viz.npp.nucaps.jar source.com.raytheon.uf.viz.npp.nucaps.jar = src/ diff --git a/cave/com.raytheon.uf.viz.npp.viirs/build.properties b/cave/com.raytheon.uf.viz.npp.viirs/build.properties index 7f2b8b4116..5b4b618637 100644 --- a/cave/com.raytheon.uf.viz.npp.viirs/build.properties +++ b/cave/com.raytheon.uf.viz.npp.viirs/build.properties @@ -1,7 +1,6 @@ output.com.raytheon.uf.viz.npp.viirs.jar = bin/ bin.includes = META-INF/,\ plugin.xml,\ - localization/,\ res/,\ com.raytheon.uf.viz.npp.viirs.jar source.com.raytheon.uf.viz.npp.viirs.jar = src/ diff --git a/cave/com.raytheon.uf.viz.npp/build.properties b/cave/com.raytheon.uf.viz.npp/build.properties index 22e876efc1..135de25f4f 100644 --- a/cave/com.raytheon.uf.viz.npp/build.properties +++ b/cave/com.raytheon.uf.viz.npp/build.properties @@ -1,5 +1,4 @@ output.com.raytheon.uf.viz.npp.jar = bin/ bin.includes = META-INF/,\ - localization/,\ com.raytheon.uf.viz.npp.jar source.com.raytheon.uf.viz.npp.jar = src/ diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml index 6edd3102d9..5d50c956dc 100644 --- a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml +++ b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/baseSatellite.xml @@ -1,5 +1,6 @@ + diff --git a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml index 3be4f18446..cde150bcc8 100644 --- a/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml +++ b/edexOsgi/com.raytheon.edex.plugin.satellite/utility/common_static/base/menus/satellite/index.xml @@ -3,7 +3,7 @@ - diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/nucapsAvailability.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/nucapsAvailability.xml new file mode 100644 index 0000000000..e505116f82 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/nucapsAvailability.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/cave/com.raytheon.uf.viz.npp.nucaps/localization/bundles/npp/nucapsAvailability.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/soundingAvailability.xml similarity index 96% rename from cave/com.raytheon.uf.viz.npp.nucaps/localization/bundles/npp/nucapsAvailability.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/soundingAvailability.xml index 51e6f4d37d..c2d461a3c8 100644 --- a/cave/com.raytheon.uf.viz.npp.nucaps/localization/bundles/npp/nucapsAvailability.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/bundles/npp/soundingAvailability.xml @@ -30,7 +30,7 @@ - + ${soundingResourceData} ${name;Unknown} diff --git a/cave/com.raytheon.uf.viz.npp.nucaps/localization/menus/npp/nucaps/index.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/menus/npp/nucaps/index.xml old mode 100644 new mode 100755 similarity index 100% rename from cave/com.raytheon.uf.viz.npp.nucaps/localization/menus/npp/nucaps/index.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/menus/npp/nucaps/index.xml diff --git a/cave/com.raytheon.uf.viz.npp.nucaps/localization/menus/npp/nucaps/nucapsMenuItems.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/menus/npp/nucaps/nucapsMenuItems.xml old mode 100644 new mode 100755 similarity index 100% rename from cave/com.raytheon.uf.viz.npp.nucaps/localization/menus/npp/nucaps/nucapsMenuItems.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/menus/npp/nucaps/nucapsMenuItems.xml diff --git a/cave/com.raytheon.uf.viz.npp.nucaps/localization/nucaps/nucapsConfig.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/nucaps/nucapsConfig.xml similarity index 100% rename from cave/com.raytheon.uf.viz.npp.nucaps/localization/nucaps/nucapsConfig.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.nucaps/utility/common_static/base/nucaps/nucapsConfig.xml diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/singlePanelComposite.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/singlePanelComposite.xml similarity index 100% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/singlePanelComposite.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/singlePanelComposite.xml diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/viirsDayNightBandImagery.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/viirsDayNightBandImagery.xml similarity index 99% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/viirsDayNightBandImagery.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/viirsDayNightBandImagery.xml index 9213120e92..207c4f480d 100644 --- a/cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/viirsDayNightBandImagery.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/viirsDayNightBandImagery.xml @@ -42,16 +42,17 @@ - - - + + + + - \ No newline at end of file + diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/viirsImagery.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/viirsImagery.xml similarity index 100% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/bundles/npp/viirs/viirsImagery.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/bundles/npp/viirs/viirsImagery.xml diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/index.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/index.xml old mode 100644 new mode 100755 similarity index 100% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/index.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/index.xml diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml old mode 100644 new mode 100755 similarity index 65% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml index f370df32e3..391fa8e3ec --- a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/jpss/viirsBundleItems_AK_JPSS.xml @@ -30,14 +30,6 @@ menuText="0.64 μm Imagery Band 1 (CH 01)" id="Img0.64J"> - - - - - - @@ -46,21 +38,8 @@ menuText="11.45 μm Imagery Band 5 (CH 05)" id="Img11.45J"> - - - - - - - - - + menuText="0.7 μm Near Constant Contrast" id="Moderate0.7J"> - diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml old mode 100644 new mode 100755 similarity index 95% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml index 569ed49cbe..653d753bf5 --- a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/jpss/viirsBundleItems_JPSS.xml @@ -27,7 +27,7 @@ + menuText="0.7 μm Near Constant Contrast" id="Moderate0.7J"> diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsBundleItems.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsBundleItems.xml old mode 100644 new mode 100755 similarity index 96% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsBundleItems.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsBundleItems.xml index aa53a04410..e1837edfa3 --- a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsBundleItems.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsBundleItems.xml @@ -27,7 +27,7 @@ + menuText="0.7 μm Near Constant Contrast" id="Moderate0.7"> diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsBundleItems_AK.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsBundleItems_AK.xml similarity index 97% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsBundleItems_AK.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsBundleItems_AK.xml index 3a48ac3070..1fcfcaebf3 100755 --- a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsBundleItems_AK.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsBundleItems_AK.xml @@ -30,6 +30,7 @@ menuText="0.64 μm Imagery Band 1 (CH 01)" id="Img0.64"> + @@ -57,7 +59,7 @@ - --> + @@ -70,8 +72,9 @@ menuText="Moderate Band 16 (12.013u)" id="Mod12.013"> +--> + menuText="0.7 μm Near Constant Contrast" id="Moderate0.7"> diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsMenuItems.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsMenuItems.xml old mode 100644 new mode 100755 similarity index 61% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsMenuItems.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsMenuItems.xml index dfdb665186..b7a25f46e9 --- a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsMenuItems.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsMenuItems.xml @@ -45,45 +45,51 @@ Lee Byerle 1/2/2018 --> - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - diff --git a/cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsRGBBundleItems.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsRGBBundleItems.xml old mode 100644 new mode 100755 similarity index 100% rename from cave/com.raytheon.uf.viz.npp.viirs/localization/menus/npp/viirs/viirsRGBBundleItems.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp.viirs/utility/common_static/base/menus/npp/viirs/viirsRGBBundleItems.xml diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.npp/build.properties b/edexOsgi/com.raytheon.uf.edex.plugin.npp/build.properties index 34d2e4d2da..544aa7de88 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.npp/build.properties +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp/build.properties @@ -1,4 +1,5 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ - . + .,\ + utility/ diff --git a/cave/com.raytheon.uf.viz.npp/localization/menus/npp/index.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base/menus/npp/index.xml old mode 100644 new mode 100755 similarity index 90% rename from cave/com.raytheon.uf.viz.npp/localization/menus/npp/index.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base/menus/npp/index.xml index 6b8ea24031..adade8d8b4 --- a/cave/com.raytheon.uf.viz.npp/localization/menus/npp/index.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base/menus/npp/index.xml @@ -24,5 +24,5 @@ of the file. --> - - \ No newline at end of file + + diff --git a/cave/com.raytheon.uf.viz.npp/localization/menus/npp/nppMenuItems.xml b/edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base/menus/npp/nppMenuItems.xml similarity index 81% rename from cave/com.raytheon.uf.viz.npp/localization/menus/npp/nppMenuItems.xml rename to edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base/menus/npp/nppMenuItems.xml index 7f1486a348..9aef4ab0fe 100644 --- a/cave/com.raytheon.uf.viz.npp/localization/menus/npp/nppMenuItems.xml +++ b/edexOsgi/com.raytheon.uf.edex.plugin.npp/utility/common_static/base/menus/npp/nppMenuItems.xml @@ -24,12 +24,10 @@ of the file. --> - - - - + + + + + diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF index 21398aeb45..c31c03b187 100644 --- a/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.edex.plugin.satellite.mcidas/META-INF/MANIFEST.MF @@ -13,7 +13,7 @@ Require-Bundle: com.raytheon.edex.common, com.raytheon.edex.plugin.satellite, org.apache.commons.codec, javax.xml.bind, - ar.com.hjg.pngj;bundle-version="2.1.1" + ar.com.hjg.pngj Bundle-RequiredExecutionEnvironment: JavaSE-11 Import-Package: com.raytheon.uf.common.localization, com.raytheon.uf.common.menus,