All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jvnet.jaxb2_commons.util.CustomizationUtils Maven / Gradle / Ivy

The newest version!
package org.jvnet.jaxb2_commons.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.sun.tools.xjc.model.CAttributePropertyInfo;
import com.sun.tools.xjc.model.CClassInfo;
import com.sun.tools.xjc.model.CCustomizations;
import com.sun.tools.xjc.model.CElement;
import com.sun.tools.xjc.model.CElementPropertyInfo;
import com.sun.tools.xjc.model.CPluginCustomization;
import com.sun.tools.xjc.model.CPropertyInfo;
import com.sun.tools.xjc.model.CPropertyVisitor;
import com.sun.tools.xjc.model.CReferencePropertyInfo;
import com.sun.tools.xjc.model.CValuePropertyInfo;
import com.sun.tools.xjc.model.Model;
import com.sun.tools.xjc.outline.ClassOutline;
import com.sun.tools.xjc.outline.FieldOutline;

public class CustomizationUtils {

	private static final DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY;

	static {
		DOCUMENT_BUILDER_FACTORY = DocumentBuilderFactory.newInstance();
		// try {
		// DOCUMENT_BUILDER = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();
		// } catch (ParserConfigurationException pce) {
		// throw new ExceptionInInitializerError(pce);
		// }
	}

	public static DocumentBuilder getDocumentBuilder() {
		try {
			return DOCUMENT_BUILDER_FACTORY.newDocumentBuilder();
		} catch (ParserConfigurationException pce) {
			throw new AssertionError(pce);
		}
	}

	public static CPluginCustomization createCustomization(QName name) {
		final Document document = getDocumentBuilder().newDocument();
		final Element element = document.createElementNS(
				name.getNamespaceURI(), name.getLocalPart());
		return createCustomization(element);
	}

	public static CPluginCustomization createCustomization(final Element element) {
		final CPluginCustomization customization = new CPluginCustomization(
				element, null);
		return customization;
	}

	public static boolean containsCustomization(ClassOutline classOutline,
			QName name) {
		final CPluginCustomization customization = findCustomization(
				classOutline, name);
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization != null;
	}

	public static boolean containsCustomization(CClassInfo classInfo, QName name) {
		final CPluginCustomization customization = findCustomization(classInfo,
				name);
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization != null;
	}

	public static CPluginCustomization findCustomization(
			ClassOutline classOutline, QName name) {
		final CCustomizations customizations = CustomizationUtils
				.getCustomizations(classOutline);
		final CPluginCustomization customization = customizations.find(name
				.getNamespaceURI(), name.getLocalPart());
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization;
	}

	public static CPluginCustomization findCustomization(CClassInfo classInfo,
			QName name) {
		final CCustomizations customizations = CustomizationUtils
				.getCustomizations(classInfo);
		final CPluginCustomization customization = customizations.find(name
				.getNamespaceURI(), name.getLocalPart());
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization;
	}

	public static boolean containsCustomization(FieldOutline fieldOutline,
			QName name) {
		final CPluginCustomization customization = findCustomization(
				fieldOutline, name);
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization != null;
	}

	public static boolean containsCustomization(CPropertyInfo propertyInfo,
			QName name) {
		final CPluginCustomization customization = findCustomization(
				propertyInfo, name);
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization != null;
	}

	public static CPluginCustomization findCustomization(
			FieldOutline fieldOutline, QName name) {
		final CCustomizations customizations = CustomizationUtils
				.getCustomizations(fieldOutline);
		final CPluginCustomization customization = customizations.find(name
				.getNamespaceURI(), name.getLocalPart());
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization;
	}

	public static CPluginCustomization findCustomization(
			CPropertyInfo propertyInfo, QName name) {
		final CCustomizations customizations = CustomizationUtils
				.getCustomizations(propertyInfo);
		final CPluginCustomization customization = customizations.find(name
				.getNamespaceURI(), name.getLocalPart());
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization;
	}

