diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.madis/src/com/raytheon/uf/common/dataplugin/madis/MadisRecord.java b/edexOsgi/com.raytheon.uf.common.dataplugin.madis/src/com/raytheon/uf/common/dataplugin/madis/MadisRecord.java
index dd37c4793a..4281638162 100644
--- a/edexOsgi/com.raytheon.uf.common.dataplugin.madis/src/com/raytheon/uf/common/dataplugin/madis/MadisRecord.java
+++ b/edexOsgi/com.raytheon.uf.common.dataplugin.madis/src/com/raytheon/uf/common/dataplugin/madis/MadisRecord.java
@@ -75,6 +75,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
* Oct 14, 2013 2361 njensen Removed IDecoderGettable
* Dec 10, 2013 2616 mpduff Added stationId to the unique constraint
* jan 22, 2014 2713 dhladky Calendar conversion.
+ * Mar 21, 2014 2939 dhladky Fixed mismatches in HDF5, DB records.
*
*
*
@@ -85,7 +86,7 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement;
@Entity
@SequenceGenerator(initialValue = 1, name = PluginDataObject.ID_GEN, sequenceName = "madisseq")
@Table(name = "madis", uniqueConstraints = { @UniqueConstraint(columnNames = {
- "location", "stationId", "refTime", "provider", "subProvider", "restriction" }) })
+ "latitude", "longitude", "stationId", "refTime", "provider", "subProvider", "restriction" }) })
@org.hibernate.annotations.Table(appliesTo = "madis", indexes = { @Index(name = "madis_wfsQueryIndex", columnNames = {
"refTime", "location" }), })
@DynamicSerialize
@@ -121,7 +122,7 @@ public class MadisRecord extends PersistablePluginDataObject implements
@Column
@DataURI(position = 4)
private int restriction;
-
+
/** A string denoting the time of observation */
@DynamicSerializeElement
@Transient
@@ -349,7 +350,7 @@ public class MadisRecord extends PersistablePluginDataObject implements
@DynamicSerializeElement
@Embedded
private PointDataView pointDataView;
-
+
public static final String PLUGIN_NAME = "madis";
public static final String STATION_ID = "stationId";
@@ -453,6 +454,19 @@ public class MadisRecord extends PersistablePluginDataObject implements
public static final String RESTRICTION = "RESTRICTION";
}
+
+ /**
+ * URI constructor
+ * @param string
+ */
+ public MadisRecord(String string) {
+ super();
+ }
+
+ //empty constructor
+ public MadisRecord() {
+
+ }
/**
* Get the pointdata view
@@ -1086,4 +1100,14 @@ public class MadisRecord extends PersistablePluginDataObject implements
public String getPluginName() {
return PLUGIN_NAME;
}
+
+ /**
+ * Allow overwrite of MADIS records
+ * MADIS records are frequently updated for even the same temporal
+ * record. QC value changes will cause record re-submissions.
+ * @return
+ */
+ public boolean getAllowOverWrite() {
+ return true;
+ }
}
diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml b/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml
index 310c40feb5..bd5a73824c 100644
--- a/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml
+++ b/edexOsgi/com.raytheon.uf.edex.plugin.madis.registry/res/spring/madis-ogc-registry.xml
@@ -22,8 +22,7 @@
-
+
diff --git a/edexOsgi/com.raytheon.uf.edex.plugin.madis/src/com/raytheon/uf/edex/plugin/madis/MadisPointDataTransform.java b/edexOsgi/com.raytheon.uf.edex.plugin.madis/src/com/raytheon/uf/edex/plugin/madis/MadisPointDataTransform.java
index f18ab28ec8..a137bba29e 100644
--- a/edexOsgi/com.raytheon.uf.edex.plugin.madis/src/com/raytheon/uf/edex/plugin/madis/MadisPointDataTransform.java
+++ b/edexOsgi/com.raytheon.uf.edex.plugin.madis/src/com/raytheon/uf/edex/plugin/madis/MadisPointDataTransform.java
@@ -47,6 +47,7 @@ import com.raytheon.uf.edex.pointdata.PointDataQuery;
* 28 Mar 2013 1746 dhladky Created
* 10 Jun 2013 1763 dhladky Updates for speed.
* 08 Jul 2013 2171 dhladky Removed dataURI
+ * 21 Mar 2014 2939 dhladky Fixed mismatches in HDF5, DB records.
*
*
* @author dhladky
@@ -164,8 +165,10 @@ public class MadisPointDataTransform {
public static final String RESTRICTION = "restriction";
public static final String TIME_OBS = "timeObs";
-
+
public static final String ID = "id";
+
+ public static final String EQUAL = "=";
public static final String[] ALL_PARAMS = { DATASET, DEWPOINT,
DEWPOINT_QCD, DEWPOINT_QCA, DEWPOINT_QCR, RH, RH_QCD, RH_QCA,
@@ -249,10 +252,7 @@ public class MadisPointDataTransform {
private PointDataView buildView(PointDataContainer container,
MadisRecord record) {
PointDataView pdv = container.append();
-
- // I think this is inefficient but, PlotData for SVG reads
- // the pointDataView so, the first 4 that are already in the
- // DB have to be here.
+
pdv.setLong(TIME_OBS, record.getDataTime().getRefTime().getTime());
pdv.setString(PROVIDER, record.getProvider());
pdv.setString(SUB_PROVIDER, record.getSubProvider());
@@ -310,75 +310,10 @@ public class MadisPointDataTransform {
pdv.setString(PRESSURE_QCD, record.getPressure_qcd().toString());
pdv.setInt(PRESSURE_QCA, record.getPressure_qca());
pdv.setInt(PRESSURE_QCR, record.getPressure_qcr());
-
+
return pdv;
}
- /**
- * Creates a MadisRecord from a PointDataContainer
- *
- * @param pdc
- * @return
- */
- public static MadisRecord toMadisRecord(MadisRecord mr) {
-
- PointDataView pdv = mr.getPointDataView();
- mr.setDataset(pdv.getInt(DATASET));
- // dewpoint
- mr.setDewpoint(pdv.getFloat(DEWPOINT));
- mr.setDewpoint_qcd(QCD.fromString(pdv.getString(DEWPOINT_QCD)));
- mr.setDewpoint_qca(pdv.getInt(DEWPOINT_QCA));
- mr.setDewpoint_qcr(pdv.getInt(DEWPOINT_QCR));
- // relative humidty
- mr.setRh(pdv.getFloat(RH));
- mr.setRh_qcd(QCD.fromString(pdv.getString(RH_QCD)));
- mr.setRh_qca(pdv.getInt(RH_QCA));
- mr.setRh_qcr(pdv.getInt(RH_QCR));
- // altimeter setting
- mr.setAltimeter(pdv.getFloat(ALTIMETER));
- mr.setAltimeter_qcd(QCD.fromString(pdv.getString(ALTIMETER_QCD)));
- mr.setAltimeter_qca(pdv.getInt(ALTIMETER_QCA));
- mr.setAltimeter_qcr(pdv.getInt(ALTIMETER_QCR));
- // temperature
- mr.setTemperature(pdv.getFloat(TEMPERATURE));
- mr.setTemperature_qcd(QCD.fromString(pdv.getString(TEMPERATURE_QCD)));
- mr.setTemperature_qca(pdv.getInt(TEMPERATURE_QCA));
- mr.setTemperature_qcr(pdv.getInt(TEMPERATURE_QCR));
- // wind direction
- mr.setWindDirection(pdv.getNumber(WINDDIRECTION).intValue());
- mr.setWindDirection_qcd(QCD.fromString(pdv.getString(WINDDIRECTION_QCD)));
- mr.setWindDirection_qca(pdv.getInt(WINDDIRECTION_QCA));
- mr.setWindDirection_qcr(pdv.getInt(WINDDIRECTION_QCR));
- // precip rate
- mr.setPrecipRate(pdv.getFloat(PRECIPRATE));
- mr.setPrecipRate_qcd(QCD.fromString(pdv.getString(PRECIPRATE_QCD)));
- mr.setPrecipRate_qca(pdv.getInt(PRECIPRATE_QCA));
- mr.setPrecipRate_qcr(pdv.getInt(PRECIPRATE_QCR));
- // WINDSPEED
- mr.setWindSpeed(pdv.getFloat(WINDSPEED));
- mr.setWindSpeed_qcd(QCD.fromString(pdv.getString(WINDSPEED_QCD)));
- mr.setWindSpeed_qca(pdv.getInt(WINDSPEED_QCA));
- mr.setWindSpeed_qcr(pdv.getInt(WINDSPEED_QCR));
- // Wind Gust
- mr.setWindGust(pdv.getFloat(WINDGUST));
- mr.setWindGust_qcd(QCD.fromString(pdv.getString(WINDGUST_QCD)));
- mr.setWindGust_qca(pdv.getInt(WINDGUST_QCA));
- mr.setWindGust_qcr(pdv.getInt(WINDGUST_QCR));
- // Precipital Water
- mr.setPrecipitalWater(pdv.getFloat(PRECIPITALWATER));
- mr.setPrecipitalWater_qcd(QCD.fromString(pdv
- .getString(PRECIPITALWATER_QCD)));
- mr.setPrecipitalWater_qca(pdv.getInt(PRECIPITALWATER_QCA));
- mr.setPrecipitalWater_qcr(pdv.getInt(PRECIPITALWATER_QCR));
- // Pressure
- mr.setPressure(pdv.getFloat(PRESSURE));
- mr.setPressure_qcd(QCD.fromString(pdv.getString(PRESSURE_QCD)));
- mr.setPressure_qca(pdv.getInt(PRESSURE_QCA));
- mr.setPressure_qcr(pdv.getInt(PRESSURE_QCR));
-
- return mr;
- }
-
/**
* Creates a MadisRecord from a PointDataContainer
*
@@ -458,7 +393,7 @@ public class MadisPointDataTransform {
try {
request = new PointDataQuery(MadisRecord.PLUGIN_NAME);
request.requestAllLevels();
- request.addParameter(ID, ""+record.getId(), "=");
+ request.addParameter(ID, String.valueOf(record.getId()), EQUAL);
request.setParameters(ALL_PARAMS_LIST);
result = request.execute();
@@ -483,9 +418,7 @@ public class MadisPointDataTransform {
* @return populated Madis record Array
* @throws PluginException
*/
- // TODO I would like to make a PointDataInterface that could implement this
- // and other methods that all of these
- // will use.
+
public static PluginDataObject[] populatePointDataFields(
PluginDataObject[] records) {
@@ -507,10 +440,19 @@ public class MadisPointDataTransform {
request.addParameter(ID, ids.toString(), IN);
request.setParameters(ALL_PARAMS_LIST);
result = request.execute();
-
+
+ // correlate up the PointDataViews with the correct records.
+ HashMap pdvs = new HashMap(records.length);
for (int i = 0; i < records.length; i++) {
PointDataView pdv = result.readRandom(i);
- toMadisRecord((MadisRecord) records[i], pdv);
+ // correlate ID from record with ID from PDV
+ int id = pdv.getInt(ID);
+ pdvs.put(id, pdv);
+ }
+
+ for (int i = 0; i < records.length; i++) {
+ int id = records[i].getId();
+ records[i] = toMadisRecord((MadisRecord)records[i], pdvs.get(id));
}
if (result != null) {