| /** |
| * Copyright (c) 2008 IBM Corporation. |
| * 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 Implementation |
| * |
| */ |
| package org.eclipse.ptp.remotetools.environment.core; |
| |
| 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.ptp.remotetools.environment.extension.IChildrenProvider; |
| import org.eclipse.ptp.remotetools.environment.extension.INode; |
| import org.eclipse.ptp.utils.core.extensionpoints.IProcessMemberVisitor; |
| import org.eclipse.ptp.utils.core.extensionpoints.ProcessExtensions; |
| |
| /** |
| * Manage a list of <code>IChildrenProvider</code> contributed by extensions |
| * |
| * @author Hong Chang Lin |
| * |
| */ |
| public class ChildrenProviderManager { |
| |
| private final static String EXT_PROVIDER_ID = "org.eclipse.ptp.remotetools.environment.core.childrenProvider"; |
| |
| private List<IChildrenProvider> providers; |
| |
| public ChildrenProviderManager() { |
| processChildrenProviders(); |
| } |
| |
| public INode[] getChildren(ITargetElement targetElement) { |
| List<INode> children = new ArrayList<INode>(); |
| for (IChildrenProvider provider : providers) { |
| INode[] objs = provider.getChildren(targetElement); |
| for (int i = 0; i < objs.length; i++) { |
| children.add(objs[i]); |
| } |
| } |
| |
| return children.toArray(new INode[0]); |
| } |
| |
| private void processChildrenProviders() { |
| providers = new ArrayList<IChildrenProvider>(); |
| ProcessExtensions.process(EXT_PROVIDER_ID, new IProcessMemberVisitor() { |
| |
| public Object process(IExtension extension, |
| IConfigurationElement member) { |
| Object mprovider; |
| try { |
| |
| mprovider = member.createExecutableExtension("class"); //$NON-NLS-1$ |
| if (IChildrenProvider.class.isAssignableFrom(mprovider |
| .getClass())) { |
| providers.add((IChildrenProvider) mprovider); //$NON-NLS-1$ |
| } |
| } catch (CoreException e) { |
| mprovider = null; |
| } |
| |
| return mprovider; |
| } |
| |
| }); |
| } |
| } |