/******************************************************************************* * Copyright (c) 2005,2006 IBM Corporation * Licensed Material - Property of IBM. All rights reserved. * US Government Users Restricted Rights - Use, duplication or disclosure v1.0 * restricted by GSA ADP Schedule Contract with IBM Corp. * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jst.j2ee.core.internal.bindings; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jem.util.RegistryReader; import org.eclipse.jst.j2ee.commonarchivecore.internal.Archive; import org.eclipse.jst.j2ee.core.internal.plugin.J2EECorePlugin; /** * This class is not intended to be subclasses * */ public class JNDIBindingsHelperManager { private List allHelpers; private IJNDIBindingsHelper defaultHelper; private static final int TYPE_PROJECT = 0; private static final int TYPE_ARCHIVE = 1; private static JNDIBindingsHelperManager instance = null; /** * Returns the singleton instance. * * @return the singleton instance. */ public static JNDIBindingsHelperManager getInstance() { if (instance == null) { instance = new JNDIBindingsHelperManager(); } return instance; } /** * Returns an array of bindings helpers applicable for the specified project. If no registered * bindings helpers apply, the returned array will contain a default bindings helper. * * @param project * @return */ public IJNDIBindingsHelper[] getBindingsHelpers(IProject project) { return getBindingsHelpers(TYPE_PROJECT, project); } /** * Returns an array of bindings helpers applicable for the specified archive. If no registered * bindings helpers apply, the returned array will contain a default bindings helper. * * @param project * @return */ public IJNDIBindingsHelper[] getBindingsHelpers(Archive archive) { return getBindingsHelpers(TYPE_ARCHIVE, archive); } private IJNDIBindingsHelper[] getBindingsHelpers(int type, Object obj) { List helpers = getHelpers(); List appliesHelpers = new ArrayList(); IJNDIBindingsHelper helper = null; for (int i = 0; i < helpers.size(); i++) { helper = (IJNDIBindingsHelper) helpers.get(i); if ((TYPE_PROJECT == type && helper.appliesFor((IProject) obj)) || (TYPE_ARCHIVE == type && helper.appliesFor((Archive) obj))) { appliesHelpers.add(helper); } } if (appliesHelpers.size() == 0) { appliesHelpers.add(getDefaultHelper()); } IJNDIBindingsHelper[] helpersArray = new IJNDIBindingsHelper[appliesHelpers.size()]; for (int i = 0; i < helpersArray.length; i++) { helpersArray[i] = (IJNDIBindingsHelper) appliesHelpers.get(i); } return helpersArray; } private IJNDIBindingsHelper getDefaultHelper() { if (null == defaultHelper) { defaultHelper = new AbstractJNDIBindingsHelper() { @Override public boolean appliesFor(IProject project) { return true; } @Override public boolean appliesFor(Archive archive) { return true; } }; } return defaultHelper; } private List getHelpers() { if (null == allHelpers) { BindingsHelperRegistry registry = new BindingsHelperRegistry(); registry.readRegistry(); allHelpers = registry.getHelpers(); } return allHelpers; } protected String TAG_J2EE_BINDINGS_HELPER = "jndiBindingsHelpers"; //$NON-NLS-1$ private class BindingsHelperRegistry extends RegistryReader { private String ATT_CLASS = "class"; //$NON-NLS-1$ private String TAG_BINDINGS_HELPER = "jndiBindingsHelper"; //$NON-NLS-1$ private List helpers = new ArrayList(); private BindingsHelperRegistry() { super(J2EECorePlugin.PLUGIN_ID, TAG_J2EE_BINDINGS_HELPER); } @Override public boolean readElement(IConfigurationElement element) { if (TAG_BINDINGS_HELPER.equals(element.getName())) { try { addHelper((IJNDIBindingsHelper) element.createExecutableExtension(ATT_CLASS)); } catch (CoreException e) { J2EECorePlugin.logError(e); return false; } return true; } return false; } public List getHelpers() { return helpers; } private void addHelper(IJNDIBindingsHelper helper) { helpers.add(helper); } } }