package org.activityinfo.server.endpoint.odk;
import com.google.common.base.Charsets;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
import org.activityinfo.model.form.FormClass;
import org.activityinfo.model.form.FormInstance;
import org.activityinfo.model.form.FormInstanceLabeler;
import org.activityinfo.model.resource.Resource;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.resource.Resources;
import org.activityinfo.server.command.ResourceLocatorSync;
import org.activityinfo.service.lookup.ReferenceChoice;
import java.io.IOException;
import java.net.URL;
import java.sql.Ref;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class TestResourceStore implements ResourceLocatorSync {
private Optional<FormInstance> lastUpdated = Optional.absent();
private Map<ResourceId, Resource> resources = Maps.newHashMap();
@Override
public void persist(FormInstance formInstance) {
lastUpdated = Optional.of(formInstance);
}
@Override
public FormClass getFormClass(ResourceId resourceId) {
Resource resource = resources.get(resourceId);
if(resource == null) {
throw new IllegalArgumentException(resourceId.asString());
}
return FormClass.fromResource(resource);
}
@Override
public FormInstance getFormInstance(ResourceId resourceId) {
Resource resource = resources.get(resourceId);
if(resource == null) {
throw new IllegalArgumentException(resourceId.asString());
}
return FormInstance.fromResource(resource);
}
@Override
public List<ReferenceChoice> getReferenceChoices(Set<ResourceId> range) {
List<ReferenceChoice> choices = Lists.newArrayList();
for(Resource resource : resources.values()) {
FormInstance instance = FormInstance.fromResource(resource);
if(range.contains(instance.getClassId())) {
choices.add(new ReferenceChoice(instance.getId(), FormInstanceLabeler.getLabel(instance)));
}
}
return choices;
}
public Resource getLastUpdated() {
return lastUpdated.get().asResource();
}
public TestResourceStore load(String resourceName) throws IOException {
URL url = getClass().getResource(resourceName);
JsonParser parser = new JsonParser();
String json = com.google.common.io.Resources.toString(url, Charsets.UTF_8);
JsonArray array = parser.parse(json).getAsJsonArray();
for(int i=0;i!=array.size();++i) {
Resource resource = Resources.fromJson(array.get(i).getAsJsonObject());
resources.put(resource.getId(), resource);
System.out.println("Loaded " + resource.getId());
}
return this;
}
}