package http.resource.template;
import java.util.List;
import nebula.data.DataRepos;
import nebula.data.DataStore;
import nebula.data.Entity;
import com.google.common.base.Preconditions;
import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.CollectionModel;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
public class LoadDataMethod implements TemplateMethodModel {
DataRepos dataWareHouse;
public LoadDataMethod(DataRepos dataWareHouse) {
this.dataWareHouse = dataWareHouse;
}
@SuppressWarnings("rawtypes")
public TemplateModel exec(List args) throws TemplateModelException {
if (args.size() == 1) {
Preconditions.checkNotNull(args.get(0));
return this.doLoad((String) args.get(0));
} else if (args.size() == 3) {
Preconditions.checkNotNull(args.get(0));
Preconditions.checkNotNull(args.get(1));
Preconditions.checkNotNull(args.get(2));
return this.doLoad((String) args.get(0), (String) args.get(1), (String) args.get(2));
}
return null;
}
public TemplateModel doLoad(String key) throws TemplateModelException {
DataStore<Entity> datastore = dataWareHouse.define(String.class, Entity.class, key);
return new DatastoreTemplateHashModel(datastore);
}
public TemplateModel doLoad(String key, String classificatorName, String classificatorValue) throws TemplateModelException {
DataStore<Entity> datastore = dataWareHouse.define(String.class, Entity.class, key);
List<Entity> list = datastore.getClassificator(classificatorName).getData(classificatorValue);
return new CollectionModel(list, (BeansWrapper) ObjectWrapper.SIMPLE_WRAPPER);
}
}