/****************************************************************************** * Copyright (c) 2010 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.wst.css.ui.internal.contentassist; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.wst.css.core.internal.metamodel.CSSMMNode; import org.eclipse.wst.css.ui.internal.CSSUIPlugin; import org.eclipse.wst.css.ui.internal.Logger; /** * Generates proposal information for {@link CSSMMNode}s. If the Proposal Information instance * implements {@link IProposalInfo} the node will be set as the input element. * */ class ProposalInfoFactory { private static IConfigurationElement fElement = null; private static boolean fIsInitialized = false; private static final String ATTR_CLASS = "class"; //$NON-NLS-1$ private ProposalInfoFactory() { } /** * Returns additional proposal information for <code>node</code> * @param node the CSS metamodel node * @return additional proposal information about <code>node></code> */ public static synchronized Object getProposalInfo(CSSMMNode node) { Object info = null; if (!fIsInitialized) { // Only attempt to initialize this once. If there are no proposal information providers, we'll always return null IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(CSSUIPlugin.ID, "proposalInfo"); //$NON-NLS-1$ if (elements.length > 0) { // Get the first proposal info that's declared fElement = elements[0]; } fIsInitialized = true; } if (fElement != null) { try { info = fElement.createExecutableExtension(ATTR_CLASS); //$NON-NLS-1$ if (info instanceof IProposalInfo) { ((IProposalInfo) info).setInputElement(node); } } catch (CoreException e) { Logger.log(Logger.ERROR, "Could not create instance for proposalInfo [" + fElement.getAttribute("class") + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } return info; } }