gt:         Differentiator d = buildDiffEngine();
context: /*******************************************************************************
   * Copyright (c) 1998, 2016 Oracle and/or its affiliates. All rights reserved.
   * This program and the accompanying materials are made available under the
   * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
   * which accompanies this distribution.
   * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
   * and the Eclipse Distribution License is available at
   * http://www.eclipse.org/org/documents/edl-v10.php.
   *
   * Contributors:
   *     Oracle - initial API and implementation from Oracle TopLink
  ******************************************************************************/
  package org.eclipse.persistence.tools.workbench.test.mappingsmodel;
  
  import java.util.ArrayList;
  import java.util.Hashtable;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  import java.util.Vector;
  
  import javax.naming.InitialContext;
  
  import org.eclipse.persistence.descriptors.CMPPolicy;
  import org.eclipse.persistence.descriptors.ClassDescriptor;
  import org.eclipse.persistence.descriptors.ClassExtractor;
  import org.eclipse.persistence.descriptors.DescriptorEventManager;
  import org.eclipse.persistence.descriptors.DescriptorQueryManager;
  import org.eclipse.persistence.descriptors.FieldsLockingPolicy;
  import org.eclipse.persistence.descriptors.InheritancePolicy;
  import org.eclipse.persistence.descriptors.InterfacePolicy;
  import org.eclipse.persistence.descriptors.PessimisticLockingPolicy;
  import org.eclipse.persistence.descriptors.RelationalDescriptor;
  import org.eclipse.persistence.descriptors.ReturningPolicy;
  import org.eclipse.persistence.descriptors.VersionLockingPolicy;
  import org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy;
  import org.eclipse.persistence.descriptors.copying.AbstractCopyPolicy;
  import org.eclipse.persistence.descriptors.invalidation.CacheInvalidationPolicy;
  import org.eclipse.persistence.eis.EISConnectionSpec;
  import org.eclipse.persistence.eis.interactions.EISInteraction;
  import org.eclipse.persistence.eis.interactions.MappedInteraction;
  import org.eclipse.persistence.eis.mappings.EISOneToOneMapping;
  import org.eclipse.persistence.expressions.Expression;
  import org.eclipse.persistence.internal.databaseaccess.DatabasePlatform;
  import org.eclipse.persistence.internal.databaseaccess.DatasourceCall;
  import org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform;
  import org.eclipse.persistence.internal.descriptors.FieldTransformation;
  import org.eclipse.persistence.internal.descriptors.InstantiationPolicy;
  import org.eclipse.persistence.internal.descriptors.MethodBasedFieldTransformation;
  import org.eclipse.persistence.internal.descriptors.ObjectBuilder;
  import org.eclipse.persistence.internal.descriptors.TransformerBasedFieldTransformation;
  import org.eclipse.persistence.internal.expressions.BaseExpression;
  import org.eclipse.persistence.internal.expressions.CompoundExpression;
  import org.eclipse.persistence.internal.expressions.ConstantExpression;
  import org.eclipse.persistence.internal.expressions.DataExpression;
  import org.eclipse.persistence.internal.expressions.ForUpdateClause;
  import org.eclipse.persistence.internal.expressions.FunctionExpression;
  import org.eclipse.persistence.internal.expressions.LiteralExpression;
  import org.eclipse.persistence.internal.expressions.ObjectExpression;
  import org.eclipse.persistence.internal.expressions.ParameterExpression;
  import org.eclipse.persistence.internal.expressions.QueryKeyExpression;
  import org.eclipse.persistence.internal.helper.ConcurrentFixedCache;
  import org.eclipse.persistence.internal.helper.DatabaseField;
  import org.eclipse.persistence.internal.helper.DatabaseTable;
  import org.eclipse.persistence.internal.indirection.IndirectionPolicy;
  import org.eclipse.persistence.internal.oxm.TreeObjectBuilder;
  import org.eclipse.persistence.internal.queries.ContainerPolicy;
  import org.eclipse.persistence.internal.queries.DatabaseQueryMechanism;
  import org.eclipse.persistence.internal.queries.InterfaceContainerPolicy;
  import org.eclipse.persistence.internal.queries.JPQLCallQueryMechanism;
  import org.eclipse.persistence.internal.queries.JoinedAttributeManager;
  import org.eclipse.persistence.internal.queries.ReportItem;
  import org.eclipse.persistence.mappings.AggregateMapping;
  import org.eclipse.persistence.mappings.AttributeAccessor;
  import org.eclipse.persistence.mappings.CollectionMapping;
  import org.eclipse.persistence.mappings.DatabaseMapping;
  import org.eclipse.persistence.mappings.ForeignReferenceMapping;
  import org.eclipse.persistence.mappings.ManyToManyMapping;
  import org.eclipse.persistence.mappings.OneToOneMapping;
  import org.eclipse.persistence.mappings.VariableOneToOneMapping;
  import org.eclipse.persistence.mappings.converters.ObjectTypeConverter;
  import org.eclipse.persistence.mappings.converters.SerializedObjectConverter;
  import org.eclipse.persistence.mappings.converters.TypeConversionConverter;
  import org.eclipse.persistence.mappings.foundation.AbstractCompositeDirectCollectionMapping;
  import org.eclipse.persistence.mappings.foundation.AbstractTransformationMapping;
  import org.eclipse.persistence.mappings.querykeys.QueryKey;
  import org.eclipse.persistence.mappings.transformers.MethodBasedAttributeTransformer;
  import org.eclipse.persistence.mappings.xdb.DirectToXMLTypeMapping;
  import org.eclipse.persistence.oxm.NamespaceResolver;
  import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping;
  import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
  import org.eclipse.persistence.oxm.mappings.XMLDirectMapping;
  import org.eclipse.persistence.oxm.mappings.XMLObjectReferenceMapping;
  import org.eclipse.persistence.oxm.mappings.nullpolicy.NullPolicy;
  import org.eclipse.persistence.oxm.schema.XMLSchemaReference;
  import org.eclipse.persistence.platform.xml.XMLComparer;
  import org.eclipse.persistence.platform.xml.jaxp.JAXPTransformer;
  import org.eclipse.persistence.queries.DataModifyQuery;
  import org.eclipse.persistence.queries.DataReadQuery;
  import org.eclipse.persistence.queries.DatabaseQuery;
  import org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy;
  import org.eclipse.persistence.queries.ObjectBuildingQuery;
  import org.eclipse.persistence.queries.ObjectLevelReadQuery;
  import org.eclipse.persistence.queries.QueryResultsCachePolicy;
  import org.eclipse.persistence.queries.ReadAllQuery;
  import org.eclipse.persistence.sessions.DatasourceLogin;
  import org.eclipse.persistence.sessions.DefaultConnector;
  import org.eclipse.persistence.sessions.Project;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWColumn;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWColumnPair;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWDatabase;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWLoginSpec;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWLoginSpecHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWReference;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.db.MWTable;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWClassIndicatorFieldPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWClassIndicatorValue;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWDescriptor;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWDescriptorAfterLoadingPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWMappingDescriptor;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWDescriptorMultiTableInfoPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWInterfaceDescriptor;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalPrimaryKeyPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalReturningPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWRelationalReturningPolicyInsertFieldReturnOnlyFlag;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWSecondaryTableHolder;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWTableDescriptor;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWTableDescriptorLockingPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.relational.MWUserDefinedQueryKey;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.xml.MWEisReturningPolicyInsertFieldReturnOnlyFlag;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWAttributeHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWClassHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWColumnHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWColumnPairHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWDescriptorHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWDescriptorQueryParameterHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWMappingHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWMethodHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWNamedSchemaComponentHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWQueryKeyHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWQueryableHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWReferenceHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.handles.MWTableHandle;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWClassBasedTransformer;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWFieldTransformerAssociation;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWMapping;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWMethodBasedTransformer;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWObjectTypeConverter;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWAggregatePathToColumn;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWColumnQueryKeyPair;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWOneToOneMapping;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWRelationalFieldTransformerAssociation;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.xml.MWXmlFieldTransformerAssociation;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClass;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassAttribute;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassRepository;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWMethod;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWProject;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWProjectDefaultsPolicy;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.project.relational.MWRelationalProject;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.project.xml.MWEisLoginSpec;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.query.MWAbstractQuery;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.query.MWQueryParameter;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.query.relational.MWCompoundExpression;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.AbstractNamedSchemaComponent;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.IdentityConstraintDefinition;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.MWNamespace;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.MWXmlSchema;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.MWXmlSchemaRepository;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.ReferencedAttributeDeclaration;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.ReferencedComplexTypeDefinition;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.ReferencedElementDeclaration;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.ReferencedModelGroup;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.schema.ReferencedSimpleTypeDefinition;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.spi.SPIManager;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.spi.SimpleSPIManager;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.spi.db.jdbc.JDBCExternalDatabaseFactory;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.spi.meta.classfile.CFExternalClassRepositoryFactory;
  import org.eclipse.persistence.tools.workbench.mappingsmodel.xml.MWXmlField;
  import org.eclipse.persistence.tools.workbench.platformsmodel.DatabaseType;
  import org.eclipse.persistence.tools.workbench.utility.AbstractModel;
  import org.eclipse.persistence.tools.workbench.utility.ClassTools;
  import org.eclipse.persistence.tools.workbench.utility.diff.CompositeDiff;
  import org.eclipse.persistence.tools.workbench.utility.diff.ContainerDiff;
  import org.eclipse.persistence.tools.workbench.utility.diff.ContainerDifferentiator;
  import org.eclipse.persistence.tools.workbench.utility.diff.Diff;
  import org.eclipse.persistence.tools.workbench.utility.diff.DiffEngine;
  import org.eclipse.persistence.tools.workbench.utility.diff.DiffWrapper;
  import org.eclipse.persistence.tools.workbench.utility.diff.Differentiator;
  import org.eclipse.persistence.tools.workbench.utility.diff.DifferentiatorWrapper;
  import org.eclipse.persistence.tools.workbench.utility.diff.EqualityDifferentiator;
  import org.eclipse.persistence.tools.workbench.utility.diff.ListAdapter;
  import org.eclipse.persistence.tools.workbench.utility.diff.MapAdapter;
  import org.eclipse.persistence.tools.workbench.utility.diff.MapEntryDifferentiator;
  import org.eclipse.persistence.tools.workbench.utility.diff.NullDiff;
  import org.eclipse.persistence.tools.workbench.utility.diff.OrderedContainerDifferentiator;
  import org.eclipse.persistence.tools.workbench.utility.diff.ReflectiveDifferentiator;
  import org.eclipse.persistence.tools.workbench.utility.node.AbstractNodeModel;
  
  /**
   * The main method simply builds the DiffEngine to see if all the
   * settings are valid.
   */
  public class MappingsModelTestTools {
  
      public static void main(String[] args) {
  