package cms.model.meta;
import cms.model.model.PageEntity;
import cms.model.model.TemplateEntity;
import com.google.appengine.api.datastore.AsyncDatastoreService;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import org.slim3.datastore.CoreAttributeMeta;
import org.slim3.datastore.ModelMeta;
import org.slim3.datastore.ModelRef;
import org.slim3.datastore.ModelRefAttributeMeta;
import org.slim3.datastore.StringAttributeMeta;
import org.slim3.datastore.json.Default;
import org.slim3.datastore.json.JsonCoder;
import org.slim3.datastore.json.JsonReader;
import org.slim3.datastore.json.JsonRootReader;
import org.slim3.datastore.json.JsonWriter;
public final class PageEntityMeta extends ModelMeta<PageEntity> {
public final CoreAttributeMeta<PageEntity, Key> key =
new CoreAttributeMeta<PageEntity, Key>(this, "__key__", "key", Key.class);
public final CoreAttributeMeta<PageEntity, Long> version =
new CoreAttributeMeta<PageEntity, Long>(this, "version", "version", Long.class);
public final StringAttributeMeta<PageEntity> url =
new StringAttributeMeta<PageEntity>(this, "url", "url");
public final StringAttributeMeta<PageEntity> title =
new StringAttributeMeta<PageEntity>(this, "title", "title");
public final StringAttributeMeta<PageEntity> content =
new StringAttributeMeta<PageEntity>(this, "content", "content");
public final CoreAttributeMeta<PageEntity, Boolean> visible =
new CoreAttributeMeta<PageEntity, Boolean>(this, "visible", "visible", Boolean.class);
// public final CoreAttributeMeta<PageEntity, Integer> position =
// new CoreAttributeMeta<PageEntity, Integer>(this, "position", "position", Integer.class);
public final ModelRefAttributeMeta<PageEntity, ModelRef<TemplateEntity>, TemplateEntity> templateRef =
new ModelRefAttributeMeta<PageEntity, ModelRef<TemplateEntity>, TemplateEntity>(this, "templateRef", "templateRef", ModelRef.class, TemplateEntity.class);
//private static final persistencejs.utils.CreatedDate slim3_createdDateAttributeListener = new persistencejs.utils.CreatedDate();
private static final PageEntityMeta slim3_singleton = new PageEntityMeta();
/**
* @return the singleton
*/
public static PageEntityMeta get() {
return slim3_singleton;
}
/** */
public PageEntityMeta() {
super("PageEntity", PageEntity.class);
}
@Override
public PageEntity entityToModel(Entity entity) {
PageEntity model = new PageEntity();
model.setKey(entity.getKey());
model.setVersion((Long) entity.getProperty("version"));
model.setUrl((String) entity.getProperty("url"));
model.setTitle((String) entity.getProperty("title"));
model.setContent((String) entity.getProperty("content"));
model.setVisible(booleanToPrimitiveBoolean(((Boolean) entity.getProperty("visible"))));
// model.setPosition(longToPrimitiveInt((Long) entity.getProperty("position")));
if (model.getTemplateRef() == null) {
throw new NullPointerException("The property (templateRef) is null.");
}
model.getTemplateRef().setKey((Key) entity.getProperty("templateRef"));
return model;
}
@Override
public Entity modelToEntity(Object model) {
PageEntity m = (PageEntity) model;
Entity entity = null;
if (m.getKey() != null) {
entity = new Entity(m.getKey());
} else {
entity = new Entity(kind);
}
entity.setProperty("version", m.getVersion());
entity.setProperty("url", m.getUrl());
entity.setProperty("title", m.getTitle());
entity.setProperty("content", m.getContent());
entity.setProperty("visible", m.getVisible());
// entity.setProperty("position", m.getPosition());
if (m.getTemplateRef() == null) {
throw new NullPointerException("The property (templateRef) must not be null.");
}
entity.setProperty("templateRef", m.getTemplateRef().getKey());
entity.setProperty("slim3.schemaVersion", 1);
return entity;
}
@Override
protected Key getKey(Object model) {
PageEntity m = (PageEntity) model;
return m.getKey();
}
@Override
protected void setKey(Object model, Key key) {
validateKey(key);
PageEntity m = (PageEntity) model;
m.setKey(key);
}
@Override
protected long getVersion(Object model) {
PageEntity m = (PageEntity) model;
return m.getVersion() != null ? m.getVersion().longValue() : 0L;
}
@Override
protected void incrementVersion(Object model) {
PageEntity m = (PageEntity) model;
long ver = m.getVersion() != null ? m.getVersion().longValue() : 0L;
m.setVersion(Long.valueOf(ver + 1L));
}
@Override
protected void assignKeyToModelRefIfNecessary(AsyncDatastoreService ds, Object model) {
PageEntity m = (PageEntity) model;
if (m.getTemplateRef() == null) {
throw new NullPointerException("The property (templateRef) must not be null.");
}
m.getTemplateRef().assignKeyIfNecessary(ds);
}
@Override
protected void prePut(Object model) {
}
@Override
protected void postGet(Object model) {
}
@Override
public String getSchemaVersionName() {
return "slim3.schemaVersion";
}
@Override
public String getClassHierarchyListName() {
return "slim3.classHierarchyList";
}
@Override
protected boolean isCipherProperty(String propertyName) {
return false;
}
@Override
protected void modelToJson(JsonWriter writer, Object model, int maxDepth, int currentDepth) {
PageEntity m = (PageEntity) model;
writer.beginObject();
JsonCoder encoder = null;
if(m.getKey() != null){
writer.setNextPropertyName("key");
encoder = new Default();
encoder.encode(writer, m.getKey());
}
if(m.getVersion() != null){
writer.setNextPropertyName("version");
encoder = new Default();
encoder.encode(writer, m.getVersion());
}
writer.setNextPropertyName("url");
encoder = new Default();
encoder.encode(writer, m.getUrl());
writer.setNextPropertyName("title");
encoder = new Default();
encoder.encode(writer, m.getTitle());
writer.setNextPropertyName("content");
encoder = new Default();
encoder.encode(writer, m.getContent());
writer.setNextPropertyName("visible");
encoder = new Default();
encoder.encode(writer, m.getVisible());
// writer.setNextPropertyName("position");
// encoder = new Default();
// encoder.encode(writer, m.getPosition());
if(m.getTemplateRef() != null && m.getTemplateRef().getKey() != null){
writer.setNextPropertyName("templateRef");
encoder = new Default();
encoder.encode(writer, m.getTemplateRef(), maxDepth, currentDepth);
}
writer.endObject();
}
@Override
public PageEntity jsonToModel(JsonRootReader rootReader, int maxDepth, int currentDepth) {
PageEntity m = new PageEntity();
JsonReader reader = null;
JsonCoder decoder = null;
reader = rootReader.newObjectReader("key");
decoder = new Default();
m.setKey(decoder.decode(reader, m.getKey()));
reader = rootReader.newObjectReader("version");
decoder = new Default();
m.setVersion(decoder.decode(reader, m.getVersion()));
reader = rootReader.newObjectReader("url");
decoder = new Default();
m.setUrl(decoder.decode(reader, m.getUrl()));
reader = rootReader.newObjectReader("title");
decoder = new Default();
m.setTitle(decoder.decode(reader, m.getTitle()));
reader = rootReader.newObjectReader("content");
decoder = new Default();
m.setTitle(decoder.decode(reader, m.getContent()));
reader = rootReader.newObjectReader("visible");
decoder = new Default();
m.setVisible(decoder.decode(reader, m.getVisible()));
// reader = rootReader.newObjectReader("position");
// decoder = new Default();
// m.setPosition(decoder.decode(reader, m.getPosition()));
reader = rootReader.newObjectReader("templateRef");
decoder = new Default();
decoder.decode(reader, m.getTemplateRef(), maxDepth, currentDepth);
return m;
}
}