/* * 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.core.compare.diagram; 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.teiid.designer.core.compare.EObjectMatcherFactory; import org.teiid.designer.metamodels.diagram.Diagram; import org.teiid.designer.metamodels.diagram.DiagramContainer; import org.teiid.designer.metamodels.diagram.DiagramPackage; /** * DiagramMatcherFactory * * @since 8.0 */ public class DiagramMatcherFactory implements EObjectMatcherFactory { private final List standardMatchers; /** * DiagramMatcherFactory * @since 4.2 */ public DiagramMatcherFactory() { super(); this.standardMatchers = new LinkedList(); this.standardMatchers.add( new DiagramRootObjectMatcher() ); this.standardMatchers.add( new PresentationEntityNameToNameMatcher() ); this.standardMatchers.add( new PresentationEntityNameToNameIgnoreCaseMatcher() ); } /** * @see org.teiid.designer.core.compare.EObjectMatcherFactory#createEObjectMatchersForRoots() * @since 4.2 */ @Override public List createEObjectMatchersForRoots() { // diagram entities are root level objects return standardMatchers; } /** * @see org.teiid.designer.core.compare.EObjectMatcherFactory#createEObjectMatchers(org.eclipse.emf.ecore.EReference) * @since 4.2 */ @Override public List createEObjectMatchers(EReference reference) { // Make sure the reference is in the diagram metamodel ... final EClass containingClass = reference.getEContainingClass(); final EPackage metamodel = containingClass.getEPackage(); if (!DiagramPackage.eINSTANCE.equals(metamodel)) { //The feature isn't in the transformation or mapping metamodel so return nothing ... return Collections.EMPTY_LIST; } // Create the appropriate matchers ... final List results = new LinkedList(); final int featureId = reference.getFeatureID(); if(containingClass.getInstanceClass().equals(DiagramContainer.class)) { if(featureId == DiagramPackage.DIAGRAM_CONTAINER__DIAGRAM) { results.add( new DiagramTargetMatcher() ); } } else if(containingClass.getInstanceClass().equals(Diagram.class)) { if(featureId == DiagramPackage.DIAGRAM__DIAGRAM_ENTITY || featureId == DiagramPackage.DIAGRAM__DIAGRAM_LINKS) { results.add( new DiagramEntityTargetMatcher() ); } } return results; } }