/*
* Copyright (C) 2015 Stichting Akvo (Akvo Foundation)
*
* This file is part of Akvo FLOW.
*
* Akvo FLOW is free software: you can redistribute it and modify it under the terms of
* the GNU Affero General Public License (AGPL) as published by the Free Software Foundation,
* either version 3 of the License or any later version.
*
* Akvo FLOW is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License included below for more details.
*
* The full license text can also be seen at <http://www.gnu.org/licenses/agpl.html>.
*/
package org.akvo.gae.remoteapi;
import java.util.HashMap;
import java.util.Map;
import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.KeyFactory;
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;
public class PublicPrivateInstanceCount implements Process {
@Override
public void execute(DatastoreService ds, String[] args) throws Exception {
int chunkSize = Integer.valueOf(args[0]);
String appId = args[1];
Query sq = new Query("Survey");
Map<Long, Entity> sgs = new HashMap<Long, Entity>();
for (Entity s : ds.prepare(sq).asIterable(FetchOptions.Builder.withChunkSize(chunkSize))) {
Long surveyGroupId = (Long) s.getProperty("surveyGroupId");
if (surveyGroupId == null) {
continue;
}
if (!sgs.containsKey(surveyGroupId)) {
Filter f = new FilterPredicate(Entity.KEY_RESERVED_PROPERTY, FilterOperator.EQUAL,
KeyFactory.createKey("SurveyGroup", surveyGroupId));
Query qsg = new Query("SurveyGroup").setFilter(f);
Entity sg = ds.prepare(qsg).asSingleEntity();
sgs.put(surveyGroupId, sg);
}
String type = "PRIVATE";
Entity sg = sgs.get(surveyGroupId);
if (sg != null) {
String pl = (String) sg.getProperty("privacyLevel");
if (pl == null) {
type = getPrivacyLevelFromSurvey(s);
} else {
type = pl.toUpperCase();
}
} else {
type = getPrivacyLevelFromSurvey(s);
}
Filter fsi = new FilterPredicate("surveyId", FilterOperator.EQUAL, s.getKey().getId());
Query si = new Query("SurveyInstance").setFilter(fsi).setKeysOnly();
long count = 0;
for (@SuppressWarnings("unused")
Entity sie : ds.prepare(si).asIterable(
FetchOptions.Builder.withChunkSize(chunkSize))) {
count++;
}
String out = String.format("%s,%s,%s,%s,%s", appId, s.getKey().getId(),
s.getProperty("name"),
type, count);
System.out.println(out);
}
}
private String getPrivacyLevelFromSurvey(Entity s) {
String pointType = (String) s.getProperty("pointType");
return "Household".equals(pointType) ? "PRIVATE" : "PUBLIC";
}
}