| package org.eclipse.jst.jsf.common.internal.locator; |
| |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * The super-class of all ILocatorProvider's. |
| * |
| * @author cbateman |
| * @param <LOCATORTYPE> |
| * |
| */ |
| public abstract class AbstractLocatorProvider<LOCATORTYPE> implements ILocatorProvider<LOCATORTYPE> |
| { |
| private boolean _isInit = false; |
| |
| public void initialize() |
| { |
| doInitialize(); |
| _isInit = true; |
| } |
| |
| /** |
| * Overrride to do the init. You can override initialize if you want to |
| */ |
| protected abstract void doInitialize(); |
| |
| public List<? extends LOCATORTYPE> getLocators() |
| { |
| if (!_isInit) |
| { |
| throw new IllegalStateException( |
| "initialize must be called before getLocators"); //$NON-NLS-1$ |
| } |
| return doGetLocators(); |
| } |
| |
| /** |
| * @return the locators. |
| */ |
| protected abstract List<? extends LOCATORTYPE> doGetLocators(); |
| |
| /** |
| * A default implementation of the provider that simply sits on a list |
| * of a locators. |
| * |
| * @param <LOCATORTYPE> |
| */ |
| public static class DefaultLocatorProvider<LOCATORTYPE> extends AbstractLocatorProvider<LOCATORTYPE> |
| { |
| private final List<LOCATORTYPE> _locators; |
| |
| /** |
| * @param locators |
| */ |
| public DefaultLocatorProvider(List<LOCATORTYPE> locators) |
| { |
| _locators = locators; |
| } |
| @Override |
| protected void doInitialize() |
| { |
| // nothing to do. |
| } |
| |
| @Override |
| protected List<? extends LOCATORTYPE> doGetLocators() |
| { |
| return Collections.unmodifiableList(_locators); |
| } |
| } |
| } |