MCMczWriter.st
author Claus Gittinger <cg@exept.de>
Mon, 26 Oct 2009 16:25:10 +0100
changeset 142 4a05a68fe582
parent 33 210977d2e998
child 199 6e1b0c7e6685
permissions -rw-r--r--
more porting (but still unfinished)

"{ Package: 'stx:goodies/monticello' }"

MCWriter subclass:#MCMczWriter
	instanceVariableNames:'zip infoWriter'
	classVariableNames:''
	poolDictionaries:''
	category:'Monticello-Storing'
!


!MCMczWriter class methodsFor:'as yet unclassified'!

fileOut: aVersion on: aStream
        | inst |

        inst _ self on: aStream.
        inst writeVersion: aVersion.
        inst flush.
!

new
	^ self basicNew initialize
!

readerClass
	^ MCMczReader
! !

!MCMczWriter methodsFor:'accessing'!

format
	^ '1'
!

snapshotWriterClass
	^ MCStWriter
!

zip
	^ zip
! !

!MCMczWriter methodsFor:'initializing'!

initialize
	zip _ ZipArchive new.
! !

!MCMczWriter methodsFor:'serializing'!

serializeDefinitions: aCollection
        | writer s |

        Smalltalk isSmalltalkX ifTrue:[
            s _ WriteStream on: String new.
        ] ifFalse:[
            s _ RWBinaryOrTextStream on: String new.
        ].
        writer _ self snapshotWriterClass on: s.
        writer writeDefinitions: aCollection.
        ^ s contents
!

serializeInBinary: aSnapshot
        | writer s |

        Smalltalk isSmalltalkX ifTrue:[
            ^ aSnapshot binaryStoreBytes
        ].

        s _ RWBinaryOrTextStream on: String new.
        writer _ DataStream on: s.
        writer nextPut: aSnapshot.
        ^ s contents
!

serializePackage: aPackage
	^ '(name ''', aPackage name, ''')'
!

serializeVersionInfo: aVersionInfo
	infoWriter ifNil: [infoWriter _ MCVersionInfoWriter new].
	^ String streamContents:
		[:s |
		infoWriter stream: s.
		infoWriter writeVersionInfo: aVersionInfo]
! !

!MCMczWriter methodsFor:'visiting'!

writeDefinitions: aVersion
	self writeSnapshot: aVersion snapshot
!

writeFormat
"	self addString: self format at: 'format'."
!

writePackage: aPackage
	self addString: (self serializePackage: aPackage) at: 'package'
!

writeSnapshot: aSnapshot
	self addString: (self serializeDefinitions: aSnapshot definitions) at: 'snapshot/source.', self snapshotWriterClass extension.
	self addString: (self serializeInBinary: aSnapshot) at: 'snapshot.bin'
!

writeVersion: aVersion
	self writeFormat.
	self writePackage: aVersion package.
	self writeVersionInfo: aVersion info.
	self writeDefinitions: aVersion.
	aVersion dependencies do: [:ea | self writeVersionDependency: ea]
!

writeVersionDependency: aVersionDependency
	| string |
	string _ (self serializeVersionInfo: aVersionDependency versionInfo).
	self addString: string at: 'dependencies/', aVersionDependency package name
!

writeVersionInfo: aVersionInfo
	| string |
	string _ self serializeVersionInfo: aVersionInfo.
	self addString: string at: 'version'.
! !

!MCMczWriter methodsFor:'writing'!

addString: string at: path
        | member |

        Smalltalk isSmalltalkX ifTrue:[
            zip addFile:path fromStream:(string readStream) compressMethod:(ZipArchive compressionDeflated)
        ] ifFalse:[
            member _ zip addString: string as: path.
            member desiredCompressionMethod: ZipArchive compressionDeflated 
        ]
!

flush
        Smalltalk isSmalltalkX ifTrue:[
            zip close.
            stream close.
            ^ self.
        ].

        zip writeTo: stream.
        stream close
! !

!MCMczWriter class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczWriter.st,v 1.2 2009-10-26 15:25:10 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczWriter.st,v 1.2 2009-10-26 15:25:10 cg Exp $'
! !