[Jiemamy-notify:960] commit [2344] ファクトリから取れるビルダを書いてみた。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 1月 2日 (金) 01:03:46 JST


Revision: 2344
          http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2344
Author:   daisuke_m
Date:     2009-01-02 01:03:46 +0900 (Fri, 02 Jan 2009)

Log Message:
-----------
ファクトリから取れるビルダを書いてみた。

Modified Paths:
--------------
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/JiemamyFactoryImpl.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/model/datatype/adapter/SerialDataTypeAdapter.java
    artemis/trunk/org.jiemamy.core/src/main/resources/jiemamy-core.dicon
    zeus/trunk/org.jiemamy.spec.core/META-INF/MANIFEST.MF
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/JiemamyFactory.java

Added Paths:
-----------
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilderImpl.java
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilderImpl.java
    artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/builder/
    artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/builder/TableBuilderTest.java
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedBuilder.java
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilder.java
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureBuilder.java
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilder.java


-------------- next part --------------
Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/JiemamyFactoryImpl.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/JiemamyFactoryImpl.java	2009-01-01 13:06:05 UTC (rev 2343)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/JiemamyFactoryImpl.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -23,6 +23,7 @@
 import org.jiemamy.model.RootModel;
 import org.jiemamy.model.connection.ForeignKeyModelImpl;
 import org.jiemamy.utils.Identifiable;
+import org.jiemamy.utils.builder.PrematureBuilder;
 
 /**
  * {@link JiemamyFactory}のArtemis実装。
@@ -45,6 +46,13 @@
 	/**
 	 * {@inheritDoc}
 	 */
