core/MetacelloProject.st
changeset 14 f01fe37493e9
parent 11 d354ac2af7ec
child 16 25ac697dc747
equal deleted inserted replaced
13:48e7864158dd 14:f01fe37493e9
     1 "{ Package: 'stx:goodies/metacello/core' }"
     1 "{ Package: 'stx:goodies/metacello/core' }"
     2 
     2 
     3 Object subclass:#MetacelloProject
     3 Object subclass:#MetacelloProject
     4 	instanceVariableNames:'versionMap symbolicVersionMap errorMap loader loaderClass
     4 	instanceVariableNames:'versionMap symbolicVersionMap loader loaderClass loadType
     5 		loadType configuration projectAttributes versionNumberClass'
     5 		configuration projectAttributes'
     6 	classVariableNames:''
     6 	classVariableNames:''
     7 	poolDictionaries:''
     7 	poolDictionaries:''
     8 	category:'Metacello-Core-Model'
     8 	category:'Metacello-Core-Model'
     9 !
     9 !
    10 
    10 
    21 on: aConfig
    21 on: aConfig
    22 
    22 
    23 	^self basicNew configuration: aConfig; yourself
    23 	^self basicNew configuration: aConfig; yourself
    24 ! !
    24 ! !
    25 
    25 
    26 !MetacelloProject class methodsFor:'accessing'!
       
    27 
       
    28 versionConstructorClass
       
    29     ^ MetacelloVersionConstructor
       
    30 ! !
       
    31 
       
    32 !MetacelloProject methodsFor:'accessing'!
    26 !MetacelloProject methodsFor:'accessing'!
    33 
    27 
    34 configuration
    28 configuration
    35 	^ configuration
    29 	^ configuration
    36 !
    30 !
    40 !
    34 !
    41 
    35 
    42 defaultBlessing
    36 defaultBlessing
    43 
    37 
    44 	^#release
    38 	^#release
    45 !
       
    46 
       
    47 errorMap
       
    48 	^ errorMap
       
    49 !
       
    50 
       
    51 errorMap: anObject
       
    52     errorMap ifNil: [ errorMap := Dictionary new ].
       
    53     errorMap := anObject
       
    54 !
    39 !
    55 
    40 
    56 label
    41 label
    57 
    42 
    58 	^self configuration class name
    43 	^self configuration class name
   143 excludeFromLatestVersion
   128 excludeFromLatestVersion
   144 
   129 
   145 	^#(development broken baseline)
   130 	^#(development broken baseline)
   146 !
   131 !
   147 
   132 
   148 lookupVersion: aVersionString ifAbsent: aBlock
       
   149     "please use version:...this is a private method"
       
   150 
       
   151     ^ self map
       
   152         at: aVersionString
       
   153         ifAbsent: [ 
       
   154             (MetacelloVersionDefinitionError project: self project versionString: aVersionString)
       
   155                 exception: (self errorMap at: aVersionString ifAbsent: [ ^ aBlock value ]);
       
   156                 signal ]
       
   157 !
       
   158 
       
   159 platformAttributes
   133 platformAttributes
   160 
   134 
   161 	 ^self projectPlatformAttributes
   135 	 ^self projectPlatformAttributes
   162 !
   136 !
   163 
   137 
   189 sortedAndFilteredVersions
   163 sortedAndFilteredVersions
   190 
   164 
   191 		^(self map values asArray sort: [:a :b | a >= b ]) select: [:vrsn | (#(broken baseline) includes: vrsn blessing) not ].
   165 		^(self map values asArray sort: [:a :b | a >= b ]) select: [:vrsn | (#(broken baseline) includes: vrsn blessing) not ].
   192 ! !
   166 ! !
   193 
   167 
   194 !MetacelloProject methodsFor:'scripting'!
       
   195 
       
   196 projectForScriptEngine: aMetacelloScriptEngine
       
   197     ^ self projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: false
       
   198 !
       
   199 
       
   200 projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: aBool
       
   201     ^ self subclassResponsibility
       
   202 ! !
       
   203 
       
   204 !MetacelloProject methodsFor:'spec classes'!
   168 !MetacelloProject methodsFor:'spec classes'!
   205 
       
   206 baselineOfProjectSpec
       
   207     ^ self baselineOfProjectSpecClass for: self
       
   208 !
       
   209 
       
   210 baselineOfProjectSpecClass
       
   211     ^ self subclassResponsibility
       
   212 !
       
   213 
       
   214 baselineOfVersionSpecClass
       
   215     ^ self subclassResponsibility
       
   216 !
       
   217 
       
   218 configurationOfProjectSpec
       
   219     ^ self configurationOfProjectSpecClass for: self
       
   220 !
       
   221 
       
   222 configurationOfProjectSpecClass
       
   223     ^ self subclassResponsibility
       
   224 !
       
   225 
   169 
   226 defaultLoaderClass
   170 defaultLoaderClass
   227 
   171 
   228 	^MetacelloSpecLoader
   172 	^MetacelloSpecLoader
   229 !
   173 !
   257 loaderClass: aMetacelloSpecLoader
   201 loaderClass: aMetacelloSpecLoader
   258 
   202 
   259 	loaderClass := aMetacelloSpecLoader
   203 	loaderClass := aMetacelloSpecLoader
   260 !
   204 !
   261 
   205 
   262 packageSpec
       
   263 
       
   264         ^self packageSpecClass for: self
       
   265 
       
   266     "Created: / 05-09-2012 / 19:23:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   267 !
       
   268 
       
   269 packageSpecClass
       
   270 
       
   271     "JV@2012-09-05: Should be
       
   272 
       
   273     ^MetacelloPackageSpec
       
   274 
       
   275     but MetacelloPackageSpec belongs to MetacelloMC. I would suggest to
       
   276     create MetacelloPackageSpec in MetacelloCore and add MetacelloMCPackageSpec
       
   277     to MetacelloMC to keep it consistent"
       
   278 
       
   279     self subclassResponsibility
       
   280 
       
   281     "Created: / 05-09-2012 / 19:26:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   282 !
       
   283 
       
   284 packagesSpec
   206 packagesSpec
   285 
   207 
   286 	^self packagesSpecClass for: self
   208 	^self packagesSpecClass for: self
   287 !
   209 !
   288 
   210 
   305 
   227 
   306 	^self projectSpecClass for: self
   228 	^self projectSpecClass for: self
   307 !
   229 !
   308 
   230 
   309 projectSpecClass
   231 projectSpecClass
   310     ^ MetacelloProjectSpec
   232 
       
   233 	^self subclassResponsibility
   311 !
   234 !
   312 
   235 
   313 valueHolderSpec
   236 valueHolderSpec
   314 
   237 
   315 	^self valueHolderSpecClass for: self
   238 	^self valueHolderSpecClass for: self
   476 
   399 
   477 	^self symbolicVersionMap keys asArray sort: [:a :b | a <= b ]
   400 	^self symbolicVersionMap keys asArray sort: [:a :b | a <= b ]
   478 !
   401 !
   479 
   402 
   480 version: aVersionString
   403 version: aVersionString
   481     | vrsn |
   404 	| vrsn |
   482     aVersionString isSymbol
   405 	aVersionString isSymbol
   483         ifTrue: [ 
   406 		ifTrue: [ 
   484             | symbolicVersionString |
   407 			| symbolicVersionString |
   485             symbolicVersionString := self symbolicVersionMap
   408 			symbolicVersionString := self symbolicVersionMap
   486                 at: aVersionString
   409 				at: aVersionString
   487                 ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ].
   410 				ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ].
   488             symbolicVersionString == #'notDefined'
   411 			symbolicVersionString == #notDefined
   489                 ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ].
   412 				ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ].
   490             ^ self
   413 			^ self map
   491                 lookupVersion: symbolicVersionString
   414 				at: symbolicVersionString
   492                 ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ].
   415 				ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ].
   493     ^ self
   416 	^ self map
   494         lookupVersion: aVersionString
   417 		at: aVersionString
   495         ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]
   418 		ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]
   496 !
   419 !
   497 
   420 
   498 version: aVersionString ifAbsent: aBlock
   421 version: aVersionString ifAbsent: aBlock
   499 
   422 
   500 	^[ self version: aVersionString ] on: MetacelloVersionDoesNotExistError do: [:ex | aBlock value ].
   423 	^[ self version: aVersionString ] on: MetacelloVersionDoesNotExistError do: [:ex | aBlock value ].
   501 !
       
   502 
       
   503 versionNumberClass
       
   504     versionNumberClass ifNil: [ versionNumberClass := MetacelloVersionNumber ].
       
   505     ^ versionNumberClass
       
   506 !
       
   507 
       
   508 versionNumberClass: aClass
       
   509     versionNumberClass := aClass
       
   510 !
   424 !
   511 
   425 
   512 versions
   426 versions
   513 
   427 
   514 	^self map values asArray sort: [:a :b | a <= b ]
   428 	^self map values asArray sort: [:a :b | a <= b ]