/******************************************************************************* * 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.common.remote.Commands; import org.eclipse.jem.internal.proxy.core.IBeanProxy; import org.eclipse.jem.internal.proxy.core.ProxyFactoryRegistry; /** * This is a base for bean proxies that are constants and * do not have an object on the remote VM side. They are * shipped back and forth by value. */ public abstract class REMConstantBeanProxy implements IREMConstantBeanProxy { protected final REMProxyFactoryRegistry fFactory; private final static Integer ID = new Integer(Commands.NOT_AN_ID); protected REMConstantBeanProxy(REMProxyFactoryRegistry aFactory) { fFactory = aFactory; } /** * Return the registry this proxy was created with. */ public ProxyFactoryRegistry getProxyFactoryRegistry() { return fFactory; } /** * 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. * This is abstract because each type needs to do a unique test for equality. */ public abstract boolean equals(Object anObject); /* (non-Javadoc) * @see org.eclipse.jem.internal.proxy.core.IBeanProxy#sameAs(org.eclipse.jem.internal.proxy.core.IBeanProxy) */ public boolean sameAs(IBeanProxy aBeanProxy) { // We can't be assured that there are not non-identical constants that are actually identical. // This is because for constants we do not know the id of the original. That is not sent across from the vm. return this == aBeanProxy; } /** * Return the ID of this proxy. * Constants have no id's, so we return -1. */ public Integer getID() { return ID; } /** * isValid. Constant ones are always valid unless the registry is terminated, except if an * override releases resources. In that case the overriding * subclass should also override isValid() to return false * if release() was called. */ public boolean isValid() { return fFactory.isValid(); } /** * release. Constant ones don't need to typically be released, however * if an override does do something to release, then it MUST also * override isValid() to return false. */ public void release() { } /* (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; } }