package org.dresdenocl.debug.model;
import java.util.List;
import org.dresdenocl.debug.util.OclStringUtil;
public class OclDebugMessage {
private static final char DELIMITER = ':';
private EOclDebugMessageType m_type;
private String[] m_arguments;
public OclDebugMessage(EOclDebugMessageType type, String[] arguments) {
m_type = type;
m_arguments = arguments;
}
public OclDebugMessage(EOclDebugMessageType messageType,
List<String> arguments) {
super();
m_type = messageType;
m_arguments = arguments.toArray(m_arguments);
}
public EOclDebugMessageType getMessageType() {
return m_type;
}
public String[] getArguments() {
return m_arguments;
}
public String serialize() {
java.util.List<String> parts = new java.util.ArrayList<String>();
parts.add(m_type.name());
for (String argument : m_arguments) {
parts.add(argument);
}
return OclStringUtil.encode(DELIMITER, parts);
}
public boolean hasType(EOclDebugMessageType type) {
return m_type.equals(type);
}
public static OclDebugMessage deserialize(String response) {
List<String> parts = OclStringUtil.decode(response, DELIMITER);
String messageType = parts.get(0);
String[] arguments = new String[parts.size() - 1];
for (int i = 1; i < parts.size(); i++) {
arguments[i - 1] = parts.get(i);
}
EOclDebugMessageType type = EOclDebugMessageType.valueOf(messageType);
OclDebugMessage message = new OclDebugMessage(type, arguments);
return message;
}
public String getArgument(int index) {
return m_arguments[index];
}
public String toString() {
return this.getClass().getSimpleName() + "[" + m_type.name() + ": "
+ OclStringUtil.explode(m_arguments, ", ") + "]";
}
}