package xapi.model.service;
import xapi.dev.source.CharBuffer;
import xapi.model.api.Model;
import xapi.model.api.ModelKey;
import xapi.model.api.ModelManifest;
import xapi.model.api.ModelQuery;
import xapi.model.api.ModelQueryResult;
import xapi.model.api.PrimitiveSerializer;
import xapi.source.api.CharIterator;
import xapi.util.api.SuccessHandler;
public interface ModelService {
String register(Class<? extends Model> model);
<T extends Model> T create(Class<T> key);
<M extends Model> void persist(M model, SuccessHandler<M> callback);
<M extends Model> void query(Class<M> modelClass, ModelQuery<M> query, SuccessHandler<ModelQueryResult<M>> callback);
void query(ModelQuery<Model> query, SuccessHandler<ModelQueryResult<Model>> callback);
<M extends Model> CharBuffer serialize(final Class<M> cls, final M model);
<M extends Model> CharBuffer serialize(final ModelManifest manifest, final M model);
<M extends Model> Class<M> typeToClass(String kind);
<M extends Model> M deserialize(final Class<M> cls, final CharIterator model);
<M extends Model> M deserialize(final ModelManifest manifest, final CharIterator model);
PrimitiveSerializer primitiveSerializer();
String keyToString(ModelKey key);
ModelKey keyFromString(String key);
ModelKey newKey(String namespace, String kind);
ModelKey newKey(String namespace, String kind, String id);
<M extends Model> void load(Class<M> modelClass, ModelKey modelKey, SuccessHandler<M> callback);
}