core/MetacelloProject.st
changeset 16 25ac697dc747
parent 14 f01fe37493e9
child 20 8caf2f257260
--- a/core/MetacelloProject.st	Tue Sep 18 13:11:39 2012 +0000
+++ b/core/MetacelloProject.st	Tue Sep 18 18:24:44 2012 +0000
@@ -1,8 +1,8 @@
 "{ Package: 'stx:goodies/metacello/core' }"
 
 Object subclass:#MetacelloProject
-	instanceVariableNames:'versionMap symbolicVersionMap loader loaderClass loadType
-		configuration projectAttributes'
+	instanceVariableNames:'versionMap symbolicVersionMap errorMap loader loaderClass
+		loadType configuration projectAttributes versionNumberClass'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Metacello-Core-Model'
@@ -23,6 +23,12 @@
 	^self basicNew configuration: aConfig; yourself
 ! !
 
+!MetacelloProject class methodsFor:'accessing'!
+
+versionConstructorClass
+    ^ MetacelloVersionConstructor
+! !
+
 !MetacelloProject methodsFor:'accessing'!
 
 configuration
@@ -38,6 +44,15 @@
 	^#release
 !
 
+errorMap
+	^ errorMap
+!
+
+errorMap: anObject
+    errorMap ifNil: [ errorMap := Dictionary new ].
+    errorMap := anObject
+!
+
 label
 
 	^self configuration class name
@@ -130,6 +145,17 @@
 	^#(development broken baseline)
 !
 
+lookupVersion: aVersionString ifAbsent: aBlock
+    "please use version:...this is a private method"
+
+    ^ self map
+        at: aVersionString
+        ifAbsent: [ 
+            (MetacelloVersionDefinitionError project: self project versionString: aVersionString)
+                exception: (self errorMap at: aVersionString ifAbsent: [ ^ aBlock value ]);
+                signal ]
+!
+
 platformAttributes
 
 	 ^self projectPlatformAttributes
@@ -165,8 +191,38 @@
 		^(self map values asArray sort: [:a :b | a >= b ]) select: [:vrsn | (#(broken baseline) includes: vrsn blessing) not ].
 ! !
 
+!MetacelloProject methodsFor:'scripting'!
+
+projectForScriptEngine: aMetacelloScriptEngine
+    ^ self projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: false
+!
+
+projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: aBool
+    ^ self subclassResponsibility
+! !
+
 !MetacelloProject methodsFor:'spec classes'!
 
+baselineOfProjectSpec
+    ^ self baselineOfProjectSpecClass for: self
+!
+
+baselineOfProjectSpecClass
+    ^ self subclassResponsibility
+!
+
+baselineOfVersionSpecClass
+    ^ self subclassResponsibility
+!
+
+configurationOfProjectSpec
+    ^ self configurationOfProjectSpecClass for: self
+!
+
+configurationOfProjectSpecClass
+    ^ self subclassResponsibility
+!
+
 defaultLoaderClass
 
 	^MetacelloSpecLoader
@@ -229,8 +285,7 @@
 !
 
 projectSpecClass
-
-	^self subclassResponsibility
+    ^ MetacelloProjectSpec
 !
 
 valueHolderSpec
@@ -401,21 +456,21 @@
 !
 
 version: aVersionString
-	| vrsn |
-	aVersionString isSymbol
-		ifTrue: [ 
-			| symbolicVersionString |
-			symbolicVersionString := self symbolicVersionMap
-				at: aVersionString
-				ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ].
-			symbolicVersionString == #notDefined
-				ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ].
-			^ self map
-				at: symbolicVersionString
-				ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ].
-	^ self map
-		at: aVersionString
-		ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]
+    | vrsn |
+    aVersionString isSymbol
+        ifTrue: [ 
+            | symbolicVersionString |
+            symbolicVersionString := self symbolicVersionMap
+                at: aVersionString
+                ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ].
+            symbolicVersionString == #'notDefined'
+                ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ].
+            ^ self
+                lookupVersion: symbolicVersionString
+                ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ].
+    ^ self
+        lookupVersion: aVersionString
+        ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]
 !
 
 version: aVersionString ifAbsent: aBlock
@@ -423,6 +478,15 @@
 	^[ self version: aVersionString ] on: MetacelloVersionDoesNotExistError do: [:ex | aBlock value ].
 !
 
+versionNumberClass
+    versionNumberClass ifNil: [ versionNumberClass := MetacelloVersionNumber ].
+    ^ versionNumberClass
+!
+
+versionNumberClass: aClass
+    versionNumberClass := aClass
+!
+
 versions
 
 	^self map values asArray sort: [:a :b | a <= b ]