blob: abcf482b52a344a60fb174cf3d21885e902b4c9f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 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.dltk.internal.core.index2;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.index2.AbstractIndexer;
import org.eclipse.dltk.core.index2.IIndexer;
import org.eclipse.dltk.core.index2.IIndexerParticipant;
/**
* Indexer instances manager
*
* @author michael
*
*/
public class IndexerManager {
private static final String PARTICIPANT_POINT = DLTKCore.PLUGIN_ID
+ ".indexerParticipant"; //$NON-NLS-1$
private static final String INDEXER_POINT = DLTKCore.PLUGIN_ID + ".indexer"; //$NON-NLS-1$
private static final String INDEXER_ATTR = "indexer"; //$NON-NLS-1$
private static final String PARTICIPANT_ELEMENT = "indexerParticipant"; //$NON-NLS-1$
private static final String CLASS_ATTR = "class"; //$NON-NLS-1$
private static final String NATURE_ATTR = "nature"; //$NON-NLS-1$
private static final String ID_ATTR = "id"; //$NON-NLS-1$
private static IConfigurationElement indexerElement;
private static AbstractIndexer indexer;
private static Map<String, IConfigurationElement> indexerParticipants = new HashMap<>();
static {
String indexerdId = getIndexerID();
IConfigurationElement[] elements = Platform.getExtensionRegistry()
.getConfigurationElementsFor(INDEXER_POINT);
for (IConfigurationElement element : elements) {
String name = element.getName();
String id = element.getAttribute(ID_ATTR);
if (INDEXER_ATTR.equals(name)
&& (indexerdId == null || indexerdId.equals(id))) {
indexerElement = element;
break;
}
}
if (indexerElement == null) {
if (indexerdId != null) {
DLTKCore.error("Unable to find indexer: " + indexerdId);
} else {
DLTKCore.error("Unable to find any indexer");
}
}
elements = Platform.getExtensionRegistry()
.getConfigurationElementsFor(PARTICIPANT_POINT);
for (IConfigurationElement element : elements) {
String name = element.getName();
if (PARTICIPANT_ELEMENT.equals(name)) {
String nature = element.getAttribute(NATURE_ATTR);
indexerParticipants.put(nature, element);
}
}
}
public static IIndexer getIndexer() {
if (indexer == null && indexerElement != null) {
try {
indexer = (AbstractIndexer) indexerElement
.createExecutableExtension(CLASS_ATTR);
indexer.setId(indexerElement.getAttribute(ID_ATTR));
} catch (CoreException e) {
DLTKCore.error(e);
}
}
return indexer;
}
private static String getIndexerID() {
String indexerId = System.getProperty(DLTKCore.INDEXER_ID);
if (indexerId != null) {
return indexerId;
}
return Platform.getPreferencesService().getString(DLTKCore.PLUGIN_ID,
DLTKCore.INDEXER_ID, null, null);
}
public static IIndexerParticipant getIndexerParticipant(IIndexer indexer,
String natureId) {
IConfigurationElement element = indexerParticipants.get(natureId);
if (element != null) {
try {
return (IIndexerParticipant) element
.createExecutableExtension(CLASS_ATTR);
} catch (CoreException e) {
if (DLTKCore.DEBUG) {
e.printStackTrace();
}
}
}
return null;
}
}