From bc902f7edf8ea0a278e322c485dd2fc977d02294 Mon Sep 17 00:00:00 2001 From: lresende Date: Thu, 18 Mar 2010 01:34:22 +0000 Subject: TUSCANY-3452 - Adding support for new extensibility for contract based elements, adjusting current xml for the new model and adapting our element extension list to read/write semantycally same xml when these extensions are in use git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@924584 13f79535-47bb-0310-9956-ffa450edef68 --- .../namespace/impl/NamespaceExportProcessor.java | 11 ++++-- .../namespace/impl/NamespaceImportProcessor.java | 13 ++++++-- .../processor/BaseStAXArtifactProcessor.java | 39 +++++++++++++++++++--- 3 files changed, 54 insertions(+), 9 deletions(-) (limited to 'sca-java-2.x/trunk/modules/contribution/src/main') diff --git a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java index b6731f735b..0d410fb377 100644 --- a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java +++ b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java @@ -115,7 +115,11 @@ public class NamespaceExportProcessor extends BaseStAXArtifactProcessor implemen } readExtendedAttributes(reader, namespaceExport, attributeProcessor, extensionFactory, context); } else { - readExtendedElement(reader, namespaceExport, extensionProcessor, context); + //read extended elements + Object ext = extensionProcessor.read(reader, context); + if (namespaceExport != null) { + namespaceExport.getExtensions().add(ext); + } } break; @@ -151,7 +155,10 @@ public class NamespaceExportProcessor extends BaseStAXArtifactProcessor implemen writeExtendedAttributes(writer, namespaceExport, attributeProcessor, context); - writeExtendedElements(writer, namespaceExport, extensionProcessor, context); + // handle extended elements + for (Object ext : namespaceExport.getExtensions()) { + extensionProcessor.write(ext, writer, context); + } writer.writeEndElement(); } diff --git a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java index f9ba0c40fd..17b0dc3953 100644 --- a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java +++ b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java @@ -122,7 +122,11 @@ public class NamespaceImportProcessor extends BaseStAXArtifactProcessor implemen } readExtendedAttributes(reader, namespaceImport, attributeProcessor, extensionFactory, context); } else { - readExtendedElement(reader, namespaceImport, extensionProcessor, context); + // handle extended elements + Object ext = extensionProcessor.read(reader, context); + if (namespaceImport != null) { + namespaceImport.getExtensions().add(ext); + } } break; case XMLStreamConstants.END_ELEMENT: @@ -159,7 +163,12 @@ public class NamespaceImportProcessor extends BaseStAXArtifactProcessor implemen } writeExtendedAttributes(writer, namespaceImport, attributeProcessor, context); - writeExtendedElements(writer, namespaceImport, extensionProcessor, context); + + //handle extended elements + for (Object ext : namespaceImport.getExtensions()) { + extensionProcessor.write(ext, writer, context); + } + writer.writeEndElement(); } diff --git a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java index 7056823ec8..40a558b80b 100644 --- a/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java +++ b/sca-java-2.x/trunk/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java @@ -22,6 +22,8 @@ package org.apache.tuscany.sca.contribution.processor; import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; + +import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -43,6 +45,9 @@ import org.apache.tuscany.sca.common.xml.stax.StAXHelper; * @version $Rev$ $Date$ */ public abstract class BaseStAXArtifactProcessor { + private static String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200912"; + private static String SCA11_TUSCANY_NS = "http://tuscany.apache.org/xmlns/sca/1.1"; + /** * The StAXHelper without states */ @@ -319,6 +324,7 @@ public abstract class BaseStAXArtifactProcessor { Extensible extensibleElement, StAXAttributeProcessor extensionAttributeProcessor, ProcessorContext context) throws ContributionWriteException, XMLStreamException { + for (Extension extension : extensibleElement.getAttributeExtensions()) { if (extension.isAttribute()) { extensionAttributeProcessor.write(extension, writer, context); @@ -328,8 +334,9 @@ public abstract class BaseStAXArtifactProcessor { protected void readExtendedElement(XMLStreamReader reader, Extensible extensible, - StAXArtifactProcessor extensionProcessor, ProcessorContext context) throws ContributionReadException, - XMLStreamException { + StAXArtifactProcessor extensionProcessor, ProcessorContext context) + throws ContributionReadException, XMLStreamException { + Object ext = extensionProcessor.read(reader, context); if (extensible != null) { extensible.getExtensions().add(ext); @@ -338,11 +345,33 @@ public abstract class BaseStAXArtifactProcessor { protected void writeExtendedElements(XMLStreamWriter writer, Extensible extensible, - StAXArtifactProcessor extensionProcessor, ProcessorContext context) throws ContributionWriteException, - XMLStreamException { + StAXArtifactProcessor extensionProcessor, ProcessorContext context) + throws ContributionWriteException, XMLStreamException { + + List otherExtensions = new ArrayList(); + + // write all generic extensions as elements + // to produce semanticaly equal xml output for (Object ext : extensible.getExtensions()) { - extensionProcessor.write(ext, writer, context); + if (ext instanceof Extension) { + extensionProcessor.write(ext, writer, context); + } else { + otherExtensions.add(ext); + } } + + //wrap xml extensibility into a extension wrapper element + if(otherExtensions.size() > 0) { + + writeStart(writer, SCA11_NS, "extensions"); + + for (Object extension : otherExtensions) { + extensionProcessor.write(extension, writer, context); + } + + writeEnd(writer); + } + } /** -- cgit v1.2.3