| /****************************************************************************** |
| * 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; |
| } |
| |
| } |