/*******************************************************************************
 * 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;
/*
 *  $RCSfile: REMConstantBeanProxy.java,v $
 *  $Revision: 1.6 $  $Date: 2005/08/24 20:39:06 $ 
 */


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;
	}
}
