for (int i = key.size() - 1; i >= 0; i--) {
Key key = this.key.get(i);
String name = key.getName();
String value = key.getValue();
if (value != null) {
data[i] = new StringData(name, value);
} else {
Object o = relay.get(name);
if (o == null) {
data[i] = new NullData(name);
} else {
Class<?> c = o.getClass();
if (c == Boolean.class) {
data[i] = new BooleanData(name, (Boolean) o);
} else if (c == Integer.class) {
data[i] = new IntData(name, (Integer) o);
} else if (c == Long.class) {
data[i] = new LongData(name, (Long) o);
} else if (c == String.class) {
data[i] = new StringData(name, (String) o);
} else {
// HARDCODE
throw new DataTypeException("Only boolean, integer, long and string are allowed for keyword");
}
}