--- a/Tools__StoreProjectBrowser.st Sat Aug 26 15:34:36 2006 +0200
+++ b/Tools__StoreProjectBrowser.st Sat Aug 26 19:39:52 2006 +0200
@@ -11,6 +11,34 @@
category:'System-SourceCodeManagement'
!
+Object subclass:#Pundle
+ instanceVariableNames:'name'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:StoreProjectBrowser
+!
+
+StoreProjectBrowser::Pundle subclass:#Package
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:StoreProjectBrowser
+!
+
+StoreProjectBrowser::Pundle subclass:#Bundle
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:StoreProjectBrowser
+!
+
+Object subclass:#PundleVersion
+ instanceVariableNames:'id pundle version user timestamp comment timestampInt commentId'
+ classVariableNames:''
+ poolDictionaries:''
+ privateIn:StoreProjectBrowser
+!
+
!StoreProjectBrowser class methodsFor:'documentation'!
documentation
@@ -102,7 +130,7 @@
adjust: left
)
(InputFieldSpec
- name: 'EntryField1'
+ name: 'PackageFilterEntryField'
layout: (LayoutFrame 2 0 30 0 -2 1 58 0)
model: packagesFilterHolder
immediateAccept: true
@@ -112,11 +140,12 @@
acceptOnPointerLeave: false
)
(SequenceViewSpec
- name: 'List1'
+ name: 'PackageList'
layout: (LayoutFrame 0 0 60 0 0 1 0 1)
model: selectedPackageHolder
hasHorizontalScrollBar: true
hasVerticalScrollBar: true
+ valueChangeSelector: packageSelectionChanged
useIndex: true
sequenceList: packagesList
)
@@ -149,6 +178,7 @@
hasVerticalScrollBar: true
useIndex: true
sequenceList: versionsList
+ valueChangeSelector: versionSelectionChanged
)
(ViewSpec
name: 'Box2'
@@ -301,6 +331,27 @@
^ newApp
! !
+!StoreProjectBrowser methodsFor:'actions'!
+
+packageSelectionChanged
+ |newest selectedItem|
+
+ selectedItem := packagesList value at:(selectedPackageHolder value).
+ self updateVersionsListFor:selectedItem.
+
+ versionsList notEmptyOrNil ifTrue:[
+ newest := versionsList value first.
+ self updateCommentFor:selectedItem
+ ].
+!
+
+versionSelectionChanged
+ |selectedItem|
+
+ selectedItem := versionsList value at:(selectedVersionHolder value).
+ self updateCommentFor:selectedItem
+! !
+
!StoreProjectBrowser methodsFor:'aspects'!
commentTextHolder
@@ -424,8 +475,131 @@
!StoreProjectBrowser methodsFor:'db access'!
+getBlob:id
+ |item cursor row blobType blobData|
+
+ item := Set new.
+ cursor := connection
+ execute:'SELECT blobtype,blobdata FROM tw_blob where primarykey = ',id printString,';'
+ release:false.
+
+ cursor next notNil ifTrue:[
+ row := cursor rowAsArray.
+ blobType := (row at:1).
+ blobData := Base64Coder decode:(row at:2).
+ ].
+ cursor release.
+
+ blobType == 1 ifTrue:[
+ "binary"
+ ^ blobData
+ ].
+ blobType == 2 ifTrue:[
+ "string"
+ ^ blobData asString
+ ].
+ blobType == 3 ifTrue:[
+ "2-byte string"
+self halt.
+ ^ nil
+ ].
+self halt.
+ ^ nil
+!
+
+getBundles
+ |items cursor row|
+
+ items := Set new.
+ cursor := connection
+ execute:'SELECT DISTINCT name FROM tw_bundle;'
+ release:false.
+
+ [cursor next notNil] whileTrue:[
+ row := cursor rowAsArray.
+ Transcript showCR:row.
+ items add:(Bundle new name:(row at:1)).
+ ].
+ cursor release.
+ ^ items asOrderedCollection sort:[:a :b| a name < b name]
+!
+
+getPackages
+ |items cursor row|
+
+ items := Set new.
+ cursor := connection
+ execute:'SELECT DISTINCT name FROM tw_package;'
+ release:false.
+
+ [cursor next notNil] whileTrue:[
+ row := cursor rowAsArray.
+ Transcript showCR:row.
+ items add:(Package new name:(row at:1)).
+ ].
+ cursor release.
+ ^ items asOrderedCollection sort:[:a :b| a name < b name]
+!
+
+getVersionsForBundle:aBundle
+ |items cursor row|
+
+ connection isNil ifTrue:[^ self ].
+
+ items := Set new.
+ cursor := connection
+ execute:'SELECT version,username,timestamp,commentid FROM tw_bundle WHERE name = ''',aBundle name,''';'
+ release:false.
+
+ [cursor next notNil] whileTrue:[
+ |v|
+
+ row := cursor rowAsArray.
+ Transcript showCR:row.
+ v := PundleVersion new.
+ v pundle:aBundle version:(row at:1) user:(row at:2).
+ v timestampInt:(row at:3) commentId:(row at:4).
+ items add:v.
+ ].
+ cursor release.
+ ^ items asOrderedCollection sort:[:a :b| a isVersionAfter: b]
+!
+
+getVersionsForPackage:aPackage
+ connection isNil ifTrue:[^ self ].
+self halt.
+!
+
+updateCommentFor:aPundleVersion
+ |comment|
+
+ comment := self getBlob:(aPundleVersion commentId).
+ self commentTextHolder value:comment.
+!
+
updatePackagesList
- self halt.
+ |bundles packages|
+
+ connection isNil ifTrue:[^ self ].
+
+ self withReadCursorDo:[
+ bundles := self getBundles.
+ packages := self getPackages.
+ ].
+ packagesList value:(bundles , packages).
+!
+
+updateVersionsListFor:aBundleOrPackage
+ |items|
+
+ self withReadCursorDo:[
+ aBundleOrPackage isBundle ifTrue:[
+ items := self getVersionsForBundle:aBundleOrPackage
+ ] ifFalse:[
+ items := self getVersionsForPackage:aBundleOrPackage
+ ].
+ ].
+ versionsList value:items.
! !
!StoreProjectBrowser methodsFor:'help'!
@@ -455,7 +629,7 @@
^ self
!
-postBuildWith:aBuilder
+postOpenWith:aBuilder
self updatePackagesList.
!
@@ -506,8 +680,140 @@
"/ HTMLDocumentView openFullOnDocumentationFile:'help/<MyApplication>/TOP.html'.
! !
+!StoreProjectBrowser::Pundle methodsFor:'accessing'!
+
+name
+ ^ name
+!
+
+name:something
+ name := something.
+! !
+
+!StoreProjectBrowser::Pundle methodsFor:'printing'!
+
+displayString
+ ^ name
+! !
+
+!StoreProjectBrowser::Pundle methodsFor:'testing'!
+
+isBundle
+ ^ false
+!
+
+isPackage
+ ^ false
+! !
+
+!StoreProjectBrowser::Package methodsFor:'testing'!
+
+isPackage
+ ^ true
+! !
+
+!StoreProjectBrowser::Bundle methodsFor:'printing'!
+
+displayString
+ ^ name ,' (Bundle)'
+! !
+
+!StoreProjectBrowser::Bundle methodsFor:'testing'!
+
+isBundle
+ ^ true
+! !
+
+!StoreProjectBrowser::PundleVersion methodsFor:'accessing'!
+
+commentId
+ ^ commentId
+!
+
+id
+ ^ id
+!
+
+id:something
+ id := something.
+!
+
+pundle
+ ^ pundle
+!
+
+pundle:pundleArg version:versionArg user:userArg
+ pundle := pundleArg.
+ version := versionArg.
+ user := userArg.
+!
+
+timestamp
+ |deltaSeconds|
+
+ timestamp isNil ifTrue:[
+ "/ to compute the timestamp, we have to do this:
+ "/ the timestampInt are seconds since 1993 + 10d + 19min + 47sec"
+ "/ can anyone explain this ????
+ deltaSeconds := 23*365 * 24*60*60. "/ 23 years
+ deltaSeconds := deltaSeconds + (233*24*60*60). "/ 10 days
+ deltaSeconds := deltaSeconds + (19*60). "/ 19 minutes
+ deltaSeconds := deltaSeconds + (47). "/ 47 seconds
+
+ timestamp := Timestamp secondsSince1970:(timestampInt + deltaSeconds).
+ ].
+ ^ timestamp
+!
+
+timestampInt:timestampIntArg commentId:commentIdArg
+ timestampInt := timestampIntArg.
+ commentId := commentIdArg.
+!
+
+user
+ ^ user
+!
+
+version
+ ^ version
+! !
+
+!StoreProjectBrowser::PundleVersion methodsFor:'comparing'!
+
+isVersionAfter:anotherVersion
+ |myMajor othersMajor myMinor othersMinor|
+
+ myMajor := self majorVersion.
+ othersMajor := anotherVersion majorVersion.
+
+ myMajor > othersMajor ifTrue:[^ true].
+ myMajor < othersMajor ifTrue:[^ false].
+
+ myMinor := self minorVersion.
+ othersMinor := anotherVersion minorVersion.
+
+ myMinor > othersMinor ifTrue:[^ true].
+ myMinor < othersMinor ifTrue:[^ false].
+
+ ^ version > anotherVersion version
+!
+
+majorVersion
+ ^ Integer readFrom:(version upTo:$:)
+!
+
+minorVersion
+ ^ Integer readFrom:((version restAfter:$.) upTo:$.)
+! !
+
+!StoreProjectBrowser::PundleVersion methodsFor:'printing'!
+
+displayString
+ ^ version , ' (',user,') ' , self timestamp printString
+! !
+
!StoreProjectBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/Tools__StoreProjectBrowser.st,v 1.1 2006-08-26 13:32:45 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/Tools__StoreProjectBrowser.st,v 1.2 2006-08-26 17:39:52 cg Exp $'
! !