package com.github.geequery.codegen; import java.io.File; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import jef.common.JefException; import jef.database.DbClient; import jef.database.DbMetaData; import jef.database.meta.TableInfo; import com.github.geequery.codegen.pdm.IMetaLoader; import com.github.geequery.codegen.pdm.PDMetaLoader; import com.github.geequery.codegen.pdm.model.MetaModel; import com.github.geequery.codegen.pdm.model.MetaTable; public interface MetaProvider{ /** * 得到表的元数据 * @param tablename * @return * @throws SQLException */ Metadata getTableMetadata(String tablename) throws SQLException; /** * 得到所有表 key=表名 value=备注 * @return * @throws SQLException */ List<TableInfo> getTables() throws SQLException; String getSchema(); public static class DbClientProvider implements MetaProvider{ private DbClient db; public DbClientProvider(DbClient db){ this.db=db; } public Metadata getTableMetadata(String tablename) throws SQLException { Metadata data=new Metadata(); DbMetaData meta=db.getMetaData(null); data.setColumns(meta.getColumns(tablename,true)); data.setPrimaryKey(meta.getPrimaryKey(tablename)); data.setForeignKey(meta.getForeignKey(tablename)); return data; } public List<TableInfo> getTables() throws SQLException { return db.getMetaData(null).getTables(true); } public String getSchema() { return null; } } public static class PDMProvider implements MetaProvider{ String schema; MetaModel model; public void setSchema(String schema) { this.schema = schema; } public PDMProvider(String schema,MetaModel model){ this.schema=schema; this.model=model; } public PDMProvider(File pdmFile){ IMetaLoader metaLoader = new PDMetaLoader(); MetaModel model; try { model = metaLoader.getMetaModel(pdmFile); } catch (JefException e) { throw new RuntimeException(e.getMessage()); } this.model=model; } public Metadata getTableMetadata(String tablename) throws SQLException { Metadata data=new Metadata(); MetaTable table=model.getTable(tablename); data.setColumns(table.getJefColumns()); data.setPrimaryKey(table.getJefPK()); data.setForeignKey(table.getJefFK()); return data; } public List<TableInfo> getTables() throws SQLException { List<TableInfo> result=new ArrayList<TableInfo>(); for(MetaTable t:model.getTables()){ TableInfo info=new TableInfo(); info.setName(t.getCode()); info.setRemarks(t.getComment()); result.add(info); } return result; } public String getSchema() { return schema; } } }