ProjectDefinition.st
changeset 10716 4f7bca7c5516
parent 10713 5772d2920a27
child 10745 4ac84a1c1516
--- a/ProjectDefinition.st	Tue Sep 11 13:19:28 2007 +0200
+++ b/ProjectDefinition.st	Tue Sep 11 13:55:59 2007 +0200
@@ -93,6 +93,55 @@
 
 !ProjectDefinition class methodsFor:'accessing'!
 
+allPreRequisites
+    |setOfAllPreRequisites setOfExcludedPreRequisites setOfExcludedSubProjects allPreRequisites toAdd|
+
+    setOfExcludedPreRequisites := self excludedFromPreRequisites asSet.
+    setOfExcludedSubProjects := self excludedFromSubProjects asSet.
+
+    setOfAllPreRequisites := Set new.
+    allPreRequisites := OrderedCollection new.
+    toAdd := OrderedCollection new.
+    toAdd addAll:(self preRequisites).
+    toAdd addAll:(self subProjects ).
+
+    [toAdd notEmpty] whileTrue:[
+        |aPreRequisiteProjectID def|
+
+        aPreRequisiteProjectID := toAdd removeFirst.
+        (setOfAllPreRequisites includes:aPreRequisiteProjectID) ifFalse:[
+            (setOfExcludedPreRequisites includes:aPreRequisiteProjectID) ifFalse:[
+                (setOfExcludedSubProjects includes:aPreRequisiteProjectID) ifFalse:[
+                    allPreRequisites add:aPreRequisiteProjectID.
+                    setOfAllPreRequisites add:aPreRequisiteProjectID.
+
+                    def := ProjectDefinition definitionClassForPackage:aPreRequisiteProjectID.
+                    def isNil ifTrue:[
+                        Transcript showCR:'ProjectDefinition ',aPreRequisiteProjectID,' is missing - cannot find its preRequisites.'.
+                    ] ifFalse:[
+                        def preRequisites 
+                            select:[:eachSubPreRequisite | (setOfAllPreRequisites includes:eachSubPreRequisite) not]
+                            thenDo:[:eachSubPreRequisite | 
+                                        Transcript showCR:(aPreRequisiteProjectID,' requires ',eachSubPreRequisite).
+                                        toAdd add:eachSubPreRequisite ].
+                        def subProjects 
+                            select:[:eachSubSubRequisite | (setOfAllPreRequisites includes:eachSubSubRequisite) not]
+                            thenDo:[:eachSubSubRequisite | 
+                                        Transcript showCR:(aPreRequisiteProjectID,' hasSub ',eachSubSubRequisite).
+                                        toAdd add:eachSubSubRequisite ].
+                    ].
+                ]        
+            ]        
+        ]        
+    ].
+    ^ allPreRequisites.
+
+    "
+     exept_expeccoNET_application allPreRequisites   
+     alspa_batch_application allPreRequisites
+    "
+!
+
 initialClassNameForDefinitionOf:aPackageId
     |s|
 
@@ -3810,7 +3859,7 @@
 !ProjectDefinition class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.163 2007-09-11 10:00:09 fm Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.164 2007-09-11 11:55:59 fm Exp $'
 ! !
 
 ProjectDefinition initialize!