/*******************************************************************************
 * 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
 *******************************************************************************/
/*
 *  $RCSfile: BeaninfoProxyConstants.java,v $
 *  $Revision: 1.7 $  $Date: 2006/05/23 15:43:06 $ 
 */
package org.eclipse.jem.internal.beaninfo.adapters;

import org.eclipse.jem.internal.proxy.core.*;

/**
 * This holds the proxy constants for access in beaninfo. It is created on a per-registry basis and stored in the constants section of the registry so
 * that they can be accessed as needed.
 * <p>
 * To gain access to these constants, use the static accessor method "getConstants()" so that the instance is not created until actually needed.
 * 
 * @since 1.0.0
 */
public final class BeaninfoProxyConstants {

	private static final Object REGISTRY_KEY = new Object();

	private final IMethodProxy introspectProxy;

	private final IMethodProxy getBeanInfoSearchPathProxy;

	private final IMethodProxy setBeanInfoSearchPathProxy;

	private final IMethodProxy sendBeanInfoProxy;

	/**
	 * Get the constants instance for the specified registry.
	 */
	public static BeaninfoProxyConstants getConstants(ProxyFactoryRegistry registry) {
		if (registry != null && registry.isValid()) {
			BeaninfoProxyConstants constants = (BeaninfoProxyConstants) registry.getConstants(REGISTRY_KEY);
			if (constants == null)
				registry.registerConstants(REGISTRY_KEY, constants = new BeaninfoProxyConstants(registry));
			return constants;
		} else
			return null;
	}

	private BeaninfoProxyConstants(ProxyFactoryRegistry registry) {

		IStandardBeanTypeProxyFactory typeFactory = registry.getBeanTypeProxyFactory();

		IBeanTypeProxy introspector = typeFactory.getBeanTypeProxy("java.beans.Introspector"); //$NON-NLS-1$
		getBeanInfoSearchPathProxy = introspector.getMethodProxy("getBeanInfoSearchPath"); //$NON-NLS-1$
		setBeanInfoSearchPathProxy = introspector.getMethodProxy("setBeanInfoSearchPath", "[Ljava.lang.String;"); //$NON-NLS-1$ //$NON-NLS-2$

		IBeanTypeProxy modelingBeaninfo = typeFactory.getBeanTypeProxy("org.eclipse.jem.internal.beaninfo.vm.ModelingBeanInfo");//$NON-NLS-1$
		introspectProxy = modelingBeaninfo.getMethodProxy("introspect", new String[] { "java.lang.Class", "boolean", "int"}); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$

		sendBeanInfoProxy = modelingBeaninfo.getMethodProxy("send"); //$NON-NLS-1$

	}

	/**
	 * Get the sendBeanDecorator method proxy from ModelingBeanInfo.
	 * @return
	 * 
	 * @since 1.1.0
	 */
	public IMethodProxy getSendBeanInfoProxy() {
		return sendBeanInfoProxy;
	}
	
	/**
	 * Get the getBeanInfoSearchPath method proxy from Introspector.
	 * @return
	 * 
	 * @since 1.0.0
	 */
	public IMethodProxy getGetBeanInfoSearchPathProxy() {
		return getBeanInfoSearchPathProxy;
	}

	/**
	 * Get the setBeanInfoSearchPath method proxy from Introspector.
	 * @return
	 * 
	 * @since 1.0.0
	 */
	public IMethodProxy getSetBeanInfoSearchPathProxy() {
		return setBeanInfoSearchPathProxy;
	}

	/**
	 * Get the introspect method proxy from ModelingBeanInfo.
	 * @return
	 * 
	 * @since 1.1.0
	 */
	public IMethodProxy getIntrospectProxy() {
		return introspectProxy;
	}
}
