AspectVisitor.st
author Patrik Svestka <patrik.svestka@gmail.com>
Tue, 09 Apr 2019 11:34:04 +0200
branchjv
changeset 24093 0f94f6c8c9d4
parent 17911 a99f15c5efa5
permissions -rw-r--r--
Issue #269: Renaming a registry subKey via RegRenameKey() or if it fails via NtRenameKey()
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