OSDN Git Service

リリース用に調整
[ea2ddl/ea2ddl.git] / ea2ddl-ddl / src / main / java / jp / sourceforge / ea2ddl / ddl / factory / impl / DatabaseModelFactoryImpl.java
1 /**\r
2  * \r
3  */\r
4 package jp.sourceforge.ea2ddl.ddl.factory.impl;\r
5 \r
6 import java.util.List;\r
7 \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.TObjectconstraintBhv;\r
17 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectpropertiesBhv;\r
18 import jp.sourceforge.ea2ddl.dao.exbhv.TOperationBhv;\r
19 import jp.sourceforge.ea2ddl.dao.exbhv.TOperationparamsBhv;\r
20 import jp.sourceforge.ea2ddl.dao.exbhv.TPackageBhv;\r
21 import jp.sourceforge.ea2ddl.dao.exentity.TAttribute;\r
22 import jp.sourceforge.ea2ddl.dao.exentity.TConnector;\r
23 import jp.sourceforge.ea2ddl.dao.exentity.TObject;\r
24 import jp.sourceforge.ea2ddl.dao.exentity.TOperation;\r
25 import jp.sourceforge.ea2ddl.dao.exentity.TOperationparams;\r
26 import jp.sourceforge.ea2ddl.dao.exentity.TPackage;\r
27 import jp.sourceforge.ea2ddl.ddl.ConfigKey;\r
28 import jp.sourceforge.ea2ddl.ddl.Constants;\r
29 import jp.sourceforge.ea2ddl.ddl.factory.ModelFactory;\r
30 import jp.sourceforge.ea2ddl.ddl.model.ColumnModel;\r
31 import jp.sourceforge.ea2ddl.ddl.model.DatabaseModel;\r
32 import jp.sourceforge.ea2ddl.ddl.model.ForeignKeyModel;\r
33 import jp.sourceforge.ea2ddl.ddl.model.IndexModel;\r
34 import jp.sourceforge.ea2ddl.ddl.model.PrimaryKeyModel;\r
35 import jp.sourceforge.ea2ddl.ddl.model.TableModel;\r
36 import jp.sourceforge.ea2ddl.ddl.model.UniqueModel;\r
37 \r
38 import org.apache.commons.logging.Log;\r
39 import org.apache.commons.logging.LogFactory;\r
40 import org.seasar.framework.container.annotation.tiger.Binding;\r
41 \r
42 /**\r
43  * @author taktos\r
44  * \r
45  */\r
46 public class DatabaseModelFactoryImpl implements ModelFactory {\r
47         private Log _log = LogFactory.getLog(DatabaseModelFactoryImpl.class);\r
48 \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
58 \r
59         @Binding\r
60         public void setConfig(Config config) {\r
61                 _config = config;\r
62         }\r
63 \r
64         @Binding\r
65         public void setTPackageBhv(TPackageBhv packageBhv) {\r
66                 _tPackageBhv = packageBhv;\r
67         }\r
68 \r
69         @Binding\r
70         public void setTObjectBhv(TObjectBhv objectBhv) {\r
71                 _tObjectBhv = objectBhv;\r
72         }\r
73 \r
74         @Binding\r
75         public void setTObjectpropertiesBhv(TObjectpropertiesBhv objectpropertiesBhv) {\r
76                 _tObjectpropertiesBhv = objectpropertiesBhv;\r
77         }\r
78 \r
79         @Binding\r
80         public void setTObjectconstraintBhv(TObjectconstraintBhv objectconstraintBhv) {\r
81                 _tObjectconstraintBhv = objectconstraintBhv;\r
82         }\r
83 \r
84         @Binding\r
85         public void setTAttributeBhv(TAttributeBhv attributeBhv) {\r
86                 _tAttributeBhv = attributeBhv;\r
87         }\r
88 \r
89         @Binding\r
90         public void setTConnectorBhv(TConnectorBhv connectorBhv) {\r
91                 _tConnectorBhv = connectorBhv;\r
92         }\r
93 \r
94         @Binding\r
95         public void setTOperationBhv(TOperationBhv operationBhv) {\r
96                 _tOperationBhv = operationBhv;\r
97         }\r
98 \r
99         @Binding\r
100         public void setTOperationparamsBhv(TOperationparamsBhv operationparamsBhv) {\r
101                 _tOperationparamsBhv = operationparamsBhv;\r
102         }\r
103 \r
104         /*\r
105          * (�� Javadoc)\r
106          * \r
107          * @see jp.sourceforge.ea2ddl.ddl.factory.Generator#execute()\r
108          */\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
114 \r
115                 for (TObject object : objectList) {\r
116                         final TableModel table = generateTableModel(object);\r
117                         dbModel.addTable(table);\r
118                 }\r
119                 return dbModel;\r
120         }\r
121 \r
122         protected TPackage getPackage() {\r
123                 return _tPackageBhv.selectPackage(_config.getProperty(ConfigKey.ER_PACKAGE_TREE));\r
124         }\r
125 \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
133                 }\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
140 \r
141                 return table;\r
142         }\r
143 \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(attribute.getType());\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
157                 }\r
158         }\r
159 \r
160         protected void generatePKModel(TableModel table, TObject tobject) {\r
161                 final ListResultBean<TOperation> pkList = _tOperationBhv.selectOperation(tobject,\r
162                                 Constants.STEREOTYPE_PRIMARY_KEY);\r
163                 if (pkList.isEmpty()) {\r
164                         return;\r
165                 }\r
166                 final TOperation opePK = pkList.get(0);\r
167                 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opePK);\r
168                 if (!params.isEmpty()) {\r
169                         final PrimaryKeyModel pk = new PrimaryKeyModel();\r
170                         pk.setName(opePK.getName());\r
171                         for (TOperationparams param : params) {\r
172                                 pk.addColumnName(param.getName());\r
173                         }\r
174                         table.setPrimaryKey(pk);\r
175                 }\r
176         }\r
177 \r
178         protected void generateFKModel(TableModel table, TObject tobject) {\r
179                 final ListResultBean<TOperation> fkList = _tOperationBhv.selectOperation(tobject,\r
180                                 Constants.STEREOTYPE_FOREIGN_KEY);\r
181                 for (TOperation opeFK : fkList) {\r
182                         final ForeignKeyModel fkModel = new ForeignKeyModel();\r
183                         fkModel.setName(opeFK.getName());\r
184 \r
185                         {\r
186                                 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opeFK);\r
187                                 for (TOperationparams param : params) {\r
188                                         fkModel.addColumnName(param.getName());\r
189                                 }\r
190                         }\r
191                         {\r
192                                 final TConnectorCB conCB = new TConnectorCB();\r
193                                 conCB.query().setStartObjectId_Equal(tobject.getObjectId());\r
194                                 conCB.query().setSourcerole_Equal(opeFK.getName());\r
195                                 final TConnector con = _tConnectorBhv.selectEntity(conCB);\r
196 \r
197                                 final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId());\r
198                                 fkModel.setTargetTable(targetTable.getName());\r
199 \r
200                                 final TOperationCB targetOpeCB = new TOperationCB();\r
201                                 targetOpeCB.query().setObjectId_Equal(con.getEndObjectId());\r
202                                 targetOpeCB.query().setName_Equal(con.getDestrole());\r
203                                 final TOperation targetOpe = _tOperationBhv.selectEntity(targetOpeCB);\r
204 \r
205                                 final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv\r
206                                                 .selectOperationParams(targetOpe);\r
207                                 for (TOperationparams targetParam : targetParams) {\r
208                                         fkModel.addTargetColumnName(targetParam.getName());\r
209                                 }\r
210                         }\r
211                         table.addForeignKey(fkModel);\r
212                 }\r
213         }\r
214 \r
215         protected void generateUniqueModel(TableModel table, TObject tobject) {\r
216                 final TOperationCB cb = new TOperationCB();\r
217                 cb.query().setObjectId_Equal(tobject.getObjectId());\r
218                 cb.query().setStereotype_Equal(Constants.STEREOTYPE_UNIQUE);\r
219                 final ListResultBean<TOperation> uniqueList = _tOperationBhv.selectList(cb);\r
220                 for (TOperation unique : uniqueList) {\r
221                         final UniqueModel uniqueModel = new UniqueModel();\r
222                         uniqueModel.setName(unique.getName());\r
223                         final TOperationparamsCB opeCB = new TOperationparamsCB();\r
224                         opeCB.query().setOperationid_Equal(unique.getOperationid());\r
225                         opeCB.query().addOrderBy_Pos_Asc();\r
226                         final ListResultBean<TOperationparams> cols = _tOperationparamsBhv.selectList(opeCB);\r
227                         for (TOperationparams param : cols) {\r
228                                 uniqueModel.addColumnName(param.getName());\r
229                         }\r
230                         table.addUnique(uniqueModel);\r
231                 }\r
232         }\r
233 \r
234         protected void generateIndexModel(TableModel table, TObject tobject) {\r
235                 final ListResultBean<TOperation> indexList = _tOperationBhv.selectOperation(tobject, "index");\r
236                 for (TOperation index : indexList) {\r
237                         final IndexModel indexModel = new IndexModel();\r
238                         indexModel.setName(index.getName());\r
239                         final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(index);\r
240                         for (TOperationparams param : params) {\r
241                                 indexModel.addColumn(param.getName());\r
242                         }\r
243                         table.addIndex(indexModel);\r
244                 }\r
245         }\r
246 \r
247 }\r