/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.metamodels.xsd.compare; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; import org.eclipse.xsd.XSDPackage; import org.teiid.designer.core.compare.EObjectMatcher; import org.teiid.designer.core.compare.EObjectMatcherFactory; /** * @since 8.0 */ public class XsdMatcherFactory implements EObjectMatcherFactory { private final List standardMatchers; private final EObjectMatcher facetMatcher = new XsdFacetToXsdFacetMatcher(); /** * Construct an instance of XmlMatcherFactory. */ public XsdMatcherFactory() { super(); this.standardMatchers = new LinkedList(); } /** * @see org.teiid.designer.core.compare.EObjectMatcherFactory#createEObjectMatchersForRoots() */ @Override public List createEObjectMatchersForRoots() { this.standardMatchers.add(new XsdQNameToQNameMatcher()); this.standardMatchers.add(new XsdQNameToQNameIgnoreCaseMatcher()); this.standardMatchers.add(new XsdTagNameToTagNameMatcher()); this.standardMatchers.add(new XsdTagNameToTagNameIgnoreCaseMatcher()); // XSD objects can be roots, so return the matchers return this.standardMatchers; } /** * @see org.teiid.designer.core.compare.EObjectMatcherFactory#createEObjectMatchers(org.eclipse.emf.ecore.EReference) */ @Override public List createEObjectMatchers(final EReference reference) { // Make sure the reference is in the xsd metamodel ... final EClass containingClass = reference.getEContainingClass(); final EPackage metamodel = containingClass.getEPackage(); if ( !XSDPackage.eINSTANCE.equals(metamodel) ) { // The feature isn't in the xsd metamodel so return nothing ... return Collections.EMPTY_LIST; } final int refID = reference.getFeatureID(); List result = new ArrayList(); switch (refID) { case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FACET_CONTENTS: case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__FUNDAMENTAL_FACETS: case XSDPackage.XSD_SIMPLE_TYPE_DEFINITION__SYNTHETIC_FACETS: { result.add(facetMatcher); break; } default: { result = standardMatchers; break; } } return result; } }