DictionaryAdaptor.st
author Stefan Vogel <sv@exept.de>
Mon, 13 Mar 2017 09:54:33 +0100
changeset 3941 dd9237d3a727
parent 2745 c46c41c89a78
child 3855 1db7742d33ad
permissions -rw-r--r--
#BUGFIX by stefan class: MIMETypes application/xml -> #isXmlType
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2415
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libview2' }"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
ProtocolAdaptor subclass:#DictionaryAdaptor
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'myAspect'
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
	category:'Interface-Support-Models'
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
!DictionaryAdaptor class methodsFor:'documentation'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
documentation
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
    Similar to AspectAdaptor, but accesses a Dictionary instead of
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
    a classes instance variables.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
    [author:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
        Stefan Vogel (stefan@zwerg)
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
    [instance variables:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
    [class variables:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
    [see also:]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
examples
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
                                                                        [exBegin]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
        |dialog dict dataModel|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
        dict := Dictionary new.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
        dict
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
            at:#field1 put:'hello';
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
            at:#field2 put:'one';
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
            at:#field3 put:'two';
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
            at:#field4 put:'three'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
        dialog := DialogBox new.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
        dialog addTextLabel:'1:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
                                        aspect:#field1). 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
        dialog addTextLabel:'2:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
                                        forAspect:#field2).
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
        dialog addTextLabel:'3:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
                                        aspect:#field3). 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
        dialog addTextLabel:'4:'.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
        dialog addInputFieldOn:(DictionaryAdaptor new
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
                                        subject:dict; 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
                                        forAspect:#field4).
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
        dialog addOkButton.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
        dict inspect.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
        dialog open.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
        dialog accepted ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
            Transcript showCR:'data now: ' , dict printString
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
        ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
                                                                        [exEnd]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
!DictionaryAdaptor class methodsFor:'instance creation'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
forAspect:anAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
    "create and return a new adaptor, which forwards requests
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
     to anObject, using anAspect to access a Dictionary. 
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
     The returned object can be used in place of a ValueHolder"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
    ^ self new forAspect:anAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
subject:anObject sendsUpdates:aBoolean aspect:aspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
    "create and return a new adaptor, which forwards requests
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
     to anObject, using #at:aspect and #at:aspect put: for access.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
     The returned object can be used in place of a ValueHolder"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    ^ (self subject:anObject sendsUpdates:aBoolean) aspect:aspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
!DictionaryAdaptor methodsFor:'accessing-spec'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
aspect:aSelector
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    "set the adapters change aspect - this is the aspect of the update message,
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
     on which the adaptor reacts"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
    myAspect := aSelector.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
forAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
    "get the adapters aspect"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
    ^ myAspect
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
forAspect:aSelector
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
    "set the adapters aspect"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
    myAspect := aSelector.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
!DictionaryAdaptor methodsFor:'accessing-value'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
setValue:newValue
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
    "set the value - this forwards a putMessage to the target"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
    |target oldValue|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
    target := self subjectValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
    target isNil ifTrue:[^ nil].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
    oldValue := target at:myAspect.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
    oldValue ~~ newValue ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
        target at:myAspect put:newValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
    ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
value
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
    "translate a query for my value from my user
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
     into an aspect access towards my subject"
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
    |target|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
    target := self subjectValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
    target isNil ifTrue:[^ nil].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
    ^ target at:myAspect ifAbsent:[].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
value:newValue
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
    "set the value - this changes the target with #at:put:
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   136
     and sends out a changeNotification if the value did really change."
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   137
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   138
    |target oldValue|
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   139
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   140
    target := self subjectValue.
2745
c46c41c89a78 without target, should return self - not nil
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   141
    target isNil ifTrue:[^ self].
2415
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   142
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   143
    oldValue := target at:myAspect ifAbsent:[].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   144
    oldValue ~~ newValue ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   145
        target at:myAspect put:newValue.
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   146
        subjectSendsUpdates ifFalse:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   147
            self changed:#value
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   148
        ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
    ]
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   150
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   151
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   152
!DictionaryAdaptor methodsFor:'change & update'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   153
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   154
update:something with:aParameter from:changedObject
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   155
    "translate an update from the model into a #value-change
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   156
     via my depenedents ..."
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   157
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   158
    ((changedObject == subject and:[something == myAspect])
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   159
    or:[changedObject == subjectChannel]) ifTrue:[
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   160
        self changed:#value
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   161
    ].
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   162
! !
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   163
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   164
!DictionaryAdaptor class methodsFor:'documentation'!
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   165
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   166
version
2745
c46c41c89a78 without target, should return self - not nil
Claus Gittinger <cg@exept.de>
parents: 2415
diff changeset
   167
    ^ '$Header: /cvs/stx/stx/libview2/DictionaryAdaptor.st,v 1.2 2009-09-18 16:14:09 cg Exp $'
2415
27a7fd9f332a initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   168
! !