MCTraitDefinition.st
author Claus Gittinger <cg@exept.de>
Tue, 11 Sep 2012 23:29:54 +0200
changeset 693 82fee375af8e
parent 290 2dcc280c0be8
child 725 334a2a696b89
permissions -rw-r--r--
category change
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCClassDefinition subclass:#MCTraitDefinition
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
693
82fee375af8e category change
Claus Gittinger <cg@exept.de>
parents: 290
diff changeset
     7
	category:'SCM-Monticello-Modeling'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCTraitDefinition class methodsFor:'as yet unclassified'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
name: classNameString traitComposition:  traitCompositionString category:  categoryString comment:  commentString commentStamp:   commentStamp
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ self instanceLike:
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
		(self new initializeWithName: classNameString 
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
			traitComposition:  traitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
			category:  categoryString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
			comment:  commentString  
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
			commentStamp:   commentStamp)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!MCTraitDefinition methodsFor:'accessing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
classTraitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	^self traitComposition ifNil: ['{}'].
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!MCTraitDefinition methodsFor:'comparing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
hash
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
	| hash |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	hash := String stringHash: name initialHash: 0.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	hash := String stringHash: self traitCompositionString initialHash: hash.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	hash := String stringHash: (category ifNil: ['']) initialHash: hash.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	^ hash
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
requirements
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
	"Assuming that traits in a composition can be identified by
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	testing for the first character beeing an uppercase character
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	(and thus not a special character such as {, # etc.)"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	| tokens traitNames |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
	self hasTraitComposition ifFalse: [ ^Array new ].
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	tokens := Scanner new scanTokens: self traitComposition.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
	traitNames := tokens select: [:each | each first isUppercase].
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
	^traitNames asArray
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
!MCTraitDefinition methodsFor:'initializing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
initializeWithName: classNameString 
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        traitComposition:  traitCompositionString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
        category:  categoryString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        comment:  commentString  
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        commentStamp:   commentStampString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
                                        
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
                name := classNameString asSymbol.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
                traitComposition := traitCompositionString.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
             category := categoryString.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
                comment := commentString asStringWithSqueakLineEndings.
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
                commentStamp :=  commentStampString ifNil: [self defaultCommentStamp]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    "Modified: / 12-09-2010 / 16:06:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
!MCTraitDefinition methodsFor:'installing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
load
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	| trait |
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	(trait := self createClass) ifNotNil: [
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
		self hasComment ifTrue: [trait classComment: comment stamp: commentStamp]]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
!MCTraitDefinition methodsFor:'printing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
printDefinitionOn: stream
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
	stream nextPutAll: 'Trait named: #', self className;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
		 cr;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
		 tab;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
		 nextPutAll: 'uses: ';
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
		 nextPutAll: self traitCompositionString;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
		 cr;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
		 tab;
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
		 nextPutAll: 'category: ';
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
		 store: self category asString
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!MCTraitDefinition methodsFor:'testing'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
hasClassInstanceVariables
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	^ false
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
!MCTraitDefinition methodsFor:'visiting'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
= aDefinition
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
        "/self flag: #traits. "Ugly we harcoded the super superclass method.  We will have to refactor the definition hierarchy"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
        
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
        ^ (self isRevisionOf: aDefinition)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
                and: [self traitCompositionString = aDefinition traitCompositionString]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
                and: [category = aDefinition category]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
                and: [comment = aDefinition comment]
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    "Modified: / 14-09-2010 / 20:48:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
accept: aVisitor
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
	^ aVisitor visitTraitDefinition: self
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
createClass
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
	^Trait
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
		named: name
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
		uses: (Compiler evaluate: self traitCompositionString)
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
		category: category
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
		
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
! !
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
!MCTraitDefinition class methodsFor:'documentation'!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
version
693
82fee375af8e category change
Claus Gittinger <cg@exept.de>
parents: 290
diff changeset
   130
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCTraitDefinition.st,v 1.3 2012-09-11 21:29:54 cg Exp $'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
version_CVS
693
82fee375af8e category change
Claus Gittinger <cg@exept.de>
parents: 290
diff changeset
   134
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCTraitDefinition.st,v 1.3 2012-09-11 21:29:54 cg Exp $'
200
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
version_SVN
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
    ^ '§Id: MCTraitDefinition.st 17 2010-10-13 12:07:52Z vranyj1 §'
096027ff17c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
! !