/******************************************************************************* * Copyright (c) 2001, 2005 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 API and implementation *******************************************************************************/ package org.eclipse.jem.internal.proxy.remote; /* */ import org.eclipse.jem.internal.proxy.core.*; import org.eclipse.jem.internal.proxy.common.remote.*; /** * An abstract base class of IREMBeanProxy that doesn't * have the bean type stored in it. The subclasses will * supply it. It does however have an ID because it does * exist over on the remote VM. */ public abstract class REMAbstractBeanProxy implements IREMBeanProxy { protected final REMProxyFactoryRegistry fFactory; private Integer fID; /** * Set the bean we are proxying. We are a proxy for a bean running on the remote VM. */ protected REMAbstractBeanProxy(REMProxyFactoryRegistry aRegistry, Integer anID){ fFactory = aRegistry; fID = anID; } /** * equals: Equal if: * 1) This proxy == (identity) to the other object * 2) Else if other is an IBeanProxy and not a constant one, then if * equals on the server. * 3) If this is a constant proxy and the other is too or is a constant * value (e.g. IStringBeanProxy.equals(String), then true if values are equals. */ public boolean equals(Object anObject) { if (super.equals(anObject)) return true; // Identity if (anObject instanceof IBeanProxy && !(anObject instanceof IREMConstantBeanProxy) && fFactory.isValid() && ((IBeanProxy) anObject).getProxyFactoryRegistry() == fFactory) try { // The other is a bean proxy and is not a constant one, let the server do the check. return ((IBooleanBeanProxy) REMStandardBeanProxyConstants.getConstants(fFactory).getObjectEquals().invoke(this, (IBeanProxy) anObject)).booleanValue(); } catch (ThrowableProxy e) { } return false; } /* (non-Javadoc) * @see org.eclipse.jem.internal.proxy.core.IBeanProxy#sameAs(org.eclipse.jem.internal.proxy.core.IBeanProxy) */ public boolean sameAs(IBeanProxy aBeanProxy) { return this == aBeanProxy; // We can be assured in Remote Proxy that identity of proxy and identity of object are the same. } public ProxyFactoryRegistry getProxyFactoryRegistry() { return fFactory; } /** * Get ID. An internal method to be used only within the ProxyFactory family. */ public Integer getID() { return fID; } /** * isValid. */ public boolean isValid() { return fID != null; } /** * Proxy is about to be released, MUST mark it invalid. * This is required. Resources can also be cleaned up * if they are being held and need to be cleaned up. * * NOTE: This method will only be called when the proxy * is explicitly released. If it is simply garbage collected, * then this method will not be called. Simple garbage collection * means that no one is referencing this proxy. The proxy factory * will know what id this proxy was referencing and will release it * on the server at GC time. * * If there are resources * that absolutely must be released, then the finalize method * should be implemented to do the clean up. However, try not * to have this be the case. Finalize methods add overhead that is * usually better not to have. The better way is for any users * that get this kind of proxy object know to call release on * ProxyFactoryRegistry to release it before garbage collection. */ public void release() { fID = null; } /** * Return the toString of the actual bean on the remote side. */ public String toBeanString() { IStringBeanProxy string = (IStringBeanProxy) REMStandardBeanProxyConstants.getConstants(fFactory).getObjectToString().invokeCatchThrowableExceptions(this); return (string != null) ? string.stringValue() : null; } /** * Render the bean proxy into the value field. */ public void renderBean(Commands.ValueObject value) { value.setObjectID(isValid() ? getID().intValue() : Commands.VOID); // No longer exists, so send over null. } /* (non-Javadoc) * @see org.eclipse.jem.internal.proxy.core.IProxy#isBeanProxy() */ public final boolean isBeanProxy() { return true; } /* (non-Javadoc) * @see org.eclipse.jem.internal.proxy.core.IProxy#isExpressionProxy() */ public final boolean isExpressionProxy() { return false; } }