}
public ConstrainingType read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
ConstrainingType constrainingType = null;
AbstractService abstractService = null;
AbstractReference abstractReference = null;
AbstractProperty abstractProperty = null;
AbstractContract abstractContract = null;
QName name = null;
// Read the constrainingType document
while (reader.hasNext()) {
int event = reader.getEventType();
switch (event) {
case START_ELEMENT:
name = reader.getName();
// Read a <constrainingType>
if (Constants.CONSTRAINING_TYPE_QNAME.equals(name)) {
constrainingType = assemblyFactory.createConstrainingType();
constrainingType.setName(new QName(getString(reader, TARGET_NAMESPACE), getString(reader, NAME)));
policyProcessor.readPolicies(constrainingType, reader);
} else if (Constants.SERVICE_QNAME.equals(name)) {
// Read a <service>
abstractService = assemblyFactory.createAbstractService();
abstractContract = abstractService;
abstractService.setName(getString(reader, Constants.NAME));
constrainingType.getServices().add(abstractService);
policyProcessor.readPolicies(abstractService, reader);
} else if (Constants.REFERENCE_QNAME.equals(name)) {
// Read a <reference>
abstractReference = assemblyFactory.createAbstractReference();
abstractContract = abstractReference;
abstractReference.setName(getString(reader, Constants.NAME));
readMultiplicity(abstractReference, reader);
constrainingType.getReferences().add(abstractReference);
policyProcessor.readPolicies(abstractReference, reader);
} else if (Constants.PROPERTY_QNAME.equals(name)) {