OSDN Git Service

AUTO_INCREMENTに対応
[ea2ddl/ea2ddl.git] / ea2ddl-ddl / src / main / java / jp / sourceforge / ea2ddl / ddl / factory / impl / DatabaseModelFactoryImpl.java
index 5503e3e..aaa0e00 100644 (file)
@@ -6,13 +6,13 @@ package jp.sourceforge.ea2ddl.ddl.factory.impl;
 import java.util.List;\r
 \r
 import jp.sourceforge.ea2ddl.common.config.Config;\r
-import jp.sourceforge.ea2ddl.dao.allcommon.cbean.ListResultBean;\r
 import jp.sourceforge.ea2ddl.dao.cbean.TConnectorCB;\r
 import jp.sourceforge.ea2ddl.dao.cbean.TOperationCB;\r
 import jp.sourceforge.ea2ddl.dao.cbean.TOperationparamsCB;\r
 import jp.sourceforge.ea2ddl.dao.exbhv.TAttributeBhv;\r
 import jp.sourceforge.ea2ddl.dao.exbhv.TConnectorBhv;\r
 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectBhv;\r
+import jp.sourceforge.ea2ddl.dao.exbhv.TObjectconstraintBhv;\r
 import jp.sourceforge.ea2ddl.dao.exbhv.TObjectpropertiesBhv;\r
 import jp.sourceforge.ea2ddl.dao.exbhv.TOperationBhv;\r
 import jp.sourceforge.ea2ddl.dao.exbhv.TOperationparamsBhv;\r
@@ -23,29 +23,34 @@ import jp.sourceforge.ea2ddl.dao.exentity.TObject;
 import jp.sourceforge.ea2ddl.dao.exentity.TOperation;\r
 import jp.sourceforge.ea2ddl.dao.exentity.TOperationparams;\r
 import jp.sourceforge.ea2ddl.dao.exentity.TPackage;\r
-import jp.sourceforge.ea2ddl.ddl.factory.DatabaseModelFactory;\r
+import jp.sourceforge.ea2ddl.ddl.ConfigKey;\r
+import jp.sourceforge.ea2ddl.ddl.Constants;\r
+import jp.sourceforge.ea2ddl.ddl.factory.ModelFactory;\r
 import jp.sourceforge.ea2ddl.ddl.model.ColumnModel;\r
 import jp.sourceforge.ea2ddl.ddl.model.DatabaseModel;\r
 import jp.sourceforge.ea2ddl.ddl.model.ForeignKeyModel;\r
+import jp.sourceforge.ea2ddl.ddl.model.IndexModel;\r
 import jp.sourceforge.ea2ddl.ddl.model.PrimaryKeyModel;\r
 import jp.sourceforge.ea2ddl.ddl.model.TableModel;\r
 import jp.sourceforge.ea2ddl.ddl.model.UniqueModel;\r
 \r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
+import org.seasar.dbflute.cbean.ListResultBean;\r
 import org.seasar.framework.container.annotation.tiger.Binding;\r
 \r
 /**\r
  * @author taktos\r
  * \r
  */\r
