svnno****@sourc*****
svnno****@sourc*****
2008年 11月 9日 (日) 04:38:54 JST
Revision: 2112 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=jiemamy&view=rev&rev=2112 Author: daisuke_m Date: 2008-11-09 04:38:53 +0900 (Sun, 09 Nov 2008) Log Message: ----------- OpenJpaTableAdapterを書いてみた。これはこれでメンドクサイな。。。 Modified Paths: -------------- artemis/trunk/org.jiemamy.dialect/.classpath artemis/trunk/org.jiemamy.dialect/META-INF/MANIFEST.MF artemis/trunk/org.jiemamy.dialect/build.properties artemis/trunk/org.jiemamy.dialect/pom.xml Added Paths: ----------- artemis/trunk/org.jiemamy.dialect/src/main/java/org/jiemamy/dialect/openjpa/ artemis/trunk/org.jiemamy.dialect/src/main/java/org/jiemamy/dialect/openjpa/OpenJpaTableAdapter.java artemis/trunk/org.jiemamy.dialect/src/test/java/org/jiemamy/dialect/openjpa/ artemis/trunk/org.jiemamy.dialect/src/test/java/org/jiemamy/dialect/openjpa/OpenJpaGenerateSqlTest.java -------------- next part -------------- Modified: artemis/trunk/org.jiemamy.dialect/.classpath =================================================================== --- artemis/trunk/org.jiemamy.dialect/.classpath 2008-11-08 18:17:13 UTC (rev 2111) +++ artemis/trunk/org.jiemamy.dialect/.classpath 2008-11-08 19:38:53 UTC (rev 2112) @@ -4,6 +4,13 @@ <classpathentry kind="src" path="src/main/resources"/> <classpathentry kind="src" output="target/test-classes" path="src/test/java"/> <classpathentry kind="src" output="target/test-classes" path="src/test/resources"/> + <classpathentry exported="true" kind="lib" path="lib/h2-1.1.102.jar"/> + <classpathentry exported="true" kind="lib" path="lib/serp-1.13.1.jar"/> + <classpathentry exported="true" kind="lib" path="lib/openjpa-jdbc-1.2.0.jar" sourcepath="lib/sources/openjpa-jdbc-1.2.0-sources.jar"/> + <classpathentry exported="true" kind="lib" path="lib/openjpa-kernel-1.2.0.jar" sourcepath="lib/sources/openjpa-kernel-1.2.0-sources.jar"/> + <classpathentry exported="true" kind="lib" path="lib/openjpa-lib-1.2.0.jar" sourcepath="lib/sources/openjpa-lib-1.2.0-sources.jar"/> + <classpathentry exported="true" kind="lib" path="lib/openjpa-persistence-1.2.0.jar"/> + <classpathentry exported="true" kind="lib" path="lib/openjpa-persistence-jdbc-1.2.0.jar"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry exported="true" kind="lib" path="lib/geronimo-jta_1.1_spec-1.0.jar" sourcepath="lib/sources/geronimo-jta_1.1_spec-1.0-sources.jar"/> Modified: artemis/trunk/org.jiemamy.dialect/META-INF/MANIFEST.MF =================================================================== --- artemis/trunk/org.jiemamy.dialect/META-INF/MANIFEST.MF 2008-11-08 18:17:13 UTC (rev 2111) +++ artemis/trunk/org.jiemamy.dialect/META-INF/MANIFEST.MF 2008-11-08 19:38:53 UTC (rev 2112) @@ -4,7 +4,14 @@ Bundle-SymbolicName: org.jiemamy.dialect Bundle-Version: 0.2.0.SNAPSHOT Bundle-ClassPath: ., - lib/geronimo-jta_1.1_spec-1.0.jar + lib/geronimo-jta_1.1_spec-1.0.jar, + lib/openjpa-jdbc-1.2.0.jar, + lib/openjpa-kernel-1.2.0.jar, + lib/openjpa-lib-1.2.0.jar, + lib/openjpa-persistence-1.2.0.jar, + lib/openjpa-persistence-jdbc-1.2.0.jar, + lib/h2-1.1.102.jar, + lib/serp-1.13.1.jar Bundle-Vendor: Jiemamy Project Require-Bundle: org.jiemamy.spec.core, org.jiemamy.core Modified: artemis/trunk/org.jiemamy.dialect/build.properties =================================================================== --- artemis/trunk/org.jiemamy.dialect/build.properties 2008-11-08 18:17:13 UTC (rev 2111) +++ artemis/trunk/org.jiemamy.dialect/build.properties 2008-11-08 19:38:53 UTC (rev 2112) @@ -2,7 +2,14 @@ bin.includes = .,\ META-INF/,\ lib/geronimo-jta_1.1_spec-1.0.jar,\ - LICENSE.txt + LICENSE.txt,\ + lib/openjpa-jdbc-1.2.0.jar,\ + lib/openjpa-kernel-1.2.0.jar,\ + lib/openjpa-lib-1.2.0.jar,\ + lib/openjpa-persistence-1.2.0.jar,\ + lib/openjpa-persistence-jdbc-1.2.0.jar,\ + lib/h2-1.1.102.jar,\ + lib/serp-1.13.1.jar output..=target/classes/ source..=src/main/java/,src/main/resources/,src/test/java/,src/test/resources/ javacCustomEncodings.. = src[UTF-8] Modified: artemis/trunk/org.jiemamy.dialect/pom.xml =================================================================== --- artemis/trunk/org.jiemamy.dialect/pom.xml 2008-11-08 18:17:13 UTC (rev 2111) +++ artemis/trunk/org.jiemamy.dialect/pom.xml 2008-11-08 19:38:53 UTC (rev 2112) @@ -155,6 +155,11 @@ <version>1.4</version> <scope>test</scope> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.1.102</version> + </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>org.jiemamy.core</artifactId> @@ -165,6 +170,11 @@ <artifactId>geronimo-jta_1.1_spec</artifactId> <version>1.0</version> </dependency> + <dependency> + <groupId>org.apache.openjpa</groupId> + <artifactId>openjpa-persistence-jdbc</artifactId> + <version>1.2.0</version> + </dependency> </dependencies> <reporting> <plugins> Added: artemis/trunk/org.jiemamy.dialect/src/main/java/org/jiemamy/dialect/openjpa/OpenJpaTableAdapter.java =================================================================== --- artemis/trunk/org.jiemamy.dialect/src/main/java/org/jiemamy/dialect/openjpa/OpenJpaTableAdapter.java (rev 0) +++ artemis/trunk/org.jiemamy.dialect/src/main/java/org/jiemamy/dialect/openjpa/OpenJpaTableAdapter.java 2008-11-08 19:38:53 UTC (rev 2112) @@ -0,0 +1,401 @@ +/* + * Copyright 2007-2008 MIYAMOTO Daisuke, jiemamy.org and the Others. + * Created on 2008/11/09 + * + * This file is part of Jiemamy. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.dialect.openjpa; + +import java.io.File; +import java.sql.Types; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.openjpa.jdbc.meta.VersionStrategy; +import org.apache.openjpa.jdbc.schema.Column; +import org.apache.openjpa.jdbc.schema.ForeignKey; +import org.apache.openjpa.jdbc.schema.Index; +import org.apache.openjpa.jdbc.schema.PrimaryKey; +import org.apache.openjpa.jdbc.schema.Schema; +import org.apache.openjpa.jdbc.schema.Table; +import org.apache.openjpa.jdbc.schema.Unique; + +import org.jiemamy.core.model.datatype.adapter.SizedDataTypeAdapter; +import org.jiemamy.spec.exception.TooManyElementsException; +import org.jiemamy.spec.model.ColumnModel; +import org.jiemamy.spec.model.constraint.NotNullConstraintModel; +import org.jiemamy.spec.model.constraint.PrimaryKeyConstraintModel; +import org.jiemamy.spec.model.datatype.DataType; +import org.jiemamy.spec.model.node.TableModel; + +/** + * TODO for daisuke + * @author daisuke + */ + @ SuppressWarnings("serial") +public class OpenJpaTableAdapter extends Table { + + private TableModel jiemamyTable; + + + /** + * コンストラクタ。 + * @param jiemamyTable + * @category instance creation + */ + public OpenJpaTableAdapter(TableModel jiemamyTable) { + this.jiemamyTable = jiemamyTable; + } + + @Override + public int compareTo(Object other) { + // TODO Auto-generated method stub + return super.compareTo(other); + } + + @Override + public boolean containsColumn(String name) { + // TODO Auto-generated method stub + return super.containsColumn(name); + } + + @Override + public Column[] getAutoAssignedColumns() { + // TODO Auto-generated method stub + return super.getAutoAssignedColumns(); + } + + @Override + public Column getColumn(String name) { + try { + return new ColumnAdapter(jiemamyTable.getColumn(name)); + } catch (TooManyElementsException e) { + return null; + } + } + + @Override + public String[] getColumnNames() { + List<String> result = new ArrayList<String>(jiemamyTable.getColumns().size()); + for (ColumnModel c : jiemamyTable.getColumns()) { + result.add(c.getName()); + } + return result.toArray(new String[0]); + } + + @Override + public Column[] getColumns() { + List<Column> result = new ArrayList<Column>(jiemamyTable.getColumns().size()); + for (ColumnModel c : jiemamyTable.getColumns()) { + result.add(new ColumnAdapter(c)); + } + return result.toArray(new Column[0]); + } + + @Override + public String getComment() { + return jiemamyTable.getDescription(); + } + + @Override + public ForeignKey getForeignKey(String name) { + // TODO Auto-generated method stub + return super.getForeignKey(name); + } + + @Override + public ForeignKey[] getForeignKeys() { + // TODO Auto-generated method stub + return super.getForeignKeys(); + } + + @Override + public String getFullName() { + // THINK schema? + return jiemamyTable.getName(); + } + + @Override + public Index getIndex(String name) { + // TODO Auto-generated method stub + return super.getIndex(name); + } + + @Override + public Index[] getIndexes() { + // TODO Auto-generated method stub + return super.getIndexes(); + } + + @Override + public String getName() { + return jiemamyTable.getName(); + } + + @Override + public PrimaryKey getPrimaryKey() { + // TODO Auto-generated method stub + return super.getPrimaryKey(); + } + + @Override + public Column[] getRelationIdColumns() { + // TODO Auto-generated method stub + return super.getRelationIdColumns(); + } + + @Override + public String getResourceName() { + // TODO Auto-generated method stub + return super.getResourceName(); + } + + @Override + public Schema getSchema() { + // TODO Auto-generated method stub + return super.getSchema(); + } + + @Override + public String getSchemaName() { + // TODO Auto-generated method stub + return super.getSchemaName(); + } + + @Override + public File getSourceFile() { + // TODO Auto-generated method stub + return super.getSourceFile(); + } + + @Override + public Object getSourceScope() { + // TODO Auto-generated method stub + return super.getSourceScope(); + } + + @Override + public int getSourceType() { + // TODO Auto-generated method stub + return super.getSourceType(); + } + + @Override + public Unique getUnique(String name) { + // TODO Auto-generated method stub + return super.getUnique(name); + } + + @Override + public Unique[] getUniques() { + // TODO Auto-generated method stub + return super.getUniques(); + } + + @Override + public boolean hasComment() { + // TODO Auto-generated method stub + return StringUtils.isEmpty(jiemamyTable.getDescription()) == false; + } + + + private class ColumnAdapter extends Column { + + private ColumnModel jiemamyColumn; + + + /** + * コンストラクタ。 + * @param jiemamyColumn + * @category instance creation + */ + public ColumnAdapter(ColumnModel jiemamyColumn) { + this.jiemamyColumn = jiemamyColumn; + } + + @Override + public void copy(Column from) { + // TODO Auto-generated method stub + super.copy(from); + } + + @Override + public boolean equalsColumn(Column col) { + // TODO Auto-generated method stub + return super.equalsColumn(col); + } + + @Override + public String getComment() { + // TODO Auto-generated method stub + return jiemamyColumn.getDescription(); + } + + @Override + public int getDecimalDigits() { + // TODO Auto-generated method stub + return super.getDecimalDigits(); + } + + @Override + public Object getDefault() { + return jiemamyColumn.getDefaultValue(); + } + + @Override + public String getDefaultString() { + return jiemamyColumn.getDefaultValue(); + } + + @Override + public String getDescription() { + return jiemamyColumn.getDescription(); + } + + @Override + public boolean getFlag(int flag) { + // TODO Auto-generated method stub + return super.getFlag(flag); + } + + @Override + public String getFullName() { + // THINK schema? + return jiemamyColumn.getName(); + } + + @Override + public int getIndex() { + return jiemamyTable.getColumns().indexOf(jiemamyColumn); + } + + @Override + public int getJavaType() { + // TODO Auto-generated method stub + return Types.BIGINT; + } + + @Override + public String getName() { + return jiemamyColumn.getName(); + } + + @Override + public String getSchemaName() { + // TODO Auto-generated method stub + return super.getSchemaName(); + } + + @Override + public int getSize() { + DataType dt = jiemamyColumn.getDataType(); + if (dt.hasAdapter(SizedDataTypeAdapter.class)) { + return dt.getAdapter(SizedDataTypeAdapter.class).getSize(); + } + return -1; + } + + @Override + public Table getTable() { + return OpenJpaTableAdapter.this; + } + + @Override + public String getTableName() { + return OpenJpaTableAdapter.this.getName(); + } + + @Override + public String getTarget() { + // TODO Auto-generated method stub + return super.getTarget(); + } + + @Override + public String getTargetField() { + // TODO Auto-generated method stub + return super.getTargetField(); + } + + @Override + public int getType() { + // TODO Auto-generated method stub + return super.getType(); + } + + @Override + public String getTypeName() { + return jiemamyColumn.getDataType().toString(); + } + + @Override + public VersionStrategy getVersionStrategy() { + // TODO Auto-generated method stub + return super.getVersionStrategy(); + } + + @Override + public boolean hasComment() { + return StringUtils.isEmpty(jiemamyColumn.getDescription()) == false; + } + + @Override + public boolean isAutoAssigned() { + // TODO Auto-generated method stub + return super.isAutoAssigned(); + } + + @Override + public boolean isCompatible(int type, String typeName, int size, int decimals) { + // TODO Auto-generated method stub + return super.isCompatible(type, typeName, size, decimals); + } + + @Override + public boolean isLob() { + // TODO Auto-generated method stub + return super.isLob(); + } + + @Override + public boolean isNotNull() { + return jiemamyColumn.hasConstraint(NotNullConstraintModel.class); + } + + @Override + public boolean isNotNullExplicit() { + // TODO Auto-generated method stub + return super.isNotNullExplicit(); + } + + @Override + public boolean isPrimaryKey() { + return jiemamyColumn.hasConstraint(PrimaryKeyConstraintModel.class); + } + + @Override + public boolean isRelationId() { + // TODO Auto-generated method stub + return super.isRelationId(); + } + + @Override + public boolean isXML() { + return false; + } + } + +} Property changes on: artemis/trunk/org.jiemamy.dialect/src/main/java/org/jiemamy/dialect/openjpa/OpenJpaTableAdapter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Added: artemis/trunk/org.jiemamy.dialect/src/test/java/org/jiemamy/dialect/openjpa/OpenJpaGenerateSqlTest.java =================================================================== --- artemis/trunk/org.jiemamy.dialect/src/test/java/org/jiemamy/dialect/openjpa/OpenJpaGenerateSqlTest.java (rev 0) +++ artemis/trunk/org.jiemamy.dialect/src/test/java/org/jiemamy/dialect/openjpa/OpenJpaGenerateSqlTest.java 2008-11-08 19:38:53 UTC (rev 2112) @@ -0,0 +1,91 @@ +/* + * Copyright 2007-2008 MIYAMOTO Daisuke, jiemamy.org and the Others. + * Created on 2008/11/09 + * + * This file is part of Jiemamy. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.jiemamy.dialect.openjpa; + +import java.util.Arrays; + +import org.apache.openjpa.jdbc.conf.JDBCConfiguration; +import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl; +import org.apache.openjpa.jdbc.sql.DBDictionary; +import org.junit.Test; + +import org.jiemamy.core.S2FactoryStrategy; +import org.jiemamy.core.model.typedef.datatype.impl.IntegerDataTypeMock; +import org.jiemamy.core.model.typedef.datatype.impl.VarcharDataTypeMock; +import org.jiemamy.creator.JiemamyModelFactory; +import org.jiemamy.dialect.openjpa.OpenJpaTableAdapter; +import org.jiemamy.spec.model.ColumnModel; +import org.jiemamy.spec.model.RootModel; +import org.jiemamy.spec.model.constraint.PrimaryKeyConstraintModel; +import org.jiemamy.spec.model.node.TableModel; + +/** + * TODO for daisuke + * @author daisuke + */ +public class OpenJpaGenerateSqlTest { + + @Test + public void testname() throws Exception { + + JDBCConfiguration conf = new JDBCConfigurationImpl(); + conf.setConnectionDriverName("org.h2.Driver"); + conf.setConnectionURL("jdbc:h2:./src/test/resources/database/testdb"); + conf.setConnectionUserName("sa"); + conf.setConnectionPassword(""); + + DBDictionary dict = conf.getDBDictionaryInstance(); + String[] createTableSQL = dict.getCreateTableSQL(new OpenJpaTableAdapter(createTable())); + System.out.println(Arrays.asList(createTableSQL)); + } + + private TableModel createTable() { + JiemamyModelFactory.init(new S2FactoryStrategy("jiemamy-core.dicon")); + RootModel rootModel = JiemamyModelFactory.createRoot().init(); + + TableModel deptTable = rootModel.createJiemamyModel(TableModel.class).init("T_DEPT"); + deptTable.setBeginScript("/* test begin script */"); + deptTable.setDescription("部署マスタです。"); + + ColumnModel idColumn = rootModel.createJiemamyModel(ColumnModel.class).init("ID", new IntegerDataTypeMock()); + idColumn.addConstraint(rootModel.createJiemamyModel(PrimaryKeyConstraintModel.class).init()); + idColumn.setLogicalName("部署ID"); + deptTable.getColumns().add(idColumn); + + ColumnModel noColumn = + rootModel.createJiemamyModel(ColumnModel.class).init("DEPT_NO", new IntegerDataTypeMock()); + noColumn.setLogicalName("部署番号"); + deptTable.getColumns().add(noColumn); + + ColumnModel deptNameColumn = + rootModel.createJiemamyModel(ColumnModel.class).init("DEPT_NAME", new VarcharDataTypeMock(20)); + deptNameColumn.setLogicalName("部署名"); + deptNameColumn.setRepresentation(true); + deptTable.getColumns().add(deptNameColumn); + + ColumnModel locColumn = + rootModel.createJiemamyModel(ColumnModel.class).init("LOC", new VarcharDataTypeMock(20)); + locColumn.setLogicalName("ロケーション"); + locColumn.setDefaultValue("secret"); + deptTable.getColumns().add(locColumn); + rootModel.appendModel(deptTable); + + return deptTable; + } +} Property changes on: artemis/trunk/org.jiemamy.dialect/src/test/java/org/jiemamy/dialect/openjpa/OpenJpaGenerateSqlTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain