//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation and others. // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // which accompanies this distribution, and is available at // http://www.eclipse.org/legal/epl-v10.html // // Contributors: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.uma.ecore; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.common.util.WrappedException; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.InternalEObject; /** * Signals that an error has occurred while resolving a proxy object. * * @author Phong Nguyen Le * @since 1.0 */ public class ResolveException extends WrappedException { private static final long serialVersionUID = 3258412815814636081L; private EObject proxy; private EObject resolver; /** * Creates a new instance. * * @param proxy * a proxy object * @param msg * an error message * @param resolver * the proxy resolver */ public ResolveException(EObject proxy, String msg, EObject resolver) { super(msg, null); this.proxy = proxy; this.resolver = resolver; } /** * Creates a new instance. * * @param proxy * a proxy object * @param exception * the exception that was thrown */ public ResolveException(EObject proxy, Exception exception, EObject resolver) { super(exception); this.proxy = proxy; this.resolver = resolver; } /** * Returns the proxy object. * * @return the proxy object */ public EObject getProxy() { return proxy; } /** * Returns the proxy resolver. * * @return the proxy resolver */ public EObject getResolver() { return resolver; } /** * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { if (obj instanceof ResolveException) { ResolveException re = (ResolveException) obj; if ((resolver == re.resolver) || (resolver == null && re.resolver == null)) { if (proxy == re.proxy) { return true; } if (proxy instanceof InternalEObject) { URI uri = ((InternalEObject) proxy).eProxyURI(); if (uri != null && re.proxy instanceof InternalEObject) { return uri.equals(((InternalEObject) re.proxy) .eProxyURI()); } } } } return super.equals(obj); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { if (proxy instanceof InternalEObject) { int hc = resolver == null ? 0 : resolver.hashCode(); URI uri = ((InternalEObject) proxy).eProxyURI(); if (uri != null) { return (Integer.toString(hc) + uri).hashCode(); } return hc; } return super.hashCode(); } }