private static TypeDescriptor buildTypeDescriptorFromElement()

in taverna-wsdl-generic/src/main/java/org/apache/taverna/wsdl/xmlsplitter/XMLSplitterSerialisationHelper.java [183:253]


	private static TypeDescriptor buildTypeDescriptorFromElement(
			Element element, HashMap<String, TypeDescriptor> existingsTypes) {
		TypeDescriptor result = null;
		if (element.getAttributeValue("id") != null) {
			TypeDescriptor stored = existingsTypes.get(element
					.getAttributeValue("id"));
			if (stored == null)
				logger.fatal("Missing reference to parent type with id="
						+ element.getAttributeValue("id"));
			else {
				result = createFromCache(stored, element);
			}
		}

		if (result == null) {
			if (element.getName().equalsIgnoreCase("complextype")) {
				result = new ComplexTypeDescriptor();
				populateDescriptor(element, result);
				existingsTypes.put(result.getQname().toString(), result);
				Element elements = element.getChild("elements", XScuflNS);
				for (Iterator<?> iterator = elements.getChildren().iterator(); iterator
						.hasNext();) {
					Element childElement = (Element) iterator.next();
					((ComplexTypeDescriptor) result).getElements().add(
							buildTypeDescriptorFromElement(childElement,
									existingsTypes));
				}
				Element attributes = element.getChild("attributes", XScuflNS);
				if (attributes != null) {
					for (Iterator<?> iterator = attributes.getChildren().iterator(); iterator
					.hasNext();) {
						Element childElement = (Element) iterator.next();
						((ComplexTypeDescriptor) result).getAttributes().add(
								buildTypeDescriptorFromElement(childElement,
										existingsTypes));
					}
				}

			} else if (element.getName().equalsIgnoreCase("arraytype")) {

				result = new ArrayTypeDescriptor();
				populateDescriptor(element, result);
				existingsTypes.put(result.getQname().toString(), result);
				Element elementType = element.getChild("elementtype", XScuflNS);
				((ArrayTypeDescriptor) result)
						.setElementType(buildTypeDescriptorFromElement(
								(Element) elementType.getChildren().get(0),
								existingsTypes));
				if (element.getAttribute("wrapped") != null) {
					((ArrayTypeDescriptor) result).setWrapped(element
							.getAttributeValue("wrapped").equalsIgnoreCase(
									"true"));
				} else {
					// prior to the addition of the wrapped attribute, in the
					// majority of cases an array
					// would not be wrapped if it was flagged as unbounded.
					((ArrayTypeDescriptor) result).setWrapped(!result
							.isUnbounded());
				}

			} else if (element.getName().equalsIgnoreCase("basetype")) {
				result = new BaseTypeDescriptor();
				populateDescriptor(element, result);
			} else if (element.getName().equalsIgnoreCase("attribute")) {
				result = new AttributeTypeDescriptor();
				populateDescriptor(element, result);
			}
		}

		return result;
	}