/*******************************************************************************
 * Copyright (c) 2006, 2008 Oracle Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *    Cameron Bateman/Oracle - initial API and implementation
 *    
 ********************************************************************************/

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

import org.eclipse.jst.jsf.context.symbol.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 added 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);
}
