diff --git a/edexOsgi/com.raytheon.edex.plugin.textlightning/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.edex.plugin.textlightning/META-INF/MANIFEST.MF index 79aa87f42e..6bdf3c041c 100644 --- a/edexOsgi/com.raytheon.edex.plugin.textlightning/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.edex.plugin.textlightning/META-INF/MANIFEST.MF @@ -2,13 +2,16 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Textlightning Plug-in Bundle-SymbolicName: com.raytheon.edex.plugin.textlightning -Bundle-Version: 1.12.1174.qualifier +Bundle-Version: 1.14.0.qualifier Eclipse-RegisterBuddy: com.raytheon.uf.common.serialization, com.raytheon.edex.common Bundle-Vendor: RAYTHEON -Require-Bundle: com.raytheon.edex.common, - com.raytheon.uf.edex.decodertools;bundle-version="1.0.0", - javax.persistence +Require-Bundle: com.raytheon.uf.edex.decodertools, + com.raytheon.uf.common.dataplugin Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Import-Package: com.raytheon.uf.common.dataplugin.binlightning, +Import-Package: com.raytheon.edex.exception, + com.raytheon.edex.plugin, + com.raytheon.uf.common.dataplugin.binlightning, com.raytheon.uf.common.dataplugin.binlightning.impl, - org.apache.commons.logging + com.raytheon.uf.common.status, + com.raytheon.uf.common.time, + com.raytheon.uf.edex.core diff --git a/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/TextLightningDecoder.java b/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/TextLightningDecoder.java index 3337e38f5a..6574715454 100644 --- a/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/TextLightningDecoder.java +++ b/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/TextLightningDecoder.java @@ -22,23 +22,21 @@ package com.raytheon.edex.plugin.textlightning; import java.util.ArrayList; import java.util.Calendar; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import com.raytheon.edex.exception.DecoderException; import com.raytheon.edex.plugin.AbstractDecoder; import com.raytheon.edex.plugin.IBinaryDecoder; import com.raytheon.edex.plugin.textlightning.impl.TextLightningParser; import com.raytheon.uf.common.dataplugin.PluginDataObject; -import com.raytheon.uf.common.dataplugin.PluginException; import com.raytheon.uf.common.dataplugin.binlightning.BinLightningRecord; import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.common.time.TimeRange; import com.raytheon.uf.edex.decodertools.time.TimeTools; /** - * TODO Add Description + * Decoder for text lightning data * *
  * 
@@ -48,6 +46,7 @@ import com.raytheon.uf.edex.decodertools.time.TimeTools;
  * ------------ ---------- ----------- --------------------------
  * Mar 25, 2010            jsanchez    Initial creation
  * Aug 30, 2013 2298       rjpeter     Make getPluginName abstract
+ * Feb 12, 2014 2655       njensen     Set source
  * 
  * 
* @@ -57,7 +56,9 @@ import com.raytheon.uf.edex.decodertools.time.TimeTools; public class TextLightningDecoder extends AbstractDecoder implements IBinaryDecoder { - private final Log logger = LogFactory.getLog(getClass()); + + private static final IUFStatusHandler logger = UFStatus + .getHandler(TextLightningDecoder.class); private String traceId = null; @@ -66,6 +67,7 @@ public class TextLightningDecoder extends AbstractDecoder implements * will return false, decode() will return a null. */ public TextLightningDecoder() { + } /** @@ -116,11 +118,10 @@ public class TextLightningDecoder extends AbstractDecoder implements if (report != null) { report.setTraceId(traceId); - try { - report.constructDataURI(); - } catch (PluginException e) { - throw new DecoderException("Error constructing datauri", e); - } + + // TODO anyone have any idea what the source should actually be + // named? + report.setSource("text"); } return new PluginDataObject[] { report }; diff --git a/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/impl/TextLightningParser.java b/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/impl/TextLightningParser.java index 67c5f4389b..e76a82fb4a 100644 --- a/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/impl/TextLightningParser.java +++ b/edexOsgi/com.raytheon.edex.plugin.textlightning/src/com/raytheon/edex/plugin/textlightning/impl/TextLightningParser.java @@ -28,15 +28,15 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import com.raytheon.uf.common.dataplugin.binlightning.impl.LightningStrikePoint; import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgMsgType; import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgStrikeType; +import com.raytheon.uf.common.status.IUFStatusHandler; +import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; /** - * + * Parser for text lightning data * *
  * 
@@ -45,6 +45,7 @@ import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgStrikeType;
  * ------------ ---------- ----------- --------------------------
  * Dec 15, 2009       3983 jsanchez     Initial creation
  * Feb 27, 2013    DCS 152 jgerth/elau	Support for WWLLN
+ * Feb 12, 2014       2655 njensen      Use status handler for logging
  * 
  * 
* @@ -52,77 +53,85 @@ import com.raytheon.uf.common.dataplugin.binlightning.impl.LtgStrikeType; * @version 1.0 */ public class TextLightningParser { - + /** The logger */ - private Log logger = LogFactory.getLog(getClass()); - + private static final IUFStatusHandler logger = UFStatus + .getHandler(TextLightningParser.class); + int currentReport = -1; - + private List reports; - - // 03/23/2010 13:35:01 72.00 -157.00 -14 1 + + // 03/23/2010 13:35:01 72.00 -157.00 -14 1 private static final String LIGHTNING_PTRN_A = "(\\d{2,2}/\\d{2,2}/\\d{4,4}) (\\d{2,2}:\\d{2,2}:\\d{2,2})\\s{1,}(\\d{1,2}.\\d{2,2})\\s{1,}( |-\\d{1,3}.\\d{2,2})\\s{1,}( |-\\d{1,2})\\s{1,}(\\d{1,2})"; + private static final Pattern LTG_PTRN_A = Pattern.compile(LIGHTNING_PTRN_A); - // 10:03:24:13:35:00.68 72.000 157.000 -14.2 1 + // 10:03:24:13:35:00.68 72.000 157.000 -14.2 1 private static final String LIGHTNING_PTRN_B = "(\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}\\.\\d{2,2})\\s{1,}(\\d{1,2}\\.\\d{2,})\\s{1,}(-?\\d{1,3}\\.\\d{2,})\\s{1,}(-?\\d{1,3}\\.\\d{1,})\\s{1,}(\\d{1,2}).*"; + private static final Pattern LTG_PTRN_B = Pattern.compile(LIGHTNING_PTRN_B); // 2012-03-14T18:58:00,-5.5021,-45.9669,0.0,1 private static final String LIGHTNING_PTRN_C = "(\\d{4,4}-\\d{2,2}-\\d{2,2})T(\\d{2,2}:\\d{2,2}:\\d{2,2}),(-?\\d{1,2}.\\d{1,4}),(-?\\d{1,3}.\\d{1,4}),(0.0),(1)"; + private static final Pattern LTG_PTRN_C = Pattern.compile(LIGHTNING_PTRN_C); - + /** * default constructor. */ - public TextLightningParser(){ - //empty + public TextLightningParser() { + // empty } - - public TextLightningParser(byte [] message){ + + public TextLightningParser(byte[] message) { setData(message); } /** * Set the message data and decode all message reports. - * @param message Raw message data. + * + * @param message + * Raw message data. */ - private void setData(byte [] message) { + private void setData(byte[] message) { currentReport = -1; reports = findReports(message); - if((reports != null)&&(reports.size() > 0)) { + if ((reports != null) && (reports.size() > 0)) { currentReport = 0; } } - + /** * Does this parser contain any more reports. + * * @return Does this parser contain any more reports. */ public boolean hasNext() { boolean next = (reports != null); - if(next) { - next = ((currentReport >= 0)&&(currentReport < reports.size())); + if (next) { + next = ((currentReport >= 0) && (currentReport < reports.size())); } - if(!next) { + if (!next) { reports = null; currentReport = -1; } return next; } - + /** - * Get the next available report. Returns a null reference if no - * more reports are available. + * Get the next available report. Returns a null reference if no more + * reports are available. + * * @return The next available report. */ public LightningStrikePoint next() { - + LightningStrikePoint report = null; - if(currentReport < 0) { + if (currentReport < 0) { return report; } - if(currentReport >= reports.size()) { + if (currentReport >= reports.size()) { reports = null; currentReport = -1; } else { @@ -131,42 +140,41 @@ public class TextLightningParser { return report; } - /** - * + * * @param start * @return */ - private List findReports(byte [] message) { - List reports = new ArrayList(); - List lines = separateLines(message); - if(lines != null) { + private List findReports(byte[] message) { + List reports = new ArrayList(); + List lines = separateLines(message); + if (lines != null) { LightningStrikePoint strike; - for(String line : lines){ - try{ + for (String line : lines) { + try { Matcher m = LTG_PTRN_A.matcher(line); - if(m.matches()){ - String[] date = m.group(1).split("/"); - String[] time = m.group(2).split(":"); - String month = date[0]; - String day = date[1]; - String year = date[2]; - String hour = time[0]; - String min = time[1]; - String sec = time[2]; + if (m.matches()) { + String[] date = m.group(1).split("/"); + String[] time = m.group(2).split(":"); + String month = date[0]; + String day = date[1]; + String year = date[2]; + String hour = time[0]; + String min = time[1]; + String sec = time[2]; String latitude = m.group(3); - String longitude= m.group(4); + String longitude = m.group(4); String strength = m.group(5); - String count = m.group(6); - + String count = m.group(6); + strike = new LightningStrikePoint( Double.parseDouble(latitude), - Double.parseDouble(longitude)); + Double.parseDouble(longitude)); strike.setStrikeStrength(Double.parseDouble(strength)); strike.setStrikeCount(Integer.parseInt(count)); strike.setMonth(Integer.parseInt(month)); strike.setDay(Integer.parseInt(day)); - strike.setYear(Integer.parseInt(year)); + strike.setYear(Integer.parseInt(year)); strike.setHour(Integer.parseInt(hour)); strike.setMinute(Integer.parseInt(min)); strike.setSecond(Integer.parseInt(sec)); @@ -174,92 +182,94 @@ public class TextLightningParser { strike.setMsgType(LtgMsgType.STRIKE_MSG_FL); strike.setType(LtgStrikeType.STRIKE_CG); strike.setLightSource("UNKN"); - reports.add(strike); + reports.add(strike); } else { m = LTG_PTRN_B.matcher(line); - if(m.matches()){ + if (m.matches()) { String[] datetime = m.group(1).split(":"); - String year = datetime[0]; - String month = datetime[1]; - String day = datetime[2]; - String hour = datetime[3]; - String min = datetime[4]; - String sec = datetime[5].substring(0,2); - String msec = datetime[5].substring(3,5); - + String year = datetime[0]; + String month = datetime[1]; + String day = datetime[2]; + String hour = datetime[3]; + String min = datetime[4]; + String sec = datetime[5].substring(0, 2); + String msec = datetime[5].substring(3, 5); String latitude = m.group(2); - String longitude= m.group(3); + String longitude = m.group(3); String strength = m.group(4); - String count = m.group(5); - - + String count = m.group(5); + double lon = Double.parseDouble(longitude); - if(lon > 0) { + if (lon > 0) { lon = -lon; } strike = new LightningStrikePoint( - Double.parseDouble(latitude),lon); - strike.setStrikeStrength(Double.parseDouble(strength)); + Double.parseDouble(latitude), lon); + strike.setStrikeStrength(Double + .parseDouble(strength)); strike.setStrikeCount(Integer.parseInt(count)); strike.setMonth(Integer.parseInt(month)); strike.setDay(Integer.parseInt(day)); - strike.setYear(Integer.parseInt(year) + 2000); + strike.setYear(Integer.parseInt(year) + 2000); strike.setHour(Integer.parseInt(hour)); strike.setMinute(Integer.parseInt(min)); strike.setSecond(Integer.parseInt(sec)); - strike.setMillis(Integer.parseInt(msec)*10); + strike.setMillis(Integer.parseInt(msec) * 10); strike.setMsgType(LtgMsgType.STRIKE_MSG_FL); strike.setType(LtgStrikeType.STRIKE_CG); strike.setLightSource("UNKN"); - reports.add(strike); + reports.add(strike); } else { - m = LTG_PTRN_C.matcher(line); - if (m.matches()) { - String[] datec = m.group(1).split("-"); - String[] timec = m.group(2).split(":"); - String year = datec[0]; - String month = datec[1]; - String day = datec[2]; - String hour = timec[0]; - String min = timec[1]; - String sec = timec[2]; - String msec = "0"; - String sls = "WWLLN"; + m = LTG_PTRN_C.matcher(line); + if (m.matches()) { + String[] datec = m.group(1).split("-"); + String[] timec = m.group(2).split(":"); + String year = datec[0]; + String month = datec[1]; + String day = datec[2]; + String hour = timec[0]; + String min = timec[1]; + String sec = timec[2]; + String msec = "0"; + String sls = "WWLLN"; - String latitude = m.group(3); - String longitude= m.group(4); - String strength = m.group(5); - String count = m.group(6); + String latitude = m.group(3); + String longitude = m.group(4); + String strength = m.group(5); + String count = m.group(6); - strike = new LightningStrikePoint( - Double.parseDouble(latitude),Double.parseDouble(longitude)); - strike.setStrikeStrength(Double.parseDouble(strength)); - strike.setStrikeCount(Integer.parseInt(count)); - strike.setMonth(Integer.parseInt(month)); - strike.setDay(Integer.parseInt(day)); - strike.setYear(Integer.parseInt(year)); - strike.setHour(Integer.parseInt(hour)); - strike.setMinute(Integer.parseInt(min)); - strike.setSecond(Integer.parseInt(sec)); - strike.setMillis(Integer.parseInt(msec)*10); - strike.setMsgType(LtgMsgType.STRIKE_MSG_FL); - strike.setType(LtgStrikeType.STRIKE_CG); - strike.setLightSource(sls); - reports.add(strike); - } else { - logger.error("Cannot match lightning input " + line); - } + strike = new LightningStrikePoint( + Double.parseDouble(latitude), + Double.parseDouble(longitude)); + strike.setStrikeStrength(Double + .parseDouble(strength)); + strike.setStrikeCount(Integer.parseInt(count)); + strike.setMonth(Integer.parseInt(month)); + strike.setDay(Integer.parseInt(day)); + strike.setYear(Integer.parseInt(year)); + strike.setHour(Integer.parseInt(hour)); + strike.setMinute(Integer.parseInt(min)); + strike.setSecond(Integer.parseInt(sec)); + strike.setMillis(Integer.parseInt(msec) * 10); + strike.setMsgType(LtgMsgType.STRIKE_MSG_FL); + strike.setType(LtgStrikeType.STRIKE_CG); + strike.setLightSource(sls); + reports.add(strike); + } else { + logger.error("Cannot match lightning input " + + line); + } } } - } catch (NumberFormatException e){ - logger.debug("Invalid numerical value", e); + } catch (NumberFormatException e) { + logger.handle(Priority.DEBUG, "Invalid numerical value", e); } } } return reports; } - + /** * * @param message @@ -281,7 +291,7 @@ public class TextLightningParser { } } } catch (Exception e) { - logger.error("Error reading from reader",e); + logger.error("Error reading from reader", e); } finally { if (reader != null) { try { @@ -294,39 +304,40 @@ public class TextLightningParser { } return reportLines; } - - - public static final void main(String [] args) { - // 10: 03: 24: 13: 35: 00.68 72.000 157.000 -14.2 1 -// String LIGHTNING_PTRN_B = "(\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}\\.\\d{2,2})\\s{1,}(\\d{1,2}.\\d{2,})\\s{1,}( |-\\d{1,3}.\\d{2,})\\s{1,}( |-\\d{1,2}\\.\\d{1,})\\s{1,}(\\d{1,2})"; -// String LIGHTNING_PTRN_B = "(\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}\\.\\d{2,2})\\s{1,}(\\d{1,2}\\.\\d{2,})\\s{1,}(-?\\d{1,3}\\.\\d{2,})\\s{1,}(-?\\d{1,3}\\.\\d{1,})\\s{1,}(\\d{1,2}).*"; -// -// Pattern LTG_PTRN_B = Pattern.compile(LIGHTNING_PTRN_B); -// -// Matcher m = LTG_PTRN_B.matcher("10:03:24:13:35:00.68 72.000 157.000 -14.2 1"); -// if(m.matches()) { -// for(int i = 0;i <= m.groupCount();i++) { -// System.out.println(m.group(i)); -// } -// } - - - + + public static final void main(String[] args) { + // 10: 03: 24: 13: 35: 00.68 72.000 157.000 -14.2 1 + // String LIGHTNING_PTRN_B = + // "(\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}\\.\\d{2,2})\\s{1,}(\\d{1,2}.\\d{2,})\\s{1,}( |-\\d{1,3}.\\d{2,})\\s{1,}( |-\\d{1,2}\\.\\d{1,})\\s{1,}(\\d{1,2})"; + // String LIGHTNING_PTRN_B = + // "(\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}:\\d{2,2}\\.\\d{2,2})\\s{1,}(\\d{1,2}\\.\\d{2,})\\s{1,}(-?\\d{1,3}\\.\\d{2,})\\s{1,}(-?\\d{1,3}\\.\\d{1,})\\s{1,}(\\d{1,2}).*"; + // + // Pattern LTG_PTRN_B = Pattern.compile(LIGHTNING_PTRN_B); + // + // Matcher m = + // LTG_PTRN_B.matcher("10:03:24:13:35:00.68 72.000 157.000 -14.2 1"); + // if(m.matches()) { + // for(int i = 0;i <= m.groupCount();i++) { + // System.out.println(m.group(i)); + // } + // } + TextLightningParser parser = null; - - parser = new TextLightningParser("03/23/2010 13:35:01 72.00 -157.00 -14 1\n03/23/2010 13:36:01 72.00 -157.00 -14 1".getBytes()); - while(parser.hasNext()) { + + parser = new TextLightningParser( + "03/23/2010 13:35:01 72.00 -157.00 -14 1\n03/23/2010 13:36:01 72.00 -157.00 -14 1" + .getBytes()); + while (parser.hasNext()) { System.out.println(parser.next()); } - - - parser = new TextLightningParser("10:03:24:13:35:00.68 72.000 157.000 -14.2 1\n10:03:24:13:36:00.68 72.000 157.000 -14.2 1".getBytes()); - while(parser.hasNext()) { + + parser = new TextLightningParser( + "10:03:24:13:35:00.68 72.000 157.000 -14.2 1\n10:03:24:13:36:00.68 72.000 157.000 -14.2 1" + .getBytes()); + while (parser.hasNext()) { System.out.println(parser.next()); } - + } - - - + } diff --git a/edexOsgi/com.raytheon.edex.plugin.textlightning/utility/edex_static/base/distribution/textlightning.xml b/edexOsgi/com.raytheon.edex.plugin.textlightning/utility/edex_static/base/distribution/textlightning.xml index f3dca9b369..19cbea4177 100644 --- a/edexOsgi/com.raytheon.edex.plugin.textlightning/utility/edex_static/base/distribution/textlightning.xml +++ b/edexOsgi/com.raytheon.edex.plugin.textlightning/utility/edex_static/base/distribution/textlightning.xml @@ -19,6 +19,6 @@ further_licensing_information. --> - FAA_* - WWLLN_* + FAA_ + WWLLN_