package com.sap.runlet.abstractinterpreter; import org.eclipse.emf.ecore.EObject; import com.sap.runlet.abstractinterpreter.objects.ClassTypedObject; import com.sap.runlet.abstractinterpreter.util.ModelAdapter; /** * A value-holder class for an object and a remote association end. Use instances * of this class as key for maps in which to store the links for navigating from the * <tt>object</tt> to the remote association end. * * @author Axel Uhl (D043530) */ public class ObjectAndRemoteAssociationEnd<LinkMetaObject extends EObject, LinkEndMetaObject extends EObject, TypeUsage extends EObject, ClassUsage extends TypeUsage, MetaClass extends EObject> { private final ClassTypedObject<LinkEndMetaObject, TypeUsage, ClassUsage> object; private final LinkEndMetaObject remoteAssociationEnd; private final ModelAdapter<LinkMetaObject, LinkEndMetaObject, MetaClass, TypeUsage, ClassUsage> modelAdapter; public ObjectAndRemoteAssociationEnd(ClassTypedObject<LinkEndMetaObject, TypeUsage, ClassUsage> object, LinkEndMetaObject remoteLinkEndMetaObject, ModelAdapter<LinkMetaObject, LinkEndMetaObject, MetaClass, TypeUsage, ClassUsage> modelAdapter) { this.object = object; this.remoteAssociationEnd = remoteLinkEndMetaObject; this.modelAdapter = modelAdapter; } private ModelAdapter<LinkMetaObject, LinkEndMetaObject, MetaClass, TypeUsage, ClassUsage> getModelAdapter() { return modelAdapter; } public ClassTypedObject<LinkEndMetaObject, TypeUsage, ClassUsage> getObject() { return object; } public LinkEndMetaObject getRemoteAssociationEnd() { return remoteAssociationEnd; } public boolean equals(Object o) { return (getObject() == null && ((ObjectAndRemoteAssociationEnd<?, ?, ?, ?, ?>) o).getObject() == null) || getObject() != null && getObject().equals(((ObjectAndRemoteAssociationEnd<?, ?, ?, ?, ?>) o).getObject()) && getRemoteAssociationEnd().equals(((ObjectAndRemoteAssociationEnd<?, ?, ?, ?, ?>) o).getRemoteAssociationEnd()); } public int hashCode() { return ((getObject()==null)?0:getObject().hashCode()) ^ getRemoteAssociationEnd().hashCode(); } public String toString() { StringBuilder result = new StringBuilder(); result.append("ObjectAndRemoteLinkEndMetaObject from object "); result.append(getObject()); result.append(" via association "); result.append(getModelAdapter().getAssociationName(getModelAdapter().getAssociation(getRemoteAssociationEnd()))); result.append(" to end "); result.append(getModelAdapter().getEndName(getRemoteAssociationEnd())); result.append(" of type "); result.append(getModelAdapter().getClassName(getModelAdapter().getEndType(getRemoteAssociationEnd()))); return result.toString(); } }