--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MCMczWriter.st Wed Nov 22 14:05:07 2006 +0100
@@ -0,0 +1,136 @@
+"{ 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 |
+ s _ RWBinaryOrTextStream on: String new.
+ writer _ self snapshotWriterClass on: s.
+ writer writeDefinitions: aCollection.
+ ^ s contents
+!
+
+serializeInBinary: aSnapshot
+ | writer s |
+ 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 |
+ member _ zip addString: string as: path.
+ member desiredCompressionMethod: ZipArchive compressionDeflated
+
+!
+
+flush
+ zip writeTo: stream.
+ stream close
+! !
+
+!MCMczWriter class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczWriter.st,v 1.1 2006-11-22 13:05:07 cg Exp $'
+! !