OpenTTCN/Developer corner/Implementing external functions/Skeletons/Java/CD impl.java
From OpenTTCN
Home | Developer's corner | Knowledge base | Working documents | Documentation | OpenTTCN IDE | Tutorials | Training | How do I | Frequently asked questions | Technical support |
CD_impl.java
package extFuncAdapter;
import org.etsi.ttcn.tci.*;
import org.etsi.ttcn.tri.*;
import com.openttcn.sdk.StartHereCD;
import com.openttcn.sdk.FormatConverter;
import com.openttcn.sdk.TriFactory;
import com.openttcn.sdk.AdapterException;
class CD_impl implements TciCDProvided {
private TriMessage stringToTriMessage(String buffer) {
byte[] bufferBytes = null;
try {
bufferBytes = buffer.getBytes("UTF-8");
}
catch (java.io.UnsupportedEncodingException e) {
throw new AdapterException(e);
}
return TriFactory.createTriMessage(bufferBytes);
}
private static String triMessageToString(TriMessage message) {
String s = null;
try {
s = new String(message.getEncodedMessage(), "UTF-8");
}
catch (java.io.UnsupportedEncodingException e) {
throw new AdapterException(e);
}
return s;
}
public TriMessage encode(Value value) {
System.out.println("encode(): value = " +
((value != null) ? value.toString() : "null"));
if (value.getType().getTypeClass() == TciTypeClass.CHARSTRING) {
CharstringValue v = (CharstringValue) value;
String buffer = "TypeCode=charstring:TypeName=" +
value.getType().getName() + ":Value=" +
FormatConverter.charstringToOctetstring(
v.getString().substring(1, v.getLength() + 1));
return stringToTriMessage(buffer);
}
else if (value.getType().getTypeClass() == TciTypeClass.INTEGER) {
IntegerValue v = (IntegerValue) value;
String buffer = "TypeCode=integer:TypeName=" +
value.getType().getName() + ":Value=" + v.toString();
return stringToTriMessage(buffer);
}
throw new AdapterException(
"Unable to encode value '" + value.toString() + "'.");
}
public Value decode(
TriMessage message,
Type decodingHypothesis) {
TciCDRequired req = StartHereCD.getTciCDRequired();
String s = triMessageToString(message);
String[] elems = FormatConverter.split(s, ':');
String typeCode = "";
String typeName = "";
String value = "";
for (String elem : elems) {
String[] subelems = FormatConverter.split(elem, '=');
String subelemTag = subelems[0];
String subelemValue = subelems[1];
if (subelemTag.equals("TypeCode")) typeCode = subelemValue;
else if (subelemTag.equals("TypeName")) typeName = subelemValue;
else if (subelemTag.equals("Value")) value = subelemValue;
else {
throw new AdapterException(
"Unrecognized element tag in element: " + elem + ".");
}
}
if (typeCode.equals("charstring")) {
CharstringValue result =
(CharstringValue) req.getTypeForName(typeName).newInstance();
result.setString("\"" + FormatConverter.octetstringToCharstring(value) + "\"");
return result;
}
else if (typeCode.equals("integer")) {
IntegerValue result =
(IntegerValue) req.getTypeForName(typeName).newInstance();
((com.openttcn.sdk.IntegerValue) result).setValue(Long.parseLong(value));
return result;
}
throw new AdapterException("Unable to decode value '" + s + "'.");
}
}
