package cn.org.rapid_framework.generator.ext.tableconfig.model;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import cn.org.rapid_framework.generator.provider.db.table.TableFactory;
import cn.org.rapid_framework.generator.provider.db.table.TableFactoryListener;
import cn.org.rapid_framework.generator.provider.db.table.model.Table;
import cn.org.rapid_framework.generator.util.GLogger;
import cn.org.rapid_framework.generator.util.StringHelper;
public class TableConfigSet implements Iterable<TableConfig>,TableFactoryListener{
private Set<TableConfig> tableConfigs = new LinkedHashSet<TableConfig>();
private String _package;
public TableConfigSet() {
//增加监听器,用于table的自定义className
TableFactory tf = TableFactory.getInstance();
tf.addTableFactoryListener(this);
}
public String getPackage() {
return _package;
}
public void setPackage(String _package) {
this._package = _package;
setPackageForTableConfigs();
}
public Set<String> getSequences() {
Set<String> result = new LinkedHashSet<String>();
for(TableConfig c : tableConfigs) {
if(StringHelper.isNotBlank(c.getSequence())) {
result.add(c.getSequence());
}
}
return result;
}
public void addTableConfig(TableConfig t) {
setPackageIfBlank(t);
tableConfigs.add(t);
}
public Set<TableConfig> getTableConfigs() {
return Collections.unmodifiableSet(tableConfigs);
}
public void setTableConfigs(Set<TableConfig> tableConfigs) {
this.tableConfigs = tableConfigs;
setPackageForTableConfigs();
}
private void setPackageForTableConfigs() {
for(TableConfig t : this.tableConfigs) {
setPackageIfBlank(t); //FIXME 需要检查,如果 tableConfig.package为空,才可以设置,不然会覆盖 tableConfig已有的值
}
}
private void setPackageIfBlank(TableConfig t) {
if(StringHelper.isBlank(t.getPackage())) {
t.setPackage(getPackage());
}
}
public TableConfig getRequiredBySqlName(String sqlName) {
TableConfig tc = getBySqlName(sqlName);
if(tc == null) {
throw new IllegalArgumentException("not found TableConfig on TableConfigSet by sqlName:"+sqlName);
}
return tc;
}
public TableConfig getBySqlName(String sqlName) {
for(TableConfig c : tableConfigs) {
if(sqlName.equalsIgnoreCase(c.getSqlName())) {
return c;
}
}
return null;
}
public TableConfig getByClassName(String name) {
for(TableConfig c : tableConfigs) {
if(name.equals(c.getClassName())) {
return c;
}
}
return null;
}
public Iterator<TableConfig> iterator() {
return tableConfigs.iterator();
}
public void onTableCreated(Table table) {
TableConfig tc = getBySqlName(table.getSqlName());
if(tc == null) return;
tc.customTable(table);
// table.setClassName(tc.getClassName());
// if(StringHelper.isNotBlank(table.getRemarks())) {
// table.setTableAlias(table.getRemarks());
// }
//FIXME 还没有考虑TableConfigSet 的listener清除问题,
//TODO 增加单元测试
}
@Override
protected void finalize() throws Throwable {
super.finalize();
GLogger.warn("没有手工清除TableFactoryListener for TableConfigSet");
TableFactory.getInstance().removeTableFactoryListener(this);
}
}