use of com.codename1.rad.processing.Result in project CodeRAD by shannah.
the class ResultParser method parse.
/**
* Parses a list of Maps or Elements into an EntityList.
* @param rows The rows to parse.
* @param out The entity list to append to.
* @return The resulting entity list (same as input parameter).
* @throws IOException If parsing failed.
*/
public EntityList parse(List rows, EntityList out) throws IOException {
for (Object row : rows) {
Entity rowEntity = null;
rowEntity = EntityType.createEntityForClass(out.getRowType().getEntityClass());
if (rowEntity == null) {
rowEntity = out.getRowType().newInstance();
}
Result rowResult;
if (row instanceof Element) {
rowResult = Result.fromContent((Element) row);
} else if (row instanceof Map) {
rowResult = Result.fromContent((Map) row);
} else {
throw new IOException("Row type " + row.getClass() + " not supported. Expected Map or Element.");
}
Entity parsed = parseRow(rowResult, rowEntity);
if (parsed != null) {
out.add(parsed);
}
}
return out;
}
use of com.codename1.rad.processing.Result in project CodeRAD by shannah.
the class ResultParser method createGetter.
/**
* Creates a getter for a given property.
* @param property
* @return
*/
private static Getter createGetter(Property property) {
Getter getter = null;
ContentType propType = property.getContentType();
if (propType == ContentType.BooleanType) {
getter = (rs, sel) -> {
return rs.getAsBoolean(sel);
};
} else if (propType == ContentType.DateType) {
getter = (rs, sel) -> {
return rs.getAsString(sel);
};
} else if (propType == ContentType.DoubleType || propType == ContentType.FloatType) {
getter = (rs, sel) -> {
return rs.getAsDouble(sel);
};
} else if (propType == ContentType.IntegerType) {
getter = (rs, sel) -> {
return rs.getAsInteger(sel);
};
} else if (propType == ContentType.LongType) {
getter = (rs, sel) -> {
return rs.getAsLong(sel);
};
} else if (propType == ContentType.Text) {
getter = (rs, sel) -> {
return rs.getAsString(sel);
};
} else if (propType.isEntityList()) {
getter = (rs, sel) -> {
try {
return rs.getAsArray(sel);
} catch (Throwable t) {
Log.p("Failed to get selector " + sel + " from result " + rs);
Log.e(t);
return null;
}
};
} else if (propType.isEntity()) {
getter = (rs, sel) -> {
return rs.get(sel);
};
}
return getter;
}
use of com.codename1.rad.processing.Result in project CodeRAD by shannah.
the class ResultParser method parseJSON.
public EntityList parseJSON(Reader json, EntityList dest, EntityType rowType) throws IOException {
JSONParser jsonParser = new JSONParser();
Map result = jsonParser.parseJSON(json);
List list = (List) result.get("root");
dest.setRowType(entityType);
parse(list, dest);
return dest;
}
use of com.codename1.rad.processing.Result in project CodeRAD by shannah.
the class ResultParserTest method testGetTagBodyAsString.
private void testGetTagBodyAsString() throws Exception {
String xml = "<?xml version=\"1.0\"?>\n<content>This is text content</content>";
Result r = Result.fromContent(xml, Result.XML);
String content = "This is text content";
assertEqual(content, r.getAsString("/content"));
assertEqual(content, r.getAsString("/content/text()"));
assertEqual(content, r.get("/content/text()"));
assertEqual(content, r.getAsString("./text()"));
assertEqual(content, r.getAsString("."));
xml = "<?xml version=\"1.0\"?>\n<a><b><c>Hello</c><d>World</d></b</a>";
r = Result.fromContent(xml, Result.XML);
assertEqual("Hello", r.getAsString("./b/c"));
assertEqual("World", r.getAsString("./b/d"));
assertEqual("Hello", r.getAsString("/a/b/c"));
assertEqual("Hello", r.getAsString("//a/b/c"));
assertEqual("Hello", r.get("./b/c/text()"));
}
use of com.codename1.rad.processing.Result in project CodeRAD by shannah.
the class ElementSelector method getDate.
/**
* Gets a date value on this selector. This uses a notation that allows you to target
* the current result, or a subselection.
* @param key The key. E.g. "@attname" for attribute. "tagname" for subtag. "subselector/@attname", "subselector/tagname"
* @param formats DateFormats to attempt to parse date with.
* @return
*/
public Date getDate(String key, DateFormat... formats) {
String o = getString(key, null);
if (o == null) {
return null;
}
String strval = String.valueOf(o);
if (strval.isEmpty()) {
return null;
}
for (DateFormat fmt : formats) {
try {
return fmt.parse(strval);
} catch (Throwable t) {
}
}
throw new RuntimeException("Failed to parse key " + key + " value " + o + " using any of the provided date formatters.");
}
Aggregations