Changeset 1357

Show
Ignore:
Timestamp:
06/11/07 05:34:44 (1 year ago)
Author:
arj..@yirdis.nl
Message:

fixed checkmetamodel plugin

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/plugins/checkmetamodel/__init__.py

    r365 r1357  
    11# vim:sw=4:et 
    22 
    3 import gaphor.plugin 
    43from checkmodelgui import CheckModelWindow 
    5 from checkmodel import check_associations, check_attributes 
    6  
    7 class CheckMetamodelAction(gaphor.plugin.Action): 
    8  
    9     def execute(self): 
    10         print 'CheckMetamodelAction' 
    11         # TODO: override checkmodel.report 
    12         cw = CheckModelWindow() 
    13         cw.construct() 
    14         self.window.add_transient_window(cw) 
    15         cw.run() 
  • gaphor/trunk/gaphor/plugins/checkmetamodel/checkmodel.py

    r1243 r1357  
    1 # vim:sw=4:et 
    21 
    3 from gaphor import storage 
    42from gaphor import UML 
    5 from gaphor.core import inject 
    63from os import path 
    74 
     
    3027 
    3128 
    32 def check_classes(): 
    33     classes = UML.select(lambda e: e.isKindOf(UML.Class)) 
     29def check_classes(element_factory): 
     30    classes = element_factory.select(lambda e: e.isKindOf(UML.Class)) 
    3431    names = [ c.name for c in classes ] 
    3532    for c in classes: 
     
    3835     
    3936 
    40 def check_association_end_subsets(end): 
    41     subsets = get_subsets(end.taggedValue and end.taggedValue.value or '') 
    42     opposite_subsets = get_subsets(end.opposite.taggedValue and end.opposite.taggedValue.value or '') 
    43     subset_properties = UML.select(lambda e: e.isKindOf(UML.Property) and e.name in subsets) 
     37def check_association_end_subsets(element_factory, end): 
     38    subsets = get_subsets(end.taggedValue and end.taggedValue[0].value or '') 
     39    opposite_subsets = get_subsets(end.opposite.taggedValue and end.opposite.taggedValue[0].value or '') 
     40    subset_properties = element_factory.select(lambda e: e.isKindOf(UML.Property) and e.name in subsets) 
    4441 
    4542    # TODO: check if properties belong to a superclass of the end's class 
     
    6259                report(end, 'Association end %s has has a bigger upper value than subse %s' % (end.name, p.name)) 
    6360 
    64 def check_association_end(end): 
    65     check_association_end_subsets(end) 
     61def check_association_end(element_factory, end): 
     62    check_association_end_subsets(element_factory, end) 
    6663 
    67 def check_associations(): 
    68     for a in UML.select(lambda e: e.isKindOf(UML.Association)): 
     64def check_associations(element_factory): 
     65    for a in element_factory.select(lambda e: e.isKindOf(UML.Association)): 
    6966        assert len(a.memberEnd) == 2 
    7067        head = a.memberEnd[0] 
    7168        tail = a.memberEnd[1] 
    72         check_association_end(head) 
    73         check_association_end(tail) 
     69        check_association_end(element_factory, head) 
     70        check_association_end(element_factory, tail) 
    7471 
    75 def check_attributes(): 
    76     for a in UML.select(lambda e: e.isKindOf(UML.Property) and not e.association): 
     72def check_attributes(element_factory): 
     73    for a in element_factory.select(lambda e: e.isKindOf(UML.Property) and not e.association): 
    7774        if not a.typeValue or not a.typeValue.value: 
    7875            report(a,'Attribute has no type: %s' % a.name) 
    7976        elif a.typeValue.value.lower() not in ('string', 'boolean', 'integer', 'unlimitednatural'): 
    80             report(a, 'Invalid attribute type: %s' % a.taggedValue.value) 
     77            report(a, 'Invalid attribute type: %s' % a.typeValue.value) 
    8178 
    8279# TODO: Check the sanity of the generated data model. 
     
    8986 
    9087if __name__ == '__main__': 
    91     storage.load(path.join('gaphor', 'UML', 'uml2.gaphor')) 
    92     check_associations() 
    93     check_attributes() 
     88    from gaphor.UML import ElementFactory 
     89    from gaphor import storage 
    9490 
     91    element_factory = ElementFactory() 
     92    storage.load(path.join('gaphor', 'UML', 'uml2.gaphor'), factory=element_factory) 
     93    check_associations(element_factory) 
     94    check_attributes(element_factory) 
     95 
     96 
     97# vim:sw=4:et 
  • gaphor/trunk/gaphor/plugins/checkmetamodel/checkmodelgui.py

    r1222 r1357  
    1 # vim:sw=4:et 
    2  
    3 """A GUI for the checkmodel plugin. 
     1""" 
     2A GUI for the checkmodel plugin. 
    43""" 
    54 
     
    76import gobject 
    87import gtk 
    9 import gaphor 
    10 from gaphor.ui.abstractwindow import AbstractWindow 
    11 from gaphor.plugin import Application 
     8from zope import interface, component 
     9from gaphor.core import _, inject, action, build_action_group 
     10from gaphor.interfaces import IService, IActionProvider 
    1211import checkmodel 
    1312 
     
    1615REASON_COLUMN = 2 
    1716 
    18 class CheckModelWindow(AbstractWindow): 
     17class CheckModelWindow(object): 
    1918 
    20     menu = ('_File', ('FileClose',)) 
     19    interface.implements(IService, IActionProvider) 
     20 
     21    element_factory = inject('element_factory') 
     22    gui_manager = inject('gui_manager') 
     23 
     24    menu_xml = """ 
     25      <ui> 
     26        <menubar action="mainwindow"> 
     27          <menu action="tools"> 
     28            <menuitem action="tools-open-check-model" /> 
     29          </menu> 
     30        </menubar> 
     31      </ui>""" 
    2132 
    2233    def __init__(self): 
    23         AbstractWindow.__init__(self) 
    2434        # Override the report method 
    2535        checkmodel.report = self.on_report 
     36        self.action_group = build_action_group(self) 
     37 
     38    def init(self, app): 
     39        pass 
     40 
     41    def shutdown(self): 
     42        pass 
     43 
     44    @action(name='tools-open-check-model', label='Check UML model') 
     45    def open(self): 
     46        self.construct() 
     47        self.run() 
    2648 
    2749    def construct(self): 
     
    5173        treeview.show() 
    5274 
    53         self._construct_window(name='checkmodel', 
    54                                title='Check Model', 
    55                                size=(400, 400), 
    56                                contents=scrolled_window) 
     75        #self._construct_window(name='checkmodel', 
     76        #                       title='Check Model', 
     77        #                       size=(400, 400), 
     78        #                       contents=scrolled_window) 
    5779        self.model = model 
    5880        self.treeview = treeview 
    5981 
     82        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     83        self.window.connect('destroy', self.on_destroy) 
     84        self.window.set_title('Gaphor - Check Model') 
     85        self.window.add(scrolled_window) 
     86        self.window.set_size_request(400, 400) 
     87        self.window.show() 
     88         
     89         
    6090    def run(self): 
    6191        # TODO: Let this run in a Thread(?) 
    62         checkmodel.check_classes(
    63         checkmodel.check_attributes(
    64         checkmodel.check_associations(
     92        checkmodel.check_classes(self.element_factory
     93        checkmodel.check_attributes(self.element_factory
     94        checkmodel.check_associations(self.element_factory
    6595 
    6696    def on_report(self, element, message): 
     
    79109        print 'Looking for element', element 
    80110        if element.presentation: 
    81             main_window = Application.get_service('gui_manager').main_window 
     111            main_window = self.gui_manager.main_window 
    82112            presentation = element.presentation[0] 
    83             diagram = presentation.canvas.diagram 
     113            try: 
     114                diagram = presentation.canvas.diagram 
     115            except AttributeError: 
     116                presentation = element.namespace.presentation[0] 
     117                diagram = presentation.canvas.diagram 
    84118            diagram_tab = main_window.show_diagram(diagram) 
    85             view = diagram_tab.get_view() 
    86             view_item = view.find_view_item(presentation) 
    87             diagram_tab.get_view().focus(view_item) 
     119            diagram_tab.view.focused_item = presentation 
    88120 
     121    def on_destroy(self, window): 
     122        self.window = None 
     123        self.treeview = None 
     124 
     125# vim:sw=4:et 
  • gaphor/trunk/setup.py

    r1351 r1357  
    131131            'diagram_layout = gaphor.plugins.diagramlayout:DiagramLayout', 
    132132            'pynsource = gaphor.plugins.pynsource:PyNSource', 
     133            'check_metamodel = gaphor.plugins.checkmetamodel:CheckModelWindow', 
    133134        ], 
    134135        'gaphor.uicomponents': [