[Jiemamy-notify] commit [2112] OpenJpaTableAdapterを書いてみた。これはこれでメンドクサイな。。。

Zurück zum Archiv-Index

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


Jiemamy-notify メーリングリストの案内
Zurück zum Archiv-Index