-public class DatabaseModelFactoryImpl implements DatabaseModelFactory {\r
+public class DatabaseModelFactoryImpl implements ModelFactory {\r
        private Log _log = LogFactory.getLog(DatabaseModelFactoryImpl.class);\r
 \r
        private Config _config;\r
        private TPackageBhv _tPackageBhv;\r
        private TObjectBhv _tObjectBhv;\r
        private TObjectpropertiesBhv _tObjectpropertiesBhv;\r
+       private TObjectconstraintBhv _tObjectconstraintBhv;\r
        private TAttributeBhv _tAttributeBhv;\r
        private TConnectorBhv _tConnectorBhv;\r
        private TOperationBhv _tOperationBhv;\r
@@ -72,6 +77,11 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
        }\r
 \r
        @Binding\r
+       public void setTObjectconstraintBhv(TObjectconstraintBhv objectconstraintBhv) {\r
+               _tObjectconstraintBhv = objectconstraintBhv;\r
+       }\r
+\r
+       @Binding\r
        public void setTAttributeBhv(TAttributeBhv attributeBhv) {\r
                _tAttributeBhv = attributeBhv;\r
        }\r
@@ -98,8 +108,9 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
         */\r
        public DatabaseModel create() {\r
                final DatabaseModel dbModel = new DatabaseModel();\r
-               final TPackage pkg = getPackage(_config.getProperty("er.package.tree"));\r
-               final List<TObject> objectList = _tObjectBhv.selectListByStereotype(pkg, "table");\r
+               final TPackage pkg = getPackage();\r
+               final List<TObject> objectList = _tObjectBhv.selectListByStereotype(\r
+                               pkg, Constants.STEREOTYPE_TABLE);\r
                _log.debug(objectList.size());\r
 \r
                for (TObject object : objectList) {\r
@@ -109,8 +120,9 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
                return dbModel;\r
        }\r
 \r
-       protected TPackage getPackage(String packageTree) {\r
-               return _tPackageBhv.selectPackage(packageTree);\r
+       protected TPackage getPackage() {\r
+               return _tPackageBhv.selectPackage(_config\r
+                               .getProperty(ConfigKey.ER_PACKAGE_TREE));\r
        }\r
 \r
        protected TableModel generateTableModel(TObject tobject) {\r
@@ -118,40 +130,45 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
                table.setName(tobject.getName());\r
                table.setAlias(tobject.getAlias());\r
                table.setNote(tobject.getNote());\r
-               if (_config.getBoolean("use.schema")) {\r
-                       table.setSchema(_tObjectpropertiesBhv.getValue(tobject, "OWNER"));\r
+               if (_config.getBoolean(_config.getProperty(ConfigKey.USE_SCHEMA))) {\r
+                       table.setSchema(_tObjectpropertiesBhv.getValue(tobject,\r
+                                       Constants.OBJECT_PROPERTIES_OWNER));\r
                }\r
+               table.setSuppressCommonColumn(_tObjectconstraintBhv.hasConstraint(\r
+                               tobject, Constants.SUPPRESS_COMMON_COLUMN));\r
                generateColumnModel(table, tobject);\r
                generatePKModel(table, tobject);\r
                generateFKModel(table, tobject);\r
                generateUniqueModel(table, tobject);\r
-\r
+               generateIndexModel(table, tobject);\r
                return table;\r
        }\r
 \r
        protected void generateColumnModel(TableModel table, TObject tobject) {\r
-               final List<TAttribute> attributes = _tAttributeBhv.selectColumns(tobject);\r
+               final List<TAttribute> attributes = _tAttributeBhv\r
+                               .selectColumns(tobject);\r
                for (TAttribute attribute : attributes) {\r
-                       final ColumnModel column = new ColumnModel();\r
-                       column.setName(attribute.getName());\r
-                       column.setAlias(attribute.getStyle());\r
-                       column.setType(attribute.getType());\r
-                       column.setLength(attribute.getLength());\r
-                       column.setPrecision(attribute.getPrecision());\r
-                       column.setScale(attribute.getScale());\r
-                       column.setNullable(Integer.valueOf(0).equals(attribute.getAllowduplicates()));\r
-                       column.setNote(attribute.getNotes());\r
-                       table.addColumn(column);\r
+                       table.addColumn(ColumnModel.create(attribute, _config));\r
+               }\r
+       }\r
+\r
+       protected String getColumnType(TAttribute attribute) {\r
+               final String dictionary = _config.getProperty(attribute.getType());\r
+               if (dictionary != null) {\r
+                       return dictionary;\r
                }\r
+               return attribute.getType();\r
        }\r
 \r
        protected void generatePKModel(TableModel table, TObject tobject) {\r
-               final ListResultBean<TOperation> pkList = _tOperationBhv.selectOperation(tobject, "PK");\r
+               final ListResultBean<TOperation> pkList = _tOperationBhv\r
+                               .selectOperation(tobject, Constants.STEREOTYPE_PRIMARY_KEY);\r
                if (pkList.isEmpty()) {\r
                        return;\r
                }\r
                final TOperation opePK = pkList.get(0);\r
-               final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opePK);\r
+               final ListResultBean<TOperationparams> params = _tOperationparamsBhv\r
+                               .selectOperationParams(opePK);\r
                if (!params.isEmpty()) {\r
                        final PrimaryKeyModel pk = new PrimaryKeyModel();\r
                        pk.setName(opePK.getName());\r
@@ -163,13 +180,15 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
        }\r
 \r
        protected void generateFKModel(TableModel table, TObject tobject) {\r
-               final ListResultBean<TOperation> fkList = _tOperationBhv.selectOperation(tobject, "FK");\r
+               final ListResultBean<TOperation> fkList = _tOperationBhv\r
+                               .selectOperation(tobject, Constants.STEREOTYPE_FOREIGN_KEY);\r
                for (TOperation opeFK : fkList) {\r
                        final ForeignKeyModel fkModel = new ForeignKeyModel();\r
                        fkModel.setName(opeFK.getName());\r
 \r
                        {\r
-                               final ListResultBean<TOperationparams> params = _tOperationparamsBhv.selectOperationParams(opeFK);\r
+                               final ListResultBean<TOperationparams> params = _tOperationparamsBhv\r
+                                               .selectOperationParams(opeFK);\r
                                for (TOperationparams param : params) {\r
                                        fkModel.addColumnName(param.getName());\r
                                }\r
@@ -180,13 +199,15 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
                                conCB.query().setSourcerole_Equal(opeFK.getName());\r
                                final TConnector con = _tConnectorBhv.selectEntity(conCB);\r
 \r
-                               final TObject targetTable = _tObjectBhv.selectEntity(con.getEndObjectId());\r
+                               final TObject targetTable = _tObjectBhv.selectEntity(con\r
+                                               .getEndObjectId());\r
                                fkModel.setTargetTable(targetTable.getName());\r
 \r
                                final TOperationCB targetOpeCB = new TOperationCB();\r
                                targetOpeCB.query().setObjectId_Equal(con.getEndObjectId());\r
                                targetOpeCB.query().setName_Equal(con.getDestrole());\r
-                               final TOperation targetOpe = _tOperationBhv.selectEntity(targetOpeCB);\r
+                               final TOperation targetOpe = _tOperationBhv\r
+                                               .selectEntity(targetOpeCB);\r
 \r
                                final ListResultBean<TOperationparams> targetParams = _tOperationparamsBhv\r
                                                .selectOperationParams(targetOpe);\r
@@ -201,19 +222,37 @@ public class DatabaseModelFactoryImpl implements DatabaseModelFactory {
        protected void generateUniqueModel(TableModel table, TObject tobject) {\r
                final TOperationCB cb = new TOperationCB();\r
                cb.query().setObjectId_Equal(tobject.getObjectId());\r
-               cb.query().setStereotype_Equal("unique");\r
-               final ListResultBean<TOperation> uniqueList = _tOperationBhv.selectList(cb);\r
+               cb.query().setStereotype_Equal(Constants.STEREOTYPE_UNIQUE);\r
+               final ListResultBean<TOperation> uniqueList = _tOperationBhv\r
+                               .selectList(cb);\r
                for (TOperation unique : uniqueList) {\r
                        final UniqueModel uniqueModel = new UniqueModel();\r
                        uniqueModel.setName(unique.getName());\r
                        final TOperationparamsCB opeCB = new TOperationparamsCB();\r
                        opeCB.query().setOperationid_Equal(unique.getOperationid());\r
                        opeCB.query().addOrderBy_Pos_Asc();\r
-                       final ListResultBean<TOperationparams> cols = _tOperationparamsBhv.selectList(opeCB);\r
+                       final ListResultBean<TOperationparams> cols = _tOperationparamsBhv\r
+                                       .selectList(opeCB);\r
                        for (TOperationparams param : cols) {\r
                                uniqueModel.addColumnName(param.getName());\r
                        }\r
                        table.addUnique(uniqueModel);\r
                }\r
        }\r
+\r
+       protected void generateIndexModel(TableModel table, TObject tobject) {\r
+               final ListResultBean<TOperation> indexList = _tOperationBhv\r
+                               .selectOperation(tobject, "index");\r
+               for (TOperation index : indexList) {\r
+                       final IndexModel indexModel = new IndexModel();\r
+                       indexModel.setName(index.getName());\r
+                       final ListResultBean<TOperationparams> params = _tOperationparamsBhv\r
+                                       .selectOperationParams(index);\r
+                       for (TOperationparams param : params) {\r
+                               indexModel.addColumn(param.getName());\r
+                       }\r
+                       table.addIndex(indexModel);\r
+               }\r
+       }\r
+\r
 }\r