
import sys

import rdflib
import qname
import objectmodel

def init(self, kwargs, r_or_w, default_stream):
    """ make sure self.graph, .map, and .stream are set up, from
    kwargs or defaults.
    """

    self.__dict__.update(kwargs)
    
    try:
        self.graph = kwargs['graph']
    except KeyError:
        self.graph = rdflib.ConjunctiveGraph()

    try:
        self.map = kwargs['map']
    except KeyError:
        self.map = qname.Map(defaults=[qname.common])

    try:
        self.stream = kwargs['stream']
    except KeyError:
        try:
            filename = kwargs['filename']
            self.stream = open(filename, r_or_w)
        except KeyError:
            self.stream = default_stream

    
class Parser (object) :

    """

    your init should be:

    def __init__(self, **kwargs):
        super(YOURCLASS, self).__init__(**kwargs)   ?
        # any code you want, here.

    """

    def __init__(self, **kwargs):
        init(self, kwargs, "r", sys.stdin)
        

class Generator (object) :

    """

    your init should be:

    def __init__(self, **kwargs):
        super(YOURCLASS, self).__init__(**kwargs)   ?
        # any code you want, here.

    """

    def __init__(self, **kwargs):
        # print >>sys.stderr, "GEN running"
        init(self, kwargs, "w", sys.stdout)
        
    def out(self, *obj):
        self.stream.write(" ".join([str(x) for x in obj]))


class ModelGenerator ( Generator ) :

    def __init__(self, **kwargs):
        super(ModelGenerator, self).__init__(**kwargs)
        # print >>sys.stderr, "MoGEN running"
        self.model = getattr(self, "model", objectmodel.ObjectModel())
        
    def writeModel(self, out, model):
        self.stream = out
        self.model = model
        self.run()

