/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.db;
import org.ralasafe.util.Util;
/**
* Unlike {@link Table}, <code>ComplexTable</code> means collection of many tables.
* It include a MainTable(required), SingleValueTable(optional,zero,one or many),
* MultiValueTable(optional,zero,one or many).
*
* <p>
* An entity contains many attributes. Some attributes are single normal values,
* like attr1=1, attr2="name".
* While others are collection values, like attr3=[1,2,3], attr4=["name1","name2","name3"].
*
* Single value attributes store in MainTable and SingleValueTable, while collection
* value attributes store in MultiValueTable.
* </p>
*
* <p>
* For db structure, SingleValueTable and MultiValueTable, they also
* contain idColumns of MainTable. And for SingleValueTable(s), idColumns
* must be SingleValueTable's idColumns too.
* </p>
*
* <p>
* There's no difference between MainTable and SingleValueTable.
* It's suggested that attributes which should be loaded immediately (not lazily) stored in MainTable.
* </p>
*
* @author back
*
*/
public class ComplexTable {
private Table mainTable;
/** SingleValueTables, maybe null */
private Table[] singleValueTables;
/** MutliValueTables, maybe null */
private Table[] multiValueTables;
public Table getMainTable() {
return mainTable;
}
public void setMainTable( Table mainTable ) {
this.mainTable=mainTable;
}
public Table[] getSingleValueTables() {
return singleValueTables;
}
public void setSingleValueTables( Table[] singleValueTables ) {
this.singleValueTables=singleValueTables;
}
public Table[] getMultiValueTables() {
return multiValueTables;
}
public void setMultiValueTables( Table[] multiValueTables ) {
this.multiValueTables=multiValueTables;
}
public SingleValueTableAdapter[] getDefaultSingleValueTableAdapters() {
if( !Util.isEmpty( singleValueTables ) ) {
SingleValueTableAdapter[] singleValueTableAdapters=
new DefaultSingleValueTableAdapter[singleValueTables.length];
for( int i=0; i<singleValueTables.length; i++ ) {
Table table=singleValueTables[i];
String mapKey=table.getId()+"";
//String[] idColumnName=mainTable.getIdColumnNames();
DefaultSingleValueTableAdapter adapter=new DefaultSingleValueTableAdapter( mapKey );
singleValueTableAdapters[i]=adapter;
}
return singleValueTableAdapters;
} else {
return null;
}
}
public MultiValueTableAdapter[] getDefaultMultiValueTableAdapters() {
if( !Util.isEmpty( multiValueTables ) ) {
DefaultMultiValueTableAdapter[] multiValueTableAdapters=
new DefaultMultiValueTableAdapter[multiValueTables.length];
for( int i=0; i<multiValueTables.length; i++ ) {
Table table=multiValueTables[i];
String mapKey=table.getId()+"";
DefaultMultiValueTableAdapter adapter=new DefaultMultiValueTableAdapter( mapKey );
multiValueTableAdapters[i]=adapter;
}
return multiValueTableAdapters;
} else {
return null;
}
}
}