[Jiemamy-notify:1215] commit [2510] 各XML要素で、adapterの出力を行うよう追加実装。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 1月 26日 (月) 02:24:03 JST


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

Log Message:
-----------
各XML要素で、adapterの出力を行うよう追加実装。

Modified Paths:
--------------
    artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/serializer/DomBuilder.java
    zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/xml/Nodes.java
    zeus/trunk/org.jiemamy.spec.core/src/main/resources/jiemamy-core.xsd
    zeus/trunk/org.jiemamy.spec.core/src/test/resources/sample.xml


-------------- next part --------------
Modified: artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/serializer/DomBuilder.java
===================================================================
--- artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/serializer/DomBuilder.java	2009-01-25 17:08:21 UTC (rev 2509)
+++ artemis/trunk/org.jiemamy.core/src/main/java/org/jiemamy/serializer/DomBuilder.java	2009-01-25 17:24:03 UTC (rev 2510)
@@ -24,6 +24,7 @@
 import static org.jiemamy.xml.Nodes.BEGIN_SCRIPT;
 import static org.jiemamy.xml.Nodes.COLUMN_REF;
 import static org.jiemamy.xml.Nodes.COLUMN_REFS;
+import static org.jiemamy.xml.Nodes.CONSTRAINTS;
 import static org.jiemamy.xml.Nodes.DATASET;
 import static org.jiemamy.xml.Nodes.DATASETS;
 import static org.jiemamy.xml.Nodes.DATA_TYPE;
@@ -135,31 +136,7 @@
 			dataTypeElement.setAttribute("ref", domainRef.getReferenceId().toString());
 		} else if (dataType instanceof BuiltinDataType) {
 			BuiltinDataType builtinDataType = (BuiltinDataType) dataType;
-			for (Object adapter : builtinDataType.getAdapters()) {
-				Element adapterElement = newChild(dataTypeElement, ADAPTER.qName);
-				adapterElement.setAttribute("class", adapter.getClass().getName());
-				boolean existSpecificValue = false;
-				for (Field field : adapter.getClass().getDeclaredFields()) {
-					String value = null;
-					try {
-						field.setAccessible(true);
-						value = ObjectUtils.toString(field.get(adapter), null);
-					} catch (IllegalArgumentException e) {
-						logger.error(e.getMessage());
-						throw new UnexpectedConditionError("フィールドは必ず存在するはず", e);
-					} catch (IllegalAccessException e) {
-						logger.error(e.getMessage());
-						throw new UnexpectedConditionError("setAccessible(true)しているのでアクセスできるはず", e);
-					}
-					if (value != null) {
-						newChild(adapterElement, new QName(Namespaces.NS_CORE.namespaceURI, field.getName()), value);
-						existSpecificValue = true;
-					}
-				}
-				if (existSpecificValue == false) {
-					dataTypeElement.removeChild(adapterElement);
-				}
-			}
+			writeAdapters(dataTypeElement, builtinDataType.getAdapters());
 		} else {
 			throw new UnexpectedConditionError("unknown DataType: " + dataType.getClass().getName());
 		}
@@ -188,6 +165,34 @@
 		return treeSet;
 	}
 	
+	private static void writeAdapters(Element parentElement, List<Object> adapters) {
+		for (Object adapter : adapters) {
+			Element adapterElement = newChild(parentElement, ADAPTER.qName);
+			adapterElement.setAttribute("class", adapter.getClass().getName());
+			boolean existSpecificValue = false;
+			for (Field field : adapter.getClass().getDeclaredFields()) {
+				String value = null;
+				try {
+					field.setAccessible(true);
+					value = ObjectUtils.toString(field.get(adapter), null);
+				} catch (IllegalArgumentException e) {
+					logger.error(e.getMessage());
+					throw new UnexpectedConditionError("フィールドは必ず存在するはず", e);
+				} catch (IllegalAccessException e) {
+					logger.error(e.getMessage());
+					throw new UnexpectedConditionError("setAccessible(true)しているのでアクセスできるはず", e);
+				}
+				if (value != null) {
+					newChild(adapterElement, new QName(Namespaces.NS_CORE.namespaceURI, field.getName()), value);
+					existSpecificValue = true;
+				}
+			}
+			if (existSpecificValue == false) {
+				parentElement.removeChild(adapterElement);
+			}
+		}
+	}
+	
 
 	private RootModel rootModel;
 	
