blob: 149250c718a5aeb2c8e46018eba0a3bfd05b316f [file] [log] [blame]
/*******************************************************************************
* 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.context.symbol.source;
import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
import org.eclipse.jst.jsf.context.symbol.ISymbol;
/**
* Must be sub-classed by all contextSymbolFactory extension point implementors
* to create context configured symbols
*
* <p><b>Provisional API - subject to change</b></p>
*
* @author cbateman
*
*/
public abstract class AbstractContextSymbolFactory
{
/**
* @param symbolName -- the symbol name
* @param scope -- the scope of the symbol
* @param context -- the context; must be supported (call supports(context))
* @param problems -- populated with problems found during symbol construction.
* @return a new ISymbol configured for the name, scope and context or null
* if the arguments are invalid but some other reason a symbol cannot be created.
* @throws IllegalArgumentException if this method is called with context
* for which supports(context) == false or if scope does not conform
* to exactly one of the ISymbolConstants.SYMBOL_SCOPE_* constants
* @deprecated Use the new create method instead.
*/
@Deprecated
public final ISymbol create(final String symbolName, final int scope, final IAdaptable context, final List problems)
{
if (!supports(context))
{
throw new IllegalArgumentException("Unsupported context"); //$NON-NLS-1$
}
else if (!ISymbolConstants.isValid(scope))
{
throw new IllegalArgumentException("Unsupported symbol constant:"+scope); //$NON-NLS-1$
}
try
{
return internalCreate(symbolName, scope, context, problems, null);
}
catch (final Exception e)
{
JSFCommonPlugin.log(e, "During execution of context symbol factory: "+this.getClass().getName()); //$NON-NLS-1$
return null;
}
}
/**
* The same as create(symbolName, scope, context, problems), except it calls
* the internalCreate with additionalInfo. By default this has the same
* effect.
*
* @param symbolName
* @param scope
* @param context
* @param problems
* @param additionalInfo
* @return the new Symbol
*/
public final ISymbol create(final String symbolName, final int scope, final IAdaptable context, final List problems, final IAdditionalContextSymbolInfo additionalInfo)
{
if (!supports(context))
{
throw new IllegalArgumentException("Unsupported context"); //$NON-NLS-1$
}
else if (!ISymbolConstants.isValid(scope))
{
throw new IllegalArgumentException("Unsupported symbol constant:"+scope); //$NON-NLS-1$
}
try
{
return internalCreate(symbolName, scope, context, problems, additionalInfo);
}
catch (final Exception e)
{
JSFCommonPlugin.log(e, "During execution of context symbol factory: "+this.getClass().getName()); //$NON-NLS-1$
return null;
}
}
/**
* Use of this method is DISCOURAGED. It is preferable to move functionality
* to the new internalCreate method and have this one call it with null.
*
* This method will eventually be deprecated and removed
*
* @param symbolName
* @param scope
* @param context
* @param problems -- see problems arg on create
* @return a new ISymbol for the name, scope and context; may return null
* @deprecated Use the new internalCreate instead. Ignore the new
* additionalInfo parameter if you do not need it.
*/
@Deprecated
protected ISymbol internalCreate(final String symbolName, final int scope, final IAdaptable context, final List problems)
{
// do nothing by default
return null;
}
/**
* NOTE: when migrating to this method, ensure that the other internalCreate
* method in your implementation doesn't create inconsistent behaviour.
*
* @param symbolName
* @param scope
* @param context Will conform to restrictions you set out in supports().
* @param problems CURRENTLY IGNORED.
* @param additionalInfo May be null
* @since 3.0
* @return a new ISymbol for the name, scope and context, but with the option
* to also consult additionalInfo passed by the framework. may return null.
*/
protected ISymbol internalCreate(final String symbolName, final int scope, final IAdaptable context, final List problems, final IAdditionalContextSymbolInfo additionalInfo)
{
// by default, call the other internalCreate for backward compatibility.
// implementers can override to do things with the additional info
return internalCreate(symbolName, scope, context, problems);
}
/**
* @param context
* @return true if this factory supports the context
*/
public abstract boolean supports(IAdaptable context);
}