"""
This module provides the foundation of job elements.
"""


class PipelineElement(object):
    """
    This class is the base class for all objects participating in the
    transformation pipeline.
    """
    def __init__(self):
        self.out = {}

        self.prehooks = []
        self.posthooks = []


class NotRunnable(object):
    """
    This represents a pipeline element that can't be run.
    """
    def run(self):
        # TODO: Add logging?
        raise ValueError("{0} can't be run!".format(self.__class__.__name__))

class Filter(PipelineElement):
    pass


class Tool(NotRunnable, PipelineElement):
    pass


class Workload(NotRunnable, PipelineElement):
    exports = set(('stdout', 'stderr', 'exit code'))
    pass

@@ -534,16 +534,17 @@
 me__))%0A%0A
+%0A
 class Fi
@@ -627,119 +627,548 @@
     
-pass%0A%0A%0Aclass Workload(NotRunnable, PipelineElement):%0A    exports = set(('stdout', 'stderr', 'exit code'))%0A    pass%0A
+%22%22%22%0A    This represents a Tool of the pipeline%0A    %22%22%22%0A    @property%0A    def arguments(self):%0A        %22%22%22%0A        The arguments the jvm has to include to use the tool.%0A        %22%22%22%0A        raise NotImplementedError(%22Tools must implement this%22)%0A%0A%0Aclass Workload(NotRunnable, PipelineElement):%0A    exports = set(('stdout', 'stderr', 'exit code'))%0A    @property%0A    def arguments(self):%0A        %22%22%22%0A        The arguments the jvm has to include to execute the workloads.%0A        %22%22%22%0A        raise NotImplementedError(%22Workloads must implement this%22)

add arguments to Tool/Workload interface.