package edu.dartmouth.cs.gae_sample.data;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.FilterPredicate;
import com.google.appengine.api.datastore.Transaction;
public class ContactDatastore {
private static final Logger mLogger = Logger
.getLogger(ContactDatastore.class.getName());
private static final DatastoreService mDatastore = DatastoreServiceFactory
.getDatastoreService();
//DatastoreService ds=DatastoreServiceFactory.getDatastoreService();
private static Key getParentKey() {
return KeyFactory.createKey(Contact.CONTACT_PARENT_ENTITY_ID,
Contact.CONTACT_PARENT_KEY_ID);
}
private static void createParentEntity() {
Entity entity = new Entity(getParentKey());
mDatastore.put(entity);
}
public static boolean add(Contact contact) {
if (getContactById(contact.mId, null) != null) {
mLogger.log(Level.INFO, "contact exists");
return false;
}
Key parentKey = getParentKey();
try {
mDatastore.get(parentKey);
} catch (Exception ex) {
createParentEntity();
}
Entity entity = new Entity(Contact.CONTACT_ENTITY_ID, contact.mId,
parentKey);
entity.setProperty(Contact.FIELD_ID_ID, contact.mId);
entity.setProperty(Contact.FIELD_ID_TEMA, contact.mTema);
entity.setProperty(Contact.FIELD_ID_TITULO, contact.mTitulo);
entity.setProperty(Contact.FIELD_ID_RESUMEN, contact.mResumen);
entity.setProperty(Contact.FIELD_ID_AUTORIND, contact.mAutorind);
entity.setProperty(Contact.FIELD_ID_AUTOR1, contact.mAutor1);
entity.setProperty(Contact.FIELD_ID_AUTOR2, contact.mAutor2);
entity.setProperty(Contact.FIELD_ID_AUTOR3, contact.mAutor3);
entity.setProperty(Contact.FIELD_ID_AUTOR4, contact.mAutor4);
entity.setProperty(Contact.FIELD_ID_AUTOR5, contact.mAutor5);
entity.setProperty(Contact.FIELD_ID_AUTOR6, contact.mAutor6);
entity.setProperty(Contact.FIELD_ID_AFILIACION, contact.mAfiliacion);
entity.setProperty(Contact.FIELD_ID_UNAL, contact.mUnal);
entity.setProperty(Contact.FIELD_ID_INSTITUCION, contact.mInstitucion);
entity.setProperty(Contact.FIELD_ID_CARGO, contact.mCargo);
entity.setProperty(Contact.FIELD_ID_DIA, contact.mDia);
entity.setProperty(Contact.FIELD_ID_MES, contact.mMes);
entity.setProperty(Contact.FIELD_ID_ANIO, contact.mAnio);
entity.setProperty(Contact.FIELD_ID_LUGAR, contact.mLugar);
entity.setProperty(Contact.FIELD_ID_FECHA, contact.mFecha);
entity.setProperty(Contact.FIELD_ID_NOMBRE, contact.mNombre);
entity.setProperty(Contact.FIELD_ID_EDITORIAL, contact.mEditorial);
entity.setProperty(Contact.FIELD_ID_UBICACION, contact.mUbicacion);
entity.setProperty(Contact.FIELD_ID_ACCESO, contact.mAcceso);
entity.setProperty(Contact.FIELD_ID_IMPORTANCIA, contact.mImportancia);
entity.setProperty(Contact.FIELD_ID_OBSERV, contact.mObserv);
entity.setProperty(Contact.FIELD_ID_AMBIENTAL, contact.mAmbiental);
entity.setProperty(Contact.FIELD_ID_BIENESTAR, contact.mBienestar);
entity.setProperty(Contact.FIELD_ID_DEMOCRACIA, contact.mDemocracia);
entity.setProperty(Contact.FIELD_ID_FORMACION, contact.mFormacion);
entity.setProperty(Contact.FIELD_ID_INVEST, contact.mInvest);
entity.setProperty(Contact.FIELD_ID_LEGADO, contact.mLegado);
entity.setProperty(Contact.FIELD_ID_MEGAT, contact.mMegat);
entity.setProperty(Contact.FIELD_ID_NALPUB, contact.mNalPub);
entity.setProperty(Contact.FIELD_ID_TERRIT, contact.mTerrit);
mDatastore.put(entity);
return true;
}
public static boolean update(Contact contact) {
Entity result = null;
try {
result = mDatastore.get(KeyFactory.createKey(getParentKey(),
Contact.CONTACT_ENTITY_ID, contact.mId));
result.setProperty(Contact.FIELD_ID_TEMA, contact.mTema);
result.setProperty(Contact.FIELD_ID_TITULO, contact.mTitulo);
result.setProperty(Contact.FIELD_ID_RESUMEN, contact.mResumen);
result.setProperty(Contact.FIELD_ID_AUTORIND, contact.mAutorind);
result.setProperty(Contact.FIELD_ID_AUTOR1, contact.mAutor1);
result.setProperty(Contact.FIELD_ID_AUTOR2, contact.mAutor2);
result.setProperty(Contact.FIELD_ID_AUTOR3, contact.mAutor3);
result.setProperty(Contact.FIELD_ID_AUTOR4, contact.mAutor4);
result.setProperty(Contact.FIELD_ID_AUTOR5, contact.mAutor5);
result.setProperty(Contact.FIELD_ID_AUTOR6, contact.mAutor6);
result.setProperty(Contact.FIELD_ID_AFILIACION, contact.mAfiliacion);
result.setProperty(Contact.FIELD_ID_UNAL, contact.mUnal);
result.setProperty(Contact.FIELD_ID_INSTITUCION, contact.mInstitucion);
result.setProperty(Contact.FIELD_ID_CARGO, contact.mCargo);
result.setProperty(Contact.FIELD_ID_DIA, contact.mDia);
result.setProperty(Contact.FIELD_ID_MES, contact.mMes);
result.setProperty(Contact.FIELD_ID_ANIO, contact.mAnio);
result.setProperty(Contact.FIELD_ID_LUGAR, contact.mLugar);
result.setProperty(Contact.FIELD_ID_FECHA, contact.mFecha);
result.setProperty(Contact.FIELD_ID_NOMBRE, contact.mNombre);
result.setProperty(Contact.FIELD_ID_EDITORIAL, contact.mEditorial);
result.setProperty(Contact.FIELD_ID_UBICACION, contact.mUbicacion);
result.setProperty(Contact.FIELD_ID_ACCESO, contact.mAcceso);
result.setProperty(Contact.FIELD_ID_IMPORTANCIA, contact.mImportancia);
result.setProperty(Contact.FIELD_ID_OBSERV, contact.mObserv);
result.setProperty(Contact.FIELD_ID_AMBIENTAL, contact.mAmbiental);
result.setProperty(Contact.FIELD_ID_BIENESTAR, contact.mBienestar);
result.setProperty(Contact.FIELD_ID_DEMOCRACIA, contact.mDemocracia);
result.setProperty(Contact.FIELD_ID_FORMACION, contact.mFormacion);
result.setProperty(Contact.FIELD_ID_INVEST, contact.mInvest);
result.setProperty(Contact.FIELD_ID_LEGADO, contact.mLegado);
result.setProperty(Contact.FIELD_ID_MEGAT, contact.mMegat);
result.setProperty(Contact.FIELD_ID_NALPUB, contact.mNalPub);
result.setProperty(Contact.FIELD_ID_TERRIT, contact.mTerrit);
mDatastore.put(result);
} catch (Exception ex) {
}
return false;
}
public static boolean delete(String id) {
// you can also use name to get key, then use the key to delete the
// entity from datastore directly
// because name is also the entity's key
// query
Filter filter = new FilterPredicate(Contact.FIELD_ID_ID,
FilterOperator.EQUAL, id);
Query query = new Query(Contact.CONTACT_ENTITY_ID);
query.setFilter(filter);
// Use PreparedQuery interface to retrieve results
PreparedQuery pq = mDatastore.prepare(query);
Entity result = pq.asSingleEntity();
boolean ret = false;
if (result != null) {
// delete
mDatastore.delete(result.getKey());
ret = true;
}
return ret;
}
// Recibimos el vector
public static ArrayList<Contact> query(String id, String vec[]) {
ArrayList<Contact> resultList = new ArrayList<Contact>();
if (id != null && !id.equals("")) {
Contact contact = getContactById(id, null);
if (contact != null) {
resultList.add(contact);
}
} else {
Query query = new Query(Contact.CONTACT_ENTITY_ID);
// get every record from datastore, no filter
query.setFilter(null);
// set query's ancestor to get strong consistency
query.setAncestor(getParentKey());
PreparedQuery pq = mDatastore.prepare(query);
int cont = 0;
for (Entity entity : pq.asIterable()) {
Contact contact = getContactFromEntity(entity);
// Si vector da 1 guardamos si no no -> if(vector[i]==1 resultList.add(contact))
if ((contact != null) /**&& (vec[cont] == "1") **/) {
resultList.add(contact);
}
cont++;
}
}
return resultList;
}
public static Contact getContactById(String id, Transaction txn) {
Entity result = null;
try {
result = mDatastore.get(KeyFactory.createKey(getParentKey(),Contact.CONTACT_ENTITY_ID, id));
} catch (Exception ex) {
}
return getContactFromEntity(result);
}
private static Contact getContactFromEntity(Entity entity) {
if (entity == null) {
return null;
}
return new Contact(
(String) entity.getProperty(Contact.FIELD_ID_ID),
(String) entity.getProperty(Contact.FIELD_ID_TEMA),
(String) entity.getProperty(Contact.FIELD_ID_TITULO),
(String) entity.getProperty(Contact.FIELD_ID_RESUMEN),
(String) entity.getProperty(Contact.FIELD_ID_AUTORIND),
(String) entity.getProperty(Contact.FIELD_ID_AUTOR1),
(String) entity.getProperty(Contact.FIELD_ID_AUTOR2),
(String) entity.getProperty(Contact.FIELD_ID_AUTOR3),
(String) entity.getProperty(Contact.FIELD_ID_AUTOR4),
(String) entity.getProperty(Contact.FIELD_ID_AUTOR5),
(String) entity.getProperty(Contact.FIELD_ID_AUTOR6),
(String) entity.getProperty(Contact.FIELD_ID_AFILIACION),
(String) entity.getProperty(Contact.FIELD_ID_UNAL),
(String) entity.getProperty(Contact.FIELD_ID_INSTITUCION),
(String) entity.getProperty(Contact.FIELD_ID_CARGO),
(String) entity.getProperty(Contact.FIELD_ID_DIA),
(String) entity.getProperty(Contact.FIELD_ID_MES),
(String) entity.getProperty(Contact.FIELD_ID_ANIO),
(String) entity.getProperty(Contact.FIELD_ID_LUGAR),
(String) entity.getProperty(Contact.FIELD_ID_FECHA),
(String) entity.getProperty(Contact.FIELD_ID_NOMBRE),
(String) entity.getProperty(Contact.FIELD_ID_EDITORIAL),
(String) entity.getProperty(Contact.FIELD_ID_UBICACION),
(String) entity.getProperty(Contact.FIELD_ID_ACCESO),
(String) entity.getProperty(Contact.FIELD_ID_IMPORTANCIA),
(String) entity.getProperty(Contact.FIELD_ID_OBSERV),
(String) entity.getProperty(Contact.FIELD_ID_AMBIENTAL),
(String) entity.getProperty(Contact.FIELD_ID_BIENESTAR),
(String) entity.getProperty(Contact.FIELD_ID_DEMOCRACIA),
(String) entity.getProperty(Contact.FIELD_ID_FORMACION),
(String) entity.getProperty(Contact.FIELD_ID_INVEST),
(String) entity.getProperty(Contact.FIELD_ID_LEGADO),
(String) entity.getProperty(Contact.FIELD_ID_MEGAT),
(String) entity.getProperty(Contact.FIELD_ID_NALPUB),
(String) entity.getProperty(Contact.FIELD_ID_TERRIT)
);
}
}