// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.sdk.wip.eclipse; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.RegistryFactory; import org.chromium.sdk.wip.WipBackend; /** * A helper class that fetches all available implementations of {@link WipBackend} using Eclipse * framework. */ public class BackendRegistry { public static final BackendRegistry INSTANCE = new BackendRegistry(); public List<? extends WipBackend> getBackends() { IExtensionPoint extensionPoint = RegistryFactory.getRegistry().getExtensionPoint( WipBackExtensionPoint.ID); IExtension[] extensions = extensionPoint.getExtensions(); List<WipBackend> result = new ArrayList<WipBackend>(extensions.length); for (IExtension extension : extensions) { for (IConfigurationElement element : extension.getConfigurationElements()) { if (!WipBackExtensionPoint.ELEMENT_NAME.equals(element.getName())) { continue; } Object obj; try { obj = element.createExecutableExtension(WipBackExtensionPoint.CLASS_PROPERTY); } catch (CoreException e) { throw new RuntimeException(e); } WipBackend backend = (WipBackend) obj; result.add(backend); } } return result; } }