AspectVisitor.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 8393 26ee8a3be5e4
child 17711 39faaaf888b4
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...
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
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
"{ Package: 'stx:libbasic' }"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
Visitor subclass:#AspectVisitor
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
	instanceVariableNames:'aspect'
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
	category:'System-Visiting'
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
!AspectVisitor class methodsFor:'documentation'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
copyright
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
 COPYRIGHT (c) 2002 by eXept Software AG
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
              All Rights Reserved
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
 This software is furnished under a license and may be used
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
 only in accordance with the terms of that license and with the
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
 be provided or otherwise made available to, or used by, any
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
 other person.  No title to or ownership of the software is
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
 hereby transferred.
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
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
documentation
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
    This is a Visitor that visits only some aspects of an object.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    [author:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
        Stefan Vogel (stefan@zwerg)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
    [instance variables:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
        aspect  <Symbol|Object>     something defining the aspect to be visited        
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
    [class variables:]
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
    [see also:]
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
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
!AspectVisitor methodsFor:'accessing'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
aspect
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
    "return the value of the instance variable 'aspect' (automatically generated)"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
    ^ aspect
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
aspect:something
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    64
    "set the value of the instance variable 'aspect' (automatically generated)"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    65
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    66
    aspect := something.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
! !
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
!AspectVisitor methodsFor:'helpers'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    70
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    71
aspectElementDescriptorFor:anObject
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    72
    "return association that should be visited for all child objects of anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
     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
    74
     where the association value is the child object"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
    ^ anObject elementDescriptorFor:aspect.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
    "
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
                 encodingOf:('blaKey' -> 'blaValue')
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
        XMLStandardCoder new aspect:#elementDescriptorForNonNilInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
        XMLStandardCoder new aspect:#blaFaselQuall;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
                 encodingOf:('blaKey' -> nil)
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
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    93
visitChildrenOf:anObject
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
    "visit all child objects of anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    95
     If aspect is defined, perform aspect to fetch the child objects.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    96
     Otherwise encode all the instance variables of anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    97
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    98
     Subclasses may send this message"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    99
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
    |childObjectDescriptors|
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   101
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
    aspect isNil ifTrue:[
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
        "shortcut -- basic mechanism: visit instance variables by name"
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
        super visitChildrenOf:anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
        ^ self.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
    ].
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
    childObjectDescriptors := self aspectElementDescriptorFor:anObject.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
    childObjectDescriptors do:[:association|
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
        association notNil ifTrue:[
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
            association value acceptVisitor:self with:association key.
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
            self nextObject.
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
    "
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   117
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   118
                 encodingOf:('blaKey' -> 'blaValue')
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   119
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   120
        XMLStandardCoder new aspect:#elementDescriptorForInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   121
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   122
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   123
        XMLStandardCoder new aspect:#elementDescriptorForNonNilInstanceVariables;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   124
                 encodingOf:('blaKey' -> nil)
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   125
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   126
        XMLStandardCoder new aspect:#blaFaselQuall;
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   127
                 encodingOf:('blaKey' -> nil)
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
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   131
!AspectVisitor class methodsFor:'documentation'!
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   132
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   133
version
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   134
    ^ '$Header: /cvs/stx/stx/libbasic/AspectVisitor.st,v 1.1 2004-06-11 17:55:26 stefan Exp $'
26ee8a3be5e4 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   135
! !