Package net.jmesnil.jmx.core

Source Code of net.jmesnil.jmx.core.ExtensionManager

/*******************************************************************************
* Copyright (c) 2006 Jeff Mesnil
* 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:
*    "Rob Stryker" <rob.stryker@redhat.com> - Initial implementation
*******************************************************************************/
package net.jmesnil.jmx.core;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;

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.IExtensionRegistry;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.InvalidRegistryObjectException;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;

/**
* This class is in charge of loading all extensions
* declared in this application, as well as providing
* getters so others can gain access to them.
*
*/
public class ExtensionManager {
  public static final String MBEAN_CONNECTION = "net.jmesnil.jmx.core.MBeanServerConnectionProvider"; //$NON-NLS-1$
  public static final String CLASS = "class"; //$NON-NLS-1$
  private static HashMap<String, IConnectionProvider> providers;

  public static IConnectionProvider[] getProviders() {
    if (providers == null)
      loadExtensions();
    return providers.values().toArray(new IConnectionProvider[providers.values().size()]);
  }

  public static IConnectionProvider getProvider(String id) {
    if (providers == null)
      loadExtensions();
    return providers.get(id);
  }

  public static IConnectionWrapper[] getAllConnections() {
    if (providers == null)
      loadExtensions();
    ArrayList<IConnectionWrapper> l = new ArrayList<IConnectionWrapper>();
    for( Iterator<IConnectionProvider> i = providers.values().iterator(); i.hasNext();) {
      l.addAll(Arrays.asList(i.next().getConnections()));
    }
    return l.toArray(new IConnectionWrapper[l.size()]);
  }

  public static void loadExtensions() {
    HashMap<String, IConnectionProvider> tmp = new HashMap<String, IConnectionProvider>();
    IExtension[] extensions = findExtension(MBEAN_CONNECTION);
    for (int i = 0; i < extensions.length; i++) {
      IConfigurationElement elements[] = extensions[i]
          .getConfigurationElements();
      for (int j = 0; j < elements.length; j++) {
        try {
          IConnectionProvider o = (IConnectionProvider) elements[j]
              .createExecutableExtension(CLASS);
          tmp.put(o.getId(),o);
        } catch (InvalidRegistryObjectException e) {
          IStatus s = new Status(IStatus.ERROR, JMXActivator.PLUGIN_ID, JMXCoreMessages.ExtensionManagerError1,e);
          JMXActivator.log(s);
        } catch (CoreException e) {
          IStatus s = new Status(IStatus.ERROR, JMXActivator.PLUGIN_ID, JMXCoreMessages.ExtensionManagerError1,e);
          JMXActivator.log(s);
        }
      }
    }
    providers = tmp;
  }

  private static IExtension[] findExtension(String extensionId) {
    IExtensionRegistry registry = Platform.getExtensionRegistry();
    IExtensionPoint extensionPoint = registry
        .getExtensionPoint(extensionId);
    return extensionPoint.getExtensions();
  }

  public static void addConnectionProviderListener(IConnectionProviderListener listener) {
    IConnectionProvider[] providers2 = getProviders();
    for( int i = 0; i < providers2.length; i++)
      providers2[i].addListener(listener);
  }
  public static void removeConnectionProviderListener(IConnectionProviderListener listener) {
    IConnectionProvider[] providers2 = getProviders();
    for( int i = 0; i < providers2.length; i++)
      providers2[i].removeListener(listener);
  }
}
TOP

Related Classes of net.jmesnil.jmx.core.ExtensionManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.