Changeset 12
- Timestamp:
- 12/24/07 19:03:20 (1 year ago)
- Files:
-
- project/trunk/src/Pyxoo/Events/broadcaster.py (modified) (1 diff)
- project/trunk/src/Pyxoo/Model/locator.py (modified) (3 diffs)
- project/trunk/src/Pyxoo/Model/model.py (modified) (1 diff)
- project/trunk/src/Pyxoo/Plugin/abstract.py (modified) (1 diff)
- project/trunk/src/Pyxoo/View/locator.py (modified) (3 diffs)
- project/trunk/src/Pyxoo/View/view.py (modified) (1 diff)
- project/trunk/test/model/TestModelLocator.py (modified) (3 diffs)
- project/trunk/test/view/TestViewLocator.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
project/trunk/src/Pyxoo/Events/broadcaster.py
r7 r12 82 82 83 83 def addEventListener(self, eventType, listener, *args): 84 """addEventListener(string, instance ):boolean84 """addEventListener(string, instance, ...):boolean 85 85 Adds passed-in listener for receiving passed-in event type.""" 86 86 if not Type.isString(eventType): project/trunk/src/Pyxoo/Model/locator.py
r10 r12 23 23 24 24 from Pyxoo.Core.locator import Locator 25 from Pyxoo.Model.model import Model25 from Pyxoo.Model.model import AbstractModel 26 26 from Pyxoo.Plugin.plugin import Plugin, NullPlugin 27 27 from Pyxoo.Log.stringifier import PyxooStringifier … … 31 31 32 32 def __new__(cls, owner=NullPlugin()): 33 """__new__(Plugin):ModelLocator""" 33 34 if not cls.__M.__contains__(owner): 34 tmp = object.__new__(cls , owner)35 t ype(tmp).__init__(tmp,owner)35 tmp = object.__new__(cls) 36 tmp.__init(owner) 36 37 cls.__M.__setitem__(owner, tmp) 37 38 return cls.__M.get(owner) 38 39 39 def __init __(self, owner=NullPlugin()):40 """__init __(Object)41 Constructs aModelLocator implementation."""40 def __init(self, owner=NullPlugin()): 41 """__init(Plugin) 42 Initialize ModelLocator implementation.""" 42 43 if not isinstance(owner, Plugin): 43 44 raise TypeError("owner param must be a Plugin") … … 68 69 """registerModel(String, Model):void 69 70 Registers passed-in model associated to passed-in key.""" 70 if not isinstance(model, Model):71 if not isinstance(model, AbstractModel): 71 72 raise TypeError("model param must be an instance of Model class.") 73 if self.isRegistered( key ): 74 return False 72 75 self.__models.__setitem__(key, model) 76 return True 73 77 74 78 def unregisterModel(self,key): project/trunk/src/Pyxoo/Model/model.py
r7 r12 22 22 __author__ = Pyxoo.__author__ 23 23 24 from Pyxoo.Events.broadcaster import EventBroadcaster 25 from Pyxoo.Events.event import StringEvent 26 from Pyxoo.Plugin.plugin import NullPlugin 24 27 25 class Model: 26 def handleEvent(self, event): 27 raise NotImplementedError 28 29 class AbstractModel: 30 onInitEVENT = "onInit" 31 __owner = None 32 __name = None 28 33 29 def onInit(self): 30 raise NotImplementedError 34 def __init__( self, owner=None, name=None ): 35 """__init__(Plugin, String)""" 36 self.__eventBroadcaster = EventBroadcaster( self ) 37 if owner:self.setOwner( owner ) 38 if name:self.setName( name ) 31 39 32 def notifyChanged(self, event): 33 raise NotImplementedError 40 def handleEvent( self, event ): 41 """handleEvent(IEvent):void""" 42 pass 34 43 35 def release(self): 36 raise NotImplementedError 44 def onInit( self ): 45 """onInit():void""" 46 self.notifyChanged( StringEvent( AbstractModel.onInitEVENT, self.getName() ) ) 37 47 38 def getOwner(self): 39 raise NotImplementedError 48 def notifyChanged( self, event ): 49 """notifyChanged(IEvent):void""" 50 self.__eventBroadcaster.broadcast( event ) 40 51 41 def setOwner(self, owner): 42 raise NotImplementedError 52 def release( self ): 53 """release():void""" 54 self.__eventBroadcaster.removeAllListeners() 55 from Pyxoo.Model.locator import ModelLocator 56 ModelLocator( self.getOwner() ).unregisterModel( self.getName() ) 57 self.__name = None 43 58 44 def getName(self): 45 raise NotImplementedError 59 def getOwner( self ): 60 """getOwner():Plugin""" 61 return self.__owner 46 62 47 def setName(self, name): 48 raise NotImplementedError 63 def setOwner( self, owner ): 64 """setOwner(Plugin):void""" 65 if owner: 66 if not isinstance( owner, Plugin ): 67 raise TypeError( "owner parameter must be a Plugin instance" ) 68 self.__owner = owner 69 else: 70 self.__owner = NullPlugin() 71 72 def getName( self ): 73 """getName():String""" 74 return self.__name 75 76 def setName( self, name ): 77 """setName(String):void""" 78 from Pyxoo.Model.locator import ModelLocator 79 modelLocator = ModelLocator( self.getOwner() ) 80 if not modelLocator.isRegistered( name ): 81 if modelLocator.isRegistered( self.getName() ): 82 modelLocator.unregisterModel( self.getName() ) 83 if modelLocator.registerModel( name, self ): 84 self.__name = name 85 86 def addListener( self, listener ): 87 """addListener(object):boolean""" 88 return self.__eventBroadcaster.addListener( listener ) 89 90 def removeListener( self, listener ): 91 """removeListener(object):boolean""" 92 return self.__eventBroadcaster.removeListener( listener ) 93 94 def addEventListener( self, eventType, listener, *args ): 95 """addEventListener(String, object, ...):boolean""" 96 return self.__eventBroadcaster.addEventListener( eventType, listener, *args ) 97 98 def removeEventListener( self, eventType, listener ): 99 """removeEventListener(String, object):boolean""" 100 return self.__eventBroadcaster.removeEventListener( eventType, listener ) 101 102 def _getBroadcaster( self ): 103 """_getBroadcaster():EventBroadcaster""" 104 return self.__eventBroadcaster 105 106 def _fireprivateEvent( self, event ): 107 """_fireprivateEvent(IEvent):void""" 108 self.getOwner().firePrivateEvent( event ) 109 project/trunk/src/Pyxoo/Plugin/abstract.py
r9 r12 25 25 from Pyxoo.Model.locator import ModelLocator 26 26 from Pyxoo.View.locator import ViewLocator 27 from Pyxoo.Plugin.plugin import Plugin 27 from Pyxoo.Plugin.plugin import Plugin, PluginListener 28 28 from Pyxoo.Plugin.channel import ChannelExpert 29 29 from Pyxoo.Events.event import BasicEvent project/trunk/src/Pyxoo/View/locator.py
r10 r12 23 23 24 24 from Pyxoo.Core.locator import Locator 25 from Pyxoo.View.view import View25 from Pyxoo.View.view import AbstractView 26 26 from Pyxoo.Plugin import plugin 27 27 from Pyxoo.Log.stringifier import PyxooStringifier … … 31 31 32 32 def __new__(cls, owner=plugin.NullPlugin()): 33 """__new__(Plugin):ViewLocator""" 33 34 if not cls.__M.__contains__(owner): 34 tmp = object.__new__(cls , owner)35 t ype(tmp).__init__(tmp,owner)35 tmp = object.__new__(cls) 36 tmp.__init(owner) 36 37 cls.__M.__setitem__(owner, tmp) 37 38 return cls.__M.get(owner) 38 39 39 def __init __(self, owner=plugin.NullPlugin()):40 """__init __(Plugin)41 Constructsa ViewLocator implementation."""40 def __init(self, owner=plugin.NullPlugin()): 41 """__init(Plugin) 42 Initialize a ViewLocator implementation.""" 42 43 if not isinstance(owner, plugin.Plugin): 43 44 raise TypeError("owner param must be a Plugin") … … 66 67 67 68 def registerView(self, key, view): 68 """registerView(string, View): void69 """registerView(string, View):boolean 69 70 Registers passed-in view associated to passed-in key.""" 70 if not isinstance(view, View):71 if not isinstance(view, AbstractView): 71 72 raise TypeError("view param must be an instance of View class.") 72 self.__views.__setitem__(key, view) 73 if self.isRegistered(key): 74 return False 75 else: 76 self.__views.__setitem__(key, view) 77 return True 73 78 74 79 def unregisterView(self, key): project/trunk/src/Pyxoo/View/view.py
r7 r12 22 22 __author__ = Pyxoo.__author__ 23 23 24 from Pyxoo.Plugin.plugin import Plugin 25 from Pyxoo.Events.broadcaster import EventBroadcaster 26 from Pyxoo.Utils import Type 24 27 25 class View:26 def handleEvent(self, event):27 raise NotImplementedError28 class AbstractView: 29 __owner = None 30 __name = None 28 31 29 def onInit(self): 30 raise NotImplementedError 32 def __init__( self, owner=None, name=None ): 33 """__init__(Plugin, String)""" 34 self.__eventBroadcaster = EventBroadcaster( self ) 35 if owner:self.setOwner( owner ) 36 if name:self._initAbstractView( name ) 31 37 32 def notifyChanged(self, event): 33 raise NotImplementedError 38 def handleEvent( self, event ): 39 """handleEvent(IEvent):void""" 40 pass 34 41 35 def release(self): 36 raise NotImplementedError 42 def onInit( self ): 43 """onInit():void""" 44 pass 37 45 38 def getOwner(self): 39 raise NotImplementedError 46 def notifyChanged( self, event ): 47 """notifyChanged(IEvent):void""" 48 self._getBroadcaster().broadcastEvent( event ) 40 49 41 def setOwner(self, owner): 42 raise NotImplementedError 50 def release( self ): 51 """release():void""" 52 self._getBroadcaster().removeAllListeners() 53 from Pyxoo.View.locator import ViewLocator 54 ViewLocator( self.getOwner() ).unregisterView( self.getName() ) 43 55 44 def getName(self): 45 raise NotImplementedError 56 def getOwner( self ): 57 """getOwner():Plugin""" 58 return self.__owner 46 59 47 def setName(self, name): 48 raise NotImplementedError 60 def setOwner( self, owner ): 61 """setOwner(Plugin):void""" 62 if not isinstance( owner, Plugin ): 63 raise TypeError( "owner param must be a Plugin" ) 64 self.__owner = owner 65 66 def getName( self ): 67 """getName():String""" 68 return self.__name 69 70 def setName( self, name ): 71 """setName(String):void""" 72 if not Type.isString( name ): 73 raise TypeError( "name param must be a String" ) 74 from Pyxoo.View.locator import ViewLocator 75 locator = ViewLocator( self.getOwner() ) 76 if name and not locator.isRegistered( name ): 77 if locator.isRegistered( self.getName() ): 78 locator.unregisterView( self.getName() ) 79 if locator.registerView( name, self ): 80 self.__name = name 81 82 def addListener( self, listener ): 83 """addListener(object):boolean""" 84 return self.__eventBroadcaster.addListener( listener ) 85 86 def removeListener( self, listener ): 87 """removeListener(listener):boolean""" 88 return self.__eventBroadcaster.removeListener( listener ) 89 90 def addEventListener( self, eventType, listener, *args ): 91 """addEventListener(String, object, ...):boolean""" 92 return self.__eventBroadcaster.addEventListener( eventType, listener, *args ) 93 94 def removeEventListener( self, eventType, listener ): 95 """removeEventListener(String, object):boolean""" 96 return self.__eventBroadcaster.removeEventListener( eventType, listener ) 97 98 def _initAbstractView( self, name ): 99 """_initAbstractView(String):void""" 100 self.setName( name ) 101 self.onInit() 102 103 def _getBroadcaster( self ): 104 """_getBroadcaster():EventBroadcaster""" 105 return self.__eventBroadcaster 106 107 def _fireprivateEvent( self, event ): 108 """_fireprivateEvent(IEvent):void""" 109 self.getOwner().firePrivateEvent( event ) project/trunk/test/model/TestModelLocator.py
r7 r12 21 21 22 22 23 from Pyxoo.Model.model import Model23 from Pyxoo.Model.model import AbstractModel 24 24 from Pyxoo.Model.locator import ModelLocator 25 25 from Pyxoo.Plugin.plugin import Plugin … … 28 28 def setUp(self): 29 29 self.instance = ModelLocator() 30 self.m1 = Model()31 self.m2 = Model()30 self.m1 = AbstractModel() 31 self.m2 = AbstractModel() 32 32 class A:pass 33 33 self.otherObject = A() … … 36 36 self.assertTrue(id(self.instance) == id(ModelLocator())) 37 37 self.assertFalse(id(self.instance) == id( ModelLocator(Plugin()))) 38 38 pluginA, pluginB = Plugin(), Plugin() 39 self.assertTrue( id( ModelLocator( pluginA ) ) == id( ModelLocator( pluginA ) ) ) 40 self.assertFalse( id( ModelLocator( pluginA ) ) == id( ModelLocator( pluginB ) ) ) 41 39 42 def testRegisterModel(self): 40 43 self.instance.registerModel("m1", self.m1) 41 44 self.assertRaises( TypeError, self.instance.registerModel, "mX", self.otherObject) 42 45 self.assertTrue( self.instance.isRegistered("m1") ) 46 47 def testRegisterModelWithPlugin(self): 48 pluginA, pluginB = Plugin(), Plugin() 49 self.assertTrue( ModelLocator( pluginA ).registerModel( "v1", self.m1 ) ) 50 self.assertFalse( ModelLocator( pluginA ).registerModel( "v1", self.m1 ) ) 51 self.assertTrue( ModelLocator( pluginB ).registerModel( "v1", self.m1 ) ) 52 self.assertFalse( ModelLocator( pluginB ).registerModel( "v1", self.m1 ) ) 43 53 44 54 def testUnregisterModel(self): project/trunk/test/view/TestViewLocator.py
r7 r12 21 21 22 22 23 from Pyxoo.View.view import View23 from Pyxoo.View.view import AbstractView 24 24 from Pyxoo.View.locator import ViewLocator 25 25 from Pyxoo.Plugin.plugin import Plugin 26 26 27 class TestViewLocator( unittest.TestCase):28 def setUp( self):27 class TestViewLocator( unittest.TestCase ): 28 def setUp( self ): 29 29 self.instance = ViewLocator() 30 self.view = View()30 self.view = AbstractView() 31 31 class A:pass 32 32 self.otherObject = A() 33 33 34 def testMultiTon(self): 35 self.assertTrue(id(self.instance) == id(ViewLocator())) 36 self.assertFalse(id(self.instance) == id(ViewLocator(Plugin()))) 34 def testMultiTon( self ): 35 self.assertTrue( id( self.instance ) == id( ViewLocator() ) ) 36 self.assertFalse( id( self.instance ) == id( ViewLocator( Plugin() ) ) ) 37 pluginA, pluginB = Plugin(), Plugin() 38 self.assertTrue( id( ViewLocator( pluginA ) ) == id( ViewLocator( pluginA ) ) ) 39 self.assertFalse( id( ViewLocator( pluginA ) ) == id( ViewLocator( pluginB ) ) ) 40 37 41 38 def testRegisterView(self): 39 self.instance.registerView("aKey", self.view) 40 self.assertRaises( TypeError, self.instance.registerView, "aSecondKey", self.otherObject) 41 self.assertTrue( self.instance.isRegistered("aKey") ) 42 def testRegisterView( self ): 43 self.assertTrue(self.instance.registerView( "aKey", self.view )) 44 self.assertFalse(self.instance.registerView( "aKey", self.view )) 45 self.assertRaises( TypeError, self.instance.registerView, "aSecondKey", self.otherObject ) 46 self.assertTrue( self.instance.isRegistered( "aKey" ) ) 42 47 43 def testUnregisterView(self): 44 self.instance.registerView("v1", self.view) 45 self.instance.registerView("v2", View()) 46 self.assertTrue( self.instance.isRegistered("v1") ) 47 self.assertTrue( self.instance.isRegistered("v2") ) 48 self.instance.unregisterView("v1") 49 self.assertFalse( self.instance.isRegistered("v1") ) 50 self.assertTrue( self.instance.isRegistered("v2") ) 48 def testResgisterViewWithPlugin( self ): 49 pluginA, pluginB = Plugin(), Plugin() 50 self.assertTrue( ViewLocator( pluginA ).registerView( "v1", self.view ) ) 51 self.assertFalse( ViewLocator( pluginA ).registerView( "v1", self.view ) ) 52 self.assertTrue( ViewLocator( pluginB ).registerView( "v1", self.view ) ) 53 self.assertFalse( ViewLocator( pluginB ).registerView( "v1", self.view ) ) 51 54 52 def testLocate(self): 53 self.instance.registerView("v1", self.view) 54 v2 = View() 55 self.instance.registerView("v2", v2) 56 self.assertEquals( self.view, self.instance.locate("v1") ) 57 self.assertEquals( v2, self.instance.locate("v2") ) 58 self.instance.unregisterView("v1") 59 self.assertEquals( None, self.instance.locate("v1") ) 55 def testUnregisterView( self ): 56 self.instance.registerView( "v1", self.view ) 57 self.instance.registerView( "v2", AbstractView() ) 58 self.assertTrue( self.instance.isRegistered( "v1" ) ) 59 self.assertTrue( self.instance.isRegistered( "v2" ) ) 60 self.instance.unregisterView( "v1" ) 61 self.assertFalse( self.instance.isRegistered( "v1" ) ) 62 self.assertTrue( self.instance.isRegistered( "v2" ) ) 63 64 def testLocate( self ): 65 self.instance.registerView( "v1", self.view ) 66 v2 = AbstractView() 67 self.instance.registerView( "v2", v2 ) 68 self.assertEquals( self.view, self.instance.locate( "v1" ) ) 69 self.assertEquals( v2, self.instance.locate( "v2" ) ) 70 self.instance.unregisterView( "v1" ) 71 self.assertEquals( None, self.instance.locate( "v1" ) )
