| /******************************************************************************* |
| * Copyright (c) 2000, 2009 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.ui.internal.texteditor.spelling; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.Platform; |
| |
| import org.eclipse.ui.internal.texteditor.TextEditorPlugin; |
| |
| import org.eclipse.ui.texteditor.spelling.SpellingEngineDescriptor; |
| |
| /** |
| * A spelling engine registry used to access the |
| * {@link SpellingEngineDescriptor}s that describe the spelling engine |
| * extensions. |
| * |
| * @see SpellingEngineDescriptor |
| * @since 3.1 |
| */ |
| public class SpellingEngineRegistry { |
| |
| /** |
| * Extension id of spelling engine extension point. |
| * (value <code>"spellingEngine"</code>). |
| */ |
| public static final String SPELLING_ENGINE_EXTENSION_POINT= "spellingEngine"; //$NON-NLS-1$ |
| |
| /** Ids mapped to descriptors */ |
| private Map<String, SpellingEngineDescriptor> fDescriptorsMap; |
| |
| /** Default descriptor or <code>null</code> */ |
| private SpellingEngineDescriptor fDefaultDescriptor; |
| |
| /** All descriptors */ |
| private SpellingEngineDescriptor[] fDescriptors; |
| |
| /** <code>true</code> iff the extensions have been loaded at least once */ |
| private boolean fLoaded= false; |
| |
| /** |
| * Returns the descriptor with the given id or <code>null</code> if |
| * none could be found. |
| * |
| * @param id the id |
| * @return the descriptor with the given id or <code>null</code> |
| */ |
| public SpellingEngineDescriptor getDescriptor(String id) { |
| ensureExtensionsLoaded(); |
| return fDescriptorsMap.get(id); |
| } |
| |
| /** |
| * Returns the default descriptor. |
| * |
| * @return the default descriptor |
| */ |
| public SpellingEngineDescriptor getDefaultDescriptor() { |
| ensureExtensionsLoaded(); |
| return fDefaultDescriptor; |
| } |
| |
| /** |
| * Returns all descriptors. |
| * |
| * @return all descriptors |
| */ |
| public SpellingEngineDescriptor[] getDescriptors() { |
| ensureExtensionsLoaded(); |
| return fDescriptors; |
| } |
| |
| /** |
| * Reads all extensions. |
| * <p> |
| * This method can be called more than once in order to reload |
| * from a changed extension registry. |
| * </p> |
| */ |
| public synchronized void reloadExtensions() { |
| List<SpellingEngineDescriptor> descriptors= new ArrayList<>(); |
| fDescriptorsMap= new HashMap<>(); |
| fDefaultDescriptor= null; |
| IConfigurationElement[] elements= Platform.getExtensionRegistry().getConfigurationElementsFor(TextEditorPlugin.PLUGIN_ID, SPELLING_ENGINE_EXTENSION_POINT); |
| for (int i= 0; i < elements.length; i++) { |
| SpellingEngineDescriptor descriptor= new SpellingEngineDescriptor(elements[i]); |
| descriptors.add(descriptor); |
| fDescriptorsMap.put(descriptor.getId(), descriptor); |
| if (fDefaultDescriptor == null && descriptor.isDefault()) |
| fDefaultDescriptor= descriptor; |
| } |
| fDescriptors= descriptors.toArray(new SpellingEngineDescriptor[descriptors.size()]); |
| fLoaded= true; |
| if (fDefaultDescriptor == null && fDescriptors.length > 0) |
| fDefaultDescriptor= fDescriptors[0]; |
| } |
| |
| /** |
| * Ensures the extensions have been loaded at least once. |
| */ |
| private void ensureExtensionsLoaded() { |
| if (!fLoaded) |
| reloadExtensions(); |
| } |
| } |