VLab Issue #8975 - DCS_16961 mPING Ingest and Display

Change-Id: Ia9b52718592d127fb71701c2419450f89bfec0b8

Former-commit-id: 43f7e4cc129f8d177f9586ff5f73c7adf96e18d6
This commit is contained in:
Aaron Anderson 2015-06-29 16:46:50 -05:00
parent be322dafdb
commit c6460c3655
30 changed files with 1271 additions and 1 deletions

View file

@ -96,7 +96,7 @@
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="com.raytheon.uf.common.dataplugin.climate"
download-size="0"
@ -199,4 +199,11 @@
version="0.0.0"
unpack="false"/>
<plugin
id="gov.noaa.nws.sr.oun.dataplugin.mping"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor" currentAnimationMode="Temporal">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="densityCapability" density="99999.0"/>
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="plotResourceData" plotSource="${legend}"
plotModelFile="${svg}"
retrieveData="false" isUpdatingOnMetadataOnly="true"
isRequeryNecessaryOnTimeMatch="true" isTopOfTheHour="false">
<binOffset posOffset="${posOffset}" negOffset="${negOffset}" virtualOffset="0"/>
<metadataMap>
<mapping key="pluginName">
<constraint constraintValue="mping" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<bundle>
<displayList>
<displays xsi:type="d2DMapRenderableDisplay"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<descriptor xsi:type="mapDescriptor" currentAnimationMode="Temporal">
<resource>
<loadProperties loadWithoutData="true">
<capabilities>
<capability xsi:type="densityCapability" density="99999.0"/>
</capabilities>
</loadProperties>
<properties isSystemResource="false" isBlinking="false"
isMapLayer="false" isHoverOn="false"
isVisible="true" />
<resourceData xsi:type="plotResourceData" plotSource="${legend}"
plotModelFile="${svg}"
retrieveData="false" isUpdatingOnMetadataOnly="true"
isRequeryNecessaryOnTimeMatch="true" isTopOfTheHour="false">
<binOffset posOffset="${posOffset}" negOffset="${negOffset}" virtualOffset="0"/>
<metadataMap>
<mapping key="category">
<constraint constraintValue="${category}" constraintType="EQUALS" />
</mapping>
<mapping key="pluginName">
<constraint constraintValue="mping" constraintType="EQUALS" />
</mapping>
</metadataMap>
</resourceData>
</resource>
</descriptor>
</displays>
</displayList>
</bundle>

View file

@ -0,0 +1,191 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<menuTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<contribute xsi:type="subMenu" menuText="mPING">
<contribute xsi:type="titleItem"
titleText="------ mPING 5 Minute Plots ------" id="MpingLine"/>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotAll.xml"
menuText="mPING Plot All" id="MpingPlotAll">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING All 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Rain/Snow" id="MpingPlotRainSnow">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Rain/Snow 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Rain/Snow"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Hail" id="MpingPlotHail">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Hail 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Hail"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Wind Damage" id="MpingPlotWindDamage">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Wind Damage 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Wind Damage"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Tornado" id="MpingPlotTornado">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Tornado 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Tornado"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Flood" id="MpingPlotFlood">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Flood 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Flood"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Mudslide" id="MpingPlotMudslide">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Mudslide 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Mudslide"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Reduced Visibility" id="MpingPlotReducedVisibility">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Reduced Visibility 5min"/>
<substitute key="posOffset" value="0"/>
<substitute key="negOffset" value="300"/>
<substitute key="category" value="Reduced Visibility"/>
</contribute>
<contribute xsi:type="titleItem"
titleText="------ mPING 30 Minute Plots ------" id="MpingLine"/>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotAll.xml"
menuText="mPING Plot All" id="MpingPlotAll">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING All 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Rain/Snow" id="MpingPlotRainSnow">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Rain/Snow 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Rain/Snow"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Hail" id="MpingPlotHail">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Hail 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Hail"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Wind Damage" id="MpingPlotWindDamage">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Wind Damage 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Wind Damage"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Tornado" id="MpingPlotTornado">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Tornado 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Tornado"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Flood" id="MpingPlotFlood">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Flood 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Flood"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Mudslide" id="MpingPlotMudslide">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Mudslide 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Mudslide"/>
</contribute>
<contribute xsi:type="bundleItem" file="bundles/mping/MpingPlotCategory.xml"
menuText="Reduced Visibility" id="MpingPlotReducedVisibility">
<substitute key="svg" value="mpingPlotDesign.svg"/>
<substitute key="legend" value="mPING Reduced Visibility 30min"/>
<substitute key="posOffset" value="300"/>
<substitute key="negOffset" value="1500"/>
<substitute key="category" value="Reduced Visibility"/>
</contribute>
</contribute>
</menuTemplate>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
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.
-->
<menuContributionFile>
<include installTo="menu:obs?before=CollectionDissemination"
fileName="menus/mping/baseMPing.xml"/>
</menuContributionFile>

