package org.qdao.model;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import org.qdao.TableDescriptor;
import org.qdao.annotation.Column;
import org.qdao.annotation.Column.DBColumnType;
import org.qdao.annotation.PrimaryKey;
import org.qdao.annotation.Table;
@Table(name = "T_PROJECT", description = "FIRST_PROJECT")
public class Project {
@Column(name = "PHY_NAME", decimal = 1, length = 64, type = DBColumnType.NVARCHAR2, nullable = false)
@PrimaryKey()
public String physcialName;
@Column(name = "LGC_NAME", decimal = 1, length = 64, type = DBColumnType.NVARCHAR2, nullable = false)
public String logicalName;
@Column(name = "DESCRIPTION", length = 1024, type = DBColumnType.NVARCHAR2)
public String description;
public static void main(String args[]) {
Program p1 = new Program();
p1.identical = "WAMNET_PROGRAM";
p1.description = "WAMNET_PROGRAM_one";
Project p = new Project();
p.physcialName = "WAMNET";
p.logicalName = "wamnet";
p.description = "The WAMNET Project";
Class<?> tableClazz = p.getClass();
TableDescriptor tableDescriptor = getTableDescriptor(tableClazz);
// output the table's descriptor
print("TABLE'S NAME " + tableDescriptor.name +
" \t TABLE'S DESCRIPTION " + tableDescriptor.description);
for (String key : tableDescriptor.primaryKeys) {
print("primary key --> " + key);
}
for (TableDescriptor.ColumnDescription column : tableDescriptor.columns) {
print(column.decimal + '\t' +
column.description + '\t' +
column.length + '\t' +
column.name + '\t' +
column.nullable + '\t' +
column.type + '\t');
}
}
public static void print(Object o) {
System.out.println(o);
}
public static TableDescriptor getTableDescriptor(Class<?> tableClazz) {
TableDescriptor tableDescriptor = new TableDescriptor();
Table table = (Table) tableClazz.getAnnotation(Table.class);
if (table != null) {
tableDescriptor.name = table.name();
tableDescriptor.description = table.description();
}
Field[] fields = tableClazz.getDeclaredFields();
List<TableDescriptor.ColumnDescription> columnDescriptors =
new ArrayList<TableDescriptor.ColumnDescription>();
List<String> primaryKeys = new ArrayList<String>();
for (int i = 0; i < fields.length; i++) {
Column column = fields[i].getAnnotation(Column.class);
if (column != null) {
TableDescriptor.ColumnDescription columnDescription = new TableDescriptor.ColumnDescription();
columnDescription.decimal = column.decimal();
columnDescription.description = column.description();
columnDescription.name = column.name();
columnDescription.length = column.length();
columnDescription.nullable = column.nullable();
columnDescription.type = column.type();
columnDescriptors.add(columnDescription);
}
PrimaryKey primaryKey = fields[i].getAnnotation(PrimaryKey.class);
if (primaryKey != null) {
primaryKeys.add(column.name());
}
}
// set the columns
tableDescriptor.columns =
columnDescriptors.toArray(
new TableDescriptor.ColumnDescription[columnDescriptors.size()]);
tableDescriptor.primaryKeys = primaryKeys.toArray(new String[primaryKeys.size()]);
return tableDescriptor;
}
}