in modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeProcessor.java [698:1026]
public void write(Composite composite, XMLStreamWriter writer, ProcessorContext context) throws ContributionWriteException,
XMLStreamException {
// Write <composite> element
writeStartDocument(writer,
COMPOSITE,
new XAttr(TARGET_NAMESPACE, composite.getName().getNamespaceURI()),
new XAttr(NAME, composite.getName().getLocalPart()),
new XAttr(LOCAL, composite.isLocal() ? Boolean.TRUE : null),
new XAttr(AUTOWIRE, composite.getAutowire()),
policyProcessor.writePolicies(composite));
//write extended attributes
this.writeExtendedAttributes(writer, composite, extensionAttributeProcessor, context);
// Write <include> elements
for (Composite include : composite.getIncludes()) {
String uri = include.isUnresolved() ? include.getURI() : null;
writeStart(writer, INCLUDE, new XAttr(NAME, include.getName()), new XAttr(URI, uri));
//write extended attributes
this.writeExtendedAttributes(writer, include, extensionAttributeProcessor, context);
writeEnd(writer);
}
// Write <service> elements
for (Service service : composite.getServices()) {
CompositeService compositeService = (CompositeService)service;
Component promotedComponent = compositeService.getPromotedComponent();
ComponentService promotedService = compositeService.getPromotedService();
String promote;
if (promotedService != null) {
if (promotedService.getName() != null) {
promote = promotedComponent.getName() + '/' + promotedService.getName();
} else {
promote = promotedComponent.getName();
}
} else {
promote = null;
}
writeStart(writer,
SERVICE,
new XAttr(NAME, service.getName()),
new XAttr(PROMOTE, promote),
policyProcessor.writePolicies(service));
//write extended attributes
this.writeExtendedAttributes(writer, service, extensionAttributeProcessor, context);
// Write service interface
extensionProcessor.write(service.getInterfaceContract(), writer, context);
// Write bindings
for (Binding binding : service.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write <callback> element
if (service.getCallback() != null) {
Callback callback = service.getCallback();
writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
//write extended attributes
this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor, context);
// Write callback bindings
for (Binding binding : callback.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write extensions
this.writeExtendedElements(writer, service, extensionProcessor, context);
writeEnd(writer);
}
// Write extensions
this.writeExtendedElements(writer, service, extensionProcessor, context);
writeEnd(writer);
}
// Write <component> elements
for (Component component : composite.getComponents()) {
writeStart(writer,
COMPONENT,
new XAttr(NAME, component.getName()),
new XAttr(URI, component.getURI()),
new XAttr(AUTOWIRE, component.getAutowire()),
policyProcessor.writePolicies(component));
//write extended attributes
this.writeExtendedAttributes(writer, component, extensionAttributeProcessor, context);
// Write the component implementation
Implementation implementation = component.getImplementation();
if (implementation instanceof Composite) {
writeStart(writer, IMPLEMENTATION_COMPOSITE, new XAttr(NAME, ((Composite)implementation).getName()), policyProcessor.writePolicies(implementation));
//write extended attributes
this.writeExtendedAttributes(writer, (Composite)implementation, extensionAttributeProcessor, context);
writeEnd(writer);
} else {
extensionProcessor.write(component.getImplementation(), writer, context);
}
for (Object extension : component.getExtensions()) {
extensionProcessor.write(extension, writer, context);
}
// Write <service> elements
for (ComponentService service : component.getServices()) {
writeStart(writer, SERVICE, new XAttr(NAME, service.getName()), policyProcessor.writePolicies(service));
//write extended attributes
this.writeExtendedAttributes(writer, service, extensionAttributeProcessor, context);
// Write service interface
extensionProcessor.write(service.getInterfaceContract(), writer, context);
// Write bindings
for (Binding binding : service.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write <callback> element
if (service.getCallback() != null) {
Callback callback = service.getCallback();
writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
//write extended attributes
this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor, context);
// Write bindings
for (Binding binding : callback.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write extensions
this.writeExtendedElements(writer, callback, extensionProcessor, context);
writeEnd(writer);
}
// Write extensions
this.writeExtendedElements(writer, service, extensionProcessor, context);
writeEnd(writer);
}
// Write <reference> elements
for (ComponentReference reference : component.getReferences()) {
writeStart(writer,
REFERENCE,
new XAttr(NAME, reference.getName()),
new XAttr(AUTOWIRE, reference.getAutowire()),
(reference.isNonOverridable() ? new XAttr(NONOVERRIDABLE, true) : null),
writeMultiplicity(reference),
writeTargets(reference),
policyProcessor.writePolicies(reference));
//write extended attributes
this.writeExtendedAttributes(writer, reference, extensionAttributeProcessor, context);
// Write reference interface
extensionProcessor.write(reference.getInterfaceContract(), writer, context);
// Write bindings
for (Binding binding : reference.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write callback
if (reference.getCallback() != null) {
Callback callback = reference.getCallback();
writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
//write extended attributes
this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor, context);
// Write callback bindings
for (Binding binding : callback.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write extensions
this.writeExtendedElements(writer, callback, extensionProcessor, context);
writeEnd(writer);
}
// Write extensions
this.writeExtendedElements(writer, reference, extensionProcessor, context);
writeEnd(writer);
}
// Write <property> elements
for (ComponentProperty property : component.getProperties()) {
writeStart(writer,
PROPERTY,
new XAttr(NAME, property.getName()),
new XAttr(MUST_SUPPLY, property.isMustSupply()),
new XAttr(MANY, property.isMany()),
new XAttr(TYPE, property.getXSDType()),
new XAttr(ELEMENT, property.getXSDElement()),
new XAttr(SOURCE, property.getSource()),
new XAttr(FILE, property.getFile()),
policyProcessor.writePolicies(property));
//write extended attributes
this.writeExtendedAttributes(writer, property, extensionAttributeProcessor, context);
// Write property value
writePropertyValue(property.getValue(), property.getXSDElement(), property.getXSDType(), writer);
// Write extensions
for (Object extension : property.getExtensions()) {
extensionProcessor.write(extension, writer, context);
}
writeEnd(writer);
}
writeEnd(writer);
}
// Write <reference> elements
for (Reference reference : composite.getReferences()) {
CompositeReference compositeReference = (CompositeReference)reference;
// Write list of promoted references
List<String> promote = new ArrayList<String>();
for (ComponentReference promoted : compositeReference.getPromotedReferences()) {
promote.add(promoted.getName());
}
// Write <reference> element
writeStart(writer,
REFERENCE,
new XAttr(NAME, reference.getName()),
new XAttr(PROMOTE, promote),
writeMultiplicity(reference),
policyProcessor.writePolicies(reference));
//write extended attributes
this.writeExtendedAttributes(writer, reference, extensionAttributeProcessor, context);
// Write reference interface
extensionProcessor.write(reference.getInterfaceContract(), writer, context);
// Write bindings
for (Binding binding : reference.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write <callback> element
if (reference.getCallback() != null) {
Callback callback = reference.getCallback();
writeStart(writer, CALLBACK);
//write extended attributes
this.writeExtendedAttributes(writer, callback, extensionAttributeProcessor, context);
// Write callback bindings
for (Binding binding : callback.getBindings()) {
extensionProcessor.write(binding, writer, context);
}
// Write extensions
this.writeExtendedElements(writer, callback, extensionProcessor, context);
writeEnd(writer);
}
// Write extensions
this.writeExtendedElements(writer, reference, extensionProcessor, context);
writeEnd(writer);
}
// Write <property> elements
for (Property property : composite.getProperties()) {
writeStart(writer,
PROPERTY,
new XAttr(NAME, property.getName()),
new XAttr(MUST_SUPPLY, property.isMustSupply()),
new XAttr(MANY, property.isMany()),
new XAttr(TYPE, property.getXSDType()),
new XAttr(ELEMENT, property.getXSDElement()),
policyProcessor.writePolicies(property));
//write extended attributes
this.writeExtendedAttributes(writer, property, extensionAttributeProcessor, context);
// Write property value
writePropertyValue(property.getValue(), property.getXSDElement(), property.getXSDType(), writer);
// Write extensions
for (Object extension : property.getExtensions()) {
extensionProcessor.write(extension, writer, context);
}
writeEnd(writer);
}
// Write <wire> elements
for (Wire wire : composite.getWires()) {
writeStart(writer, WIRE, new XAttr(SOURCE, wire.getSource().getName()), new XAttr(TARGET, wire.getTarget()
.getName()), wire.isReplace() ? new XAttr(Constants.REPLACE, true) : null);
//write extended attributes
this.writeExtendedAttributes(writer, wire, extensionAttributeProcessor, context);
// Write extensions
for (Object extension : wire.getExtensions()) {
extensionProcessor.write(extension, writer, context);
}
writeEnd(writer);
}
for (Object extension : composite.getExtensions()) {
extensionProcessor.write(extension, writer, context);
}
writeEndDocument(writer);
}