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.cbean.TConnectorCB;
\r
10 import jp.sourceforge.ea2ddl.dao.cbean.TOperationCB;
\r
11 import jp.sourceforge.ea2ddl.dao.cbean.TOperationparamsCB;
\r
12 import jp.sourceforge.ea2ddl.dao.exbhv.TAttributeBhv;
\r
13 import jp.sourceforge.ea2ddl.dao.exbhv.TConnectorBhv;
\r
14 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectBhv;
\r
15 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectconstraintBhv;
\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.ConfigKey;
\r
27 import jp.sourceforge.ea2ddl.ddl.Constants;
\r
28 import jp.sourceforge.ea2ddl.ddl.factory.ModelFactory;
\r
29 import jp.sourceforge.ea2ddl.ddl.model.ColumnModel;
\r
30 import jp.sourceforge.ea2ddl.ddl.model.DatabaseModel;
\r
31 import jp.sourceforge.ea2ddl.ddl.model.ForeignKeyModel;
\r
32 import jp.sourceforge.ea2ddl.ddl.model.IndexModel;
\r
33 import jp.sourceforge.ea2ddl.ddl.model.PrimaryKeyModel;
\r
34 import jp.sourceforge.ea2ddl.ddl.model.TableModel;
\r
35 import jp.sourceforge.ea2ddl.ddl.model.UniqueModel;
\r
37 import org.apache.commons.logging.Log;
\r
38 import org.apache.commons.logging.LogFactory;
\r
39 import org.seasar.dbflute.cbean.ListResultBean;
\r
40 import org.seasar.framework.container.annotation.tiger.Binding;
\r
46 public class DatabaseModelFactoryImpl implements ModelFactory {
\r
47 private Log _log = LogFactory.getLog(DatabaseModelFactoryImpl.class);
\r
49 private Config _config;
\r
50 private TPackageBhv _tPackageBhv;
\r
51 private TObjectBhv _tObjectBhv;
\r
52 private TObjectpropertiesBhv _tObjectpropertiesBhv;
\r
53 private TObjectconstraintBhv _tObjectconstraintBhv;
\r
54 private TAttributeBhv _tAttributeBhv;
\r
55 private TConnectorBhv _tConnectorBhv;
\r
56 private TOperationBhv _tOperationBhv;
\r
57 private TOperationparamsBhv _tOperationparamsBhv;
\r
60 public void setConfig(Config config) {
\r
65 public void setTPackageBhv(TPackageBhv packageBhv) {
\r
66 _tPackageBhv = packageBhv;
\r
70 public void setTObjectBhv(TObjectBhv objectBhv) {
\r
71 _tObjectBhv = objectBhv;
\r
75 public void setTObjectpropertiesBhv(TObjectpropertiesBhv objectpropertiesBhv) {
\r
76 _tObjectpropertiesBhv = objectpropertiesBhv;
\r
80 public void setTObjectconstraintBhv(TObjectconstraintBhv objectconstraintBhv) {
\r
81 _tObjectconstraintBhv = objectconstraintBhv;
\r
85 public void setTAttributeBhv(TAttributeBhv attributeBhv) {
\r
86 _tAttributeBhv = attributeBhv;
\r
90 public void setTConnectorBhv(TConnectorBhv connectorBhv) {
\r
91 _tConnectorBhv = connectorBhv;
\r
95 public void setTOperationBhv(TOperationBhv operationBhv) {
\r
96 _tOperationBhv = operationBhv;
\r
100 public void setTOperationparamsBhv(TOperationparamsBhv operationparamsBhv) {
\r
101 _tOperationparamsBhv = operationparamsBhv;
\r
107 * @see jp.sourceforge.ea2ddl.ddl.factory.Generator#execute()
\r
109 public DatabaseModel create() {
\r
110 final DatabaseModel dbModel = new DatabaseModel();
\r
111 final TPackage pkg = getPackage();
\r
112 final List<TObject> objectList = _tObjectBhv.selectListByStereotype(
\r
113 pkg, Constants.STEREOTYPE_TABLE);
\r
114 _log.debug(objectList.size());
\r
116 for (TObject object : objectList) {
\r
117 final TableModel table = generateTableModel(object);
\r
118 dbModel.addTable(table);
\r
123 protected TPackage getPackage() {
\r
124 return _tPackageBhv.selectPackage(_config
\r
125 .getProperty(ConfigKey.ER_PACKAGE_TREE));
\r
128 protected TableModel generateTableModel(TObject tobject) {
\r
129 final TableModel table = new TableModel();
\r
130 table.setName(tobject.getName());
\r
131 table.setAlias(tobject.getAlias());
\r
132 table.setNote(tobject.getNote());
\r
133 if (_config.getBoolean(_config.getProperty(ConfigKey.USE_SCHEMA))) {
\r
134 table.setSchema(_tObjectpropertiesBhv.getValue(tobject,
\r
135 Constants.OBJECT_PROPERTIES_OWNER));
\r
137 table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint(
\r
138 tobject, Constants.SUPPRESS_COMMON_COLUMN));
\r
139 generateColumnModel(table, tobject);
\r
140 generatePKModel(table, tobject);
\r
141 generateFKModel(table, tobject);
\r
142 generateUniqueModel(table, tobject);
\r
143 generateIndexModel(table, tobject);
\r
147 protected void generateColumnModel(TableModel table, TObject tobject) {
\r
148 final List<TAttribute> attributes = _tAttributeBhv
\r
149 .selectColumns(tobject);
\r
150 for (TAttribute attribute : attributes) {
\r
151 table.addColumn(ColumnModel.create(attribute, _config));
\r
155 protected String getColumnType(TAttribute attribute) {
\r
156 final String dictionary = _config.getProperty(attribute.getType());
\r
157 if (dictionary != null) {
\r
160 return attribute.getType();
\r
163 protected void generatePKModel(TableModel table, TObject tobject) {
\r
164 final ListResultBean<TOperation> pkList = _tOperationBhv
\r
165 .selectOperation(tobject, Constants.STEREOTYPE_PRIMARY_KEY);
\r
166 if (pkList.isEmpty()) {
\r
169 final TOperation opePK = pkList.get(0);
\r
170 final ListResultBean<TOperationparams> params = _tOperationparamsBhv
\r
171 .selectOperationParams(opePK);
\r
172 if (!params.isEmpty()) {
\r
173 final PrimaryKeyModel pk = new PrimaryKeyModel();
\r
174 pk.setName(opePK.getName());
\r
175 for (TOperationparams param : params) {
\r
176 pk.addColumnName(param.getName());
\r
178 table.setPrimaryKey(pk);
\r
182 protected void generateFKModel(TableModel table, TObject tobject) {
\r
183 final ListResultBean<TOperation> fkList = _tOperationBhv
\r
184 .selectOperation(tobject, Constants.STEREOTYPE_FOREIGN_KEY);
\r
185 for (TOperation opeFK : fkList) {
\r
186 final ForeignKeyModel fkModel = new ForeignKeyModel();
\r
187 fkModel.setName(opeFK.getName());
\r
190 final ListResultBean<TOperationparams> params = _tOperationparamsBhv
\r
191 .selectOperationParams(opeFK);
\r
192 for (TOperationparams param : params) {
\r
193 fkModel.addColumnName(param.getName());
\r
197 final TConnectorCB conCB = new TConnectorCB();
\r
198 conCB.query().setStartObjectId_Equal(tobject.getObjectId());
\r
199 conCB.query().setSourcerole_Equal(opeFK.getName());
\r
200 final TConnector con = _tConnectorBhv.selectEntity(conCB);
\r
202 final TObject targetTable = _tObjectBhv.selectEntity(con
\r
203 .getEndObjectId());
\r
204 fkModel.setTargetTable(targetTable.getName());
\r
206 final TOperationCB targetOpeCB = new TOperationCB();
\r
207 targetOpeCB.query().setObjectId_Equal(con.getEndObjectId());
\r
208 targetOpeCB.query().setName_Equal(con.getDestrole());
\r
209 final TOperation targetOpe = _tOperationBhv
\r
210 .selectEntity(targetOpeCB);
\r
212 final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv
\r
213 .selectOperationParams(targetOpe);
\r
214 for (TOperationparams targetParam : targetParams) {
\r
215 fkModel.addTargetColumnName(targetParam.getName());
\r
218 table.addForeignKey(fkModel);
\r
222 protected void generateUniqueModel(TableModel table, TObject tobject) {
\r
223 final TOperationCB cb = new TOperationCB();
\r
224 cb.query().setObjectId_Equal(tobject.getObjectId());
\r
225 cb.query().setStereotype_Equal(Constants.STEREOTYPE_UNIQUE);
\r
226 final ListResultBean<TOperation> uniqueList = _tOperationBhv
\r
228 for (TOperation unique : uniqueList) {
\r
229 final UniqueModel uniqueModel = new UniqueModel();
\r
230 uniqueModel.setName(unique.getName());
\r
231 final TOperationparamsCB opeCB = new TOperationparamsCB();
\r
232 opeCB.query().setOperationid_Equal(unique.getOperationid());
\r
233 opeCB.query().addOrderBy_Pos_Asc();
\r
234 final ListResultBean<TOperationparams> cols = _tOperationparamsBhv
\r
235 .selectList(opeCB);
\r
236 for (TOperationparams param : cols) {
\r
237 uniqueModel.addColumnName(param.getName());
\r
239 table.addUnique(uniqueModel);
\r
243 protected void generateIndexModel(TableModel table, TObject tobject) {
\r
244 final ListResultBean<TOperation> indexList = _tOperationBhv
\r
245 .selectOperation(tobject, "index");
\r
246 for (TOperation index : indexList) {
\r
247 final IndexModel indexModel = new IndexModel();
\r
248 indexModel.setName(index.getName());
\r
249 final ListResultBean<TOperationparams> params = _tOperationparamsBhv
\r
250 .selectOperationParams(index);
\r
251 for (TOperationparams param : params) {
\r
252 indexModel.addColumn(param.getName());
\r
254 table.addIndex(indexModel);
\r