initial checkin
authorClaus Gittinger <cg@exept.de>
Sat, 20 Aug 2011 13:42:25 +0200
changeset 200 096027ff17c7
parent 199 6e1b0c7e6685
child 201 7ee31481708f
initial checkin
MCTraitDefinition.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCTraitDefinition.st	Sat Aug 20 13:42:25 2011 +0200
@@ -0,0 +1,139 @@
+"{ Package: 'stx:goodies/monticello' }"
+
+MCClassDefinition subclass:#MCTraitDefinition
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Monticello-Modeling'
+!
+
+
+!MCTraitDefinition class methodsFor:'as yet unclassified'!
+
+name: classNameString traitComposition:  traitCompositionString category:  categoryString comment:  commentString commentStamp:   commentStamp
+	^ self instanceLike:
+		(self new initializeWithName: classNameString 
+			traitComposition:  traitCompositionString
+			category:  categoryString
+			comment:  commentString  
+			commentStamp:   commentStamp)
+
+! !
+
+!MCTraitDefinition methodsFor:'accessing'!
+
+classTraitCompositionString
+	^self traitComposition ifNil: ['{}'].
+! !
+
+!MCTraitDefinition methodsFor:'comparing'!
+
+hash
+	| hash |
+	hash := String stringHash: name initialHash: 0.
+	hash := String stringHash: self traitCompositionString initialHash: hash.
+	hash := String stringHash: (category ifNil: ['']) initialHash: hash.
+	^ hash
+
+!
+
+requirements
+	"Assuming that traits in a composition can be identified by
+	testing for the first character beeing an uppercase character
+	(and thus not a special character such as {, # etc.)"
+
+	| tokens traitNames |
+	self hasTraitComposition ifFalse: [ ^Array new ].
+	tokens := Scanner new scanTokens: self traitComposition.
+	traitNames := tokens select: [:each | each first isUppercase].
+	^traitNames asArray
+! !
+
+!MCTraitDefinition methodsFor:'initializing'!
+
+initializeWithName: classNameString 
+        traitComposition:  traitCompositionString
+        category:  categoryString
+        comment:  commentString  
+        commentStamp:   commentStampString
+                                        
+                name := classNameString asSymbol.
+                traitComposition := traitCompositionString.
+             category := categoryString.
+                comment := commentString asStringWithSqueakLineEndings.
+                commentStamp :=  commentStampString ifNil: [self defaultCommentStamp]
+
+    "Modified: / 12-09-2010 / 16:06:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCTraitDefinition methodsFor:'installing'!
+
+load
+	| trait |
+	(trait := self createClass) ifNotNil: [
+		self hasComment ifTrue: [trait classComment: comment stamp: commentStamp]]
+! !
+
+!MCTraitDefinition methodsFor:'printing'!
+
+printDefinitionOn: stream
+	stream nextPutAll: 'Trait named: #', self className;
+		 cr;
+		 tab;
+		 nextPutAll: 'uses: ';
+		 nextPutAll: self traitCompositionString;
+		 cr;
+		 tab;
+		 nextPutAll: 'category: ';
+		 store: self category asString
+
+! !
+
+!MCTraitDefinition methodsFor:'testing'!
+
+hasClassInstanceVariables
+	^ false
+
+
+! !
+
+!MCTraitDefinition methodsFor:'visiting'!
+
+= aDefinition
+        "/self flag: #traits. "Ugly we harcoded the super superclass method.  We will have to refactor the definition hierarchy"
+        
+        ^ (self isRevisionOf: aDefinition)
+                and: [self traitCompositionString = aDefinition traitCompositionString]
+                and: [category = aDefinition category]
+                and: [comment = aDefinition comment]
+
+    "Modified: / 14-09-2010 / 20:48:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+accept: aVisitor
+	^ aVisitor visitTraitDefinition: self
+
+!
+
+createClass
+	^Trait
+		named: name
+		uses: (Compiler evaluate: self traitCompositionString)
+		category: category
+		
+
+! !
+
+!MCTraitDefinition class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCTraitDefinition.st,v 1.1 2011-08-20 11:42:25 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCTraitDefinition.st,v 1.1 2011-08-20 11:42:25 cg Exp $'
+!
+
+version_SVN
+    ^ '§Id: MCTraitDefinition.st 17 2010-10-13 12:07:52Z vranyj1 §'
+! !