/*******************************************************************************
* Copyright (c) 2012 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
* Zend Technologies
*******************************************************************************/
package org.eclipse.php.internal.ui.explorer;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.php.internal.ui.Logger;
import org.eclipse.php.internal.ui.PHPUiPlugin;
/**
*
* Registry for phpTreeContentProviders extension point contributions.
*
* @since 3.1.2
* @author Robert Gruendler <r.gruendler@gmail.com>
*/
public class TreeContentProviderRegistry {
private static final String EXTENSION_POINT = "phpTreeContentProviders"; //$NON-NLS-1$
private static final String LABEL_PROVIDER = "labelProvider"; //$NON-NLS-1$
private static final String CONTENT_PROVIDER = "contentProvider"; //$NON-NLS-1$
private static TreeContentProviderRegistry instance;
private List<ITreeContentProvider> contentProviders = new ArrayList<>();
private List<ILabelProvider> labelProviders = new ArrayList<>();
private TreeContentProviderRegistry() {
IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(PHPUiPlugin.ID, EXTENSION_POINT);
if (extension != null) {
IExtension[] extensions = extension.getExtensions();
for (int i = 0; i < extensions.length; i++) {
IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
for (int j = 0; j < configElements.length; j++) {
IConfigurationElement configElement = configElements[j];
try {
Object execExt = configElement.createExecutableExtension(CONTENT_PROVIDER);
if (execExt instanceof ITreeContentProvider) {
contentProviders.add((ITreeContentProvider) execExt);
}
Object labelProvider = configElement.createExecutableExtension(LABEL_PROVIDER);
if (labelProvider instanceof ILabelProvider) {
labelProviders.add((ILabelProvider) labelProvider);
}
} catch (CoreException e) {
// executable extension could not be
// created: ignore
// this initializer
Logger.logException(e);
}
}
}
}
}
public synchronized static TreeContentProviderRegistry getInstance() {
if (instance == null) {
instance = new TreeContentProviderRegistry();
}
return instance;
}
public List<ITreeContentProvider> getTreeProviders() {
return contentProviders;
}
public List<ILabelProvider> getLabelProviders() {
return labelProviders;
}
}