+	public <M, T extends PrematureBuilder<M>>T newBuilder(Class<T> clazz) {
+		return Jiemamy.newModel(rootModel, clazz);
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
 	public <T>T newModel(Class<T> clazz) {
 		// T型を返すことが保証されているため、キャスト安全である。
 		@SuppressWarnings("unchecked")

Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/model/datatype/adapter/SerialDataTypeAdapter.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/model/datatype/adapter/SerialDataTypeAdapter.java	2009-01-01 13:06:05 UTC (rev 2343)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/model/datatype/adapter/SerialDataTypeAdapter.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -18,8 +18,6 @@
  */
 package org.jiemamy.model.datatype.adapter;
 
-import org.apache.commons.lang.ClassUtils;
-
 import org.jiemamy.model.datatype.DataTypeAdapter;
 
 /**
@@ -60,7 +58,7 @@
 	 */
 	@Override
 	public String toString() {
-		return ClassUtils.getShortClassName(this, "null");
+		return serial ? "SERIAL" : "NORMAL";
 	}
 	
 }

Added: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilderImpl.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilderImpl.java	                        (rev 0)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilderImpl.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.utils.builder;
+
+import org.jiemamy.model.attribute.ColumnModel;
+import org.jiemamy.model.node.TableModel;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public class MaturedTableBuilderImpl implements MaturedTableBuilder {
+	
+	TableModel table;
+	
+
+	/**
+	 * コンストラクタ。
+	 * @param table
+	 * @category instance creation
+	 */
+	public MaturedTableBuilderImpl(TableModel table) {
+		this.table = table;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	public MaturedTableBuilder addColumn(ColumnModel column) {
+		table.appendColumn(column);
+		return this;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	public TableModel build() {
+		return table;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	public MaturedTableBuilder setName(String name) {
+		table.setName(name);
+		return this;
+	}
+	
+}


Property changes on: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilderImpl.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilderImpl.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilderImpl.java	                        (rev 0)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilderImpl.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.utils.builder;
+
+import org.jiemamy.Jiemamy;
+import org.jiemamy.model.attribute.ColumnModel;
+import org.jiemamy.model.node.TableModel;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public class PrematureTableBuilderImpl implements PrematureTableBuilder {
+	
+	TableModel table;
+	
+
+	/**
+	 * コンストラクタ。
+	 * @category instance creation
+	 */
+	public PrematureTableBuilderImpl() {
+		table = Jiemamy.newRootModel().getFactory().newModel(TableModel.class);
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	public PrematureTableBuilder addColumn(ColumnModel column) {
+		table.appendColumn(column);
+		return this;
+	}
+	
+	/**
+	 * {@inheritDoc}
+	 */
+	public MaturedTableBuilder setName(String name) {
+		table.setName(name);
+		return new MaturedTableBuilderImpl(table);
+	}
+	
+}


Property changes on: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilderImpl.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: artemis/trunk/org.jiemamy.core/src/main/resources/jiemamy-core.dicon
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/resources/jiemamy-core.dicon	2009-01-01 13:06:05 UTC (rev 2343)
+++ artemis/trunk/org.jiemamy.core/src/main/resources/jiemamy-core.dicon	2009-01-01 16:03:46 UTC (rev 2344)
@@ -16,6 +16,10 @@
 	<component class="org.jiemamy.internal.ModelConsistenceMediatorImpl"/>
 	<component class="org.jiemamy.internal.AdapterManagerImpl"/>
 	
+	<!-- Jiemamy Model Builder -->
+	<component class="org.jiemamy.utils.builder.PrematureTableBuilderImpl" instance="prototype"/>
+	
+	
 	<!-- Jiemamy Model -->
 	<component class="org.jiemamy.model.RootModelImpl" instance="prototype" autoBinding="semiauto">
 		<arg>uuid</arg>

Added: artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/builder/TableBuilderTest.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/builder/TableBuilderTest.java	                        (rev 0)
+++ artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/builder/TableBuilderTest.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.builder;
+
+import java.sql.Types;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.jiemamy.Jiemamy;
+import org.jiemamy.JiemamyFactory;
+import org.jiemamy.model.RootModel;
+import org.jiemamy.model.attribute.ColumnModel;
+import org.jiemamy.model.datatype.DataType;
+import org.jiemamy.model.node.TableModel;
+import org.jiemamy.utils.builder.ColumnBuilder;
+import org.jiemamy.utils.builder.DataTypeBuilder;
+import org.jiemamy.utils.builder.PrematureTableBuilder;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public class TableBuilderTest {
+	
+	private RootModel rootModel;
+	
+	private JiemamyFactory factory;
+	
+	private ColumnModel col1, col2, col3;
+	
+
+	/**
+	 * TODO for daisuke
+	 * @throws java.lang.Exception
+	 */
+	@Before
+	public void setUp() throws Exception {
+		Jiemamy.init();
+		rootModel = Jiemamy.newRootModel();
+		factory = rootModel.getFactory();
+		DataType dataType1 = new DataTypeBuilder(factory, Types.INTEGER, "INTEGER").build();
+		DataType dataType2 = new DataTypeBuilder(factory, Types.INTEGER, "INTEGER").build();
+		DataType dataType3 = new DataTypeBuilder(factory, Types.INTEGER, "INTEGER").build();
+		col1 = new ColumnBuilder(factory, "column1", dataType1).build();
+		col2 = new ColumnBuilder(factory, "column2", dataType2).build();
+		col3 = new ColumnBuilder(factory, "column3", dataType3).build();
+	}
+	
+	/**
+	 * TODO for daisuke
+	 * @throws java.lang.Exception
+	 */
+	@After
+	public void tearDown() throws Exception {
+		Jiemamy.dispose();
+	}
+	
+	@Test
+	public void test01() throws Exception {
+		TableModel table1 = factory.newBuilder(PrematureTableBuilder.class).setName("T_USER").addColumn(col1).build();
+		TableModel table2 = factory.newBuilder(PrematureTableBuilder.class).addColumn(col2).setName("T_USER").build();
+//		TableModel table3 = factory.newBuilder(PrematureTableBuilder.class).addColumn(col3).build(); // コンパイルエラー
+		System.out.println(table1);
+		System.out.println(table2);
+	}
+}


Property changes on: artemis/trunk/org.jiemamy.core/src/test/java/org/jiemamy/builder/TableBuilderTest.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: zeus/trunk/org.jiemamy.spec.core/META-INF/MANIFEST.MF
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/META-INF/MANIFEST.MF	2009-01-01 13:06:05 UTC (rev 2343)
+++ zeus/trunk/org.jiemamy.spec.core/META-INF/MANIFEST.MF	2009-01-01 16:03:46 UTC (rev 2344)
@@ -23,4 +23,5 @@
  org.jiemamy.model.sql,
  org.jiemamy.serializer,
  org.jiemamy.utils,
+ org.jiemamy.utils.builder,
  org.jiemamy.xml

Modified: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/JiemamyFactory.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/JiemamyFactory.java	2009-01-01 13:06:05 UTC (rev 2343)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/JiemamyFactory.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -22,6 +22,7 @@
 
 import org.jiemamy.model.RootModel;
 import org.jiemamy.utils.Identifiable;
+import org.jiemamy.utils.builder.PrematureBuilder;
 
 /**
  * Jiemamy関連のインスタンスを生成するファクトリインターフェイス。
@@ -29,6 +30,8 @@
  */
 public interface JiemamyFactory {
 	
+	<M, T extends PrematureBuilder<M>>T newBuilder(Class<T> clazz);
+	
 	/**
 	 * 新規に、この {@link RootModel}に従属しうるモデルインスタンスを生成する。
 	 * 
@@ -39,6 +42,7 @@
 	 * @throws IllegalArgumentException 引数clazzに責務外のクラスを指定して、インスタンスを取得しようとした場合
 	 * @throws IllegalArgumentException 引数として{@code null}を与えた場合
 	 */
+	@Deprecated
 	<T>T newModel(Class<T> clazz);
 	
 	/**
@@ -52,6 +56,7 @@
 	 * @throws IllegalArgumentException 引数clazzに責務外のクラスを指定して、インスタンスを取得しようとした場合
 	 * @throws IllegalArgumentException 引数として{@code null}を与えた場合
 	 */
+	@Deprecated
 	<T extends Identifiable>T newModel(Class<T> clazz, UUID id);
 	
 }

Added: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedBuilder.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedBuilder.java	                        (rev 0)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedBuilder.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.utils.builder;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public interface MaturedBuilder<T> extends PrematureBuilder<T> {
+	
+	/**
+	 * モデルを構築する。
+	 * @return model 構築されたモデル
+	 */
+	T build();
+}


Property changes on: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilder.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilder.java	                        (rev 0)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilder.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.utils.builder;
+
+import org.jiemamy.model.attribute.ColumnModel;
+import org.jiemamy.model.node.TableModel;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public interface MaturedTableBuilder extends MaturedBuilder<TableModel> {
+	
+	MaturedTableBuilder addColumn(ColumnModel column);
+	
+	MaturedTableBuilder setName(String name);
+	
+}


Property changes on: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/MaturedTableBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureBuilder.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureBuilder.java	                        (rev 0)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureBuilder.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.utils.builder;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public interface PrematureBuilder<T> {
+	
+}


Property changes on: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilder.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilder.java	                        (rev 0)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilder.java	2009-01-01 16:03:46 UTC (rev 2344)
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2007-2009 MIYAMOTO Daisuke, jiemamy.org and the Others.
+ * Created on 2009/01/01
+ *
+ * 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.utils.builder;
+
+import org.jiemamy.model.attribute.ColumnModel;
+import org.jiemamy.model.node.TableModel;
+
+/**
+ * TODO for daisuke
+ * @author daisuke
+ */
+public interface PrematureTableBuilder extends PrematureBuilder<TableModel> {
+	
+	PrematureTableBuilder addColumn(ColumnModel column);
+	
+	MaturedTableBuilder setName(String name);
+	
+}


Property changes on: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/utils/builder/PrematureTableBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain


Jiemamy-notify メーリングリストの案内
Back to archive index