package org.akvo.gae.remoteapi; import java.util.ArrayList; import java.util.List; import com.google.appengine.api.datastore.DatastoreService; import com.google.appengine.api.datastore.Entity; import com.google.appengine.api.datastore.Key; import com.google.appengine.api.datastore.KeyFactory; /** * A utility class for RemoteAPI data retrieval */ public class DataUtils { public final static String SURVEY_KIND = "SurveyGroup"; public final static String FORM_KIND = "Survey"; public final static String FORM_INSTANCE_KIND = "SurveyInstance"; public final static String DATA_POINT_KIND = "SurveyInstance"; public final static String USER_KIND = "User"; public final static String DATA_POINT_STRING_ID = "surveyedLocaleIdentifier"; public final static String DATA_POINT_NUMERICAL_ID = "surveyedLocaleId"; public final static String USER_EMAIL_FIELD = "emailAddress"; public final static String USER_PERMISSION_FIELD = "permissionList"; public final static String USER_ROLE_FIELD = "superAdmin"; private final static int DEFAULT_BATCH_SIZE = 1000; /** Save entities in batches of a given size **/ public static void batchSaveEntities(DatastoreService ds, List<Entity> entities) { int startIdx = 0; while (startIdx < entities.size()) { int endIdx = startIdx + DEFAULT_BATCH_SIZE > entities.size() ? entities.size() : startIdx + DEFAULT_BATCH_SIZE; List<Entity> subList = new ArrayList<Entity>(entities.subList(startIdx, endIdx)); startIdx = endIdx; ds.put(subList); } } public static void batchDelete(DatastoreService ds, List<Long> ids, String entityKind) { List<Key> entities = new ArrayList<Key>(); for (Long id : ids) { entities.add(KeyFactory.createKey(entityKind, id)); } batchDelete(ds, entities); } public static void batchDelete(DatastoreService ds, List<Key> entities) { int startIdx = 0; while (startIdx < entities.size()) { int endIdx = startIdx + DEFAULT_BATCH_SIZE > entities.size() ? entities.size() : startIdx + DEFAULT_BATCH_SIZE; List<Key> subList = new ArrayList<Key>(entities.subList(startIdx, endIdx)); startIdx = endIdx; ds.delete(subList); } } }