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(pkg, Constants.STEREOTYPE_TABLE);
\r
113 _log.debug(objectList.size());
\r
115 for (TObject object : objectList) {
\r
116 final TableModel table = generateTableModel(object);
\r
117 dbModel.addTable(table);
\r
122 protected TPackage getPackage() {
\r
123 return _tPackageBhv.selectPackage(_config.getProperty(ConfigKey.ER_PACKAGE_TREE));
\r
126 protected TableModel generateTableModel(TObject tobject) {
\r
127 final TableModel table = new TableModel();
\r
128 table.setName(tobject.getName());
\r
129 table.setAlias(tobject.getAlias());
\r
130 table.setNote(tobject.getNote());
\r
131 if (_config.getBoolean(_config.getProperty(ConfigKey.USE_SCHEMA))) {
\r
132 table.setSchema(_tObjectpropertiesBhv.getValue(tobject, Constants.OBJECT_PROPERTIES_OWNER));
\r
134 table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint(tobject, Constants.SUPPRESS_COMMON_COLUMN));
\r
135 generateColumnModel(table, tobject);
\r
136 generatePKModel(table, tobject);
\r
137 generateFKModel(table, tobject);
\r
138 generateUniqueModel(table, tobject);
\r
139 generateIndexModel(table, tobject);
\r
144 protected void generateColumnModel(TableModel table, TObject tobject) {
\r
145 final List<TAttribute> attributes = _tAttributeBhv.selectColumns(tobject);
\r
146 for (TAttribute attribute : attributes) {
\r
147 final ColumnModel column = new ColumnModel();
\r
148 column.setName(attribute.getName());
\r
149 column.setAlias(attribute.getStyle());
\r
150 column.setType(getColumnType(attribute));
\r
151 column.setLength(attribute.getLength());
\r
152 column.setPrecision(attribute.getPrecision());
\r
153 column.setScale(attribute.getScale());
\r
154 column.setNullable(Integer.valueOf(0).equals(attribute.getAllowduplicates()));
\r
155 column.setNote(attribute.getNotes());
\r
156 table.addColumn(column);
\r
160 protected String getColumnType(TAttribute attribute) {
\r
161 final String dictionary = _config.getProperty(attribute.getName());
\r
162 if (dictionary != null) {
\r
165 return attribute.getType();
\r
168 protected void generatePKModel(TableModel table, TObject tobject) {
\r
169 final ListResultBean<TOperation> pkList = _tOperationBhv.selectOperation(tobject,
\r
170 Constants.STEREOTYPE_PRIMARY_KEY);
\r
171 if (pkList.isEmpty()) {
\r
174 final TOperation opePK = pkList.get(0);
\r
175 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opePK);
\r
176 if (!params.isEmpty()) {
\r
177 final PrimaryKeyModel pk = new PrimaryKeyModel();
\r
178 pk.setName(opePK.getName());
\r
179 for (TOperationparams param : params) {
\r
180 pk.addColumnName(param.getName());
\r
182 table.setPrimaryKey(pk);
\r
186 protected void generateFKModel(TableModel table, TObject tobject) {
\r
187 final ListResultBean<TOperation> fkList = _tOperationBhv.selectOperation(tobject,
\r
188 Constants.STEREOTYPE_FOREIGN_KEY);
\r
189 for (TOperation opeFK : fkList) {
\r
190 final ForeignKeyModel fkModel = new ForeignKeyModel();
\r
191 fkModel.setName(opeFK.getName());
\r
194 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opeFK);
\r
195 for (TOperationparams param : params) {
\r
196 fkModel.addColumnName(param.getName());
\r
200 final TConnectorCB conCB = new TConnectorCB();
\r
201 conCB.query().setStartObjectId_Equal(tobject.getObjectId());
\r
202 conCB.query().setSourcerole_Equal(opeFK.getName());
\r
203 final TConnector con = _tConnectorBhv.selectEntity(conCB);
\r
205 final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId());
\r
206 fkModel.setTargetTable(targetTable.getName());
\r
208 final TOperationCB targetOpeCB = new TOperationCB();
\r
209 targetOpeCB.query().setObjectId_Equal(con.getEndObjectId());
\r
210 targetOpeCB.query().setName_Equal(con.getDestrole());
\r
211 final TOperation targetOpe = _tOperationBhv.selectEntity(targetOpeCB);
\r
213 final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv
\r
214 .selectOperationParams(targetOpe);
\r
215 for (TOperationparams targetParam : targetParams) {
\r
216 fkModel.addTargetColumnName(targetParam.getName());
\r
219 table.addForeignKey(fkModel);
\r
223 protected void generateUniqueModel(TableModel table, TObject tobject) {
\r
224 final TOperationCB cb = new TOperationCB();
\r
225 cb.query().setObjectId_Equal(tobject.getObjectId());
\r
226 cb.query().setStereotype_Equal(Constants.STEREOTYPE_UNIQUE);
\r
227 final ListResultBean<TOperation> uniqueList = _tOperationBhv.selectList(cb);
\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.selectList(opeCB);
\r
235 for (TOperationparams param : cols) {
\r
236 uniqueModel.addColumnName(param.getName());
\r
238 table.addUnique(uniqueModel);
\r
242 protected void generateIndexModel(TableModel table, TObject tobject) {
\r
243 final ListResultBean<TOperation> indexList = _tOperationBhv.selectOperation(tobject, "index");
\r
244 for (TOperation index : indexList) {
\r
245 final IndexModel indexModel = new IndexModel();
\r
246 indexModel.setName(index.getName());
\r
247 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(index);
\r
248 for (TOperationparams param : params) {
\r
249 indexModel.addColumn(param.getName());
\r
251 table.addIndex(indexModel);
\r