blob: 373f3ddddbc4f80931edcc3cdf0326dacf1083e2 [file] [log] [blame]
/******************************************************************************
* 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;
}
}