MCDependencySorter.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 619 12fc8c0ad5c8
child 1095 87f223484bc3
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#MCDependencySorter
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'required provided orderedItems'
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
619
12fc8c0ad5c8 category change
Claus Gittinger <cg@exept.de>
parents: 357
diff changeset
     7
	category:'SCM-Monticello-Loading'
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    11
!MCDependencySorter class methodsFor:'initialization'!
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    12
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    13
new
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    14
    ^self basicNew initialize
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    15
! !
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    16
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!MCDependencySorter class methodsFor:'as yet unclassified'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
items: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	^ self new addAll: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
sortItems: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	| sorter |
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    25
	sorter := self items: aCollection.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	sorter externalRequirements do: [:req  | sorter addProvision: req].
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	^ sorter orderedItems.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
!MCDependencySorter methodsFor:'accessing'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
externalRequirements
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
	| unloaded providedByUnloaded |
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	unloaded := self itemsWithMissingRequirements.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
	providedByUnloaded := (unloaded gather: [:e | e provisions]) asSet.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
	^ required keys reject: [:ea | providedByUnloaded includes: ea ]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
itemsWithMissingRequirements
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	| items |
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    41
	items := Set new.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
	required do: [:ea | items addAll: ea].
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
	^ items
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    44
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!MCDependencySorter methodsFor:'building'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
add: anItem
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
	| requirements |
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    51
	requirements := self unresolvedRequirementsFor: anItem.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	requirements isEmpty
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
		ifTrue: [self addToOrder: anItem]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
		ifFalse: [self addRequirements: requirements for: anItem]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
addAll: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	aCollection asArray sort do: [:ea | self add: ea]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
addExternalProvisions: aCollection
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
	(aCollection intersection: self externalRequirements)
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
		do: [:ea | self addProvision: ea]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    66
!MCDependencySorter methodsFor:'initialization'!
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
initialize
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    69
	super initialize.
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    70
	provided := Set new.
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    71
	required := Dictionary new.
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    72
	orderedItems := OrderedCollection new.
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!MCDependencySorter methodsFor:'private'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
addProvision: anObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	| newlySatisfied |
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	provided add: anObject.
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
    80
	newlySatisfied := required removeKey: anObject ifAbsent: [#()].
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
	self addAll: newlySatisfied.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
addRequirement: reqObject for: itemObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	(self itemsRequiring: reqObject) add: itemObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
addRequirements: aCollection for: anObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	aCollection do: [:ea | self addRequirement: ea for: anObject]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
addToOrder: anItem
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
	orderedItems add: anItem.
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
	anItem provisions do: [:ea | self addProvision: ea].
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
itemsRequiring: anObject
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
	^ required at: anObject ifAbsentPut: [Set new]
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
unresolvedRequirementsFor: anItem
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	^ anItem requirements difference: provided
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
!MCDependencySorter methodsFor:'sorting'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
orderedItems
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
	^ orderedItems
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
! !
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
!MCDependencySorter class methodsFor:'documentation'!
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
version
619
12fc8c0ad5c8 category change
Claus Gittinger <cg@exept.de>
parents: 357
diff changeset
   114
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCDependencySorter.st,v 1.4 2012-09-11 21:21:20 cg Exp $'
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   115
!
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   116
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   117
version_CVS
619
12fc8c0ad5c8 category change
Claus Gittinger <cg@exept.de>
parents: 357
diff changeset
   118
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCDependencySorter.st,v 1.4 2012-09-11 21:21:20 cg Exp $'
236
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   119
!
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   120
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   121
version_SVN
9d2323edb4ec added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 69
diff changeset
   122
    ^ '§Id: MCDependencySorter.st 7 2010-09-12 07:18:55Z vranyj1 §'
69
820c8523f020 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
! !