package org.activityinfo.core.shared.application;
import com.google.common.collect.Maps;
import org.activityinfo.model.form.FormClass;
import org.activityinfo.model.form.FormField;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.type.FieldTypeClass;
import org.activityinfo.model.type.ParametrizedFieldTypeClass;
import org.activityinfo.model.type.TypeRegistry;
import java.util.Map;
/**
* Provides application-level form classes
*/
public class ApplicationClassProvider {
private Map<ResourceId, FormClass> classMap = Maps.newHashMap();
public ApplicationClassProvider() {
classMap.put(FormClass.CLASS_ID, createFormClassClass());
classMap.put(FolderClass.CLASS_ID, FolderClass.get());
for (FieldTypeClass fieldTypeClass : TypeRegistry.get().getTypeClasses()) {
if(fieldTypeClass instanceof ParametrizedFieldTypeClass) {
FormClass parameterFormClass = ((ParametrizedFieldTypeClass)fieldTypeClass).getParameterFormClass();
classMap.put(parameterFormClass.getId(), parameterFormClass);
}
}
}
private FormClass createFormClassClass() {
FormField labelField = new FormField(ResourceId.valueOf(FormClass.LABEL_FIELD_ID));
labelField.setSuperProperty(ApplicationProperties.LABEL_PROPERTY);
FormClass formClass = new FormClass(FormClass.CLASS_ID);
formClass.addElement(labelField);
return formClass;
}
public FormClass get(ResourceId classId) {
FormClass formClass = classMap.get(classId);
if(formClass == null) {
throw new IllegalArgumentException("No such system class: " + classId);
}
return formClass;
}
}