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>