/*
* 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.transformation.compare;
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.emf.mapping.MappingPackage;
import org.teiid.designer.core.compare.EObjectMatcherFactory;
import org.teiid.designer.metamodels.transformation.InputSet;
import org.teiid.designer.metamodels.transformation.MappingClass;
import org.teiid.designer.metamodels.transformation.MappingClassSet;
import org.teiid.designer.metamodels.transformation.TransformationContainer;
import org.teiid.designer.metamodels.transformation.TransformationPackage;
/**
* TransformationMatcherFactory
*
* @since 8.0
*/
public class TransformationMatcherFactory implements EObjectMatcherFactory {
//private final List standardMatchers;
/**
* Construct an instance of TransformationMatcherFactory.
*/
public TransformationMatcherFactory() {
super();
// this.standardMatchers = new LinkedList();
// this.standardMatchers.add( new MappingClassObjectNameToNameMatcher() );
// this.standardMatchers.add( new MappingClassObjectNameToNameIgnoreCaseMatcher() );
// this.standardMatchers.add( new InputParameterNameToNameMatcher() );
// this.standardMatchers.add( new InputParameterNameToNameIgnoreCaseMatcher() );
}
/**
* @see org.teiid.designer.core.compare.EObjectMatcherFactory#createEObjectMatchersForRoots()
*/
@Override
public List createEObjectMatchersForRoots() {
// Create the appropriate matchers ...
final List results = new LinkedList();
results.add( new TransformationRootObjectMatcher() );
return results;
}
/**
* @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 xml metamodel ...
final EClass containingClass = reference.getEContainingClass();
final EPackage metamodel = containingClass.getEPackage();
if (!TransformationPackage.eINSTANCE.equals(metamodel) && !MappingPackage.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(TransformationContainer.class)) {
if(featureId == TransformationPackage.TRANSFORMATION_CONTAINER__TRANSFORMATION_MAPPINGS) {
results.add( new TransformationMappingRootTargetMatcher() );
}
} else if (containingClass.getInstanceClass().equals(MappingClassSet.class)) {
if(featureId == TransformationPackage.MAPPING_CLASS_SET__MAPPING_CLASSES) {
results.add( new MappingClassObjectNameToNameMatcher() );
results.add( new MappingClassObjectNameToNameIgnoreCaseMatcher() );
}
} else if (containingClass.getInstanceClass().equals(MappingClass.class)) {
if(featureId == TransformationPackage.MAPPING_CLASS__COLUMNS) {
results.add( new MappingClassObjectNameToNameMatcher() );
results.add( new MappingClassObjectNameToNameIgnoreCaseMatcher() );
}
} else if (containingClass.getInstanceClass().equals(InputSet.class)) {
if(featureId == TransformationPackage.INPUT_SET__INPUT_PARAMETERS) {
results.add( new InputParameterNameToNameMatcher() );
results.add( new InputParameterNameToNameIgnoreCaseMatcher() );
}
} else {
// not checking the container class in these cases, since the container is
// from mapping metamodel
if(featureId == TransformationPackage.TRANSFORMATION_MAPPING_ROOT__NESTED ||
featureId == TransformationPackage.TRANSFORMATION_MAPPING_ROOT__HELPER) {
results.add( new SqlTransformationSqlToSqlMatcher() );
} else if(featureId == TransformationPackage.SQL_TRANSFORMATION__ALIASES) {
results.add( new SqlTransformationAliasesMatcher() );
}
}
return results;
}
}