/** * */ package xapi.model.api; import static xapi.collect.X_Collect.newList; import java.util.List; import xapi.collect.api.IntTo; import xapi.model.service.ModelService; /** * @author James X. Nelson (james@wetheinter.net, @james) * */ public class ModelQueryResult <M extends Model> { private String cursor; private final IntTo<M> models; private final Class<M> modelClass; public ModelQueryResult(final Class<M> modelClass) { models = newList(modelClass); this.modelClass = modelClass; } public ModelQueryResult<M> addModel(final M model) { models.add(model); return this; } /** * @return -> models */ public Iterable<M> getModels() { return models.forEach(); } public List<M> getModelList() { return models.asList(); } /** * @return -> cursor */ public String getCursor() { return cursor; } /** * @param cursor -> set cursor * @return */ public ModelQueryResult<M> setCursor(final String cursor) { this.cursor = cursor; return this; } /** * @return */ public int getSize() { return models.size(); } public String serialize(final ModelService service, final PrimitiveSerializer primitives) { final StringBuilder b = new StringBuilder(); b.append(primitives.serializeString(getCursor())); b.append(primitives.serializeInt(getSize())); if (modelClass == Model.class) { // Model type was unknown, we need to serialize all type names for (final M model : models.forEach()) { b.append(primitives.serializeString(model.getType())); b.append(service.serialize(service.typeToClass(model.getType()), model)); } } else { // Model type was known, just serialize the models. for (final M model : models.forEach()) { b.append(service.serialize(modelClass, model)); } } return b.toString(); } }