initial checkin
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 29 May 2013 13:46:06 +0200
changeset 840 e7735fc824c8
parent 839 73bbd675ef17
child 841 0961973abe97
initial checkin
MCStXSnapshotTransformation.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCStXSnapshotTransformation.st	Wed May 29 13:46:06 2013 +0200
@@ -0,0 +1,121 @@
+"{ Package: 'stx:goodies/monticello' }"
+
+Object subclass:#MCStXSnapshotTransformation
+	instanceVariableNames:'original transformed'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'SCM-Monticello-St/X Storing'
+!
+
+!MCStXSnapshotTransformation class methodsFor:'documentation'!
+
+documentation
+"
+    An abstract superclass to snapshot tranformations. Used to alter MCSnaphot data
+    to hide-out nasty differences between St/X and Squeak/Pharo package model so
+    .mcz can be safely passed to from one environment to another without information
+    loss. 
+
+    CAUTION: Tricky.
+
+    [author:]
+        Jan Vrany <jan.vrany@fit.cvut.cz>
+
+    [instance variables:]
+
+    [class variables:]
+
+    [see also:]
+        MCStXSnapshotPreWriteTransformation
+        MCStXSnapshotPostReadTransformation
+"
+! !
+
+!MCStXSnapshotTransformation class methodsFor:'testing'!
+
+isAbstract
+    ^self == MCStXSnapshotTransformation
+
+    "Created: / 29-05-2013 / 11:32:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCStXSnapshotTransformation class methodsFor:'transforming'!
+
+transform: anMCSnapshot
+    "Returns a transformed **copy** of the original snapshot"
+
+    ^self new transform: anMCSnapshot.
+
+    "Created: / 29-05-2013 / 11:36:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCStXSnapshotTransformation methodsFor:'accessing'!
+
+original
+    ^ original
+!
+
+transformed
+    ^ transformed
+! !
+
+!MCStXSnapshotTransformation methodsFor:'transforming'!
+
+transform: anMCSnapshot
+    "Returns a transformed **copy** of the original snapshot"
+
+    original := anMCSnapshot.
+    transformed := original copy.
+    "use #copy to allow modifications to definitions collection while
+     transforming.
+     use reverseDo: to transform class definitions first"
+    transformed definitions copy reverseDo:[:definition|
+        definition accept: self.        
+    ].
+    ^transformed.
+
+    "Created: / 29-05-2013 / 11:40:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCStXSnapshotTransformation methodsFor:'visiting'!
+
+visitClassDefinition: definition
+
+    "Modified: / 29-05-2013 / 12:07:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitClassTraitDefinition: definition
+
+    "Modified: / 29-05-2013 / 12:08:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitMetaclassDefinition: definition
+
+    "Modified: / 29-05-2013 / 12:08:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitMethodDefinition: definition
+
+    "Modified: / 29-05-2013 / 12:08:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitOrganizationDefinition: defintion
+
+    "Modified: / 29-05-2013 / 12:08:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitTraitDefinition: definition
+
+    "Modified: / 29-05-2013 / 12:08:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCStXSnapshotTransformation class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStXSnapshotTransformation.st,v 1.1 2013-05-29 11:46:06 vrany Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCStXSnapshotTransformation.st,v 1.1 2013-05-29 11:46:06 vrany Exp $'
+! !
+