--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/reports/Builder__ChangeReport.st Fri Jan 13 11:05:58 2012 +0100
@@ -0,0 +1,105 @@
+"{ Package: 'stx:goodies/builder/reports' }"
+
+"{ NameSpace: Builder }"
+
+Report subclass:#ChangeReport
+ instanceVariableNames:'gofer'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Builder-Reports-Unfinished'
+!
+
+
+!ChangeReport methodsFor:'accessing'!
+
+changesFor: aResolvedVersion
+ | references patch |
+ references := gofer allResolved
+ select: [ :each | each packageName = aResolvedVersion packageName ].
+ patch := MCPatch
+ fromBase: (references size > 1
+ ifTrue: [ (references at: references size - 1) version snapshot ]
+ ifFalse: [ MCSnapshot empty ])
+ target: aResolvedVersion version snapshot.
+ ^ patch operations asSortedCollection
+!
+
+resolved
+ ^ gofer resolved
+! !
+
+!ChangeReport methodsFor:'generating'!
+
+generateChange: aPatch on: aStream
+ aPatch isAddition
+ ifTrue: [ ^ self generateChangeAddition: aPatch on: aStream ].
+ aPatch isModification
+ ifTrue: [ ^ self generateChangeModification: aPatch on: aStream ].
+ aPatch isRemoval
+ ifTrue: [ ^ self generateChangeRemoval: aPatch on: aStream ]
+!
+
+generateChangeAddition: aPatch on: aStream
+ aStream tab; tab; tab; nextPutAll: '<item action="add">'; nextPutAll: (self encode: (self convert: aPatch summary)); nextPutAll: '</item>'; nextPut: Character lf
+!
+
+generateChangeModification: aPatch on: aStream
+ aStream tab; tab; tab; nextPutAll: '<item action="change">'; nextPutAll: (self encode: (self convert: aPatch summary)); nextPutAll: '</item>'; nextPut: Character lf
+!
+
+generateChangeRemoval: aPatch on: aStream
+ aStream tab; tab; tab; nextPutAll: '<item action="remove">'; nextPutAll: (self encode: (self convert: aPatch summary)); nextPutAll: '</item>'; nextPut: Character lf
+!
+
+generateChangeSet: aResolvedVersion on: aStream
+ | info |
+ info := aResolvedVersion version info.
+ aStream tab; nextPutAll: '<logentry version="'; nextPutAll: (self encode: info name); nextPutAll: '">'; nextPut: Character lf.
+ aStream tab; tab; nextPutAll: '<date>'; nextPutAll: (self encode: info date yyyymmdd); space; nextPutAll: (self encode: info time print24); nextPutAll: '</date>'; nextPut: Character lf.
+ aStream tab; tab; nextPutAll: '<author>'; nextPutAll: (self encode: info author); nextPutAll: '</author>'; nextPut: Character lf.
+ aStream tab; tab; nextPutAll: '<msg>'; nextPutAll: (self encode: (self convert: info message)); nextPutAll: '</msg>'; nextPut: Character lf.
+ "aStream tab; tab; nextPutAll: '<items>'; nextPut: Character lf.
+ (self changesFor: aResolvedVersion)
+ do: [ :each | self generateChange: each on: aStream ].
+ aStream tab; tab; nextPutAll: '</items>'; nextPut: Character lf."
+ aStream tab; nextPutAll: '</logentry>'; nextPut: Character lf
+!
+
+generateOn: aStream
+ aStream nextPutAll: '<?xml version="1.0" encoding="UTF-8"?>'; nextPut: Character lf.
+ aStream nextPutAll: '<changelog>'; nextPut: Character lf.
+ self resolved
+ do: [ :each | self generateChangeSet: each on: aStream ].
+ aStream nextPutAll: '<changelog>'
+! !
+
+!ChangeReport methodsFor:'initialization'!
+
+initializeOn: aCollection
+ gofer := Gofer new.
+ aCollection do: [ :each | gofer package: each ]
+! !
+
+!ChangeReport methodsFor:'running'!
+
+run
+ | stream |
+ stream := FileDirectory default containingDirectory
+ forceNewFileNamed: 'changelog.xml'.
+ [ self generateOn: stream ]
+ ensure: [ stream close ]
+! !
+
+!ChangeReport class methodsFor:'documentation'!
+
+version
+ ^ '$Header$'
+!
+
+version_CVS
+ ^ '$Header$'
+!
+
+version_SVN
+ ^ '§Id: Builder__ChangeReport.st 191 2011-08-06 20:59:23Z vranyj1 §'
+! !