@@ -265,10 +270,14 @@
 			newChild(domainElement, LOGICAL_NAME.qName, domainModel.getLogicalName());
 			newDataTypeElement(domainElement, domainModel.getDataType());
 			newChild(domainElement, DEFAULT_VALUE.qName, domainModel.getDefaultValue());
+			
+			Element constraintsElement = newChild(domainElement, CONSTRAINTS.qName);
 			// TODO 制約を出力
+			
 			newChild(domainElement, NOT_NULL.qName, Boolean.toString(domainModel.isNotNull()));
 			newChild(domainElement, FREE_STRING.qName, domainModel.getFreeString());
 			newChild(domainElement, DESCRIPTION.qName, domainModel.getDescription());
+			writeAdapters(domainElement, domainModel.getAdapters());
 		}
 	}
 	
@@ -281,20 +290,20 @@
 	}
 	
 	private void buildNodeSection(Element rootElement) {
-		Element nodesElement = newChild(rootElement, ENTITIES.qName);
+		Element entitiesElement = newChild(rootElement, ENTITIES.qName);
 		for (EntityModel entityModel : rootModel.getEntities()) {
-			Element nodeElement = null;
+			Element entityElement = null;
 			
 			if (entityModel instanceof TableModel) {
 				TableModel tableModel = (TableModel) entityModel;
-				nodeElement = newChild(nodesElement, TABLE.qName);
-				newChild(nodeElement, NAME.qName, tableModel.getName());
-				newChild(nodeElement, LOGICAL_NAME.qName, tableModel.getLogicalName());
-				newChild(nodeElement, BEGIN_SCRIPT.qName, tableModel.getBeginScript());
-				newChild(nodeElement, END_SCRIPT.qName, tableModel.getEndScript());
-				newChild(nodeElement, DESCRIPTION.qName, tableModel.getDescription());
+				entityElement = newChild(entitiesElement, TABLE.qName);
+				newChild(entityElement, NAME.qName, tableModel.getName());
+				newChild(entityElement, LOGICAL_NAME.qName, tableModel.getLogicalName());
+				newChild(entityElement, BEGIN_SCRIPT.qName, tableModel.getBeginScript());
+				newChild(entityElement, END_SCRIPT.qName, tableModel.getEndScript());
+				newChild(entityElement, DESCRIPTION.qName, tableModel.getDescription());
 				
-				Element attributesElement = newChild(nodeElement, ATTRIBUTES.qName);
+				Element attributesElement = newChild(entityElement, ATTRIBUTES.qName);
 				for (AttributeModel attributeModel : tableModel.getAttributes()) {
 					Element attributeElement = newChild(attributesElement, getQName(attributeModel));
 					attributeElement.setAttribute("id", attributeModel.getId().toString());
@@ -307,7 +316,6 @@
 						newChild(attributeElement, DEFAULT_VALUE.qName, columnModel.getDefaultValue());
 						newChild(attributeElement, FREE_STRING.qName, columnModel.getFreeString());
 						newChild(attributeElement, DESCRIPTION.qName, columnModel.getDescription());
-//						newChild(attributeElement, REPRESENTATION.qName, Boolean.toString(columnModel.isRepresentation()));
 					} else if (attributeModel instanceof PrimaryKeyModel) {
 						PrimaryKeyModel primaryKeyModel = (PrimaryKeyModel) attributeModel;
 						Element columnRefsElement = newChild(attributeElement, COLUMN_REFS.qName);
@@ -341,18 +349,20 @@
 					} else if (attributeModel instanceof NotNullConstraintModel) {
 						NotNullConstraintModel notNullConstraintModel = (NotNullConstraintModel) attributeModel;
 						Element columnRefElement = newChild(attributeElement, COLUMN_REF.qName);
-						columnRefElement.setAttribute("ref", notNullConstraintModel.getColumn().getReferenceId().toString());
+						columnRefElement.setAttribute("ref", notNullConstraintModel.getColumn().getReferenceId()
+							.toString());
 					}
+					writeAdapters(attributeElement, attributeModel.getAdapters());
 				}
 			} else if (entityModel instanceof ViewModel) {
 				ViewModel viewModel = (ViewModel) entityModel;
-				nodeElement = newChild(nodesElement, VIEW.qName);
-				newChild(nodeElement, NAME.qName, viewModel.getName());
-				newChild(nodeElement, LOGICAL_NAME.qName, viewModel.getLogicalName());
-				newChild(nodeElement, BEGIN_SCRIPT.qName, viewModel.getBeginScript());
-				newChild(nodeElement, END_SCRIPT.qName, viewModel.getEndScript());
-				newChild(nodeElement, DESCRIPTION.qName, viewModel.getDescription());
-				newChild(nodeElement, DEFINITION.qName, viewModel.getDefinition());
+				entityElement = newChild(entitiesElement, VIEW.qName);
+				newChild(entityElement, NAME.qName, viewModel.getName());
+				newChild(entityElement, LOGICAL_NAME.qName, viewModel.getLogicalName());
+				newChild(entityElement, BEGIN_SCRIPT.qName, viewModel.getBeginScript());
+				newChild(entityElement, END_SCRIPT.qName, viewModel.getEndScript());
+				newChild(entityElement, DESCRIPTION.qName, viewModel.getDescription());
+				newChild(entityElement, DEFINITION.qName, viewModel.getDefinition());
 //			} else if (nodeModel instanceof StickyModel) {
 //				StickyModel stickyModel = (StickyModel) nodeModel;
 //				nodeElement = newChild(nodesElement, STICKY);
@@ -360,8 +370,9 @@
 			} else {
 				throw new UnexpectedConditionError("unknown entity:" + entityModel.getClass().getName());
 			}
-			nodeElement.setAttribute("id", entityModel.getId().toString());
-			nodesElement.appendChild(nodeElement);
+			writeAdapters(entityElement, entityModel.getAdapters());
+			entityElement.setAttribute("id", entityModel.getId().toString());
+			entitiesElement.appendChild(entityElement);
 		}
 	}
 	

