in modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ComponentTypeProcessor.java [245:370]
public void write(ComponentType componentType, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
// Write <componentType> element
writeStartDocument(writer, COMPONENT_TYPE,
writeConstrainingType(componentType));
// Write <service> elements
for (Service service : componentType.getServices()) {
writeStart(writer, SERVICE, new XAttr(NAME, service.getName()),
policyProcessor.writePolicies(service));
if (service.getInterfaceContract() != null) {
extensionProcessor.write(service.getInterfaceContract(), writer);
}
for (Binding binding: service.getBindings()) {
extensionProcessor.write(binding, writer);
}
if (service.getCallback() != null) {
Callback callback = service.getCallback();
writeStart(writer, CALLBACK, policyProcessor.writePolicies(callback));
for (Binding binding: callback.getBindings()) {
extensionProcessor.write(binding, writer);
}
for (Object extension: callback.getExtensions()) {
extensionProcessor.write(extension, writer);
}
writeEnd(writer);
}
for (Object extension: service.getExtensions()) {
extensionProcessor.write(extension, writer);
}
writeEnd(writer);
}
// Write <reference> elements
for (Reference reference : componentType.getReferences()) {
writeStart(writer, REFERENCE,
new XAttr(NAME, reference.getName()),
writeMultiplicity(reference),
writeTargets(reference),
policyProcessor.writePolicies(reference));
extensionProcessor.write(reference.getInterfaceContract(), writer);
for (Binding binding: reference.getBindings()) {
extensionProcessor.write(binding, writer);
}
if (reference.getCallback() != null) {
Callback callback = reference.getCallback();
writeStart(writer, CALLBACK,
policyProcessor.writePolicies(callback));
for (Binding binding: callback.getBindings()) {
extensionProcessor.write(binding, writer);
}
for (Object extension: callback.getExtensions()) {
extensionProcessor.write(extension, writer);
}
writeEnd(writer);
}
for (Object extension: reference.getExtensions()) {
extensionProcessor.write(extension, writer);
}
writeEnd(writer);
}
// Write <property> elements
for (Property property : componentType.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 property value
writePropertyValue(property.getValue(), property.getXSDElement(), property.getXSDType(), writer);
// Write extensions
for (Object extension : property.getExtensions()) {
extensionProcessor.write(extension, writer);
}
writeEnd(writer);
}
// Write extension elements
if (componentType instanceof Extensible) {
for (Object extension: ((Extensible)componentType).getExtensions()) {
extensionProcessor.write(extension, writer);
}
}
// Write <implementation> elements if the componentType has
// any intents or policySets
boolean writeImplementation = false;
if (componentType instanceof IntentAttachPoint) {
if (!((IntentAttachPoint)componentType).getRequiredIntents().isEmpty()) {
writeImplementation = true;
}
}
if (componentType instanceof PolicySetAttachPoint) {
if (!((PolicySetAttachPoint)componentType).getPolicySets().isEmpty()) {
writeImplementation = true;
}
}
if (writeImplementation) {
writeStart(writer, IMPLEMENTATION,
policyProcessor.writePolicies(componentType));
}
writeEndDocument(writer);
}