Jdk6JavaProcessManager.java

package org.cyclopsgroup.jmxterm.jdk6;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.Validate;
import org.cyclopsgroup.jmxterm.JavaProcess;
import org.cyclopsgroup.jmxterm.JavaProcessManager;
import org.cyclopsgroup.jmxterm.utils.WeakCastUtils;

/**
 * JDK6 specific java process manager
 *
 * @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
 */
public class Jdk6JavaProcessManager extends JavaProcessManager {
  private final StaticLocalVirtualMachine staticVm;

  public Jdk6JavaProcessManager(ClassLoader classLoader)
      throws SecurityException, NoSuchMethodException, ClassNotFoundException {
    Validate.notNull(classLoader, "ClassLoader can't be NULL");
    Class<?> originalClass = classLoader.loadClass(LocalVirtualMachine.ORIGINAL_CLASS_NAME);
    staticVm = WeakCastUtils.staticCast(originalClass, StaticLocalVirtualMachine.class);
  }

  @Override
  public JavaProcess get(int pid) {
    Map<Integer, Object> lvms = staticVm.getAllVirtualMachines();
    Object vm = lvms.get(pid);
    if (vm == null) {
      return null;
    }
    try {
      return new Jdk6JavaProcess(WeakCastUtils.cast(vm, LocalVirtualMachine.class));
    } catch (SecurityException e) {
      throw new RuntimeException("Can't cast " + vm + " to LocalVirtualMachine", e);
    } catch (NoSuchMethodException e) {
      throw new RuntimeException("Can't cast " + vm + " to LocalVirtualMachine", e);
    }
  }

  @Override
  public List<JavaProcess> list() {
    Map<Integer, Object> lvms = staticVm.getAllVirtualMachines();
    List<JavaProcess> result = new ArrayList<JavaProcess>(lvms.size());
    for (Object lvm : lvms.values()) {
      LocalVirtualMachine vm;
      try {
        vm = WeakCastUtils.cast(lvm, LocalVirtualMachine.class);
        result.add(new Jdk6JavaProcess(vm));
      } catch (SecurityException e) {
        throw new RuntimeException("Can't cast " + lvm + " to LocalVirtualMachine", e);
      } catch (NoSuchMethodException e) {
        throw new RuntimeException("Can't cast " + lvm + " to LocalVirtualMachine", e);
      }
    }
    return result;
  }
}