	public static CPluginCustomization findCustomization(Model model, QName name) {
		final CCustomizations customizations = CustomizationUtils
				.getCustomizations(model);
		final CPluginCustomization customization = customizations.find(name
				.getNamespaceURI(), name.getLocalPart());
		if (customization != null) {
			customization.markAsAcknowledged();
		}
		return customization;
	}

	// public static BIXPluginCustomization getCustomization(JavaItem item,
	// QName name) {
	// final BIXPluginCustomization[] customizations = getCustomizations(item,
	// name);
	// if (customizations == null || customizations.length < 1) {
	// return null;
	// }
	// else {
	// return customizations[0];
	// }
	// }

	public static FieldOutline findFieldWithCustomization(
			ClassOutline classOutline, final QName name) {

		for (final FieldOutline fieldOutline : classOutline.getDeclaredFields()) {
			final CCustomizations customizations = getCustomizations(fieldOutline);
			final CPluginCustomization customization = customizations.find(name
					.getNamespaceURI(), name.getLocalPart());
			if (customization != null)
				return fieldOutline;
		}
		return null;

	}

	public static CPropertyInfo findPropertyWithCustomization(
			CClassInfo classInfo, final QName name) {

		for (final CPropertyInfo propertyInfo : classInfo.getProperties()) {
			final CCustomizations customizations = getCustomizations(propertyInfo);
			final CPluginCustomization customization = customizations.find(name
					.getNamespaceURI(), name.getLocalPart());
			if (customization != null)
				return propertyInfo;
		}
		return null;
	}

	public static FieldOutline findInheritedFieldWithCustomization(
			ClassOutline classOutline, final QName name) {
		for (final FieldOutline fieldOutline : classOutline.getDeclaredFields()) {
			if (containsCustomization(fieldOutline, name)) {
				return fieldOutline;
			}
		}
		final ClassOutline superClassOutline = classOutline.getSuperClass();
		if (superClassOutline != null) {
			return findInheritedFieldWithCustomization(superClassOutline, name);
		} else {
			return null;
		}
	}

	public static CPropertyInfo findInheritedPropertyWithCustomization(
			CClassInfo classInfo, final QName name) {
		for (final CPropertyInfo propertyInfo : classInfo.getProperties()) {
			if (containsCustomization(propertyInfo, name)) {
				return propertyInfo;
			}
		}
		final CClassInfo superClassInfo = classInfo.getBaseClass();
		if (superClassInfo != null) {
			return findInheritedPropertyWithCustomization(superClassInfo, name);
		} else {
			return null;
		}
	}

	public static CCustomizations getCustomizations(FieldOutline fieldOutline) {
		return getCustomizations(fieldOutline.getPropertyInfo());
	}

	public static CCustomizations getCustomizations(final Model model) {
		final CCustomizations main = new CCustomizations(model
				.getCustomizations());
		return main;
	}

	public static CCustomizations getCustomizations(
			final CPropertyInfo propertyInfo) {

		final CCustomizations main = new CCustomizations(propertyInfo
				.getCustomizations());

		final Collection elementCustomizations = propertyInfo
				.accept(new CPropertyVisitor>() {
					public Collection onAttribute(
							CAttributePropertyInfo info) {
						return Collections.emptyList();
					}

					public Collection onElement(
							CElementPropertyInfo arg0) {
						return Collections.emptyList();
					}

					public Collection onReference(
							CReferencePropertyInfo info) {

						final List elementCustomizations = new ArrayList(
								info.getElements().size());

						for (CElement element : info.getElements()) {
							elementCustomizations.add(element
									.getCustomizations());
						}

						return elementCustomizations;
					}

					public Collection onValue(
							CValuePropertyInfo arg0) {
						return Collections.emptyList();
					};

				});

		CCustomizations customizations = main;

		for (CCustomizations e : elementCustomizations) {
			main.addAll(e);
		}

		return customizations;
	}

	public static CCustomizations getCustomizations(ClassOutline classOutline) {
		return getCustomizations(classOutline.target);
	}

	public static CCustomizations getCustomizations(final CClassInfo classInfo) {
		return classInfo.getCustomizations();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy