package models;
import play.modules.morphia.Model;
import play.modules.morphia.MorphiaPlugin;
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
import com.google.code.morphia.query.Query;
import com.google.code.morphia.query.UpdateOperations;
public class IdTools {
public static <T extends Model> Long generateLongId(Class c) {
String idName = c.getCanonicalName();
Query q = MorphiaPlugin.ds().find(LongIdEntity.class, "_id", idName);
UpdateOperations uOps = MorphiaPlugin.ds()
.createUpdateOperations(LongIdEntity.class).inc("value");
LongIdEntity newId = (LongIdEntity) MorphiaPlugin.ds().findAndModify(q,
uOps);
if (newId == null) {
newId = new LongIdEntity(idName);
MorphiaPlugin.ds().save(newId);
}
return newId.getValue();
}
public static void resetAllIds() {
MorphiaPlugin.ds().delete(
MorphiaPlugin.ds().createQuery(LongIdEntity.class));
}
@Entity(value = "ids", noClassnameStored = true)
public static class LongIdEntity {
@Id
final String idName;
protected Long value = Long.valueOf(1L);
public LongIdEntity(String idName) {
this.idName = idName;
}
public Long getValue() {
return this.value;
}
}
}