/*******************************************************************************
 * Copyright (c) 2006 Oracle Corporation.
 * 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:
 *    Cameron Bateman/Oracle - initial API and implementation
 *    
 ********************************************************************************/

package org.eclipse.jst.jsf.designtime.internal.provisional.el;

import org.eclipse.jst.jsf.context.symbol.internal.provisional.ISymbol;

/**
 * Super-class of all design time property resolvers
 * 
 * @author cbateman
 *
 */
public abstract class AbstractDTPropertyResolver 
{
    /**
     * Returns a symbol encapsulating the property on base with the name
     * properyId.  Note that getProperty may return *more* property symbols
     * for the same 'base' because some ISymbol's have unconstrained type
     * descriptors.  For example, a bean that implements java.util.Map,
     * may have any number of possible properties add at runtime that cannot
     * be determined at design time.  It is up to implementers of this interface
     * to decide how (whether) to return these objects at design time 
     * 
     * @param base
     * @param propertyId
     * @return the symbol for the named propertyId or null if not found
     */
    public abstract ISymbol getProperty(ISymbol base, Object propertyId);
    
    /**
     * @param base
     * @param offset
     * @return the symbol for the property referred to by the offset 
     * into base when it is treated as either an array or a list.
     * The symbol returned is *not* found in the getAllProperties list.
     */
    public abstract ISymbol getProperty(ISymbol base, int offset);
    
    /**
     * @param base
     * @return all properties of base that can be determined concretely
     * at designtime.  Note that getProperty(base, x) may return non-null
     * for objects not found in the return from this method. @see getProperty
     */
    public abstract ISymbol[] getAllProperties(ISymbol base);
}
