AspectVisitor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 22 Sep 2015 16:28:42 +0100
branchjv
changeset 18759 c1217211909c
parent 17911 a99f15c5efa5
permissions -rw-r--r--
Changed identification strings to contain jv-branch ...to make explicit that this distribution is not the official one used by eXept and therefore that eXept is not to be blamed in case of any problem.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8393
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2002 by eXept Software AG
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
 hereby transferred.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
Visitor subclass:#AspectVisitor
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'aspect'
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	classVariableNames:''
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	category:'System-Visiting'
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
!AspectVisitor class methodsFor:'documentation'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
copyright
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
 COPYRIGHT (c) 2002 by eXept Software AG
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
              All Rights Reserved
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
 This software is furnished under a license and may be used
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
 hereby transferred.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
documentation
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
    This is a Visitor that visits only some aspects of an object.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
    [author:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
        Stefan Vogel (stefan@zwerg)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
    [instance variables:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
        aspect  <Symbol|Object>     something defining the aspect to be visited        
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
    [class variables:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
    [see also:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
! !
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
!AspectVisitor methodsFor:'accessing'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
aspect
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
    "return the value of the instance variable 'aspect' (automatically generated)"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
    ^ aspect
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
aspect:something
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
    "set the value of the instance variable 'aspect' (automatically generated)"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
    aspect := something.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
! !
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
!AspectVisitor methodsFor:'helpers'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
aspectElementDescriptorFor:anObject
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
    "return association that should be visited for all child objects of anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
     Return a collection of associations. The association key is the name of the object,
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
     where the association value is the child object"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
    ^ anObject elementDescriptorFor:aspect.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
    "
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
                 encodingOf:('blaKey' -> 'blaValue')
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
        XMLStandardCoder new aspect:#elementDescriptorForNonNilInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
        XMLStandardCoder new aspect:#blaFaselQuall;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    "
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
visitChildrenOf:anObject
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
    "visit all child objects of anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
     If aspect is defined, perform aspect to fetch the child objects.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
     Otherwise encode all the instance variables of anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
     Subclasses may send this message"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
    |childObjectDescriptors|
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
    aspect isNil ifTrue:[
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
        "shortcut -- basic mechanism: visit instance variables by name"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
        super visitChildrenOf:anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
        ^ self.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
    ].
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
    childObjectDescriptors := self aspectElementDescriptorFor:anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
    childObjectDescriptors do:[:association|
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
        association notNil ifTrue:[
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
            association value acceptVisitor:self with:association key.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
            self nextObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
        ].
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
    ].
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
    "
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
                 encodingOf:('blaKey' -> 'blaValue')
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
        XMLStandardCoder new aspect:#elementDescriptorForNonNilInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
        XMLStandardCoder new aspect:#blaFaselQuall;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
    "
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   128
! !
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   129
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   130
!AspectVisitor class methodsFor:'documentation'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
version
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   133
    ^ '$Header: /cvs/stx/stx/libbasic/AspectVisitor.st,v 1.1 2004/06/11 17:55:26 stefan Exp $'
17865
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   134
!
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   135
598963c6ff8e Recommited from itself
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17846
diff changeset
   136
version_SVN
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
   137
    ^ '$Id: AspectVisitor.st 10761 2012-01-19 11:46:00Z vranyj1 $'
17846
24edc476ac18 Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17845
diff changeset
   138
! !
17892
d86c8bd5ece3 Merged with CVS
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17869
diff changeset
   139
17910
8d796ca8bd1d Merged with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17892
diff changeset
   140
17911
a99f15c5efa5 Updated with /trunk
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 17910
diff changeset
   141