View file

@ -0,0 +1,45 @@
s2s
1 : f
2 : e
3 : r
4 : u
5 : p
6 : q
7 : a
8 : t
9 : b
10 : c
11 : s
13 : o
14 : o
15 : o
16 : o
17 : n
19 : n
20 : m
21 : m
22 : m
23 : m
24 : k
25 : k
26 : k
27 : k
28 : l
29 : l
30 : l
31 : l
32 : j
33 : g
34 : g
35 : g
36 : h
37 : i
38 : d
39 : z
40 : x
41 : x
42 : y
43 : y
44 : A
45 : v
46 : w

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -0,0 +1,97 @@
<?xml version="1.0"?>
<svg width="80" height="80"
viewBox="0 0 80 80"
overflow="visible"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" style="stroke: rgb(255,255,255);">
<defs>
<script type="text/python" plotDelegate="plotDelegate">
import datetime
class MpingPlotDelegate(PlotDelegate):
def __init__(self):
PlotDelegate.__init__(self)
def getSampleText(self, rec):
timeobs = datetime.datetime.utcfromtimestamp(rec.getLong("timeObs")/1000)
description = rec.getString("description")
category = rec.getString("category")
sampleString = "mPING %s\n\tCategory: %s\n\tDescription: %s"%(timeobs,category,description)
return sampleString
plotDelegate = MpingPlotDelegate()
</script>
<style type="text/css">
<![CDATA[
@font-face { font-family: "WindSymbolFont";
src: url(WindSymbols.svg#WindSymbols); }
@font-face { font-family: "StandardFont";
src: url(Standard.svg#Standard); }
@font-face { font-family: "WxSymbolFont";
src: url(WxSymbols.svg#WxSymbols); }
@font-face { font-family: "SpecialSymbolFont";
src: url(SpecialSymbols.svg#SpecialSymbols); }
@font-face { font-family: "mPING";
src: url(mping.svg#mping); }
text.barb
{
fill: none;
font-size: 1em;
font-size: 1em;
font-family: WindSymbolFont;
}
text.arrow
{
fill: none;
font-size: 1em;
font-size: 1em;
font-family: WindSymbolFont;
}
text.text
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-family: StandardFont;
font-size: 1em;
}
text.weather
{
fill: none;
font-size: 2em;
stroke-width: 1px;
font-family: WxSymbolFont;
}
text.mping
{
fill: none;
font-size: 1.5em;
stroke-width: 0.5px;
font-family: mPING;
font-weight: normal;
font-style: normal;
font-variant: normal;
text-transform: none;
}
text.special
{
fill: none;
font-size: 1em;
stroke-width: 1px;
font-size: 1em;
font-family: SpecialSymbolFont;
}
]]>
</style>
<symbol overflow="visible" id="plotData" class="info">
<text id="rawmPingText" plotMode="sample" class="text" plotParam="description,category,timeObs" x="0" y="0">0</text>
<text id="cloudText" plotMode="table" class="mping" plotLookupTable="mPing_trans.txt" plotParam="description_id" style="text-anchor: start" x="0" y="0">0</text>
</symbol>
</defs>
<use id="wind" x="40" y="40" width="80" height="80" visibility="visible" xlink:href="#plotData"/>
</svg>

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -140,4 +140,8 @@
id="gov.nasa.msfc.sport.edex.sportlma.feature"
version="0.0.0"/>
<includes
id="gov.noaa.nws.sr.oun.edex.mping.feature"
version="0.0.0"/>
</feature>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>gov.noaa.nws.sr.oun.dataplugin.mping</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,18 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mping
Bundle-SymbolicName: gov.noaa.nws.sr.oun.dataplugin.mping
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: NWS OUN
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: com.raytheon.uf.common.dataplugin;bundle-version="1.12.1174",
com.raytheon.uf.common.serialization;bundle-version="1.12.1174",
com.raytheon.edex.common;bundle-version="1.12.1174",
javax.persistence;bundle-version="1.0.0",
org.apache.commons.lang;bundle-version="2.3.0",
javax.measure;bundle-version="1.0.0",
com.raytheon.uf.common.pointdata,
com.raytheon.uf.edex.pointdata,
com.raytheon.uf.common.status
Export-Package: gov.noaa.nws.sr.oun.dataplugin.mping

View file

@ -0,0 +1,4 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.

View file

@ -0,0 +1,225 @@
package gov.noaa.nws.sr.oun.dataplugin.mping;
import java.util.Calendar;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.UniqueConstraint;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.dataplugin.annotations.DataURI;
import com.raytheon.uf.common.dataplugin.persist.IPersistable;
import com.raytheon.uf.common.dataplugin.persist.PersistablePluginDataObject;
import com.raytheon.uf.common.geospatial.ISpatialEnabled;
import com.raytheon.uf.common.pointdata.IPointData;
import com.raytheon.uf.common.pointdata.PointDataView;
import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation;
import com.raytheon.uf.common.serialization.annotations.DynamicSerialize;
import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
import com.vividsolutions.jts.geom.Geometry;
/**
* Record implementation for mPING Reports
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jun 25, 2015 aanderson Initial creation of history
* </pre>
*
* @author Aaron Anderson
* @version 1.0
*/
@Entity
@SequenceGenerator(initialValue = 1, name = PluginDataObject.ID_GEN, sequenceName = "mpingseq")
@Table(name = "mping", uniqueConstraints = { @UniqueConstraint(columnNames = {
"latitude", "longitude", "stationId", "refTime"}) })
@DynamicSerialize
public class MPingReport extends PersistablePluginDataObject implements
ISpatialEnabled, IPointData, IPersistable {
private static final long serialVersionUID = 1L;
@Embedded
@DataURI(position = 1, embedded = true)
@DynamicSerializeElement
private SurfaceObsLocation location;
@Embedded
@DynamicSerializeElement
private PointDataView pointDataView;
@Transient
@DynamicSerializeElement
private String provider = null;
@Transient
@DynamicSerializeElement
private String source = null;
@Transient
@DynamicSerializeElement
int description_id;
@DynamicSerializeElement
String description;
@DynamicSerializeElement
String category;
public MPingReport() {
super();
}
public MPingReport(String dataUri) {
super(dataUri);
}
public String getProvider() {
return provider;
}
public void setProvider(String provider) {
this.provider = provider;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public int getDescription_id() {
return description_id;
}
public void setDescription_id(int description_id) {
this.description_id = description_id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
@Override
public SurfaceObsLocation getSpatialObject() {
return location;
}
public SurfaceObsLocation getLocation() {
return location;
}
public void setLocation(SurfaceObsLocation location) {
this.location = location;
}
/**
* Get this observation's geometry.
*
* @return The geometry for this observation.
*/
public Geometry getGeometry() {
return location.getGeometry();
}
/**
* Get the geometry latitude.
*
* @return The geometry latitude.
*/
public double getLatitude() {
return location.getLatitude();
}
/**
* Get the geometry longitude.
*
* @return The geometry longitude.
*/
public double getLongitude() {
return location.getLongitude();
}
/**
* Get the station identifier for this observation.
*
* @return the stationId
*/
public String getStationId() {
return location.getStationId();
}
/**
* Get the elevation, in meters, of the observing platform or location.
*
* @return The observation elevation, in meters.
*/
public Integer getElevation() {
return location.getElevation();
}
/**
* Get whether the location for this observation is defined.
*
* @return Is this location defined.
*/
public Boolean getLocationDefined() {
return location.getLocationDefined();
}
@Override
public PointDataView getPointDataView() {
return pointDataView;
}
@Override
public void setPointDataView(PointDataView pointDataView) {
this.pointDataView = pointDataView;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
Calendar c = getDataTime().getRefTimeAsCalendar();
if (c != null) {
sb.append(String.format("MPing:%1$tY%1$tm%1$td%1$tH%1$tM",
getDataTime().getRefTimeAsCalendar()));
} else {
sb.append("MPing:YYYYMMDDHHmm");
}
sb.append(String.format("%6.2f %7.2f:", getLatitude(), getLongitude()));
return sb.toString();
}
@SuppressWarnings("unchecked")
@Override
public void setDataURI(String dataURI) {
super.setDataURI(dataURI);
identifier = dataURI;
}
@Override
public String getPluginName() {
return "mping";
}
}

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>gov.noaa.nws.sr.oun.edex.mping.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1 @@
bin.includes = feature.xml

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="gov.noaa.nws.sr.oun.edex.mping.feature"
label="MpingFeature"
version="1.0.0.qualifier"
provider-name="NWS OUN">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<plugin
id="gov.noaa.nws.sr.oun.dataplugin.mping"
download-size="0"
install-size="0"
version="1.0.0"
unpack="false"/>
<plugin
id="gov.noaa.nws.sr.oun.edex.plugin.mping"
download-size="0"
install-size="0"
version="1.0.0"
unpack="false"/>
</feature>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>gov.noaa.nws.sr.oun.edex.plugin.mping</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View file

@ -0,0 +1,15 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mping
Bundle-SymbolicName: gov.noaa.nws.sr.oun.edex.plugin.mping
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: com.raytheon.edex.common;bundle-version="1.12.1174",
com.raytheon.uf.edex.decodertools;bundle-version="1.12.1174",
javax.measure;bundle-version="1.0.0",
javax.persistence;bundle-version="1.0.0",
org.dom4j;bundle-version="1.0.0",
com.raytheon.uf.common.status;bundle-version="1.12.1174",
com.raytheon.uf.common.pointdata;bundle-version="1.12.1174",
com.raytheon.uf.edex.pointdata;bundle-version="1.12.1174",
gov.noaa.nws.sr.oun.dataplugin.mping;bundle-version="1.0.0"

View file

@ -0,0 +1,6 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
res/,\
utility/

View file

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--
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.
-->
<!--
MPing Reports
-->
<pointDataDescription>
<parameter name="provider" numDims="1" type="STRING" />
<parameter name="source" numDims="1" type="STRING" />
<parameter name="description_id" numDims="1" type="LONG" />
</pointDataDescription>

View file

@ -0,0 +1,9 @@
<?xml version='1.0' encoding='UTF-8'?>
<pointDataDbDescription>
<parameter name="timeObs" queryName="dataTime.refTime" numDims="1" type="LONG" unit="ms"/>
<parameter name="latitude" queryName="location.latitude" type="FLOAT" unit="°" />
<parameter name="longitude" queryName="location.longitude" type="FLOAT" unit="°" />
<parameter name="stationId" queryName="location.stationId" type="STRING" />
<parameter name="category" queryName="category" type="STRING" />
<parameter name="description" queryName="description" type="STRING" />
</pointDataDbDescription>

View file

@ -0,0 +1,23 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="mpingPluginName" class="java.lang.String">
<constructor-arg type="java.lang.String" value="mping"/>
</bean>
<bean id="mpingProperties" class="com.raytheon.uf.common.dataplugin.PluginProperties">
<property name="pluginName" ref="mpingPluginName"/>
<property name="pluginFQN" value="gov.noaa.nws.sr.oun.dataplugin.mping"/>
<property name="dao" value="gov.noaa.nws.sr.oun.edex.plugin.mping.dao.MPingReportDao" />
<property name="record" value="gov.noaa.nws.sr.oun.dataplugin.mping.MPingReport"/>
</bean>
<bean id ="mpingRegistered" factory-bean="pluginRegistry" factory-method="register">
<constructor-arg ref="mpingPluginName"/>
<constructor-arg ref="mpingProperties"/>
</bean>
</beans>

View file

@ -0,0 +1,37 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<bean id="mpingDecoder" class="gov.noaa.nws.sr.oun.edex.plugin.mping.MPingDecoder"/>
<bean id="mpingDistRegistry" factory-bean="distributionSrv" factory-method="register">
<constructor-arg ref="mpingPluginName" />
<constructor-arg value="jms-durable:queue:Ingest.Mping" />
</bean>
<camelContext id="mping-camel"
xmlns="http://camel.apache.org/schema/spring"
errorHandlerRef="errorHandler">
<route id="mpingIngestRoute">
<from uri="jms-durable:queue:Ingest.Mping" />
<setHeader headerName="pluginName">
<constant>mping</constant>
</setHeader>
<pipeline>
<doTry>
<pipeline>
<bean ref="stringToFile" />
<bean ref="mpingDecoder" method="decode" />
<to uri="direct-vm:persistIndexAlert" />
</pipeline>
<doCatch>
<exception>java.lang.Throwable</exception>
<to uri="log:mping?level=ERROR"/>
</doCatch>
</doTry>
</pipeline>
</route>
</camelContext>
</beans>

View file

@ -0,0 +1,181 @@
package gov.noaa.nws.sr.oun.edex.plugin.mping;
import gov.noaa.nws.sr.oun.dataplugin.mping.MPingReport;
import gov.noaa.nws.sr.oun.edex.plugin.mping.dao.MPingReportDao;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.raytheon.edex.plugin.AbstractDecoder;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.pointdata.PointDataContainer;
import com.raytheon.uf.common.pointdata.PointDataDescription;
import com.raytheon.uf.common.pointdata.PointDataView;
import com.raytheon.uf.common.pointdata.spatial.SurfaceObsLocation;
import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.time.DataTime;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
/**
* Decoder for mPING Reports
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jun 25, 2015 aanderson Initial creation of history
* </pre>
*
* @author Aaron Anderson
* @version 1.0
*/
public class MPingDecoder extends AbstractDecoder {
private static IUFStatusHandler logger = UFStatus
.getHandler(MPingDecoder.class);
GeometryFactory geomFact = new GeometryFactory();
DateFormat reportTimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssX");
MPingReportDao dao;
private PointDataDescription pointDataDescription = null;
private Map<File, PointDataContainer> containerMap = new HashMap<File, PointDataContainer>();
private final String pluginName = "mping";
public MPingDecoder() {
try {
pointDataDescription = PointDataDescription
.fromStream(this.getClass().getResourceAsStream(
"/res/pointdata/mping.xml"));
dao = new MPingReportDao(pluginName);
logger.info("PointDataDescription loaded");
} catch (Exception e) {
logger.error("Problem loading point Data Description "
+ e.getMessage());
}
}
public PluginDataObject[] decode(String input) throws Exception {
logger.info("Starting Decode of mPING xml");
ArrayList<MPingReport> list = new ArrayList<MPingReport>();
try {
// Parse the text input into a Document so that we can extract out
// the root element.
Document document = DocumentHelper.parseText(input);
// Get root element of the document in xml
Element e = document.getRootElement();
// grab the results section of the kml file
Element results = e.element("results");
// iterate over the items in the Document section and only grab
// report items.
Iterator<Element> i = results.elementIterator("report");
while (i.hasNext()) {
// Grab next report
Element report = i.next();
try {
// pull out the description_id tag
Element description_id = report.element("description_id");
// If there actually is mPING data then process it.
if (description_id != null) {
// Get individual items of report
Element idElement = report.element("id");
Element description = report.element("description");
Element category = report.element("category");
Element timeElement = report.element("obtime");
Date reportTime = reportTimeFormat.parse(timeElement
.getText());
Element geom = report.element("geom");
Element coordinates = geom.element("coordinates");
Element lon = coordinates.element("longitude");
Element lat = coordinates.element("latitude");
// Create mping record
MPingReport record = new MPingReport();
// set the description and categories
record.setDescription_id(Integer
.parseInt(description_id.getText()));
record.setDescription(description.getText());
record.setCategory(category.getText());
// Create new SurfaceObsLocation
SurfaceObsLocation obsLoc = new SurfaceObsLocation();
// Use id from mPING xml as stationid as this provides
// for an always
// unique value
obsLoc.setStationId(idElement.getText());
// Set geometry of report
obsLoc.setGeometry(geomFact.createPoint(new Coordinate(
Float.parseFloat(lon.getText()), Float
.parseFloat(lat.getText()))));
record.setLocation(obsLoc);
// Add our DataTime
record.setDataTime(new DataTime(reportTime));
PointDataContainer pdc = getContainer(record);
// Populate the point data.
PointDataView view = pdc.append();
view.setLong("description_id",
record.getDescription_id());
record.setPointDataView(view);
// Add the record to the list
list.add(record);
}
} catch (Exception ex) {
logger.error("Error Creating Mping Record", ex);
}
}
} catch (DocumentException ex) {
logger.error("Error parsing Mping XML", ex);
}
// Process the list and send back an array of PluginDataObjects
return (list.toArray(new PluginDataObject[list.size()]));
}
public MPingReportDao getDao() {
return dao;
}
public void setDao(MPingReportDao dao) {
this.dao = dao;
}
/**
*
* @param mpingData
* @return
*/
private PointDataContainer getContainer(MPingReport mpingData) {
File file = dao.getFullFilePath(mpingData);
PointDataContainer container = containerMap.get(file);
if (container == null) {
container = PointDataContainer.build(pointDataDescription);
containerMap.put(file, container);
}
return container;
}
}

View file

@ -0,0 +1,44 @@
package gov.noaa.nws.sr.oun.edex.plugin.mping.dao;
import gov.noaa.nws.sr.oun.dataplugin.mping.MPingReport;
import com.raytheon.uf.common.dataplugin.PluginException;
import com.raytheon.uf.edex.pointdata.PointDataPluginDao;
/**
* DAO object for mPING Reports
*
* <pre>
*
* SOFTWARE HISTORY
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jun 25, 2015 aanderson Initial creation of history
* </pre>
*
* @author Aaron Anderson
* @version 1.0
*/
public class MPingReportDao extends PointDataPluginDao<MPingReport> {
public MPingReportDao(String pluginName) throws PluginException {
super(pluginName);
}
@Override
public String[] getKeysRequiredForFileName() {
return new String[] { "dataTime.refTime" };
}
@Override
public String getPointDataFileName(MPingReport p) {
return "mping.h5";
}
@Override
public MPingReport newObject() {
return new MPingReport();
}
}

View file

@ -0,0 +1,39 @@
import gov.noaa.nws.sr.oun.edex.plugin.mping.MPingDecoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import com.raytheon.uf.common.dataplugin.PluginDataObject;
public class MpingDecoderTest {
/**
* @param args
*/
public static void main(String[] args) {
try {
File file = new File("/home/awips/mpingtestfiles/mPingtesting.xml");
FileInputStream fis = new FileInputStream(file);
byte[] array = new byte[(int)file.length()];
fis.read(array);
fis.close();
String input = new String(array);
MPingDecoder decoder = new MPingDecoder();
PluginDataObject[] obj = decoder.decode(input);
System.out.println(obj[0].getDataTime());
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<purgeRuleSet xmlns:ns2="group">
<defaultRule>
<period>01-00:00:00</period>
</defaultRule>
</purgeRuleSet>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<requestPatterns xmlns:ns2="group">
<regex>^[mM][pP][iI][nN][gG].*</regex>
</requestPatterns>