|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.ka2ddo.ax25.AX25Message
org.ka2ddo.aprs.Message
public abstract class Message
This abstract class defines the common parts of one APRS message. Subclasses handle the details of specific message types.
| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class org.ka2ddo.ax25.AX25Message |
|---|
AX25Message.Precedence |
| Field Summary | |
|---|---|
protected java.lang.String |
comment
Free-text comment in this message. |
protected java.util.Map<java.lang.Enum,java.lang.Object> |
extensions
Optional map of extracted data fields in this APRS message. |
protected byte |
msgType
APRS message type code (prefix character in the message text). |
static java.lang.String |
S_PERMANENT
Reserved APRS timestamp string for permanent Objects. |
static java.lang.String |
S_PERMANENT_UC
Reserved APRS timestamp string for permanent Objects, with uppercase timezone letter. |
protected char |
symbolCode
The APRS symbol code within the specified table for the station originating this message. |
protected char |
symTableId
The APRS symbol table ID (or overlay character) for the station originating this message. |
static java.nio.charset.Charset |
USASCII
Character set for 7-bit ASCII. |
| Fields inherited from class org.ka2ddo.ax25.AX25Message |
|---|
ax25Frame, invalid, ISO_8859_1, originatingCallsign, PERMANENT, rcptTime, thirdParty, timestamp, UTC, UTF8 |
| Constructor Summary | |
|---|---|
protected |
Message()
Create an uninitialized message. |
protected |
Message(byte msgType,
java.lang.String thirdParty,
long rcptTime)
Set up this superclass's infrastructure for a particular message type at a particular receive time with the specified third-party routing. |
| Method Summary | ||
|---|---|---|
boolean |
bodyEquals(AX25Message o)
Compare the contents of the body of the message, reporting if they match. |
|
int |
compareTo(AX25Message o)
Compares this object with the specified object for order. |
|
protected int |
decodeDatestamp(byte[] body,
int pos)
Extract an APRS-standard 8-digit date/timestamp from a byte array presumably containing a timestamped APRS message and store it in the timestamp field of this Message object. |
|
protected int |
decodeHurricaneParams(byte[] body,
int offset)
Extract APRS-standard hurricane/tropical storm information from a message body. |
|
protected int |
decodeTimestamp(byte[] body,
int pos,
long rcvTimestamp)
Extract an APRS-standard 6-digit timestamp from a byte array presumably containing a timestamped APRS message and store it in the timestamp field of this Message object. |
|
protected int |
decodeWeatherParams(byte[] body,
int offset)
Extract APRS-standard weather information from a message body. |
|
protected int |
decodeWeatherParams(java.lang.String body,
int offset)
Extract APRS-standard weather information from a message body. |
|
AX25Message |
dup()
Creates and returns a deep copy of this Message. |
|
protected static java.lang.String |
encodeTimestamp(java.util.Date date,
long now)
Produce a APRS-standard 6-digit timestamp string for the specified date/time, using the most precise format possible relative to the current time. |
|
protected void |
extractComment(byte[] body,
int offset)
Extract the remaining text in the byte buffer as the free-text comment of this message. |
|
protected void |
extractComment(byte[] body,
int startPos,
int endPos)
Extract the remaining text in the byte buffer as the free-text comment of this message. |
|
static java.lang.String |
extractSymbol(java.lang.String dest)
Decode a symbol from the destination tocall (handling the case of old hardware and/or software whose limited message set does not include messages with symbol codes in the message body). |
|
static java.lang.String |
formatBody(byte[] body,
int offset)
Convert a byte array into a UTF8 printable string. |
|
java.lang.String |
getComment()
Get the free-text comment of this message, |
|
java.lang.Object |
getExtension(java.lang.Enum key)
Get a particular extension value from this message. |
|
java.lang.String |
getExtensionString()
Build a formatted string of the weather data known to this message, |
|
int |
getMsgType()
Get the APRS message type code for this message. |
|
java.util.Map<java.lang.Enum,java.lang.Object> |
getReadOnlyExtensionMap()
Get a reference to the extension map that should not be modified. |
|
char |
getSymbolCode()
Get the APRS symbol code for this Message. |
|
char |
getSymTableId()
Get the APRS symbol table ID or overlay character for this Message. |
|
boolean |
hasWeather()
Report if this Message contains weather information. |
|
protected void |
inferSymbol(AX25Callsign src,
AX25Callsign dst)
Decode a symbol from the destination AX25Callsign (handling the case of old hardware and/or software whose limited message set does not include messages with symbol codes in the message body). |
|
boolean |
isSymbolInferred()
Report whether the non-null APRS symbol reported by this message is explicit or inferred from destination or source callsign. |
|
protected static boolean |
looksLikeLongFormatLatitude(byte[] body,
int pos,
int len)
Test the byte array to see if it looks like it contains a APRS text-format (long) position indicator. |
|
java.lang.String |
paramString()
Descriptive text about this message, to be included in the toString() method's response. |
|
void |
setComment(java.lang.String comment)
Set the free-text comment for this Message. |
|
void |
setSymbolCode(char symbolCode)
Set the APRS symbol code for this Message. |
|
void |
setSymTableId(char symTableId)
Set the APRS symbol table ID or overlay character for this Message. |
|
|
storeExtension(K key,
V value)
Store an extracted data element in the Message. |
|
java.lang.String |
toString()
Returns a string representation of the object. |
|
| Methods inherited from class org.ka2ddo.ax25.AX25Message |
|---|
equals, extractSource, getAx25Frame, getFirstDigipeat, getLastDigipeat, getOriginalDestination, getOriginalSource, getOriginatingCallsign, getPrecedence, getRcptTime, getTimestamp, hashCode, hasPosition, hasThisFirstDigi, indexOf, indexOf, isInvalid, onlyDigits, onlyDigits, onlyDigitsOrPeriod, onlyDigitsOrSpace, onlyDigitsPlus, onlyPeriods, setAx25Frame, setInvalid, setOriginatingCallsign, setRcptTime, setTimestamp, split |
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
public static final java.lang.String S_PERMANENT
public static final java.lang.String S_PERMANENT_UC
public static final java.nio.charset.Charset USASCII
protected char symTableId
symbolCodeprotected char symbolCode
symTableIdprotected java.lang.String comment
protected java.util.Map<java.lang.Enum,java.lang.Object> extensions
protected byte msgType
| Constructor Detail |
|---|
protected Message()
protected Message(byte msgType,
java.lang.String thirdParty,
long rcptTime)
msgType - printable ASCII character identifying the APRS message typethirdParty - String of third-party network routing data (may be null)rcptTime - time in milliseconds since Jan 1 1970 UTC that message was received or created| Method Detail |
|---|
public boolean bodyEquals(AX25Message o)
bodyEquals in class AX25Messageo - another AX25Message to compare against
public int compareTo(AX25Message o)
compareTo in interface java.lang.Comparable<AX25Message>compareTo in class AX25Messageo - the object to be compared.
java.lang.ClassCastException - if the specified object's type prevents it
from being compared to this object.public java.lang.String toString()
toString in class AX25Messagepublic int getMsgType()
protected int decodeTimestamp(byte[] body,
int pos,
long rcvTimestamp)
body - byte array containing the messagepos - index into the array where the timestamp is supposed to startrcvTimestamp - default time (in Java milliseconds since Jan 1 1970 UTC) to use if
timestamp field is all period characters
AX25Message.timestamp
protected int decodeDatestamp(byte[] body,
int pos)
body - byte array containing the messagepos - index into the array where the timestamp is supposed to start
AX25Message.timestamp
protected static java.lang.String encodeTimestamp(java.util.Date date,
long now)
date - Data object of the time to formatnow - current time in Java milliseconds since 1970 UTC, to determine if 'date' is so far
away from current time that a format with the day in it is necessary
protected static boolean looksLikeLongFormatLatitude(byte[] body,
int pos,
int len)
body - byte array containing the APRS messagepos - index into the byte array where lat/lon values are supposed to startlen - remaining length of valid message bytes in the array
protected void extractComment(byte[] body,
int offset)
body - byte array containing the APRS messageoffset - index into the byte array where the free-text comment begins
protected void extractComment(byte[] body,
int startPos,
int endPos)
body - byte array containing the APRS messagestartPos - index into the byte array where the free-text comment beginsendPos - index into the byte array after the free-text comment endspublic java.lang.String paramString()
paramString in class AX25MessagetoString(),
getComment()
public <K extends java.lang.Enum,V> void storeExtension(K key,
V value)
K - any enum subclassV - any Java object classkey - Enum that identifies the particular data itemvalue - the data valueDataExtensionEnum,
WeatherEnumpublic java.util.Map<java.lang.Enum,java.lang.Object> getReadOnlyExtensionMap()
DataExtensionEnum,
WeatherEnumpublic java.lang.Object getExtension(java.lang.Enum key)
key - Enum instance identifying the desired extension
DataExtensionEnum,
WeatherEnum
public static java.lang.String formatBody(byte[] body,
int offset)
body - byte arrayoffset - start index into the array
public final char getSymbolCode()
public final char getSymTableId()
public void setSymbolCode(char symbolCode)
symbolCode - char of the symbol code, or '\0' if this Message should not include a symbolpublic void setSymTableId(char symTableId)
symTableId - char of the symbol table ID or overlay, or '\0' if this Message should not include a symbol
protected int decodeWeatherParams(byte[] body,
int offset)
body - byte array of message bodyoffset - starting position for parsing weather data
protected int decodeHurricaneParams(byte[] body,
int offset)
body - byte array of message bodyoffset - starting position for parsing weather data
protected int decodeWeatherParams(java.lang.String body,
int offset)
body - String of message bodyoffset - starting position for parsing weather data
public boolean hasWeather()
hasWeather in class AX25Messagepublic java.lang.String getExtensionString()
public java.lang.String getComment()
getComment in interface CommentedMessagepublic void setComment(java.lang.String comment)
setComment in interface CommentedMessagecomment - String free-text comment to associate with this Messagepublic boolean isSymbolInferred()
protected void inferSymbol(AX25Callsign src,
AX25Callsign dst)
src - source AX25Callsign to parse (assuming this Message was not relayed through a third-party network),
or null to not use source SSID as final fallbackdst - destination AX25Callsign to parse (assuming this Message was not relayed through a third-party network)public static java.lang.String extractSymbol(java.lang.String dest)
dest - destination String to parse
public AX25Message dup()
dup in class AX25MessageCloneable
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||