MetacelloVersion.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 03 Sep 2012 13:10:51 +0000
changeset 3 504152ada1fc
parent 1 9e312de5f694
permissions -rw-r--r--
fixed stc-compilability

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

Magnitude subclass:#MetacelloVersion
	instanceVariableNames:'spec versionNumber importedVersions versionStatus'
	classVariableNames:''
	poolDictionaries:''
	category:'Metacello-Core-Model'
!


!MetacelloVersion class methodsFor:'instance creation'!

fromSpec: aMetacelloVersionSpec
    ^ (self new versionNumber: aMetacelloVersionSpec versionNumber)
        spec: aMetacelloVersionSpec;
        yourself
!

fromString: aString

	^self new versionNumber: aString asMetacelloVersionNumber
! !

!MetacelloVersion methodsFor:'accessing'!

basicSpec
    ^ self spec
!

importedVersions

	importedVersions == nil ifTrue: [ importedVersions := #() ].
	^importedVersions
!

importedVersions: aCollection

	importedVersions := aCollection
!

projectLabel
    ^ self basicSpec projectLabel
!

spec

	^spec
!

spec: aMetacellVersionSpec

	spec := aMetacellVersionSpec
!

versionNumber: aVersionNumber

	versionNumber := aVersionNumber
!

versionSpec

	^self spec
!

versionStatus

	versionStatus == nil ifTrue: [ versionStatus := self computeVersionStatus].
	^versionStatus
!

versionStatus: aSymbol

	versionStatus := aSymbol
! !

!MetacelloVersion methodsFor:'actions'!

load

	^self subclassResponsibility
!

load: required

	^self subclassResponsibility
!

unload

	^self spec unload
! !

!MetacelloVersion methodsFor:'comparing'!

< aMetacelloVersion

	aMetacelloVersion species = self species ifFalse: [ ^false ].
	^self versionNumber < aMetacelloVersion versionNumber
!

= aMetacelloVersion

	aMetacelloVersion species = self species ifFalse: [ ^false ].
	^self versionNumber = aMetacelloVersion versionNumber
!

hash

	^self versionNumber hash
!

~> aMetacelloVersion

	aMetacelloVersion species = self species ifFalse: [ ^false ].
	^self versionNumber ~> aMetacelloVersion versionNumber
! !

!MetacelloVersion methodsFor:'printing'!

printOn: aStream
    | label vs |
    self blessing ~~ #'broken'
        ifTrue: [ 
            (vs := self versionStatus) == #'somethingLoaded'
                ifTrue: [ aStream nextPutAll: '<>' ].
            vs == #'loadedMatchConstraints'
                ifTrue: [ aStream nextPutAll: '>=' ].
            vs == #'loadedToSpec'
                ifTrue: [ aStream nextPut: $~ ] ].
    self versionNumber printOn: aStream.
    self basicSpec ~~ nil
        ifTrue: [ 
            (label := self projectLabel) isEmpty
                ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ]
! !

!MetacelloVersion methodsFor:'private'!

computeVersionStatus
	"
		#allLoadedToSpec - all projects and packages are loaded and match specification
		#loadedToSpec - all loaded projects and packages match specifications (at least one package loaded)
		#loadedMatchConstraints - all loaded projects and packages match constraints (at least one package loaded)
		#somethingLoaded - at least one package loaded
	"

	self spec computeVersionStatus: [ :status | ^ status ].
	^ #noStatus
! !

!MetacelloVersion methodsFor:'querying'!

author

	^self spec author value
!

blessing
    ^ self basicSpec blessing value
!

description
    ^ self basicSpec description value
!

loader

	^self spec loader
!

project
    ^ self basicSpec project
!

timestamp
    ^ self basicSpec timestamp value
!

versionKey
    "version printString, without the versionStatus decorations, suitable for using as a unique key for the 
	 receiver in a dictionary"

    ^ String
        streamContents: [ :aStream | 
            | label |
            self versionNumber printOn: aStream.
            self basicSpec ~~ nil
                ifTrue: [ 
                    (label := self projectLabel) isEmpty
                        ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ] ]
!

versionNumber

	^versionNumber
!

versionNumberFrom: aString
    ^ self versionNumber class fromString: aString
!

versionString

	^self versionNumber versionString
! !

!MetacelloVersion methodsFor:'testing'!

isAllLoadedToSpec
	"all projects and packages are loaded and match specification"
	
	^self spec isAllLoadedToSpec
!

isLoadedMatchConstraints
	"all loaded projects and packages match constraints"
	
	^self spec isLoadedMatchConstraints
!

isLoadedToSpec
	"all loaded projects and packages match specifications"
	
	^self spec isLoadedToSpec
!

isPossibleBaseline

	^self spec isPossibleBaseline
!

isSomethingLoaded
	"at least one project or package has been loaded"
	
	^self spec isSomethingLoaded
!

name

	^self versionString
! !

!MetacelloVersion class methodsFor:'documentation'!

version_SVN
    ^ '$Id::                                                                                                                        $'
! !