class JVM(object):
    """
    Base class for JVMs.

    Inheriting classes must implement:
      - ``get_commandline(*args, **options)`` to return a commandline that
          contains the options and runs the JVM
    """
    def get_commandline(self, *args, **options):
        """
        Return a commandline that can be executed by ``subprocess.Popen``.

        :param args: positional arguments, will be at the end
        :param options: options which should be presend in the command line
        :returns: commandline suitable for ``subprocess.Popen``
        :rtype: list
        """
        raise NotImplementedError("get_commandline has to be implemented by actual jvms")

class OpenJDK(JVM):
    #TODO
    pass

class J9(JVM):
    #TODO
    pass

class Jikes(JVM):
    #TODO
    pass

class SunClient(JVM):
    #TODO
    pass

class SunServer(JVM):
    #TODO
    pass

@@ -28,143 +28,299 @@
     
-Base
+This
  class 
-for
+represents a
  JVM
-s
 .%0A
-%0A    Inheriting classes must implement:%0A      - %60%60get_commandline(*args, **options)%60%60 to return a commandline th
+    %22%22%22%0A%0A    def __init__(self, path, options=%22%22):%0A        %22%22%22%0A        :param path: path to jvm executable relative to basepath%0A        :param options: string of options that will be passed to jvm%0A        %22%22%22%0A%0A        self.basepath = '/'%0A        self.path = p
 at
+h
 %0A   
@@ -328,78 +328,122 @@
     
-  contains the options and runs the JVM%0A    %22%22%22%0A    def get_commandlin
+# XXX: a passed classpath must be filtered and readded before run%0A        self.options = options%0A%0A    def configur
 e(se
@@ -455,19 +455,8 @@
 args
-, **options
 ):%0A 
@@ -478,74 +478,55 @@
     
-Return a commandline that can be executed by %60%60subprocess.Popen%60%60.
+Configure jvm options that allows %60args%60 to run
 %0A%0A  
@@ -542,495 +542,1113 @@
 ram 
+*
 args: 
-positional arguments, will be at the end%0A        :param options: options which should be presend in the command line%0A        :returns: commandline suitable for %60%60subprocess.Popen%60%60%0A        :rtype: list%0A        %22%22%22%0A        raise NotImplementedError(%22get_commandline has to be implemented by actual jvms%22)%0A%0Aclass OpenJDK(JVM):%0A    #TODO%0A    pass%0A%0Aclass J9(JVM):%0A    #TODO%0A    pass%0A%0Aclass Jikes(JVM):%0A    #TODO%0A    pass%0A%0Aclass SunClient(JVM):%0A    #TODO%0A    pass%0A%0Aclass SunServer(JVM):
+:class:%60Tool%60 or :class:%60Program%60 instances that should be run.%0A        %22%22%22%0A        #TODO%0A        pass%0A%0A    def run(self):%0A        %22%22%22%0A        Run the jvm with the current configuration.%0A        %22%22%22%0A        #TODO%0A        pass%0A%0A    @property%0A    def cmdline(self):%0A        #TODO%0A        pass%0A%0Aclass WrappedJVM(JVM):%0A    %22%22%22%0A    This class is an abstract base class for a JVM that is wrapped by another%0A    Program.%0A%0A    Inheriting classes must expose this attributes:%0A%0A      - %60%60out%60%60: dictionary that maps logical output names to paths of output%0A        files%0A      - %60%60exports%60%60: set of logical outputs (valid keys for %60%60out%60%60)%0A    %22%22%22%0A    def __init__(self):%0A        %22%22%22%0A        Inheriting classes must:%0A%0A          - have compatible arguments with JVM.__init__%0A          - call JVM.__init__%0A        %22%22%22%0A        raise NotImplementedError(%22must be implemented%22)%0A%0A    def run(self):%0A        %22%22%22%0A        Run with wrapping.%0A        %22%22%22%0A        raise NotImplementedError(%22must be implemented%22)%0A%0Aclass ValgrindJVM(WrappedJVM):%0A    %22%22%22%0A    This class represents a JVM which is called by valgrind.%0A    %22%22%22
 %0A   
@@ -1654,17 +1654,16 @@
   #TODO%0A    pass
-%0A

Move to new jvm specification.