You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/04/23 00:49:56 UTC
svn commit: r767701 [1/2] - in /tuscany/java/sca/modules:
assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/
contribution-java/META-INF/
contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/
contribution-namespace/...
Author: rfeng
Date: Wed Apr 22 22:49:55 2009
New Revision: 767701
URL: http://svn.apache.org/viewvc?rev=767701&view=rev
Log:
Merge r767683 from 1.x branch
Modified:
tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
tuscany/java/sca/modules/contribution-java/META-INF/MANIFEST.MF
tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaExportImpl.java
tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java
tuscany/java/sca/modules/contribution-namespace/META-INF/MANIFEST.MF
tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportImpl.java
tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java
tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportImpl.java
tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java
tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessorTestCase.java
tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessorTestCase.java
tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessor.java
tuscany/java/sca/modules/contribution-xml/src/test/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessorTestCase.java
tuscany/java/sca/modules/contribution/META-INF/MANIFEST.MF
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Artifact.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/ContributionMetadata.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Export.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ArtifactImpl.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionMetadataImpl.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultExportImpl.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultImportImpl.java
tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java
tuscany/java/sca/modules/node-impl-osgi/src/main/java/org/apache/tuscany/sca/node/osgi/impl/NodeFactoryImpl.java
tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionContentProcessor.java
tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionInfoProcessor.java
tuscany/java/sca/modules/workspace/META-INF/MANIFEST.MF
tuscany/java/sca/modules/workspace/src/main/java/org/apache/tuscany/sca/workspace/impl/WorkspaceImpl.java
Modified: tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java (original)
+++ tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/BaseAssemblyProcessor.java Wed Apr 22 22:49:55 2009
@@ -70,7 +70,6 @@
import org.apache.tuscany.sca.assembly.ConstrainingType;
import org.apache.tuscany.sca.assembly.Contract;
import org.apache.tuscany.sca.assembly.Extensible;
-import org.apache.tuscany.sca.assembly.Extension;
import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.Multiplicity;
import org.apache.tuscany.sca.assembly.Reference;
@@ -78,7 +77,6 @@
import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
-import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
@@ -833,48 +831,12 @@
*/
protected void readExtendedAttributes(XMLStreamReader reader,
QName elementName,
- Extensible estensibleElement,
+ Extensible extensible,
StAXAttributeProcessor extensionAttributeProcessor)
throws ContributionReadException, XMLStreamException {
- for (int a = 0; a < reader.getAttributeCount(); a++) {
- QName attributeName = reader.getAttributeName(a);
- if (attributeName.getNamespaceURI() != null && attributeName.getNamespaceURI().length() > 0) {
- if (!elementName.getNamespaceURI().equals(attributeName.getNamespaceURI())) {
- Object attributeValue = extensionAttributeProcessor.read(attributeName, reader);
- Extension attributeExtension;
- if (attributeValue instanceof Extension) {
- attributeExtension = (Extension)attributeValue;
- } else {
- attributeExtension = assemblyFactory.createExtension();
- attributeExtension.setQName(attributeName);
- attributeExtension.setAttribute(true);
- attributeExtension.setValue(attributeValue);
- }
- estensibleElement.getAttributeExtensions().add(attributeExtension);
- }
- }
- }
+ super.readExtendedAttributes(reader, extensible, extensionAttributeProcessor, assemblyFactory);
}
- /**
- *
- * @param attributeModel
- * @param writer
- * @param extensibleElement
- * @param extensionAttributeProcessor
- * @throws ContributionWriteException
- * @throws XMLStreamException
- */
- protected void writeExtendedAttributes(XMLStreamWriter writer,
- Extensible extensibleElement,
- StAXAttributeProcessor extensionAttributeProcessor)
- throws ContributionWriteException, XMLStreamException {
- for (Extension extension : extensibleElement.getAttributeExtensions()) {
- if (extension.isAttribute()) {
- extensionAttributeProcessor.write(extension, writer);
- }
- }
- }
/*protected void validatePolicySets(PolicySubject policySetAttachPoint)
throws ContributionResolveException {
Modified: tuscany/java/sca/modules/contribution-java/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-java/META-INF/MANIFEST.MF?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-java/META-INF/MANIFEST.MF (original)
+++ tuscany/java/sca/modules/contribution-java/META-INF/MANIFEST.MF Wed Apr 22 22:49:55 2009
@@ -16,6 +16,7 @@
Import-Package: javax.xml.namespace,
javax.xml.stream,
org.apache.tuscany.sca.assembly;version="2.0.0",
+ org.apache.tuscany.sca.assembly.impl;version="2.0.0",
org.apache.tuscany.sca.contribution;version="2.0.0",
org.apache.tuscany.sca.contribution.java;version="2.0.0",
org.apache.tuscany.sca.contribution.processor;version="2.0.0",
Modified: tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaExportImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaExportImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaExportImpl.java (original)
+++ tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaExportImpl.java Wed Apr 22 22:49:55 2009
@@ -6,28 +6,29 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.java.impl;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.java.JavaExport;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
* Implementation of a Java Import model
- *
+ *
* @version $Rev$ $Date$
*/
-public class JavaExportImpl implements JavaExport {
+public class JavaExportImpl extends ExtensibleImpl implements JavaExport {
private ModelResolver modelResolver;
/**
Modified: tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java (original)
+++ tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java Wed Apr 22 22:49:55 2009
@@ -6,21 +6,22 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.java.impl;
import java.util.List;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.Export;
import org.apache.tuscany.sca.contribution.java.JavaExport;
@@ -29,10 +30,10 @@
/**
* Implementation of a Java Import model
- *
+ *
* @version $Rev$ $Date$
*/
-public class JavaImportImpl implements JavaImport {
+public class JavaImportImpl extends ExtensibleImpl implements JavaImport {
private ModelResolver modelResolver;
private List<Contribution> contributions;
/**
@@ -43,7 +44,7 @@
* Contribution URI where the artifact is imported from
*/
private String location;
-
+
public JavaImportImpl() {
super();
}
@@ -99,10 +100,10 @@
}
}
}
-
+
return false;
}
-
+
@Override
public String toString() {
return String.valueOf(packageName);
Modified: tuscany/java/sca/modules/contribution-namespace/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/META-INF/MANIFEST.MF?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/META-INF/MANIFEST.MF (original)
+++ tuscany/java/sca/modules/contribution-namespace/META-INF/MANIFEST.MF Wed Apr 22 22:49:55 2009
@@ -14,6 +14,8 @@
Bundle-Description: Apache Tuscany SCA Namespace Import/Export Model
Import-Package: javax.xml.namespace,
javax.xml.stream,
+ org.apache.tuscany.sca.assembly;version="2.0.0",
+ org.apache.tuscany.sca.assembly.impl;version="2.0.0",
org.apache.tuscany.sca.contribution;version="2.0.0",
org.apache.tuscany.sca.contribution.namespace;version="2.0.0",
org.apache.tuscany.sca.contribution.processor;version="2.0.0",
Modified: tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportImpl.java (original)
+++ tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportImpl.java Wed Apr 22 22:49:55 2009
@@ -6,35 +6,36 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.namespace.impl;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.namespace.NamespaceExport;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
* The representation of an export for the contribution
- *
+ *
* @version $Rev$ $Date$
*/
-public class NamespaceExportImpl implements NamespaceExport {
- private String namespace;
+public class NamespaceExportImpl extends ExtensibleImpl implements NamespaceExport {
+ private String namespace;
private ModelResolver modelResolver;
-
+
protected NamespaceExportImpl() {
super();
}
-
+
public String getNamespace() {
return namespace;
}
@@ -42,13 +43,13 @@
public void setNamespace(String namespace) {
this.namespace = namespace;
}
-
+
public ModelResolver getModelResolver() {
return modelResolver;
}
-
+
public void setModelResolver(ModelResolver modelResolver) {
this.modelResolver = modelResolver;
}
-
+
}
Modified: tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java (original)
+++ tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessor.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.namespace.impl;
@@ -27,12 +27,15 @@
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.contribution.namespace.NamespaceExport;
import org.apache.tuscany.sca.contribution.namespace.NamespaceImportExportFactory;
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.monitor.Monitor;
@@ -41,26 +44,35 @@
/**
* Artifact processor for Namespace export
- *
+ *
* @version $Rev$ $Date$
*/
-public class NamespaceExportProcessor implements StAXArtifactProcessor<NamespaceExport> {
+public class NamespaceExportProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<NamespaceExport> {
private static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200903";
private static final QName EXPORT = new QName(SCA11_NS, "export");
private static final String NAMESPACE = "namespace";
-
+
private final NamespaceImportExportFactory factory;
+ private final AssemblyFactory extensionFactory;
+ private final StAXArtifactProcessor<Object> extensionProcessor;
+ private final StAXAttributeProcessor<Object> attributeProcessor;
private final Monitor monitor;
- public NamespaceExportProcessor(FactoryExtensionPoint modelFactories, Monitor monitor) {
+ public NamespaceExportProcessor(FactoryExtensionPoint modelFactories,
+ StAXArtifactProcessor<Object> extensionProcessor,
+ StAXAttributeProcessor<Object> attributeProcessor,
+ Monitor monitor) {
this.factory = modelFactories.getFactory(NamespaceImportExportFactory.class);
+ this.extensionFactory = modelFactories.getFactory(AssemblyFactory.class);
+ this.extensionProcessor = extensionProcessor;
+ this.attributeProcessor = attributeProcessor;
this.monitor = monitor;
}
-
+
/**
* Report a warning.
- *
+ *
* @param problems
* @param message
* @param model
@@ -71,47 +83,51 @@
monitor.problem(problem);
}
}
-
+
public QName getArtifactType() {
return EXPORT;
}
-
+
public Class<NamespaceExport> getModelType() {
return NamespaceExport.class;
}
-
+
/**
* Process <export namespace=""/>
*/
public NamespaceExport read(XMLStreamReader reader) throws ContributionReadException {
NamespaceExport namespaceExport = this.factory.createNamespaceExport();
QName element = null;
-
+
try {
while (reader.hasNext()) {
int event = reader.getEventType();
switch (event) {
case START_ELEMENT:
element = reader.getName();
-
+
// Read <export>
if (EXPORT.equals(element)) {
String ns = reader.getAttributeValue(null, NAMESPACE);
if (ns == null) {
error("AttributeNameSpaceMissing", reader);
//throw new ContributionReadException("Attribute 'namespace' is missing");
- } else
+ } else {
namespaceExport.setNamespace(ns);
- }
-
+ }
+ readExtendedAttributes(reader, namespaceExport, attributeProcessor, extensionFactory);
+ } else {
+ readExtendedElement(reader, namespaceExport, extensionProcessor);
+ }
+
break;
case XMLStreamConstants.END_ELEMENT:
if (EXPORT.equals(reader.getName())) {
return namespaceExport;
}
- break;
+ break;
}
-
+
// Read the next element
if (reader.hasNext()) {
reader.next();
@@ -122,24 +138,28 @@
ContributionReadException ex = new ContributionReadException(e);
error("XMLStreamException", reader, ex);
}
-
+
return namespaceExport;
}
public void write(NamespaceExport namespaceExport, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
-
+
// Write <export>
writer.writeStartElement(EXPORT.getNamespaceURI(), EXPORT.getLocalPart());
-
+
if (namespaceExport.getNamespace() != null) {
writer.writeAttribute(NAMESPACE, namespaceExport.getNamespace());
}
-
+
+ writeExtendedAttributes(writer, namespaceExport, attributeProcessor);
+
+ writeExtendedElements(writer, namespaceExport, extensionProcessor);
+
writer.writeEndElement();
}
public void resolve(NamespaceExport namespaceExport, ModelResolver resolver) throws ContributionResolveException {
-
+
if (namespaceExport.getNamespace() != null)
// Initialize the export's resolver
namespaceExport.setModelResolver(new NamespaceExportModelResolver(resolver));
Modified: tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportImpl.java (original)
+++ tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportImpl.java Wed Apr 22 22:49:55 2009
@@ -6,19 +6,20 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.namespace.impl;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.Export;
import org.apache.tuscany.sca.contribution.namespace.NamespaceExport;
import org.apache.tuscany.sca.contribution.namespace.NamespaceImport;
@@ -26,26 +27,26 @@
/**
* The representation of an import for the contribution
- *
+ *
* @version $Rev$ $Date$
*/
-public class NamespaceImportImpl implements NamespaceImport {
+public class NamespaceImportImpl extends ExtensibleImpl implements NamespaceImport {
private ModelResolver modelResolver;
/**
* The namespace to be imported
*/
- private String namespace;
+ private String namespace;
/**
* Optional location URI pointing to a Contribution that exports the namespace
*/
private String location;
-
+
protected NamespaceImportImpl() {
super();
}
-
+
public String getLocation() {
return location;
}
@@ -61,16 +62,16 @@
public void setNamespace(String namespace) {
this.namespace = namespace;
}
-
+
public ModelResolver getModelResolver() {
return modelResolver;
}
-
+
public void setModelResolver(ModelResolver modelResolver) {
this.modelResolver = modelResolver;
}
-
+
/**
* Match a NamespaceImport to a given NamespaceExport based on :
* location is not provided
@@ -84,7 +85,7 @@
}
return false;
}
-
+
@Override
public String toString() {
return String.valueOf(namespace);
Modified: tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java (original)
+++ tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessor.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.namespace.impl;
@@ -27,12 +27,15 @@
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.contribution.namespace.NamespaceImport;
import org.apache.tuscany.sca.contribution.namespace.NamespaceImportExportFactory;
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.monitor.Monitor;
@@ -41,28 +44,37 @@
/**
* Artifact processor for Namespace import
- *
+ *
* @version $Rev$ $Date$
*/
-public class NamespaceImportProcessor implements StAXArtifactProcessor<NamespaceImport> {
+public class NamespaceImportProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<NamespaceImport> {
private static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200903";
-
+
private static final QName IMPORT = new QName(SCA11_NS, "import");
private static final String NAMESPACE = "namespace";
private static final String LOCATION = "location";
-
+
private final NamespaceImportExportFactory factory;
+ private final AssemblyFactory extensionFactory;
+ private final StAXArtifactProcessor<Object> extensionProcessor;
+ private final StAXAttributeProcessor<Object> attributeProcessor;
private final Monitor monitor;
- public NamespaceImportProcessor(FactoryExtensionPoint modelFactories, Monitor monitor) {
+ public NamespaceImportProcessor(FactoryExtensionPoint modelFactories,
+ StAXArtifactProcessor<Object> extensionProcessor,
+ StAXAttributeProcessor<Object> attributeProcessor,
+ Monitor monitor) {
this.factory = modelFactories.getFactory(NamespaceImportExportFactory.class);
this.monitor = monitor;
+ this.extensionFactory = modelFactories.getFactory(AssemblyFactory.class);
+ this.extensionProcessor = extensionProcessor;
+ this.attributeProcessor = attributeProcessor;
}
-
+
/**
* Report a warning.
- *
+ *
* @param problems
* @param message
* @param model
@@ -73,11 +85,11 @@
monitor.problem(problem);
}
}
-
+
public QName getArtifactType() {
return IMPORT;
}
-
+
public Class<NamespaceImport> getModelType() {
return NamespaceImport.class;
}
@@ -88,36 +100,40 @@
public NamespaceImport read(XMLStreamReader reader) throws ContributionReadException {
NamespaceImport namespaceImport = this.factory.createNamespaceImport();
QName element;
-
+
try {
while (reader.hasNext()) {
int event = reader.getEventType();
switch (event) {
case START_ELEMENT:
element = reader.getName();
-
+
// Read <import>
if (IMPORT.equals(element)) {
String ns = reader.getAttributeValue(null, NAMESPACE);
if (ns == null) {
error("AttributeNameSpaceMissing", reader);
//throw new ContributionReadException("Attribute 'namespace' is missing");
- } else
+ } else {
namespaceImport.setNamespace(ns);
-
+ }
+
String location = reader.getAttributeValue(null, LOCATION);
if (location != null) {
namespaceImport.setLocation(location);
}
+ readExtendedAttributes(reader, namespaceImport, attributeProcessor, extensionFactory);
+ } else {
+ readExtendedElement(reader, namespaceImport, extensionProcessor);
}
break;
case XMLStreamConstants.END_ELEMENT:
if (IMPORT.equals(reader.getName())) {
return namespaceImport;
}
- break;
+ break;
}
-
+
// Read the next element
if (reader.hasNext()) {
reader.next();
@@ -128,22 +144,24 @@
ContributionReadException ex = new ContributionReadException(e);
error("XMLStreamException", reader, ex);
}
-
+
return namespaceImport;
}
public void write(NamespaceImport namespaceImport, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
-
+
// Write <import>
writer.writeStartElement(IMPORT.getNamespaceURI(), IMPORT.getLocalPart());
-
+
if (namespaceImport.getNamespace() != null) {
writer.writeAttribute(NAMESPACE, namespaceImport.getNamespace());
}
if (namespaceImport.getLocation() != null) {
writer.writeAttribute(LOCATION, namespaceImport.getLocation());
}
-
+
+ writeExtendedAttributes(writer, namespaceImport, attributeProcessor);
+ writeExtendedElements(writer, namespaceImport, extensionProcessor);
writer.writeEndElement();
}
Modified: tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessorTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessorTestCase.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessorTestCase.java (original)
+++ tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceExportProcessorTestCase.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.namespace.impl;
@@ -43,13 +43,16 @@
/**
* Test NamespaceExportProcessorTestCase
- *
+ *
* @version $Rev$ $Date$
*/
public class NamespaceExportProcessorTestCase {
private static final String VALID_XML =
- "<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<export xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\" namespace=\"http://foo\"/>";
+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>"
+ + "<export xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\""
+ + " ns:ext=\"extended\" namespace=\"http://foo\">"
+ + "<ns:foo/></export>";
private static final String INVALID_XML =
"<?xml version=\"1.0\" encoding=\"ASCII\"?>" + "<export xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\"/>";
@@ -83,6 +86,8 @@
XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(VALID_XML));
NamespaceExport namespaceExport = (NamespaceExport)staxProcessor.read(reader);
assertEquals("http://foo", namespaceExport.getNamespace());
+ assertEquals(1, namespaceExport.getAttributeExtensions().size());
+ assertEquals(1, namespaceExport.getExtensions().size());
}
/**
Modified: tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessorTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessorTestCase.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessorTestCase.java (original)
+++ tuscany/java/sca/modules/contribution-namespace/src/test/java/org/apache/tuscany/sca/contribution/namespace/impl/NamespaceImportProcessorTestCase.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.namespace.impl;
@@ -45,17 +45,19 @@
/**
* Test NamespaceImportProcessorTestCase
- *
+ *
* @version $Rev$ $Date$
*/
public class NamespaceImportProcessorTestCase {
private static final String VALID_XML =
"<?xml version=\"1.0\" encoding=\"ASCII\"?>"
- + "<import xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\" namespace=\"http://foo\" location=\"sca://contributions/001\"/>";
+ + "<import xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\""
+ + " namespace=\"http://foo\" location=\"sca://contributions/001\" ns:ext=\"extended\">"
+ + "<ns:foo/></import>";
private static final String INVALID_XML =
- "<?xml version=\"1.0\" encoding=\"ASCII\"?>"
+ "<?xml version=\"1.0\" encoding=\"ASCII\"?>"
+ "<import xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\" location=\"sca://contributions/001\"/>";
private static XMLInputFactory inputFactory;
@@ -85,9 +87,11 @@
public void testLoad() throws Exception {
XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(VALID_XML));
NamespaceImport namespaceImport = (NamespaceImport)staxProcessor.read(reader);
-
+
assertEquals("http://foo", namespaceImport.getNamespace());
assertEquals("sca://contributions/001", namespaceImport.getLocation());
+ assertEquals(1, namespaceImport.getAttributeExtensions().size());
+ assertEquals(1, namespaceImport.getExtensions().size());
}
/**
@@ -107,5 +111,5 @@
Problem problem = monitor.getLastProblem();
assertNotNull(problem);
assertEquals("AttributeNameSpaceMissing", problem.getMessageId());
- }
+ }
}
Modified: tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessor.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessor.java (original)
+++ tuscany/java/sca/modules/contribution-xml/src/main/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessor.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.xml;
@@ -39,6 +39,7 @@
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.monitor.Monitor;
@@ -47,55 +48,69 @@
/**
* Processor for contribution metadata
- *
+ *
* @version $Rev$ $Date$
*/
-public class ContributionMetadataProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<ContributionMetadata> {
+public class ContributionMetadataProcessor extends BaseStAXArtifactProcessor implements
+ StAXArtifactProcessor<ContributionMetadata> {
private static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200903";
-
+
private static final QName CONTRIBUTION_QNAME = new QName(SCA11_NS, "contribution");
private static final QName DEPLOYABLE_QNAME = new QName(SCA11_NS, "deployable");
-
+
private final AssemblyFactory assemblyFactory;
private final ContributionFactory contributionFactory;
-
private final StAXArtifactProcessor<Object> extensionProcessor;
+ private final StAXAttributeProcessor<Object> attributeProcessor;
private Monitor monitor;
- public ContributionMetadataProcessor(AssemblyFactory assemblyFactory,
- ContributionFactory contributionFactory,
- StAXArtifactProcessor<Object> extensionProcessor,
- Monitor monitor) {
- this.assemblyFactory = assemblyFactory;
- this.contributionFactory = contributionFactory;
+ public ContributionMetadataProcessor(FactoryExtensionPoint modelFactories,
+ StAXArtifactProcessor<Object> extensionProcessor,
+ StAXAttributeProcessor<Object> attributeProcessor,
+ Monitor monitor) {
+ this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+ this.contributionFactory = modelFactories.getFactory(ContributionFactory.class);
this.extensionProcessor = extensionProcessor;
+ this.attributeProcessor = attributeProcessor;
this.monitor = monitor;
}
-
+
/**
* Report a error.
- *
+ *
* @param problems
* @param message
* @param model
*/
- private void error(String message, Object model, Object... messageParameters) {
- if (monitor != null) {
- Problem problem = monitor.createProblem(this.getClass().getName(), "contribution-xml-validation-messages", Severity.ERROR, model, message, (Object[])messageParameters);
- monitor.problem(problem);
- }
- }
-
- public ContributionMetadataProcessor(FactoryExtensionPoint modelFactories,
- StAXArtifactProcessor<Object> extensionProcessor,
- Monitor monitor) {
- this.assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
- this.contributionFactory = modelFactories.getFactory(ContributionFactory.class);
- this.extensionProcessor = extensionProcessor;
- this.monitor = monitor;
+ private void error(String message, Object model, Object... messageParameters) {
+ if (monitor != null) {
+ Problem problem =
+ monitor.createProblem(this.getClass().getName(),
+ "contribution-xml-validation-messages",
+ Severity.ERROR,
+ model,
+ message,
+ (Object[])messageParameters);
+ monitor.problem(problem);
+ }
}
-
-
+
+ /**
+ * Report a exception.
+ *
+ * @param problems
+ * @param message
+ * @param model
+ */
+ private void error(String message, Object model, Exception ex) {
+ if (monitor != null) {
+ Problem problem =
+ monitor.createProblem(this.getClass().getName(), "contribution-xml-validation-messages", Severity.ERROR,
+ model, message, ex);
+ monitor.problem(problem);
+ }
+ }
+
public QName getArtifactType() {
return CONTRIBUTION_QNAME;
}
@@ -107,37 +122,38 @@
public ContributionMetadata read(XMLStreamReader reader) throws ContributionReadException {
ContributionMetadata contribution = null;
QName name = null;
-
+
try {
while (reader.hasNext()) {
int event = reader.getEventType();
switch (event) {
case START_ELEMENT:
name = reader.getName();
-
+
if (CONTRIBUTION_QNAME.equals(name)) {
-
+
// Read <contribution>
contribution = this.contributionFactory.createContributionMetadata();
contribution.setUnresolved(true);
-
- } else if (DEPLOYABLE_QNAME.equals(name)) {
-
+ readExtendedAttributes(reader, contribution, attributeProcessor, assemblyFactory);
+
+ } else if (DEPLOYABLE_QNAME.equals(name)) {
+
// Read <deployable>
QName compositeName = getQName(reader, "composite");
if (compositeName == null) {
- error("AttributeCompositeMissing", reader);
+ error("AttributeCompositeMissing", reader);
//throw new ContributionReadException("Attribute 'composite' is missing");
} else {
if (contribution != null) {
Composite composite = assemblyFactory.createComposite();
composite.setName(compositeName);
composite.setUnresolved(true);
- contribution.getDeployables().add(composite);
+ contribution.getDeployables().add(composite);
}
}
} else {
-
+
// Read an extension element
Object extension = extensionProcessor.read(reader);
if (extension != null && contribution != null) {
@@ -145,69 +161,74 @@
contribution.getImports().add((Import)extension);
} else if (extension instanceof Export) {
contribution.getExports().add((Export)extension);
+ } else {
+ contribution.getExtensions().add(extension);
}
}
}
break;
-
+
case XMLStreamConstants.END_ELEMENT:
if (CONTRIBUTION_QNAME.equals(reader.getName())) {
return contribution;
}
- break;
+ break;
}
-
+
//Read the next element
if (reader.hasNext()) {
reader.next();
}
}
- }
- catch (XMLStreamException e) {
+ } catch (XMLStreamException e) {
ContributionReadException ex = new ContributionReadException(e);
error("XMLStreamException", reader, ex);
}
-
+
return contribution;
}
- public void write(ContributionMetadata contribution, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
-
+ public void write(ContributionMetadata contribution, XMLStreamWriter writer) throws ContributionWriteException,
+ XMLStreamException {
+
// Write <contribution>
writeStartDocument(writer, CONTRIBUTION_QNAME.getNamespaceURI(), CONTRIBUTION_QNAME.getLocalPart());
+ writeExtendedAttributes(writer, contribution, attributeProcessor);
// Write <import>
- for (Import imp: contribution.getImports()) {
+ for (Import imp : contribution.getImports()) {
extensionProcessor.write(imp, writer);
}
-
+
// Write <export>
- for (Export export: contribution.getExports()) {
+ for (Export export : contribution.getExports()) {
extensionProcessor.write(export, writer);
}
-
+
// Write <deployable>
- for (Composite deployable: contribution.getDeployables()) {
- writeStart(writer, DEPLOYABLE_QNAME.getNamespaceURI(), DEPLOYABLE_QNAME.getLocalPart(),
+ for (Composite deployable : contribution.getDeployables()) {
+ writeStart(writer,
+ DEPLOYABLE_QNAME.getNamespaceURI(),
+ DEPLOYABLE_QNAME.getLocalPart(),
new XAttr("composite", deployable.getName()));
writeEnd(writer);
}
-
+
writeEndDocument(writer);
}
public void resolve(ContributionMetadata contribution, ModelResolver resolver) throws ContributionResolveException {
-
+
// Resolve imports and exports
- for (Export export: contribution.getExports()) {
+ for (Export export : contribution.getExports()) {
extensionProcessor.resolve(export, resolver);
}
- for (Import import_: contribution.getImports()) {
+ for (Import import_ : contribution.getImports()) {
extensionProcessor.resolve(import_, resolver);
}
-
+
// Resolve deployable composites
- List<Composite> deployables = contribution.getDeployables();
+ List<Composite> deployables = contribution.getDeployables();
for (int i = 0, n = deployables.size(); i < n; i++) {
Composite deployable = deployables.get(i);
Composite resolved = (Composite)resolver.resolveModel(Composite.class, deployable);
@@ -215,7 +236,11 @@
deployables.set(i, resolved);
}
}
-
+
+ for (Object ext : contribution.getExtensions()) {
+ extensionProcessor.resolve(ext, resolver);
+ }
+
contribution.setUnresolved(false);
}
}
Modified: tuscany/java/sca/modules/contribution-xml/src/test/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessorTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution-xml/src/test/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessorTestCase.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution-xml/src/test/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessorTestCase.java (original)
+++ tuscany/java/sca/modules/contribution-xml/src/test/java/org/apache/tuscany/sca/contribution/xml/ContributionMetadataProcessorTestCase.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.xml;
@@ -47,16 +47,18 @@
/**
* Test the contribution metadata processor.
- *
+ *
* @version $Rev$ $Date$
*/
public class ContributionMetadataProcessorTestCase {
private static final String VALID_XML =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<contribution xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\" xmlns:ns=\"http://ns\">"
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<contribution xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\""
+ + " xmlns:ns=\"http://ns\" ns:foo=\"extended\">"
+ "<deployable composite=\"ns:Composite1\"/>"
+ "<deployable composite=\"ns:Composite2\"/>"
+ + "<ns:bar x=\"1\"/>"
+ "</contribution>";
private static final String INVALID_XML =
@@ -95,6 +97,8 @@
ContributionMetadata contribution = (ContributionMetadata)staxProcessor.read(reader);
assertNotNull(contribution);
assertEquals(2, contribution.getDeployables().size());
+ assertEquals(1, contribution.getAttributeExtensions().size());
+ assertEquals(1, contribution.getExtensions().size());
}
@Test
Modified: tuscany/java/sca/modules/contribution/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/META-INF/MANIFEST.MF?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/META-INF/MANIFEST.MF (original)
+++ tuscany/java/sca/modules/contribution/META-INF/MANIFEST.MF Wed Apr 22 22:49:55 2009
@@ -31,6 +31,7 @@
javax.xml.transform.stream,
javax.xml.validation,
org.apache.tuscany.sca.assembly;version="2.0.0",
+ org.apache.tuscany.sca.assembly.impl;version="2.0.0",
org.apache.tuscany.sca.contribution;version="2.0.0",
org.apache.tuscany.sca.contribution.processor;version="2.0.0",
org.apache.tuscany.sca.contribution.resolver;version="2.0.0",
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Artifact.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Artifact.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Artifact.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Artifact.java Wed Apr 22 22:49:55 2009
@@ -71,16 +71,4 @@
* @param model The model object
*/
void setModel(Object model);
-
- /**
- * Returns the contents of the artifact cached here.
- * @return the contents of the artifact
- */
- byte[] getContents();
-
- /**
- * Sets the contents of the artifact.
- * @param contents the contents of the artifact
- */
- void setContents(byte[] contents);
}
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Contribution.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution;
@@ -22,6 +22,7 @@
import java.util.List;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Extensible;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
@@ -29,42 +30,42 @@
*
* @version $Rev$ $Date$
*/
-public interface Contribution extends Artifact {
-
+public interface Contribution extends Artifact, Extensible {
+
/**
* Default location of contribution metadata in an SCA contribution.
*/
String SCA_CONTRIBUTION_META = "META-INF/sca-contribution.xml";
-
+
/**
* Default location of a generated contribution metadata in an SCA contribution.
*/
String SCA_CONTRIBUTION_GENERATED_META = "META-INF/sca-contribution-generated.xml";
-
+
/**
* Returns a list of exports based on the contribution metadata.
- *
+ *
* @return The list of exports in this contribution
*/
List<Export> getExports();
/**
* Returns a list of imports based on the contribution metadata.
- *
+ *
* @return The list of imports in this contribution
*/
List<Import> getImports();
-
+
/**
* Returns the list of deployable composites in the contribution.
- *
+ *
* @return The list of deployable composites
*/
List<Composite> getDeployables();
/**
* Returns the list of artifacts in the contribution.
- *
+ *
* @return The list of artifacts in the contribution
*/
List<Artifact> getArtifacts();
@@ -72,19 +73,19 @@
/**
* Returns the model resolver for the models representing the artifacts
* visible in the scope of this contribution.
- *
+ *
* @return The model resolver
*/
ModelResolver getModelResolver();
-
+
/**
* Sets the model resolver for the models representing the artifacts
* visible in the scope of this contribution.
- *
+ *
* @param modelResolver The model resolver
*/
void setModelResolver(ModelResolver modelResolver);
-
+
/**
* Returns the list of contributions that this contribution depends on.
*
@@ -95,23 +96,23 @@
/**
* Returns the ClassLoader used to load classes and resources from
* this contribution
- *
+ *
* FIXME Remove this, the base contribution model should not depend
- * on Java ClassLoaders.
- *
+ * on Java ClassLoaders.
+ *
* @return The contribution ClassLoader
*/
ClassLoader getClassLoader();
-
+
/**
* Sets the ClassLoader used to load classes and resources from
* this contribution
- *
+ *
* FIXME Remove this, the base contribution model should not depend
- * on Java ClassLoaders.
- *
+ * on Java ClassLoaders.
+ *
* @param classLoader the contribution class loader
*/
void setClassLoader(ClassLoader classLoader);
-
+
}
\ No newline at end of file
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/ContributionMetadata.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/ContributionMetadata.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/ContributionMetadata.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/ContributionMetadata.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution;
@@ -23,31 +23,32 @@
import org.apache.tuscany.sca.assembly.Base;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Extensible;
/**
* The representation of SCA contribution metadata.
*
* @version $Rev$ $Date$
*/
-public interface ContributionMetadata extends Base {
-
+public interface ContributionMetadata extends Base, Extensible {
+
/**
* Returns a list of exports based on the contribution metadata.
- *
+ *
* @return The list of exports
*/
List<Export> getExports();
/**
* Returns a list of imports based on the contribution metadata.
- *
+ *
* @return The list of imports
*/
List<Import> getImports();
-
+
/**
* Returns the list of deployable based on the contribution metadata.
- *
+ *
* @return The list of deployable composites
*/
List<Composite> getDeployables();
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Export.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Export.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Export.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Export.java Wed Apr 22 22:49:55 2009
@@ -6,42 +6,43 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution;
+import org.apache.tuscany.sca.assembly.Extensible;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
* The representation of an export.
- *
+ *
* @version $Rev$ $Date$
*/
-public interface Export {
+public interface Export extends Extensible {
/**
* Returns the model resolver for the models representing artifacts
* made available by this export.
- *
+ *
* @return The model resolver
*/
ModelResolver getModelResolver();
-
+
/**
* Sets the model resolver for the models representing artifacts
* made available by this export.
- *
+ *
* @param modelResolver
*/
void setModelResolver(ModelResolver modelResolver);
-
+
}
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java Wed Apr 22 22:49:55 2009
@@ -6,33 +6,34 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution;
+import org.apache.tuscany.sca.assembly.Extensible;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
* The representation of an import.
- *
+ *
* @version $Rev$ $Date$
*/
-public interface Import {
+public interface Import extends Extensible {
/**
* Returns the model resolver for the models representing artifacts
* made available by this import.
- *
+ *
* @return The model resolver
*/
ModelResolver getModelResolver();
@@ -40,17 +41,17 @@
/**
* Sets the model resolver for the models representing artifacts
* made available by this import.
- *
+ *
* @param modelResolver The model resolver
*/
void setModelResolver(ModelResolver modelResolver);
-
+
/**
* Verify that a specific export actually exports what is being imported.
- *
+ *
* @param export The Exported being verified
* @return true/false
*/
boolean match(Export export);
-
+
}
\ No newline at end of file
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ArtifactImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ArtifactImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ArtifactImpl.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ArtifactImpl.java Wed Apr 22 22:49:55 2009
@@ -32,7 +32,6 @@
private String location;
private Object model;
private boolean unresolved;
- private byte[] contents;
ArtifactImpl() {
}
@@ -61,14 +60,6 @@
this.model = model;
}
- public byte[] getContents() {
- return contents;
- }
-
- public void setContents(byte[] contents) {
- this.contents = contents;
- }
-
public boolean isUnresolved() {
return unresolved;
}
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionImpl.java Wed Apr 22 22:49:55 2009
@@ -23,6 +23,7 @@
import java.util.List;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.Artifact;
import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.Export;
@@ -34,7 +35,7 @@
*
* @version $Rev$ $Date$
*/
-class ContributionImpl implements Contribution {
+class ContributionImpl extends ExtensibleImpl implements Contribution {
private String uri;
private String location;
private Object model;
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionMetadataImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionMetadataImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionMetadataImpl.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/ContributionMetadataImpl.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.impl;
@@ -23,6 +23,7 @@
import java.util.List;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.ContributionMetadata;
import org.apache.tuscany.sca.contribution.Export;
import org.apache.tuscany.sca.contribution.Import;
@@ -32,7 +33,7 @@
*
* @version $Rev$ $Date$
*/
-class ContributionMetadataImpl implements ContributionMetadata {
+class ContributionMetadataImpl extends ExtensibleImpl implements ContributionMetadata {
private boolean unresolved;
private List<Export> exports = new ArrayList<Export>();
private List<Import> imports = new ArrayList<Import>();
@@ -40,15 +41,15 @@
ContributionMetadataImpl() {
}
-
+
public boolean isUnresolved() {
return unresolved;
}
-
+
public void setUnresolved(boolean unresolved) {
this.unresolved = unresolved;
}
-
+
public List<Export> getExports() {
return exports;
}
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultExportImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultExportImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultExportImpl.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultExportImpl.java Wed Apr 22 22:49:55 2009
@@ -6,40 +6,41 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.impl;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.DefaultExport;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
* The representation of an export for the contribution
- *
+ *
* @version $Rev$ $Date$
*/
-public class DefaultExportImpl implements DefaultExport {
+public class DefaultExportImpl extends ExtensibleImpl implements DefaultExport {
private ModelResolver modelResolver;
-
+
protected DefaultExportImpl() {
super();
}
-
+
public ModelResolver getModelResolver() {
return modelResolver;
}
-
+
public void setModelResolver(ModelResolver modelResolver) {
this.modelResolver = modelResolver;
}
-
+
}
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultImportImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultImportImpl.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultImportImpl.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/impl/DefaultImportImpl.java Wed Apr 22 22:49:55 2009
@@ -6,19 +6,20 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.impl;
+import org.apache.tuscany.sca.assembly.impl.ExtensibleImpl;
import org.apache.tuscany.sca.contribution.DefaultExport;
import org.apache.tuscany.sca.contribution.DefaultImport;
import org.apache.tuscany.sca.contribution.Export;
@@ -26,30 +27,30 @@
/**
* The representation of an import for the contribution
- *
+ *
* @version $Rev$ $Date$
*/
-public class DefaultImportImpl implements DefaultImport {
+public class DefaultImportImpl extends ExtensibleImpl implements DefaultImport {
private ModelResolver modelResolver;
protected DefaultImportImpl() {
super();
}
-
+
public ModelResolver getModelResolver() {
return modelResolver;
}
-
+
public void setModelResolver(ModelResolver modelResolver) {
this.modelResolver = modelResolver;
}
-
+
public boolean match(Export export) {
if (export instanceof DefaultExport) {
return true;
}
return false;
}
-
+
}
Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java?rev=767701&r1=767700&r2=767701&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/processor/BaseStAXArtifactProcessor.java Wed Apr 22 22:49:55 2009
@@ -6,15 +6,15 @@
* to you 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.
+ * under the License.
*/
package org.apache.tuscany.sca.contribution.processor;
@@ -35,16 +35,20 @@
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Extensible;
+import org.apache.tuscany.sca.assembly.Extension;
+
/**
- * A base class with utility methods for the other artifact processors in this module.
- *
+ * A base class with utility methods for the other artifact processors in this module.
+ *
* @version $Rev$ $Date$
*/
public abstract class BaseStAXArtifactProcessor {
/**
- * Returns a QName from a string.
+ * Returns a QName from a string.
* @param reader
* @param value
* @return
@@ -178,9 +182,9 @@
}
}
}
-
+
/**
- *
+ *
* @param writer
* @param uri
* @throws XMLStreamException
@@ -193,8 +197,8 @@
if (prefix != null) {
return null;
} else {
-
- // Find an available prefix and bind it to the given URI
+
+ // Find an available prefix and bind it to the given URI
NamespaceContext nsc = writer.getNamespaceContext();
for (int i=1; ; i++) {
prefix = "ns" + i;
@@ -205,7 +209,7 @@
writer.setPrefix(prefix, uri);
return prefix;
}
-
+
}
/**
@@ -219,12 +223,12 @@
String prefix = writeElementPrefix(writer, uri);
writer.writeStartElement(uri, name);
if (prefix != null){
- writer.writeNamespace(prefix,uri);
+ writer.writeNamespace(prefix,uri);
}
writeAttributePrefixes(writer, attrs);
writeAttributes(writer, attrs);
}
-
+
/**
* Start an element.
* @param qname
@@ -234,9 +238,9 @@
protected void writeStart(XMLStreamWriter writer, QName qname, XAttr... attrs) throws XMLStreamException {
writeStart(writer, qname.getNamespaceURI(), qname.getLocalPart(), attrs);
}
-
+
/**
- * End an element.
+ * End an element.
* @param writer
* @throws XMLStreamException
*/
@@ -303,10 +307,86 @@
}
/**
+ *
+ * @param reader
+ * @param elementName
+ * @param extensible
+ * @param extensionAttributeProcessor
+ * @param extensionAttributeProcessor
+ * @param extensionFactory
+ * @throws ContributionReadException
+ * @throws XMLStreamException
+ */
+ protected void readExtendedAttributes(XMLStreamReader reader,
+ Extensible extensible,
+ StAXAttributeProcessor extensionAttributeProcessor,
+ AssemblyFactory extensionFactory) throws ContributionReadException,
+ XMLStreamException {
+ QName elementName = reader.getName();
+ for (int a = 0; a < reader.getAttributeCount(); a++) {
+ QName attributeName = reader.getAttributeName(a);
+ if (attributeName.getNamespaceURI() != null && attributeName.getNamespaceURI().length() > 0) {
+ if (!elementName.getNamespaceURI().equals(attributeName.getNamespaceURI())) {
+ Object attributeValue = extensionAttributeProcessor.read(attributeName, reader);
+ Extension attributeExtension;
+ if (attributeValue instanceof Extension) {
+ attributeExtension = (Extension)attributeValue;
+ } else {
+ attributeExtension = extensionFactory.createExtension();
+ attributeExtension.setQName(attributeName);
+ attributeExtension.setValue(attributeValue);
+ attributeExtension.setAttribute(true);
+ }
+ extensible.getAttributeExtensions().add(attributeExtension);
+ }
+ }
+ }
+ }
+
+ /**
+ *
+ * @param attributeModel
+ * @param writer
+ * @param extensibleElement
+ * @param extensionAttributeProcessor
+ * @throws ContributionWriteException
+ * @throws XMLStreamException
+ */
+ protected void writeExtendedAttributes(XMLStreamWriter writer,
+ Extensible extensibleElement,
+ StAXAttributeProcessor extensionAttributeProcessor)
+ throws ContributionWriteException, XMLStreamException {
+ for (Extension extension : extensibleElement.getAttributeExtensions()) {
+ if (extension.isAttribute()) {
+ extensionAttributeProcessor.write(extension, writer);
+ }
+ }
+ }
+
+ protected void readExtendedElement(XMLStreamReader reader,
+ Extensible extensible,
+ StAXArtifactProcessor extensionProcessor) throws ContributionReadException,
+ XMLStreamException {
+ Object ext = extensionProcessor.read(reader);
+ if (extensible != null) {
+ extensible.getExtensions().add(ext);
+ }
+ }
+
+ protected void writeExtendedElements(XMLStreamWriter writer,
+ Extensible extensible,
+ StAXArtifactProcessor extensionProcessor) throws ContributionWriteException,
+ XMLStreamException {
+ for (Object ext : extensible.getExtensions()) {
+ extensionProcessor.write(ext, writer);
+ }
+ }
+
+ /**
* Represents an XML attribute that needs to be written to a document.
*/
public static class XAttr {
-
+
private static final String SCA11_NS = "http://docs.oasis-open.org/ns/opencsa/sca/200903";
private String uri = SCA11_NS;
@@ -374,7 +454,7 @@
}
/**
- * Writes a string from a QName and registers a prefix for its namespace.
+ * Writes a string from a QName and registers a prefix for its namespace.
* @param reader
* @param value
* @return
@@ -390,14 +470,14 @@
if (prefix.length() > 0) {
return prefix + ":" + qname.getLocalPart();
} else {
-
+
// Empty prefix, just return the local part of the given qname
return qname.getLocalPart();
}
-
+
} else {
-
- // Find an available prefix and bind it to the given URI
+
+ // Find an available prefix and bind it to the given URI
NamespaceContext nsc = writer.getNamespaceContext();
for (int i=1; ; i++) {
prefix = "ns" + i;
@@ -415,7 +495,7 @@
}
/**
- * Registers a prefix for the namespace of a QName.
+ * Registers a prefix for the namespace of a QName.
* @param reader
* @param value
* @return
@@ -428,8 +508,8 @@
if (prefix != null) {
return;
} else {
-
- // Find an available prefix and bind it to the given URI
+
+ // Find an available prefix and bind it to the given URI
NamespaceContext nsc = writer.getNamespaceContext();
for (int i=1; ; i++) {
prefix = "ns" + i;
@@ -451,12 +531,12 @@
public void write(XMLStreamWriter writer) throws XMLStreamException {
String str;
if (value instanceof QName) {
-
+
// Write a QName
str = writeQNameValue(writer, (QName)value);
-
+
} else if (value instanceof List) {
-
+
// Write a list of values
List<?> values = (List<?>)value;
if (values.isEmpty()) {
@@ -468,7 +548,7 @@
// Skip null values
continue;
}
-
+
if (v instanceof XAttr) {
// Write an XAttr value
((XAttr)v).write(writer);
@@ -482,14 +562,14 @@
// Write a QName value
buffer.append(writeQNameValue(writer, (QName)v));
} else {
- // Write value as a string
+ // Write value as a string
buffer.append(String.valueOf(v));
}
}
str = buffer.toString();
-
+
} else {
-
+
// Write a string
if (value == null) {
return;
@@ -509,24 +589,24 @@
}
/**
- * Registers a prefix for the namespace of a QName or list of QNames
+ * Registers a prefix for the namespace of a QName or list of QNames
* @param writer
* @throws XMLStreamException
*/
public void writePrefix(XMLStreamWriter writer) throws XMLStreamException {
if (value instanceof QName) {
-
+
// Write prefix for a single QName value
writeQNamePrefix(writer, (QName)value);
-
+
} else if (value instanceof List) {
-
+
// Write prefixes for a list of values
for (Object v: (List<?>)value) {
if (v instanceof QName) {
// Write prefix for a QName value
writeQNamePrefix(writer, (QName)v);
-
+
} else if (v instanceof XAttr) {
// Write prefix for an XAttr value
((XAttr)v).writePrefix(writer);
@@ -535,5 +615,5 @@
}
}
}
-
+
}