Changeset 1357
- Timestamp:
- 06/11/07 05:34:44 (1 year ago)
- Files:
-
- gaphor/trunk/gaphor/plugins/checkmetamodel/__init__.py (modified) (1 diff)
- gaphor/trunk/gaphor/plugins/checkmetamodel/checkmodel.py (modified) (5 diffs)
- gaphor/trunk/gaphor/plugins/checkmetamodel/checkmodelgui.py (modified) (5 diffs)
- gaphor/trunk/setup.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/gaphor/plugins/checkmetamodel/__init__.py
r365 r1357 1 1 # vim:sw=4:et 2 2 3 import gaphor.plugin4 3 from checkmodelgui import CheckModelWindow 5 from checkmodel import check_associations, check_attributes6 7 class CheckMetamodelAction(gaphor.plugin.Action):8 9 def execute(self):10 print 'CheckMetamodelAction'11 # TODO: override checkmodel.report12 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:et2 1 3 from gaphor import storage4 2 from gaphor import UML 5 from gaphor.core import inject6 3 from os import path 7 4 … … 30 27 31 28 32 def check_classes( ):33 classes = UML.select(lambda e: e.isKindOf(UML.Class))29 def check_classes(element_factory): 30 classes = element_factory.select(lambda e: e.isKindOf(UML.Class)) 34 31 names = [ c.name for c in classes ] 35 32 for c in classes: … … 38 35 39 36 40 def check_association_end_subsets(e nd):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)37 def 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) 44 41 45 42 # TODO: check if properties belong to a superclass of the end's class … … 62 59 report(end, 'Association end %s has has a bigger upper value than subse %s' % (end.name, p.name)) 63 60 64 def check_association_end(e nd):65 check_association_end_subsets(e nd)61 def check_association_end(element_factory, end): 62 check_association_end_subsets(element_factory, end) 66 63 67 def check_associations( ):68 for a in UML.select(lambda e: e.isKindOf(UML.Association)):64 def check_associations(element_factory): 65 for a in element_factory.select(lambda e: e.isKindOf(UML.Association)): 69 66 assert len(a.memberEnd) == 2 70 67 head = a.memberEnd[0] 71 68 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) 74 71 75 def check_attributes( ):76 for a in UML.select(lambda e: e.isKindOf(UML.Property) and not e.association):72 def check_attributes(element_factory): 73 for a in element_factory.select(lambda e: e.isKindOf(UML.Property) and not e.association): 77 74 if not a.typeValue or not a.typeValue.value: 78 75 report(a,'Attribute has no type: %s' % a.name) 79 76 elif a.typeValue.value.lower() not in ('string', 'boolean', 'integer', 'unlimitednatural'): 80 report(a, 'Invalid attribute type: %s' % a.t aggedValue.value)77 report(a, 'Invalid attribute type: %s' % a.typeValue.value) 81 78 82 79 # TODO: Check the sanity of the generated data model. … … 89 86 90 87 if __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 94 90 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 """ 2 A GUI for the checkmodel plugin. 4 3 """ 5 4 … … 7 6 import gobject 8 7 import gtk 9 import gaphor 10 from gaphor. ui.abstractwindow import AbstractWindow11 from gaphor. plugin import Application8 from zope import interface, component 9 from gaphor.core import _, inject, action, build_action_group 10 from gaphor.interfaces import IService, IActionProvider 12 11 import checkmodel 13 12 … … 16 15 REASON_COLUMN = 2 17 16 18 class CheckModelWindow( AbstractWindow):17 class CheckModelWindow(object): 19 18 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>""" 21 32 22 33 def __init__(self): 23 AbstractWindow.__init__(self)24 34 # Override the report method 25 35 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() 26 48 27 49 def construct(self): … … 51 73 treeview.show() 52 74 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) 57 79 self.model = model 58 80 self.treeview = treeview 59 81 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 60 90 def run(self): 61 91 # 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) 65 95 66 96 def on_report(self, element, message): … … 79 109 print 'Looking for element', element 80 110 if element.presentation: 81 main_window = Application.get_service('gui_manager').main_window111 main_window = self.gui_manager.main_window 82 112 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 84 118 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 88 120 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 131 131 'diagram_layout = gaphor.plugins.diagramlayout:DiagramLayout', 132 132 'pynsource = gaphor.plugins.pynsource:PyNSource', 133 'check_metamodel = gaphor.plugins.checkmetamodel:CheckModelWindow', 133 134 ], 134 135 'gaphor.uicomponents': [
