| /******************************************************************************* |
| * 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; |
| |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IAdaptable; |
| |
| /** |
| * Defines a type of factory that can have delegate factories to help it |
| * create an appropriate instance type. The general contract for implementors |
| * is: |
| * |
| * 1) You must follow the isValidDelegate contract. |
| * 2) You should try to create an instance yourself and only delegate |
| * if cannot do it yourself. Deviations from this rule must be |
| * clearly documented to ensure clients understand how the factory works. |
| * |
| * Clients may NOT implement this interface. |
| * Extend AbstractDelegatingFactory instead. |
| * |
| * @author cbateman |
| * |
| */ |
| public interface IDelegatingFactory |
| { |
| /** -- Delegates */ |
| /** If this factory is asked to construct but does not know how to, |
| * it will ask each of its registered delegates to do so in the order |
| * they were added. |
| */ |
| |
| /** |
| * Adds delgate to the end of the list of factory delegates if the list |
| * does not already contain it. |
| * |
| * @param delegate |
| * @throws ClassCastException if delegate does not implement an expected |
| * interface. Each implementor can define what delegates are valid |
| * based on the isValidDelegate() and getValidDelegates contracts |
| */ |
| void addFactoryDelegate(IAdaptable delegate); |
| |
| |
| /** |
| * @param delegate |
| * @return true if delegate was removed, false if delegate wasn't in |
| * the list of delegates |
| */ |
| boolean removeFactoryDelegate(IAdaptable delegate); |
| |
| /** |
| * @return a list of Class objects that represent the interfaces |
| * that may be passed to addFactoryDelegate. Implementor should |
| * return at least one supported class. |
| */ |
| List<Class> getValidDelegateTypes(); |
| |
| |
| /** |
| * The return value of this method should conform to the following contract: |
| * |
| * Let v = getValidDelegates. Then isValidDelegate should return true |
| * only if the set of v contains a Class for which delegate.getAdapter(Class) |
| * returns a non-null value. |
| * |
| * @param delegate |
| * @return true if delegate is supported, false otherwise. |
| */ |
| boolean isValidDelegate(IAdaptable delegate); |
| } |