Modified: zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/xml/Nodes.java
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/xml/Nodes.java	2009-01-25 17:08:21 UTC (rev 2509)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/java/org/jiemamy/xml/Nodes.java	2009-01-25 17:24:03 UTC (rev 2510)
@@ -76,6 +76,9 @@
 	ATTRIBUTES(Namespaces.NS_CORE, "attributes"),
 
 	/***/
+	CONSTRAINTS(Namespaces.NS_CORE, "constraints"),
+
+	/***/
 	PRIMARY_KEY(Namespaces.NS_CORE, "primaryKey"),
 
 	/***/

Modified: zeus/trunk/org.jiemamy.spec.core/src/main/resources/jiemamy-core.xsd
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/main/resources/jiemamy-core.xsd	2009-01-25 17:08:21 UTC (rev 2509)
+++ zeus/trunk/org.jiemamy.spec.core/src/main/resources/jiemamy-core.xsd	2009-01-25 17:24:03 UTC (rev 2510)
@@ -58,6 +58,7 @@
 				<xsd:element ref="constraints" minOccurs="0" />
 				<xsd:element ref="freeString" minOccurs="0" />
 				<xsd:element ref="description" minOccurs="0" />
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -88,6 +89,7 @@
 						</xsd:sequence>
 					</xsd:complexType>
 				</xsd:element>
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -106,6 +108,7 @@
 				<xsd:element ref="endScript" minOccurs="0" />
 				<xsd:element ref="description" minOccurs="0" />
 				<xsd:element name="definition" type="xsd:string" />
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -125,7 +128,7 @@
 				<xsd:element ref="defaultValue" minOccurs="0" />
 				<xsd:element ref="freeString" minOccurs="0" />
 				<xsd:element ref="description" minOccurs="0" />
-				<xsd:element name="representation" type="xsd:boolean" minOccurs="0" />
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -148,6 +151,7 @@
 					</xsd:annotation>
 				</xsd:element>
 				<xsd:element ref="columnRefs" minOccurs="1"/>
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -212,6 +216,7 @@
 					</xsd:simpleType>
 				</xsd:element>
 				<xsd:element ref="description" minOccurs="0" />
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -228,6 +233,7 @@
 				</xsd:element>
 				<xsd:element ref="logicalName" minOccurs="0" />
 				<xsd:element ref="columnRef"/>
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -244,6 +250,7 @@
 					</xsd:annotation>
 				</xsd:element>
 				<xsd:element ref="columnRefs" minOccurs="0"/>
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<xsd:attribute name="id" type="uuidType" use="required" />
 		</xsd:complexType>
