Author: [log in to unmask]
Date: Sat Mar 14 12:21:53 2015
New Revision: 2446
Log:
Add field types to conditions table meta data.
Modified:
java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java
java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java
Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java
=============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java (original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/TableMetaData.java Sat Mar 14 12:21:53 2015
@@ -1,12 +1,15 @@
package org.hps.conditions.database;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.hps.conditions.api.AbstractConditionsObjectCollection;
import org.hps.conditions.api.ConditionsObject;
+import org.hps.conditions.api.ConditionsObjectCollection;
/**
* <p>
@@ -30,6 +33,7 @@
protected Class<? extends ConditionsObject> objectClass;
protected Class<? extends AbstractConditionsObjectCollection<?>> collectionClass;
protected Set<String> fieldNames = new LinkedHashSet<String>();
+ protected Map<String, Class<?>> fieldTypes;
/**
* The fully qualified constructor.
@@ -37,19 +41,53 @@
* @param objectClass The type of object for the data mapping.
* @param collectionClass The type of collection for the data mapping.
*/
- public TableMetaData(String key, String tableName, Class<? extends ConditionsObject> objectClass, Class<? extends AbstractConditionsObjectCollection<?>> collectionClass) {
+ /*
+ public TableMetaData(
+ String key,
+ String tableName,
+ Class<? extends ConditionsObject> objectClass,
+ Class<? extends AbstractConditionsObjectCollection<?>> collectionClass,
+ Map<String, Class<?>> fieldTypes) {
+
this.key = key;
this.tableName = tableName;
this.objectClass = objectClass;
this.collectionClass = collectionClass;
+ this.fieldTypes = fieldTypes;
}
+ */
- public TableMetaData(String key, String tableName, Class<? extends ConditionsObject> objectClass, Class<? extends AbstractConditionsObjectCollection<?>> collectionClass, Set<String> fieldNames) {
+ public TableMetaData(
+ String key,
+ String tableName,
+ Class<? extends ConditionsObject> objectClass,
+ Class<? extends AbstractConditionsObjectCollection<?>> collectionClass,
+ Set<String> fieldNames,
+ Map<String, Class<?>> fieldTypes) {
+ if (key == null) {
+ throw new IllegalArgumentException("key is null");
+ }
+ if (tableName == null) {
+ throw new IllegalArgumentException("tableName is null");
+ }
+ if (objectClass == null) {
+ throw new IllegalArgumentException("objectClass is null");
+ }
+ if (fieldNames == null) {
+ throw new IllegalArgumentException("fieldNames is null");
+ }
+ if (collectionClass == null) {
+ throw new IllegalArgumentException("collectionClass is null");
+ }
+ if (fieldTypes == null) {
+ throw new IllegalArgumentException("fieldTypes is null");
+ }
this.key = key;
this.tableName = tableName;
this.objectClass = objectClass;
this.collectionClass = collectionClass;
this.fieldNames = fieldNames;
+ this.fieldTypes = fieldTypes;
}
/**
@@ -77,15 +115,11 @@
}
/**
- * Add a field.
- * @param name The name of the field.
+ * Get the type of the field called <code>fieldName</code>.
+ * @return The type of the field.
*/
- void addField(String name) {
- fieldNames.add(name);
- }
-
- void addFields(List<String> names) {
- fieldNames.addAll(names);
+ public Class<?> getFieldType(String fieldName) {
+ return fieldTypes.get(fieldName);
}
/**
@@ -106,16 +140,12 @@
}
static public List<TableMetaData> findByObjectType(List<TableMetaData> tableMetaDataList, Class<? extends ConditionsObject> objectType) {
- //System.out.println("findByObjectType - " + objectType.getCanonicalName());
List<TableMetaData> list = new ArrayList<TableMetaData>();
for (TableMetaData tableMetaData : tableMetaDataList) {
- //System.out.println("comparing to " + tableMetaData.getObjectClass().getCanonicalName());
if (tableMetaData.getObjectClass().equals(objectType)) {
- //System.out.println("found match");
+
list.add(tableMetaData);
- } /*else {
- System.out.println("does not match");
- }*/
+ }
}
return list;
}
Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java
=============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java (original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/TableRegistry.java Sat Mar 14 12:21:53 2015
@@ -1,8 +1,11 @@
package org.hps.conditions.database;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.hps.conditions.api.AbstractConditionsObjectCollection;
@@ -42,13 +45,32 @@
static TableRegistry create() {
TableRegistry registry = new TableRegistry();
for (Class<? extends ConditionsObject> objectType : ConditionsObjectUtilities.findConditionsObjectTypes()) {
+
+ // Get the collection type.
Class<? extends AbstractConditionsObjectCollection<?>> collectionType =
ConditionsObjectUtilities.getCollectionType(objectType);
+
+ // Get the list of field names.
Set<String> fieldNames = ConditionsObjectUtilities.getFieldNames(objectType);
- for (String name : ConditionsObjectUtilities.getTableNames(objectType)) {
-
+
+ // Create map of fields to their types.
+ Map<String, Class<?>> fieldTypes = new HashMap<String, Class<?>>();
+ for (Method method : objectType.getMethods()) {
+ if (!method.getReturnType().equals(Void.TYPE)) {
+ for (Annotation annotation : method.getAnnotations()) {
+ if (annotation.annotationType().equals(Field.class)) {
+ Field field = (Field) annotation;
+ for (String fieldName : field.names()) {
+ fieldTypes.put(fieldName, method.getReturnType());
+ }
+ }
+ }
+ }
+ }
+
+ for (String name : ConditionsObjectUtilities.getTableNames(objectType)) {
// Create a meta data mapping for each table name in the class description.
- TableMetaData data = new TableMetaData(name, name, objectType, collectionType, fieldNames);
+ TableMetaData data = new TableMetaData(name, name, objectType, collectionType, fieldNames, fieldTypes);
registry.put(name, data);
registry.objectTypeMap.add(objectType, data);
registry.collectionTypeMap.add(collectionType, data);
|