Changeset 2337

Show
Ignore:
Timestamp:
07/16/08 07:00:51 (5 months ago)
Author:
arj..@yirdis.nl
Message:

Added backupp service.

It doesn't really work yet, though, since instancemethods can not be stored, and they're used all over the place.

Replacing them with objects is an option, but an ugly one (to java-ish)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/UML/element.py

    r2332 r2337  
    11#!/usr/bin/env python 
    2 # vim:sw=4:et 
    32""" 
    43Base class for UML model elements. 
     
    1211from gaphor.misc import uniqueid 
    1312from properties import umlproperty, association 
     13 
    1414 
    1515class Element(object): 
     
    3636        self.__in_unlink = mutex.mutex() 
    3737 
     38 
    3839    id = property(lambda self: self._id, doc='Id') 
     40 
    3941 
    4042    factory = property(lambda self: self._factory, 
    4143                       doc="The factory that created this element") 
     44 
    4245 
    4346    def umlproperties(self): 
     
    5356                    yield prop 
    5457 
     58 
    5559    def save(self, save_func): 
    5660        """ 
     
    5963        for prop in self.umlproperties(): 
    6064            prop.save(self, save_func) 
     65 
    6166 
    6267    def load(self, name, value): 
     
    7378            prop.load(self, value) 
    7479 
     80 
    7581    def postload(self): 
    7682        """ 
     
    7985        for prop in self.umlproperties(): 
    8086            prop.postload(self) 
     87 
    8188 
    8289    def unlink(self): 
     
    102109        return isinstance(self, class_) 
    103110 
     111 
    104112    def isTypeOf(self, other): 
    105113        """ 
     
    107115        """ 
    108116        return type(self) == type(other) 
     117 
     118 
     119    def __getstate__(self): 
     120        d = dict(self.__dict__) 
     121        try: 
     122            del d['_factory'] 
     123        except KeyError: 
     124            pass 
     125        return d 
    109126 
    110127 
     
    116133    psyco.bind(Element) 
    117134 
     135# vim:sw=4:et 
  • gaphor/trunk/gaphor/UML/elementfactory.py

    r2276 r2337  
    7171    def create(self, type): 
    7272        """ 
    73         Create a new model element of type type
     73        Create a new model element of type ``type``
    7474        """ 
    7575        obj = self.create_as(type, uniqueid.generate_id()) 
     
    8989        return obj 
    9090 
     91    def bind(self, element): 
     92        """ 
     93        Bind an already created element to the element factory. 
     94        The element may not be bound to another factory already. 
     95        """ 
     96        if hasattr(element, '_factory') and element._factory: 
     97            raise AttributeError, "element is already bound" 
     98        if self._elements.get(element.id): 
     99            raise AttributeError, "an element already exists with the same id" 
     100 
     101        element._factory = self 
     102        self._elements[element.id] = element 
     103         
     104 
    91105    def size(self): 
    92106        """ 
     
    95109        return len(self._elements) 
    96110 
     111 
    97112    def lookup(self, id): 
    98113        """ 
     
    101116        return self._elements.get(id) 
    102117 
     118 
    103119    __getitem__ = lookup 
     120 
    104121 
    105122    def __contains__(self, element): 
    106123        return self.lookup(element.id) is element 
     124 
    107125 
    108126    def select(self, expression=None): 
     
    118136                    yield e 
    119137 
     138 
    120139    def lselect(self, expression=None): 
    121140        """ 
     
    124143        return list(self.select(expression)) 
    125144 
     145 
    126146    def keys(self): 
    127147        """ 
     
    130150        return self._elements.keys() 
    131151 
     152 
    132153    def iterkeys(self): 
    133154        """ 
     
    136157        return self._elements.iterkeys() 
    137158 
     159 
    138160    def values(self): 
    139161        """ 
     
    142164        return self._elements.values() 
    143165 
     166 
    144167    def itervalues(self): 
    145168        """ 
     
    147170        """ 
    148171        return self._elements.itervalues() 
     172 
    149173 
    150174    def is_empty(self): 
     
    156180        else: 
    157181            return True 
     182 
    158183 
    159184    def flush(self): 
     
    194219            element.__class__ = new_class 
    195220 
     221 
    196222    def notify_model(self): 
    197223        """ 
     
    202228            self._app.handle(ModelFactoryEvent(self)) 
    203229 
     230 
    204231    @component.adapter(IElementEvent) 
    205232    def _element_notify(self, event): 
     
    210237        if self._app: 
    211238            self._app.handle(event.element, event) 
     239 
    212240 
    213241    @component.adapter(IElementDeleteEvent) 
  • gaphor/trunk/gaphor/diagram/simpleitem.py

    r1795 r2337  
    121121    } 
    122122 
    123     def __init__(self, id): 
     123    def __init__(self, id=None): 
    124124        super(Ellipse, self).__init__() 
    125125        self.style = Style(Ellipse.__style__) 
  • gaphor/trunk/setup.py

    r2307 r2337  
    180180            'element_factory = gaphor.UML.elementfactory:ElementFactory', 
    181181            'file_manager = gaphor.services.filemanager:FileManager', 
     182            'backup_service = gaphor.services.backupservice:BackupService', 
    182183            'diagram_export_manager = gaphor.services.diagramexportmanager:DiagramExportManager', 
    183184            'action_manager = gaphor.services.actionmanager:ActionManager',