4 package jp.sourceforge.ea2ddl.ddl.factory.impl;
\r
6 import java.util.List;
\r
8 import jp.sourceforge.ea2ddl.common.config.Config;
\r
9 import jp.sourceforge.ea2ddl.dao.allcommon.cbean.ListResultBean;
\r
10 import jp.sourceforge.ea2ddl.dao.cbean.TConnectorCB;
\r
11 import jp.sourceforge.ea2ddl.dao.cbean.TOperationCB;
\r
12 import jp.sourceforge.ea2ddl.dao.cbean.TOperationparamsCB;
\r
13 import jp.sourceforge.ea2ddl.dao.exbhv.TAttributeBhv;
\r
14 import jp.sourceforge.ea2ddl.dao.exbhv.TConnectorBhv;
\r
15 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectBhv;
\r
16 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectpropertiesBhv;
\r
17 import jp.sourceforge.ea2ddl.dao.exbhv.TOperationBhv;
\r
18 import jp.sourceforge.ea2ddl.dao.exbhv.TOperationparamsBhv;
\r
19 import jp.sourceforge.ea2ddl.dao.exbhv.TPackageBhv;
\r
20 import jp.sourceforge.ea2ddl.dao.exentity.TAttribute;
\r
21 import jp.sourceforge.ea2ddl.dao.exentity.TConnector;
\r
22 import jp.sourceforge.ea2ddl.dao.exentity.TObject;
\r
23 import jp.sourceforge.ea2ddl.dao.exentity.TOperation;
\r
24 import jp.sourceforge.ea2ddl.dao.exentity.TOperationparams;
\r
25 import jp.sourceforge.ea2ddl.dao.exentity.TPackage;
\r
26 import jp.sourceforge.ea2ddl.ddl.factory.ModelFactory;
\r
27 import jp.sourceforge.ea2ddl.ddl.model.ColumnModel;
\r
28 import jp.sourceforge.ea2ddl.ddl.model.DatabaseModel;
\r
29 import jp.sourceforge.ea2ddl.ddl.model.ForeignKeyModel;
\r
30 import jp.sourceforge.ea2ddl.ddl.model.PrimaryKeyModel;
\r
31 import jp.sourceforge.ea2ddl.ddl.model.TableModel;
\r
32 import jp.sourceforge.ea2ddl.ddl.model.UniqueModel;
\r
34 import org.apache.commons.logging.Log;
\r
35 import org.apache.commons.logging.LogFactory;
\r
36 import org.seasar.framework.container.annotation.tiger.Binding;
\r
42 public class DatabaseModelFactoryImpl implements ModelFactory {
\r
43 private Log _log = LogFactory.getLog(DatabaseModelFactoryImpl.class);
\r
45 private Config _config;
\r
46 private TPackageBhv _tPackageBhv;
\r
47 private TObjectBhv _tObjectBhv;
\r
48 private TObjectpropertiesBhv _tObjectpropertiesBhv;
\r
49 private TAttributeBhv _tAttributeBhv;
\r
50 private TConnectorBhv _tConnectorBhv;
\r
51 private TOperationBhv _tOperationBhv;
\r
52 private TOperationparamsBhv _tOperationparamsBhv;
\r
55 public void setConfig(Config config) {
\r
60 public void setTPackageBhv(TPackageBhv packageBhv) {
\r
61 _tPackageBhv = packageBhv;
\r
65 public void setTObjectBhv(TObjectBhv objectBhv) {
\r
66 _tObjectBhv = objectBhv;
\r
70 public void setTObjectpropertiesBhv(TObjectpropertiesBhv objectpropertiesBhv) {
\r
71 _tObjectpropertiesBhv = objectpropertiesBhv;
\r
75 public void setTAttributeBhv(TAttributeBhv attributeBhv) {
\r
76 _tAttributeBhv = attributeBhv;
\r
80 public void setTConnectorBhv(TConnectorBhv connectorBhv) {
\r
81 _tConnectorBhv = connectorBhv;
\r
85 public void setTOperationBhv(TOperationBhv operationBhv) {
\r
86 _tOperationBhv = operationBhv;
\r
90 public void setTOperationparamsBhv(TOperationparamsBhv operationparamsBhv) {
\r
91 _tOperationparamsBhv = operationparamsBhv;
\r
97 * @see jp.sourceforge.ea2ddl.ddl.factory.Generator#execute()
\r
99 public DatabaseModel create() {
\r
100 final DatabaseModel dbModel = new DatabaseModel();
\r
101 final TPackage pkg = getPackage(_config.getProperty("er.package.tree"));
\r
102 final List<TObject> objectList = _tObjectBhv.selectListByStereotype(pkg, "table");
\r
103 _log.debug(objectList.size());
\r
105 for (TObject object : objectList) {
\r
106 final TableModel table = generateTableModel(object);
\r
107 dbModel.addTable(table);
\r
112 protected TPackage getPackage(String packageTree) {
\r
113 return _tPackageBhv.selectPackage(packageTree);
\r
116 protected TableModel generateTableModel(TObject tobject) {
\r
117 final TableModel table = new TableModel();
\r
118 table.setName(tobject.getName());
\r
119 table.setAlias(tobject.getAlias());
\r
120 table.setNote(tobject.getNote());
\r
121 if (_config.getBoolean("use.schema")) {
\r
122 table.setSchema(_tObjectpropertiesBhv.getValue(tobject, "OWNER"));
\r
124 generateColumnModel(table, tobject);
\r
125 generatePKModel(table, tobject);
\r
126 generateFKModel(table, tobject);
\r
127 generateUniqueModel(table, tobject);
\r
132 protected void generateColumnModel(TableModel table, TObject tobject) {
\r
133 final List<TAttribute> attributes = _tAttributeBhv.selectColumns(tobject);
\r
134 for (TAttribute attribute : attributes) {
\r
135 final ColumnModel column = new ColumnModel();
\r
136 column.setName(attribute.getName());
\r
137 column.setAlias(attribute.getStyle());
\r
138 column.setType(attribute.getType());
\r
139 column.setLength(attribute.getLength());
\r
140 column.setPrecision(attribute.getPrecision());
\r
141 column.setScale(attribute.getScale());
\r
142 column.setNullable(Integer.valueOf(0).equals(attribute.getAllowduplicates()));
\r
143 column.setNote(attribute.getNotes());
\r
144 table.addColumn(column);
\r
148 protected void generatePKModel(TableModel table, TObject tobject) {
\r
149 final ListResultBean<TOperation> pkList = _tOperationBhv.selectOperation(tobject, "PK");
\r
150 if (pkList.isEmpty()) {
\r
153 final TOperation opePK = pkList.get(0);
\r
154 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opePK);
\r
155 if (!params.isEmpty()) {
\r
156 final PrimaryKeyModel pk = new PrimaryKeyModel();
\r
157 pk.setName(opePK.getName());
\r
158 for (TOperationparams param : params) {
\r
159 pk.addColumnName(param.getName());
\r
161 table.setPrimaryKey(pk);
\r
165 protected void generateFKModel(TableModel table, TObject tobject) {
\r
166 final ListResultBean<TOperation> fkList = _tOperationBhv.selectOperation(tobject, "FK");
\r
167 for (TOperation opeFK : fkList) {
\r
168 final ForeignKeyModel fkModel = new ForeignKeyModel();
\r
169 fkModel.setName(opeFK.getName());
\r
172 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opeFK);
\r
173 for (TOperationparams param : params) {
\r
174 fkModel.addColumnName(param.getName());
\r
178 final TConnectorCB conCB = new TConnectorCB();
\r
179 conCB.query().setStartObjectId_Equal(tobject.getObjectId());
\r
180 conCB.query().setSourcerole_Equal(opeFK.getName());
\r
181 final TConnector con = _tConnectorBhv.selectEntity(conCB);
\r
183 final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId());
\r
184 fkModel.setTargetTable(targetTable.getName());
\r
186 final TOperationCB targetOpeCB = new TOperationCB();
\r
187 targetOpeCB.query().setObjectId_Equal(con.getEndObjectId());
\r
188 targetOpeCB.query().setName_Equal(con.getDestrole());
\r
189 final TOperation targetOpe = _tOperationBhv.selectEntity(targetOpeCB);
\r
191 final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv
\r
192 .selectOperationParams(targetOpe);
\r
193 for (TOperationparams targetParam : targetParams) {
\r
194 fkModel.addTargetColumnName(targetParam.getName());
\r
197 table.addForeignKey(fkModel);
\r
201 protected void generateUniqueModel(TableModel table, TObject tobject) {
\r
202 final TOperationCB cb = new TOperationCB();
\r
203 cb.query().setObjectId_Equal(tobject.getObjectId());
\r
204 cb.query().setStereotype_Equal("unique");
\r
205 final ListResultBean<TOperation> uniqueList = _tOperationBhv.selectList(cb);
\r
206 for (TOperation unique : uniqueList) {
\r
207 final UniqueModel uniqueModel = new UniqueModel();
\r
208 uniqueModel.setName(unique.getName());
\r
209 final TOperationparamsCB opeCB = new TOperationparamsCB();
\r
210 opeCB.query().setOperationid_Equal(unique.getOperationid());
\r
211 opeCB.query().addOrderBy_Pos_Asc();
\r
212 final ListResultBean<TOperationparams> cols = _tOperationparamsBhv.selectList(opeCB);
\r
213 for (TOperationparams param : cols) {
\r
214 uniqueModel.addColumnName(param.getName());
\r
216 table.addUnique(uniqueModel);
\r