diff --git a/edexOsgi/com.raytheon.edex.plugin.obs/src/com/raytheon/edex/plugin/obs/metar/MetarSeparator.java b/edexOsgi/com.raytheon.edex.plugin.obs/src/com/raytheon/edex/plugin/obs/metar/MetarSeparator.java
index 0814481f96..b0102eb8f8 100644
--- a/edexOsgi/com.raytheon.edex.plugin.obs/src/com/raytheon/edex/plugin/obs/metar/MetarSeparator.java
+++ b/edexOsgi/com.raytheon.edex.plugin.obs/src/com/raytheon/edex/plugin/obs/metar/MetarSeparator.java
@@ -1,28 +1,25 @@
/**
* This software was developed and / or modified by Raytheon Company,
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
- *
+ *
* U.S. EXPORT CONTROLLED TECHNICAL DATA
* This software product contains export-restricted data whose
* export/transfer/disclosure is restricted by U.S. law. Dissemination
* to non-U.S. persons whether in the United States or abroad requires
* an export license or other authorization.
- *
+ *
* Contractor Name: Raytheon Company
* Contractor Address: 6825 Pine Street, Suite 340
* Mail Stop B8
* Omaha, NE 68106
* 402.291.0100
- *
+ *
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
* further licensing information.
**/
package com.raytheon.edex.plugin.obs.metar;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -42,36 +39,28 @@ import com.raytheon.uf.common.util.StringUtil;
import com.raytheon.uf.common.wmo.WMOHeader;
/**
- *
- *
- * Separator implementation for metar record
- *
+ * Separator implementation for METAR/SPECI files.
+ *
*
- *
- *
+ *
+ *
* SOFTWARE HISTORY
- *
+ *
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* Jul ??, 2006 3 & 14 Phillippe Initial Creation
- * Nov 14, 2006 71 Rockwood Implemented filter for NIL observations
+ * Nov 14, 2006 71 Rockwood Implemented filter for NIL observations
* Apr 14, 2008 1093 jkorman Added filter for Alaskan "Airways"
* observations.
* May 14, 2014 2536 bclement moved WMO Header to common, removed unused HEADERREGEX
* Oct 02, 2014 3693 mapeters Changed pattern String constants to Pattern constants.
* Dec 15, 2015 5166 kbisanz Update logging to use SLF4J
+ * Jan 29, 2016 5265 nabowle Update type replaceAll. General cleanup.
*
- *
+ *
* @author bphillip
* @version 1
*/
-
-/**
- * Implementation of file separator for METAR/SPECI files
- *
- * @author bphillip
- *
- */
public class MetarSeparator extends AbstractRecordSeparator {
private final Logger theLogger = LoggerFactory.getLogger(getClass());
@@ -83,6 +72,7 @@ public class MetarSeparator extends AbstractRecordSeparator {
/** Regex used for determining metar type */
private static final Pattern METARTYPE = Pattern.compile("METAR|SPECI");
+ /** Regex to check for Alaskan Airways observations. */
private static final Pattern AIRWAYS = Pattern
.compile("[A-Z][A-Z,0-9]{3} (SP|SA) \\d{4} AWOS");
@@ -98,6 +88,7 @@ public class MetarSeparator extends AbstractRecordSeparator {
/** List of record bodies contained in file */
private List records;
+ /** Iterator over the records. */
private Iterator iterator = null;
public MetarSeparator() {
@@ -113,29 +104,19 @@ public class MetarSeparator extends AbstractRecordSeparator {
/**
* Get the WMO Header found within this data.
- *
+ *
* @return The message WMO Header.
*/
public WMOHeader getWMOHeader() {
return header;
}
- /*
- * (non-Javadoc)
- *
- * @see com.raytheon.edex.plugin.AbstractRecordSeparator#setData(byte[])
- */
@Override
public void setData(byte[] data, Headers headers) {
this.doSeparate(new String(data));
iterator = records.iterator();
}
- /*
- * (non-Javadoc)
- *
- * @see com.raytheon.edex.plugin.AbstractRecordSeparator#nextRecord()
- */
public boolean hasNext() {
if (iterator == null) {
return false;
@@ -144,11 +125,6 @@ public class MetarSeparator extends AbstractRecordSeparator {
}
}
- /*
- * (non-Javadoc)
- *
- * @see java.util.Iterator#next()
- */
public byte[] next() {
try {
String temp = iterator.next();
@@ -163,8 +139,10 @@ public class MetarSeparator extends AbstractRecordSeparator {
}
/**
- *
+ * Separates the composite message into the individual records.
+ *
* @param message
+ * The message.
*/
private void doSeparate(String message) {
@@ -177,28 +155,23 @@ public class MetarSeparator extends AbstractRecordSeparator {
header = wmoHeader;
}
- // Pattern pattern = Pattern.compile(HEADERREGEX);
- // Matcher matcher = pattern.matcher(message);
- //
- // if (matcher.find()) {
- // header = matcher.group();
- // }
// Determines the type
Matcher matcher = METARTYPE.matcher(message);
-
if (matcher.find()) {
type = matcher.group();
+ message = matcher.replaceAll("");
} else {
type = "METAR";
}
- message = message.replaceAll(type, "");
matcher = ICAODATEPAIR.matcher(message);
List bodyIndex = new ArrayList();
Map bodyMap = new HashMap();
- // Extracts all the matches out of the message. Looks for ICAO/date
- // pairs. Does not allow duplicate entries.
+ /*
+ * Extracts all the matches out of the message. Looks for ICAO/date
+ * pairs. Does not allow duplicate entries.
+ */
if (matcher.find()) {
bodyIndex.add(matcher.start());
String obsKey = matcher.group();
@@ -228,9 +201,11 @@ public class MetarSeparator extends AbstractRecordSeparator {
// If it exists in the map then keep this observation.
if (bodyMap.containsKey(obsKey)) {
bodyRecords.add(observation);
- // now that we have data for this key,
- // remove it from the map so we skip any
- // subsequent observations with the same key.
+ /*
+ * now that we have data for this key, remove it from
+ * the map so we skip any subsequent observations with
+ * the same key.
+ */
bodyMap.remove(obsKey);
}
}
@@ -239,10 +214,11 @@ public class MetarSeparator extends AbstractRecordSeparator {
// Perform a some more checks on the data.
for (int i = 0; i < bodyRecords.size(); i++) {
String observation = bodyRecords.get(i);
- // 20080418 - 1093
- // Check for old style AIRWAYS data from Alaskan stations. This
- // data will be at the end of valid METAR/SPECI data so just
- // remove it.
+ /*
+ * 20080418 - 1093 Check for old style AIRWAYS data from Alaskan
+ * stations. This data will be at the end of valid METAR/SPECI
+ * data so just remove it.
+ */
matcher = AIRWAYS.matcher(observation);
if (matcher.find()) {
observation = observation.substring(0, matcher.start());
@@ -257,46 +233,8 @@ public class MetarSeparator extends AbstractRecordSeparator {
}
}
} catch (Exception e) {
- e.printStackTrace();
- theLogger.warn("No valid METAR records found.");
+ theLogger.warn("Invalid METAR message received.", e);
}
return;
}
-
- /**
- * Test function
- *
- * @param args
- */
- public static void main(String[] args) {
-
- String CRCRLF = "\r\r\n";
-
- String fileName = "/common/jkorman/data_store/obs/"
- + "SAUS70_KWBC_241218.obs";
- String str;
- MetarSeparator ben = new MetarSeparator();
- System.out.println(fileName);
-
- StringBuilder sb = new StringBuilder();
- try {
- BufferedReader in = new BufferedReader(new FileReader(fileName));
- while ((str = in.readLine()) != null) {
- sb.append(CRCRLF);
- sb.append(str);
- }
- in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- ben.setData(sb.toString().getBytes(), null);
- int i = 0;
- while (ben.hasNext()) {
-
- byte[] tData = ben.next();
-
- System.out.println("Record # " + (++i) + " [" + tData.length
- + "]: \n{" + new String(tData) + "}");
- }
- }
}