@@ -273,20 +280,22 @@
 			<xsd:sequence>
 				<xsd:element name="sqlType" minOccurs="0" type="xsd:integer"/>
 				<xsd:element name="typeName" minOccurs="0" type="xsd:string"/>
-				<xsd:element name="adapter" minOccurs="0" maxOccurs="unbounded">
-					<xsd:complexType>
-						<xsd:sequence>
-							<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
-						</xsd:sequence>
-						<xsd:attribute name="class" type="fqcnType" use="required" />
-					</xsd:complexType>
-				</xsd:element>
+				<xsd:element ref="adapter" minOccurs="0" maxOccurs="unbounded"/>
 			</xsd:sequence>
 			<!-- TODO refがある時は、子elementは無しとしたい -->
 			<xsd:attribute name="ref" type="uuidRefType" use="optional" />
 		</xsd:complexType>
 	</xsd:element>
 
+	<xsd:element name="adapter" minOccurs="0" maxOccurs="unbounded">
+		<xsd:complexType>
+			<xsd:sequence>
+				<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
+			</xsd:sequence>
+			<xsd:attribute name="class" type="fqcnType" use="required" />
+		</xsd:complexType>
+	</xsd:element>
+	
 	<xsd:element name="constraints">
 		<xsd:annotation>
 			<xsd:documentation source="description" xml:lang="en">column constraint</xsd:documentation> 

Modified: zeus/trunk/org.jiemamy.spec.core/src/test/resources/sample.xml
===================================================================
--- zeus/trunk/org.jiemamy.spec.core/src/test/resources/sample.xml	2009-01-25 17:08:21 UTC (rev 2509)
+++ zeus/trunk/org.jiemamy.spec.core/src/test/resources/sample.xml	2009-01-25 17:24:03 UTC (rev 2510)
@@ -49,7 +49,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="248a429b-2159-4ebd-a791-eee42a059374">
           <name>EMP_NO</name>
@@ -58,7 +57,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="0e51b6df-43ab-408c-90ef-de13c6aab881">
           <name>EMP_NAME</name>
@@ -67,7 +65,9 @@
           <defaultValue>no name</defaultValue>
           <freeString/>
           <description/>
-          <representation>true</representation>
+          <adapter class="org.jiemamy.model.attribute.RepresentationAdapter">
+            <representation>true</representation>
+          </adapter>
         </column>
         <column id="3d21a85a-72de-41b3-99dd-f4cb94e58d84">
           <name>MGR_ID</name>
@@ -76,7 +76,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="f0b57eed-98ab-4c21-9855-218c592814dc">
           <name>HIREDATE</name>
@@ -85,7 +84,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="80786549-dc2c-4c1c-bcbd-9f6fdec911d2">
           <name>SAL</name>
@@ -99,7 +97,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="4ae69b7a-7a0e-422a-89dc-0f0cff77565b">
           <name>DEPT_ID</name>
@@ -108,7 +105,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <primaryKey id="6145e6a0-9ff7-4033-999d-99d80392a48f">
           <name/>
@@ -190,7 +186,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="2d951389-6bc7-49d7-8631-1d26fe17047e">
           <name>DEPT_NO</name>
@@ -199,7 +194,6 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <column id="1fcd63d3-974e-4d2e-a0d8-3b9c233104d9">
           <name>DEPT_NAME</name>
@@ -212,7 +206,9 @@
           <defaultValue/>
           <freeString/>
           <description/>
-          <representation>true</representation>
+          <adapter class="org.jiemamy.model.attribute.RepresentationAdapter">
+            <representation>true</representation>
+          </adapter>
         </column>
         <column id="7bf79e76-07b8-43b6-a993-b8ef374a31f5">
           <name>LOC</name>
@@ -225,7 +221,6 @@
           <defaultValue>secret</defaultValue>
           <freeString/>
           <description/>
-          <representation>false</representation>
         </column>
         <primaryKey id="8de55e65-ec48-467a-bac5-8eee2d71d41c">
           <name>PK_DEPT</name>



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