Another step of handling the annotation of selectableValues.

This commit is contained in:
Purodha 2013-02-20 10:37:36 +00:00
parent 5eb2e851a8
commit 24223ea0b7
3 changed files with 21 additions and 9 deletions

View File

@ -11,5 +11,6 @@ public @interface AnnFieldIO {
String validation() default "[A-Za-z0-9\\_\\-]*"; String validation() default "[A-Za-z0-9\\_\\-]*";
ReadWriteAccess rw() default ReadWriteAccess.WRITEONCE; ReadWriteAccess rw() default ReadWriteAccess.WRITEONCE;
Class<?> referTo() default Void.class; Class<?> referTo() default Void.class;
Class<? extends DefaultSelectableValues> selectableValues() default DefaultSelectableValues.class;
String[] referredProps() default { }; String[] referredProps() default { };
} }

View File

@ -56,7 +56,7 @@ public class Domain extends AbstractEntity {
@Column(name = "domain_dns_master", columnDefinition = "character varying(64)") @Column(name = "domain_dns_master", columnDefinition = "character varying(64)")
private String dnsMaster; private String dnsMaster;
@AnnFieldIO(validation="[a-zA-Z0-9\\-\\.]*", rw=ReadWriteAccess.READWRITE, referTo=DomainOption.class) @AnnFieldIO(validation="[a-zA-Z0-9\\-\\.]*", rw=ReadWriteAccess.READWRITE, referTo=DomainOption.class, selectableValues=DomainOptionValues.class)
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.PERSIST) @ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.PERSIST)
@JoinTable(name="domain__domain_option", @JoinTable(name="domain__domain_option",
joinColumns={@JoinColumn(name="domain_id", referencedColumnName="domain_id")}, joinColumns={@JoinColumn(name="domain_id", referencedColumnName="domain_id")},

View File

@ -13,6 +13,7 @@ import de.hsadmin.core.model.AnnFieldIO;
import de.hsadmin.core.model.AuthenticationException; import de.hsadmin.core.model.AuthenticationException;
import de.hsadmin.core.model.HSAdminException; import de.hsadmin.core.model.HSAdminException;
import de.hsadmin.core.model.ReadWriteAccess; import de.hsadmin.core.model.ReadWriteAccess;
import de.hsadmin.core.model.SelectableValue;
import de.hsadmin.core.model.Transaction; import de.hsadmin.core.model.Transaction;
public class ModulePropertiesRemote implements IRemote { public class ModulePropertiesRemote implements IRemote {
@ -42,7 +43,7 @@ public class ModulePropertiesRemote implements IRemote {
for (Field f: entityClass.getDeclaredFields()) { for (Field f: entityClass.getDeclaredFields()) {
HashMap<String, Object> propertyProperties = new HashMap<String, Object>(); HashMap<String, Object> propertyProperties = new HashMap<String, Object>();
AnnFieldIO fieldIO = f.getAnnotation(AnnFieldIO.class); AnnFieldIO fieldIO = f.getAnnotation(AnnFieldIO.class);
if (fieldIO != null){ if (fieldIO != null) {
String fieldName = f.getName(); String fieldName = f.getName();
propertyProperties.put("property", fieldName); propertyProperties.put("property", fieldName);
String regExp = fieldIO.validation(); String regExp = fieldIO.validation();
@ -50,14 +51,24 @@ public class ModulePropertiesRemote implements IRemote {
ReadWriteAccess rw = fieldIO.rw(); ReadWriteAccess rw = fieldIO.rw();
propertyProperties.put("rw", rw.name()); propertyProperties.put("rw", rw.name());
String[] referredProps = fieldIO.referredProps(); String[] referredProps = fieldIO.referredProps();
propertyProperties.put("referredProps", referredProps); propertyProperties.put("referredProps", referredProps);
// Class<?> declaringClass = f.getDeclaringClass(); // Class<?> declaringClass = f.getDeclaringClass();
// declaringClass = f.getDeclaringClass(); // declaringClass = f.getDeclaringClass();
for(String s : referredProps){ for(String s : referredProps) {
String fullPropertyName = fieldName+"."+s; String fullPropertyName = fieldName+"."+s;
propertiesList.add(createReferredPropertyInfo(fullPropertyName, f, s)); propertiesList.add(createReferredPropertyInfo(fullPropertyName, f, s));
} }
AddCommonPropertyInfo(propertyProperties, f); ArrayList<Map<String,Object>> selectableValueslist = new ArrayList<Map<String,Object>>();
List<SelectableValue> selectableValues = fieldIO.selectableValues().newInstance().get();
propertyProperties.put("selectableValues", selectableValueslist);
for( SelectableValue s : selectableValues) {
String SelectableValueName = s.getName();
Object SelectableValues = s.getValues();
Map<String, Object> m = new HashMap<String, Object>();
m.put(SelectableValueName, SelectableValues);
selectableValueslist.add(m);
}
addCommonPropertyInfo(propertyProperties, f);
propertiesList.add(propertyProperties); propertiesList.add(propertyProperties);
} }
} }
@ -105,11 +116,11 @@ public class ModulePropertiesRemote implements IRemote {
// trace = trace + " TF=" + field.getName(); // trace = trace + " TF=" + field.getName();
remainingPart = remainingPart.substring(indexOfDot + 1); remainingPart = remainingPart.substring(indexOfDot + 1);
} }
AddCommonPropertyInfo(result, field); addCommonPropertyInfo(result, field);
return result; return result;
} }
private void AddCommonPropertyInfo(Map<String, Object> propertyInfo, Field sourceField) { private void addCommonPropertyInfo(Map<String, Object> propertyInfo, Field sourceField) {
propertyInfo.put("type", sourceField.getType().getName()); propertyInfo.put("type", sourceField.getType().getName());
} }