OSDN Git Service

DBFluteのClassificationに対応
[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.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
33 \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
37 \r
38 /**\r
39  * @author taktos\r
40  * \r
41  */\r
42 public class DatabaseModelFactoryImpl implements ModelFactory {\r
43         private Log _log = LogFactory.getLog(DatabaseModelFactoryImpl.class);\r
44 \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
53 \r
54         @Binding\r
55         public void setConfig(Config config) {\r
56                 _config = config;\r
57         }\r
58 \r
59         @Binding\r
60         public void setTPackageBhv(TPackageBhv packageBhv) {\r
61                 _tPackageBhv = packageBhv;\r
62         }\r
63 \r
64         @Binding\r
65         public void setTObjectBhv(TObjectBhv objectBhv) {\r
66                 _tObjectBhv = objectBhv;\r
67         }\r
68 \r
69         @Binding\r
70         public void setTObjectpropertiesBhv(TObjectpropertiesBhv objectpropertiesBhv) {\r
71                 _tObjectpropertiesBhv = objectpropertiesBhv;\r
72         }\r
73 \r
74         @Binding\r
75         public void setTAttributeBhv(TAttributeBhv attributeBhv) {\r
76                 _tAttributeBhv = attributeBhv;\r
77         }\r
78 \r
79         @Binding\r
80         public void setTConnectorBhv(TConnectorBhv connectorBhv) {\r
81                 _tConnectorBhv = connectorBhv;\r
82         }\r
83 \r
84         @Binding\r
85         public void setTOperationBhv(TOperationBhv operationBhv) {\r
86                 _tOperationBhv = operationBhv;\r
87         }\r
88 \r
89         @Binding\r
90         public void setTOperationparamsBhv(TOperationparamsBhv operationparamsBhv) {\r
91                 _tOperationparamsBhv = operationparamsBhv;\r
92         }\r
93 \r
94         /*\r
95          * (�� Javadoc)\r
96          * \r
97          * @see jp.sourceforge.ea2ddl.ddl.factory.Generator#execute()\r
98          */\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
104 \r
105                 for (TObject object : objectList) {\r
106                         final TableModel table = generateTableModel(object);\r
107                         dbModel.addTable(table);\r
108                 }\r
109                 return dbModel;\r
110         }\r
111 \r
112         protected TPackage getPackage(String packageTree) {\r
113                 return _tPackageBhv.selectPackage(packageTree);\r
114         }\r
115 \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
123                 }\r
124                 generateColumnModel(table, tobject);\r
125                 generatePKModel(table, tobject);\r
126                 generateFKModel(table, tobject);\r
127                 generateUniqueModel(table, tobject);\r
128 \r
129                 return table;\r
130         }\r
131 \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
145                 }\r
146         }\r
147 \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
151                         return;\r
152                 }\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
160                         }\r
161                         table.setPrimaryKey(pk);\r
162                 }\r
163         }\r
164 \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
170 \r
171                         {\r
172                                 final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opeFK);\r
173                                 for (TOperationparams param : params) {\r
174                                         fkModel.addColumnName(param.getName());\r
175                                 }\r
176                         }\r
177                         {\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
182 \r
183                                 final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId());\r
184                                 fkModel.setTargetTable(targetTable.getName());\r
185 \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
190 \r
191                                 final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv\r
192                                                 .selectOperationParams(targetOpe);\r
193                                 for (TOperationparams targetParam : targetParams) {\r
194                                         fkModel.addTargetColumnName(targetParam.getName());\r
195                                 }\r
196                         }\r
197                         table.addForeignKey(fkModel);\r
198                 }\r
199         }\r
200 \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
215                         }\r
216                         table.addUnique(uniqueModel);\r
217                 }\r
218         }\r
219 }\r