Index: xotcl/library/patterns/observer.xotcl =================================================================== diff -u -rf7894d9be99a8da3a04218abcdb9bd46b6d625c8 -r435b41481fb51bf000ebe736d8574fefbeec1710 --- xotcl/library/patterns/observer.xotcl (.../observer.xotcl) (revision f7894d9be99a8da3a04218abcdb9bd46b6d625c8) +++ xotcl/library/patterns/observer.xotcl (.../observer.xotcl) (revision 435b41481fb51bf000ebe736d8574fefbeec1710) @@ -1,85 +1,100 @@ -# $Id: observer.xotcl,v 1.1 2004/05/23 22:50:39 neumann Exp $ +# $Id: observer.xotcl,v 1.2 2005/09/09 21:07:23 neumann Exp $ + package provide xotcl::pattern::observer 0.8 +package require XOTcl -Class Observer -superclass Class +namespace eval ::xotcl::pattern::observer { + namespace import ::xotcl::* -@ @File { - description { - Simple observer pattern meta-class taken from the paper - 'Filters as a Language Support for Design Patterns in - Object-Oriented Scripting Languages'. - } -} + Class Observer -superclass Class -Class Observer::Subject -superclass Class + @ @File { + description { + Simple observer pattern meta-class taken from the paper + 'Filters as a Language Support for Design Patterns in + Object-Oriented Scripting Languages'. + } + } -Observer::Subject instproc notificationFilter {args} { - set procName [self calledproc] - my instvar \ - preObservers [list preObservers($procName) preObs] \ - postObservers [list postObservers($procName) postObs] + Class Observer::Subject -superclass Class - if {[info exists preObs]} { - foreach obj $preObs { $obj update [self] $args } - } - set result [next] + Observer::Subject instproc notificationFilter {args} { + set procName [self calledproc] + my instvar \ + preObservers [list preObservers($procName) preObs] \ + postObservers [list postObservers($procName) postObs] - if {[info exists postObs]} { - foreach obj $postObs { $obj update [self] $args } - } - return $result -} + if {[info exists preObs]} { + foreach obj $preObs { $obj update [self] $args } + } + set result [next] -Class Observer::SubjectMgt -Observer::SubjectMgt instproc attach {hook objs} { - upvar [self callinglevel] $hook observers - foreach obj $objs { - if {![info exists observers] || [lsearch $observers $obj] == -1} { - lappend observers $obj + if {[info exists postObs]} { + foreach obj $postObs { $obj update [self] $args } + } + return $result } - } -} -Observer::SubjectMgt instproc detach {hook objs} { - upvar [self callinglevel] $hook observers - if {[info exists observers]} { - foreach obj $objs { - set p [lsearch $observers $obj] - set observers [lreplace $observers $p $p] + + Class Observer::SubjectMgt + Observer::SubjectMgt instproc attach {hook objs} { + upvar [self callinglevel] $hook observers + foreach obj $objs { + if {![info exists observers] || [lsearch $observers $obj] == -1} { + lappend observers $obj + } + } } - } -} + Observer::SubjectMgt instproc detach {hook objs} { + upvar [self callinglevel] $hook observers + if {[info exists observers]} { + foreach obj $objs { + set p [lsearch $observers $obj] + set observers [lreplace $observers $p $p] + } + } + } -Observer::SubjectMgt instproc attachPre {procName args} { - my instvar preObservers - my attach preObservers($procName) $args -} -Observer::SubjectMgt instproc attachPost {procName args} { - my instvar postObservers - my attach postObservers($procName) $args -} -Observer::SubjectMgt instproc detachPre {procName args} { - my instvar preObservers - my detach preObservers($procName) $args -} -Observer::SubjectMgt instproc detachPost {procName args} { - my instvar postObservers - my detach postObservers($procName) $args -} + Observer::SubjectMgt instproc attachPre {procName args} { + my instvar preObservers + my attach preObservers($procName) $args + } + Observer::SubjectMgt instproc attachPost {procName args} { + my instvar postObservers + my attach postObservers($procName) $args + } + Observer::SubjectMgt instproc detachPre {procName args} { + my instvar preObservers + my detach preObservers($procName) $args + } + Observer::SubjectMgt instproc detachPost {procName args} { + my instvar postObservers + my detach postObservers($procName) $args + } -Observer::Subject instproc init args { - next - my superclass [list Observer::SubjectMgt [my info superclass]] - my instfilter notificationFilter -} + Observer::Subject instproc init args { + next + my superclass [list Observer::SubjectMgt [my info superclass]] + my instfilter notificationFilter + } -Observer instproc timeout t { - my set timeout $t -} + Observer instproc timeout t { + my set timeout $t + } -Observer instproc update {subject args} { - #addTimeOut [my set timeout] "my update $subject $args" - #$subject getResponse - # do something with the response - puts [self]---update + Observer instproc update {subject args} { + #addTimeOut [my set timeout] "my update $subject $args" + #$subject getResponse + # do something with the response + puts [self]---update + } + + namespace export Observer + namespace eval Observer { + namespace export Subject SubjectMgt + } } +namespace import ::xotcl::pattern::observer::* +namespace eval Observer { + namespace import ::xotcl::pattern::observer::Observer::* +}