svnno****@sourc*****
svnno****@sourc*****
2009年 4月 14日 (火) 20:27:05 JST
Revision: 3272 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=3272 Author: daisuke_m Date: 2009-04-14 20:27:05 +0900 (Tue, 14 Apr 2009) Log Message: ----------- refactor Modified Paths: -------------- artemis/trunk/jiemamy-core/pom.xml artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultEntityImportVisitor.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/AddRecordsToDataSetCommand.java artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/RemoveRecordsFromDataSetCommand.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/DatabaseCleanerTest.java artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java artemis/trunk/jiemamy-dialect-postgresql/pom.xml artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java charon/jiemamy-jpa-importer/trunk/src/test/java/org/jiemamy/composer/importer/JpaImporterTest.java eros/maven-jiemamy-plugin/trunk/src/main/java/org/jiemamy/maven/CleanDatabaseMojo.java Removed Paths: ------------- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/composer/importer/ -------------- next part -------------- Modified: artemis/trunk/jiemamy-core/pom.xml =================================================================== --- artemis/trunk/jiemamy-core/pom.xml 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-core/pom.xml 2009-04-14 11:27:05 UTC (rev 3272) @@ -82,12 +82,6 @@ <scope>test</scope> </dependency> <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>1.1.102</version> - <scope>test</scope> - </dependency> - <dependency> <groupId>${project.groupId}</groupId> <artifactId>jiemamy-test-helper</artifactId> <version>0.0.1-SNAPSHOT</version> Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultEntityImportVisitor.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultEntityImportVisitor.java 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/dialect/internal/impl/DefaultEntityImportVisitor.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -68,6 +68,11 @@ private static Logger logger = LoggerFactory.getLogger(DefaultEntityImportVisitor.class); + private static final String[] DEFAULT_TYPES = new String[] { + "TABLE", + "VIEW" + }; + /** DBメタデータ */ private TypeSafeDatabaseMetaData meta; @@ -88,11 +93,6 @@ */ private Collection<String> selectedEntities; - private static final String[] DEFAULT_TYPES = new String[] { - "TABLE", - "VIEW" - }; - private Map<String, EntityModel> importedEntities; /** データ型リゾルバ */ @@ -174,69 +174,11 @@ TypeSafeResultSet<ColumnMeta> columnsResult = null; TypeSafeResultSet<PrimaryKeyMeta> keysResult = null; try { - columnsResult = meta.getColumns("", /* TODO config.getSchema()*/null, tableName, "%"); - ForEachUtil.accept(columnsResult, - new AbstractTypeSafeResultSetVisitor<ColumnMeta, List<ColumnModel>, SQLException>() { - - public List<ColumnModel> visit(ColumnMeta element) { - BuiltinDataType dataType = - dataTypeResolver.resolveDataType(factory, element.dataType, element.typeName); - - ColumnModel columnModel = factory.newModel(ColumnModel.class); - columnModel.setName(element.columnName); - columnModel.setDataType(dataType); - columns.add(columnModel); - - if (dataType.hasAdapter(SizedDataTypeAdapter.class)) { - dataType.getAdapter(SizedDataTypeAdapter.class).setSize(element.columnSize); - logger.debug(" " + element.columnName + " = " + element.typeName + "(" - + element.columnSize + ")"); - } else if (dataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { - dataType.getAdapter(PrecisionedDataTypeAdapter.class).setPrecision(element.columnSize); - dataType.getAdapter(PrecisionedDataTypeAdapter.class).setScale(element.decimalDigits); - logger.debug(" " + element.columnName + " = " + element.typeName + "(" - + element.columnSize + ", " + element.decimalDigits + ")"); - } else { - logger.debug(" " + element.columnName + " = " + element.typeName); - } - - columnModel.setDefaultValue(element.columnDef); - - if (element.nullable == Nullable.NO_NULLS) { - NotNullConstraint notNullConstraint = factory.newModel(NotNullConstraint.class); - columnModel.setNotNullConstraint(notNullConstraint); - } - - // TODO check制約のインポート - - finalResult.add(columnModel); - return null; - } - - @Override - protected void init() { - finalResult = CollectionsUtil.newArrayList(); - } - - }); + columnsResult = meta.getColumns("", config.getSchema(), tableName, "%"); + ForEachUtil.accept(columnsResult, new ColumnMetaVisitor(factory, dataTypeResolver, columns)); - keysResult = meta.getPrimaryKeys("", /* TODO config.getSchema()*/null, tableName); - ForEachUtil.accept(keysResult, - new AbstractTypeSafeResultSetVisitor<PrimaryKeyMeta, Boolean, SQLException>() { - - public Boolean visit(PrimaryKeyMeta element) { - PrimaryKey primaryKey = factory.newModel(PrimaryKey.class); - for (ColumnModel columnModel : columns) { - if (columnModel.getName().equals(element.columnName)) { - ColumnRef columnRef = factory.newReference(columnModel); - primaryKey.getKeyColumns().add(columnRef); - } - } - tableModel.getAttributes().add(primaryKey); - return null; - } - - }); + keysResult = meta.getPrimaryKeys("", config.getSchema(), tableName); + ForEachUtil.accept(keysResult, new PrimaryKeyMetaVisitor(factory, tableModel.getAttributes(), columns)); } finally { JmIOUtil.closeQuietly(columnsResult); JmIOUtil.closeQuietly(keysResult); @@ -276,4 +218,104 @@ return dataTypeResolver; } + + private static class ColumnMetaVisitor extends + AbstractTypeSafeResultSetVisitor<ColumnMeta, List<ColumnModel>, SQLException> { + + private final JiemamyFactory factory; + + private final List<ColumnModel> columns; + + private final DataTypeResolver dataTypeResolver; + + + /** + * インスタンスを生成する。 + * + * @param factory 新規モデル作成を行うためのファクトリ + * @param dataTypeResolver データ型リゾルバ + * @param columns 読み込んだカラムを格納するリスト + */ + private ColumnMetaVisitor(JiemamyFactory factory, DataTypeResolver dataTypeResolver, List<ColumnModel> columns) { + this.factory = factory; + this.dataTypeResolver = dataTypeResolver; + this.columns = columns; + } + + public List<ColumnModel> visit(ColumnMeta element) { + BuiltinDataType dataType = dataTypeResolver.resolveDataType(factory, element.dataType, element.typeName); + + ColumnModel columnModel = factory.newModel(ColumnModel.class); + columnModel.setName(element.columnName); + columnModel.setDataType(dataType); + columns.add(columnModel); + + if (dataType.hasAdapter(SizedDataTypeAdapter.class)) { + dataType.getAdapter(SizedDataTypeAdapter.class).setSize(element.columnSize); + logger.debug(" " + element.columnName + " = " + element.typeName + "(" + element.columnSize + ")"); + } else if (dataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { + dataType.getAdapter(PrecisionedDataTypeAdapter.class).setPrecision(element.columnSize); + dataType.getAdapter(PrecisionedDataTypeAdapter.class).setScale(element.decimalDigits); + logger.debug(" " + element.columnName + " = " + element.typeName + "(" + element.columnSize + ", " + + element.decimalDigits + ")"); + } else { + logger.debug(" " + element.columnName + " = " + element.typeName); + } + + columnModel.setDefaultValue(element.columnDef); + + if (element.nullable == Nullable.NO_NULLS) { + NotNullConstraint notNullConstraint = factory.newModel(NotNullConstraint.class); + columnModel.setNotNullConstraint(notNullConstraint); + } + + // TODO check制約のインポート + + finalResult.add(columnModel); + return null; + } + + @Override + protected void init() { + finalResult = CollectionsUtil.newArrayList(); + } + } + + private static class PrimaryKeyMetaVisitor extends + AbstractTypeSafeResultSetVisitor<PrimaryKeyMeta, Boolean, SQLException> { + + private final List<? super PrimaryKey> primaryKeys; + + private final JiemamyFactory factory; + + private final List<ColumnModel> columns; + + + /** + * インスタンスを生成する。 + * + * @param factory 新規モデル作成を行うためのファクトリ + * @param primaryKeys 読み込んだPKを格納するテーブル + * @param columns カラムのリスト + */ + private PrimaryKeyMetaVisitor(JiemamyFactory factory, List<? super PrimaryKey> primaryKeys, + List<ColumnModel> columns) { + this.primaryKeys = primaryKeys; + this.factory = factory; + this.columns = columns; + } + + public Boolean visit(PrimaryKeyMeta element) { + PrimaryKey primaryKey = factory.newModel(PrimaryKey.class); + for (ColumnModel columnModel : columns) { + if (columnModel.getName().equals(element.columnName)) { + ColumnRef columnRef = factory.newReference(columnModel); + primaryKey.getKeyColumns().add(columnRef); + } + } + primaryKeys.add(primaryKey); + return null; + } + } + } Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/AddRecordsToDataSetCommand.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/AddRecordsToDataSetCommand.java 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/AddRecordsToDataSetCommand.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -30,16 +30,19 @@ import org.jiemamy.model.entity.TableModel; /** - * TODO for daisuke + * {@link DataSetModel}に、指定したテーブル用のレコード保存領域を確保するEDITコマンド。 * * @author daisuke */ public class AddRecordsToDataSetCommand extends AbstractCommand { + /** レコード削除元の{@link DataSetModel} */ private final DataSetModel dataSetModel; + /** レコード削除対象の{@link TableModel} */ private final TableModel tableModel; + /** データセット保存用リストとして使用するインスタンス */ private final List<RecordModel> records; @@ -60,7 +63,7 @@ * @param eventBroker イベント通知用{@link EventBroker} * @param dataSetModel レコード削除元の{@link DataSetModel} * @param tableModel レコード削除対象の{@link TableModel} - * @param records + * @param records データセット保存用リストとして使用するインスタンス */ public AddRecordsToDataSetCommand(EventBroker eventBroker, DataSetModel dataSetModel, TableModel tableModel, List<RecordModel> records) { Modified: artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/RemoveRecordsFromDataSetCommand.java =================================================================== --- artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/RemoveRecordsFromDataSetCommand.java 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-core/src/main/java/org/jiemamy/internal/editcommand/RemoveRecordsFromDataSetCommand.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -29,14 +29,16 @@ import org.jiemamy.model.entity.TableModel; /** - * TODO for daisuke + * {@link DataSetModel}に確保された、指定したテーブル用のレコード保存領域を削除するEDITコマンド。 * * @author daisuke */ public class RemoveRecordsFromDataSetCommand extends AbstractCommand { + /** レコード追加対象の{@link DataSetModel} */ private final DataSetModel dataSetModel; + /** レコード追加対象の{@link TableModel} */ private final TableModel tableModel; private final List<RecordModel> records; Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/DatabaseCleanerTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/DatabaseCleanerTest.java 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/DatabaseCleanerTest.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -26,8 +26,7 @@ import org.junit.Test; import org.jiemamy.composer.importer.DefaultDatabaseImportConfig; -import org.jiemamy.dialect.Dialect; -import org.jiemamy.internal.test.ReflectionDialectProvider; +import org.jiemamy.dialect.generic.GenericDialect; /** * {@link DatabaseCleaner}のテストクラス。 @@ -67,18 +66,15 @@ @Test public void test01_データベースをcleanしてみる() throws Exception { DefaultDatabaseImportConfig config = new DefaultDatabaseImportConfig(); - ReflectionDialectProvider reflectionDialectProvider = new ReflectionDialectProvider(); - Dialect dialect = reflectionDialectProvider.getInstance("org.jiemamy.dialect.postgresql.PostgresqlDialect"); - config.setDialect(dialect); + config.setDialect(new GenericDialect()); config.setDriverClassName("org.postgresql.Driver"); config.setDriverJarPaths(new URL[] { new File("./src/test/resources/postgresql-8.3-603.jdbc3.jar").toURL() }); config.setUsername("postgres"); config.setPassword("postgres"); - config.setSchema("public"); config.setUri("jdbc:postgresql://localhost:5432/jiemamy"); -// databaseCleaner.clean(config); + databaseCleaner.clean(config); } } Modified: artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java =================================================================== --- artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-core/src/test/java/org/jiemamy/utils/model/ColumnUtilTest.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -28,8 +28,8 @@ import org.jiemamy.Artemis; import org.jiemamy.Jiemamy; +import org.jiemamy.internal.test.CoreTestModelBuilder; import org.jiemamy.internal.test.ReflectionDialectProvider; -import org.jiemamy.internal.test.CoreTestModelBuilder; /** * {@link ColumnUtil}のテストクラス。 Modified: artemis/trunk/jiemamy-dialect-postgresql/pom.xml =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/pom.xml 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-dialect-postgresql/pom.xml 2009-04-14 11:27:05 UTC (rev 3272) @@ -48,6 +48,12 @@ <scope>test</scope> </dependency> <dependency> + <groupId>postgresql</groupId> + <artifactId>postgresql</artifactId> + <version>8.3-603.jdbc3</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.jiemamy</groupId> <artifactId>jiemamy-test-helper</artifactId> <version>0.0.1-SNAPSHOT</version> Modified: artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java =================================================================== --- artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java 2009-04-14 10:22:29 UTC (rev 3271) +++ artemis/trunk/jiemamy-dialect-postgresql/src/test/java/org/jiemamy/dialect/postgresql/PostgresqlDialectTest.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -23,16 +23,6 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; -import java.net.URL; -import java.net.URLClassLoader; -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.sql.Connection; -import java.sql.Driver; -import java.sql.DriverPropertyInfo; -import java.sql.SQLException; -import java.util.Properties; - import javax.sql.DataSource; import javax.sql.XADataSource; @@ -45,7 +35,6 @@ import org.jiemamy.JiemamyFactory; import org.jiemamy.dialect.BuiltinDataTypeMold; import org.jiemamy.dialect.Dialect; -import org.jiemamy.internal.test.ReflectionDialectProvider; import org.jiemamy.model.RootModel; import org.jiemamy.model.datatype.DataTypeCategory; @@ -62,10 +51,6 @@ /** {@link DataSource} */ public DataSource dataSource; - /** JDBCドライバ */ - @SuppressWarnings("unused") - private Driver driver; - private Dialect dialect; private RootModel rootModel; @@ -82,26 +67,12 @@ */ @Before public void setUp() throws Exception { - jiemamy = Jiemamy.newInstance(new Artemis(), new ReflectionDialectProvider()); + jiemamy = Jiemamy.newInstance(new Artemis()); factory = jiemamy.getFactory(); rootModel = factory.getRootModel(); - rootModel.setDialectClassName("org.jiemamy.dialect.postgresql.PostgresqlDialect"); + rootModel.setDialectClassName(PostgresqlDialect.class.getName()); dialect = jiemamy.getDialect(rootModel); - - ClassLoader classLoader = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { - - public ClassLoader run() { - return URLClassLoader.newInstance(new URL[] { - PostgresqlDialectTest.class.getResource("/postgresql-8.3-603.jdbc3.jar") - }); - } - }); - - // org.postgresql.Driver は java.sql.Driver を実装しているのでキャスト安全である。 - @SuppressWarnings("unchecked") - Class<Driver> driverClass = (Class<Driver>) classLoader.loadClass("org.postgresql.Driver"); - driver = new DriverWrapper(driverClass.newInstance()); } /** @@ -111,7 +82,6 @@ */ @After public void tearDown() throws Exception { - driver = null; dialect = null; rootModel = null; factory = null; @@ -178,52 +148,4 @@ // success } } - - - /** - * JDBC Driverのラッパークラス。 - * - * <p>ref. <a href="http://forum.java.sun.com/thread.jspa?threadID=703241&messageID=4077758"> - * http://forum.java.sun.com/thread.jspa?threadID=703241&messageID=4077758</a></p> - * @author daisuke - */ - private static class DriverWrapper implements Driver { - - private Driver driver; - - - /** - * インスタンスを生成する。 - * @param driver ドライバ - * @see java.sql.Driver - */ - public DriverWrapper(Driver driver) { - this.driver = driver; - } - - public boolean acceptsURL(String u) throws SQLException { - return driver.acceptsURL(u); - } - - public Connection connect(String u, Properties p) throws SQLException { - return driver.connect(u, p); - } - - public int getMajorVersion() { - return driver.getMajorVersion(); - } - - public int getMinorVersion() { - return driver.getMinorVersion(); - } - - public DriverPropertyInfo[] getPropertyInfo(String u, Properties p) throws SQLException { - return driver.getPropertyInfo(u, p); - } - - public boolean jdbcCompliant() { - return driver.jdbcCompliant(); - } - } - } Modified: charon/jiemamy-jpa-importer/trunk/src/test/java/org/jiemamy/composer/importer/JpaImporterTest.java =================================================================== --- charon/jiemamy-jpa-importer/trunk/src/test/java/org/jiemamy/composer/importer/JpaImporterTest.java 2009-04-14 10:22:29 UTC (rev 3271) +++ charon/jiemamy-jpa-importer/trunk/src/test/java/org/jiemamy/composer/importer/JpaImporterTest.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -28,7 +28,6 @@ import org.jiemamy.Jiemamy; import org.jiemamy.dialect.generic.GenericDialect; -import org.jiemamy.internal.test.ReflectionDialectProvider; import org.jiemamy.model.RootModel; import org.jiemamy.utils.ResourceUtil; @@ -55,7 +54,7 @@ */ @Before public void setUp() throws Exception { - jiemamy = Jiemamy.newInstance(new ReflectionDialectProvider()); + jiemamy = Jiemamy.newInstance(); rootModel = jiemamy.getFactory().getRootModel(); rootModel.setDialectClassName(GenericDialect.class.getName()); jpaImporter = new JpaImporter(); Modified: eros/maven-jiemamy-plugin/trunk/src/main/java/org/jiemamy/maven/CleanDatabaseMojo.java =================================================================== --- eros/maven-jiemamy-plugin/trunk/src/main/java/org/jiemamy/maven/CleanDatabaseMojo.java 2009-04-14 10:22:29 UTC (rev 3271) +++ eros/maven-jiemamy-plugin/trunk/src/main/java/org/jiemamy/maven/CleanDatabaseMojo.java 2009-04-14 11:27:05 UTC (rev 3272) @@ -105,7 +105,7 @@ DatabaseCleaner databaseCleaner = new DatabaseCleaner(); config.setDialect(jiemamy.getDialect(jiemamy.getFactory().getRootModel())); - config.setSchema(jiemamy.getFactory().getRootModel().getSchemaName()); +// config.setSchema(jiemamy.getFactory().getRootModel().getSchemaName()); databaseCleaner.clean(config); } catch (DriverNotFoundException e) {