package rescuecore2.messages; import java.util.List; import java.util.ArrayList; import java.util.Iterator; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; /** An abstract base class for Message objects. This class is implemented in terms of MessageComponent objects so subclasses need only provide a urn and a list of MessageComponent objects. */ public abstract class AbstractMessage implements Message { private String urn; private List<MessageComponent> components; /** Construct a message with a given urn. @param urn The urn of the message. */ protected AbstractMessage(String urn) { this.urn = urn; this.components = new ArrayList<MessageComponent>(); } /** Construct a message with a urn defined as an enum. @param urn The urn of the message. */ protected AbstractMessage(Enum<?> urn) { this(urn.toString()); } @Override public final String getURN() { return urn; } /** Get all the components of this message. @return A List of MessageComponent objects. */ public final List<MessageComponent> getComponents() { return components; } /** Add a message component. @param component The component to add. */ protected void addMessageComponent(MessageComponent component) { components.add(component); } @Override public String toString() { StringBuilder result = new StringBuilder(); result.append(urn); result.append(" : "); for (Iterator<MessageComponent> it = components.iterator(); it.hasNext();) { MessageComponent next = it.next(); result.append(next.toString()); if (it.hasNext()) { result.append(", "); } } return result.toString(); } @Override public void write(OutputStream out) throws IOException { for (MessageComponent next : components) { next.write(out); } } @Override public void read(InputStream in) throws IOException { for (MessageComponent next : components) { next.read(in); } } }