/*******************************************************************************
 * 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: IREMBeanTypeProxyFactory.java,v $
 *  $Revision: 1.4 $  $Date: 2005/08/24 20:39:07 $ 
 */


import org.eclipse.jem.internal.proxy.core.*;
/**
 * Interface for Remote VM Bean Type Proxy Factories.
 * All extension factories for Remote VM must implement this interface.
 */

public interface IREMBeanTypeProxyFactory extends IBeanTypeProxyFactory {
/**
 * Return a bean type proxy for the class name.
 * Return null if the extension factory doesn't handle this class.
 * Don't register any proxies returned, they will automatically be registered.
 * This should only return bean type proxies where the factory can determine
 * everything it needs, such as supertype and classID.
 * NOTE: This is implemented for the usage of the
 *       standard BeanType proxy factory. It should
 *       NOT be called by anyone else. They should
 *       go through the IStandardBeanTypeFactory
 *       instead. The standard bean type factory
 *       will call this method on the appropriate
 *       extension when it needs to.
 *
 * Creation date: (12/3/99 2:26:12 PM)
 */
public IREMBeanTypeProxy getExtensionBeanTypeProxy(String typeName);	

/**
 * Return a bean type proxy for the class name.
 * Return null if the extension factory doesn't handle this class.
 * Don't register any proxies returned, they will automatically be registered.
 * This should only return bean type proxies where the factory can determine
 * everything it needs, such as supertype and classID.
 * NOTE: This is implemented for the usage of the
 *       standard BeanType proxy factory. It should
 *       NOT be called by anyone else. They should
 *       go through the IStandardBeanTypeFactory
 *       instead. The standard bean type factory
 *       will call this method on the appropriate
 *       extension when it needs to.
 
 * @param typeName
 * @param expression
 * @return
 * 
 * @since 1.1.0
 */
public IProxyBeanType getExtensionBeanTypeProxy(String typeName, IExpression expression);

/**
 * Return a bean type proxy for the class id and class name.
 * Return null if the extension factory doesn't handle this class. 
 * Don't register any proxies returned, they will automatically be registered. 
 * This will be called in the case that a new class id was returned
 * from the server that we don't have registered yet. Implementers will
 * created a proxy out of the name and the id and return it.
 * The supertype will be passed in so that the extension factory doesn't need to
 * try to find it.
 * NOTE: This is implemented for the usage of the
 *       standard BeanType proxy factory. It should
 *       NOT be called by anyone else. They should
 *       go through the IStandardBeanTypeFactory
 *       instead. The standard bean type factory
 *       will call this method on the appropriate
 *       extension when it needs to.
 *
 * Creation date: (12/3/99 2:26:12 PM)
 */
public IREMBeanTypeProxy getExtensionBeanTypeProxy(String typeName, Integer classID, IBeanTypeProxy superType);	
}
