packages/PackageManager.st
author james
Thu, 10 Apr 2003 14:42:47 +0200
changeset 1242 a068bf774d2f
parent 1231 2f3a15bfac92
child 1244 93e70ae3c90f
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1231
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     1
"{ Package: 'stx:libbasic3' }"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     2
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     3
"{ NameSpace: Packages }"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     4
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     5
AbstractPackageManager subclass:#PackageManager
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     6
	instanceVariableNames:'workingPackage'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     7
	classVariableNames:''
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     8
	poolDictionaries:''
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     9
	category:'Package-Managers'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    10
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    11
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    12
PackageManager class instanceVariableNames:'currentPackage currentManager imageChanges'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    13
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    14
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    15
 No other class instance variables are inherited by this class.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    16
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    17
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    18
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    19
!PackageManager class methodsFor:'documentation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    20
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    21
documentation
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    22
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    23
    PackageManager smalltalkPackageManager
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    24
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    25
    [author:]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    26
         (james@miraculix)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    27
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    28
    [instance variables:]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    29
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    30
    [class variables:]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    31
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    32
    [see also:]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    33
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    34
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    35
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    36
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    37
documentation_exceptions
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    38
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    39
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    40
    ClassDescription fileOutErrorSignal 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    41
            can occur when a class within a package is autoloaded. Handle in application
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    42
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    43
    [author:]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    44
         (james@miraculix)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    45
    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    46
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    47
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    48
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    49
examples
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    50
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    51
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    52
  more examples to be added:
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    53
                                                                [exBegin]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    54
    ... add code fragment for 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    55
    ... executable example here ...
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    56
                                                                [exEnd]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    57
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    58
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    59
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    60
history
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    61
    "Created: / 27.1.2003 / 13:57:50 / james"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    62
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    63
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    64
!PackageManager class methodsFor:'instance creation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    65
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    66
initialize
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    67
    "Uninitialize Singleton"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    68
    currentManager ifNotNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    69
        currentManager uninitialize.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    70
        currentManager := nil.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    71
        currentPackage := nil.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    72
    ]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    73
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    74
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    75
    self initialize
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    76
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    77
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    78
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    79
newManagerOfCurrentImage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    80
    | anInstance |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    81
    anInstance := self new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    82
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    83
    self basicPackagesInImage do:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    84
        package isInstalled:true.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    85
        anInstance addPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    86
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    87
    ^ anInstance
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    88
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    89
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    90
currentManager := self newManagerOfCurrentImage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    91
"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    92
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    93
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    94
!PackageManager class methodsFor:'accessing'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    95
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    96
changes
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    97
    imageChanges ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    98
        imageChanges := OrderedCollection new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    99
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   100
    ^ imageChanges
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   101
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   102
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   103
smalltalkPackageManager
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   104
    "/ to clear the singleton for the moment
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   105
     | workingPackage packagesInImage|
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   106
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   107
    "/    self initialize.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   108
    currentManager 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   109
        ifNil:[ 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   110
            currentManager := self new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   111
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   112
            packagesInImage := self basicPackagesInImage.
1242
a068bf774d2f *** empty log message ***
james
parents: 1231
diff changeset
   113
            workingPackage := packagesInImage removeKey:#'__NoProject__' ifAbsent:[Package named:#'__NoProject__']. 
1231
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   114
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   115
            currentManager addPackages:(packagesInImage).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   116
            currentManager workingPackage:workingPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   117
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   118
    ^ currentManager
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   119
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   120
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   121
!PackageManager class methodsFor:'defaults'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   122
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   123
defaultPackages
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   124
    ^ DictionaryStack new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   125
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   126
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   127
!PackageManager class methodsFor:'factory'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   128
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   129
packageClass
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   130
    ^ Package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   131
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   132
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   133
!PackageManager class methodsFor:'temporary'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   134
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   135
basicPackagesInImage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   136
    "builds up dictionary of the packages in the system taking the information of the classes and
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   137
    methods so we have a complete picture but without the prerequisite information.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   138
    returns the dictionary"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   139
    | packagesInImage extentions clsPkg |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   140
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   141
    packagesInImage := Dictionary new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   142
    extentions := Dictionary new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   143
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   144
    "collect the classes and mark where the extentions are"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   145
    Smalltalk allClasses do:[:aClass |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   146
                clsPkg := aClass package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   147
                (packagesInImage at: clsPkg 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   148
                                 ifAbsentPut:[clsPkg == #'__NoProject__' ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   149
                                    (DefaultPackage named:clsPkg)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   150
                                 ] ifFalse:[(Package named:clsPkg)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   151
                                 ].         ])
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   152
                    addedClass:aClass.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   153
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   154
"/                aClass hasExtensions ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   155
                    aClass instAndClassSelectorsAndMethodsDo:[:sel :mthd |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   156
                        |mthdPkg|
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   157
                        mthdPkg := mthd package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   158
                        mthdPkg ~= clsPkg ifTrue:[| methodPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   159
                            "this is found out when you add a class!!"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   160
"/                            (packagesInImage at: clsPkg) removeMethod:mthd. "does not belong to the package"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   161
                            methodPackage := 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   162
                                    (packagesInImage at: mthdPkg ifAbsentPut:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   163
                                        mthdPkg == #'__NoProject__' ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   164
                                            (DefaultPackage named:mthdPkg)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   165
                                         ] ifFalse:[(Package named:mthdPkg)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   166
                                         ].         
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   167
                                     ]).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   168
                             methodPackage  addedMethod:mthd
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   169
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   170
                        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   171
"/                    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   172
                ] 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   173
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   174
    packagesInImage removeKey:#''.    "remove namespaces"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   175
    packagesInImage do:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   176
        aPackage initializeInstalled.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   177
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   178
    ^ packagesInImage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   179
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   180
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   181
!PackageManager methodsFor:'accessing'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   182
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   183
changes
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   184
    ^ self class changes
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   185
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   186
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   187
packageNamed:anIdentifier
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   188
    anIdentifier ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   189
        ^ nil
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   190
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   191
    workingPackage name == anIdentifier ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   192
        ^ workingPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   193
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   194
    ^ packages atKey:anIdentifier ifAbsent:[nil]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   195
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   196
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   197
packagesNamed:aCollectionOfPackageNames 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   198
    | aCol |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   199
    aCol := OrderedCollection new.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   200
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   201
    (aCollectionOfPackageNames includes:workingPackage name) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   202
        aCol add:workingPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   203
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   204
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   205
    aCol addAll: (aCollectionOfPackageNames collect:[:aName |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   206
        self packageNamed:aName
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   207
    ]).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   208
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   209
    ^ aCol
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   210
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   211
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   212
workingPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   213
    "return the value of the instance variable 'workingPackage' (automatically generated)"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   214
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   215
    ^ workingPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   216
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   217
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   218
workingPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   219
    workingPackage removeDependent:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   220
    workingPackage:= aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   221
    workingPackage addDependent:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   222
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   223
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   224
!PackageManager methodsFor:'adding & removing'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   225
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   226
addChange:aChange
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   227
    ^ self class changes add:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   228
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   229
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   230
addPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   231
    "the reciever needs to be dependent on the packages just in case they change"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   232
    aPackage addDependent:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   233
    self basicAddPackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   234
    self changed:#addPackage: with:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   235
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   236
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   237
addPackages:aPackages
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   238
    "the reciever needs to be dependent on the packages just in case they change"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   239
    aPackages do:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   240
        self basicAddPackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   241
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   242
    self changed:#addPackages: with:aPackages
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   243
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   244
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   245
basicAddPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   246
    "the reciever needs to be dependent on the packages just in case they change"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   247
    packages push:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   248
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   249
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   250
basicRemovePackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   251
    ^ packages removeKey:aPackage name
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   252
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   253
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   254
removeChange:aChange
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   255
    ^ self class changes remove:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   256
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   257
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   258
removePackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   259
    "the reciever needs to be dependent on the packages just in case they change"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   260
    aPackage removeDependent:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   261
    self basicRemovePackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   262
    self changed:#removePackage: with:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   263
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   264
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   265
removePackageNamed:aPackageName
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   266
    | aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   267
    aPackage := (packages removeKey:aPackageName).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   268
    aPackage removeDependent:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   269
    self changed:#removePackage: with:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   270
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   271
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   272
!PackageManager methodsFor:'api'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   273
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   274
addClass:aClass toPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   275
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   276
        self error:'The package manager does not know of the package ', aPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   277
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   278
    self moveClass:aClass toPackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   279
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   280
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   281
addMethod:aMethod toPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   282
    "add method to a package. At this point it is determined to be a loose method or not"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   283
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   284
        self error:'The package manager does not know of the package ', aPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   285
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   286
    aPackage addedMethod:aMethod
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   287
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   288
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   289
installPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   290
    "installs a package that the receiver is aware of into the image if not raise an error
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   291
    for the sender to catch so it is able to handle it"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   292
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   293
        self error:'The package manager does not know of the package ', aPackage name,' so it cannot be installed!!'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   294
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   295
    ^ (self getPackageHandlerForPackage:aPackage) installPackageIn:self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   296
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   297
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   298
loadPackageFromFile:aFilename 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   299
    "install a starter package which comes from a file. This is the
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   300
    a state where the package has not yet entered the image but it
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   301
    is a package that the receiver is aware of and has some initial
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   302
    information about. Return the installed Package"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   303
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   304
    ^ (self getPackageReaderForFile:aFilename) loadPackageIn:self .
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   305
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   306
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   307
moveClass:aClass toPackage:newOwnerPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   308
    "i have the responsibilty to set aClasses new variable (newOwnerPackage name) and
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   309
    all the methods in aClass with the same package name!!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   310
    "
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   311
    | oldOwnerPackage oldOwnerPackageName newOwnerPackageName|
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   312
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   313
    oldOwnerPackageName := aClass package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   314
    oldOwnerPackage := self packageNamed:aClass package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   315
    newOwnerPackageName := newOwnerPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   316
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   317
    aClass package:newOwnerPackageName.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   318
    aClass methodDictionary copy keysAndValuesDo:[:aMethodName :aMethod |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   319
        aMethod package == oldOwnerPackageName ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   320
            aMethod package:newOwnerPackageName    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   321
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   322
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   323
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   324
    oldOwnerPackage ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   325
        "error handling"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   326
        aClass setPackage:workingPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   327
        workingPackage addedClass:aClass.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   328
        oldOwnerPackage := workingPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   329
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   330
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   331
    self recoveryHandlerDo:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   332
        oldOwnerPackage movedClass:aClass toPackage:newOwnerPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   333
    ]  forException:PackageError.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   334
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   335
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   336
moveMethod:aMethod to:newOwnerPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   337
    | oldOwnerPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   338
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   339
    oldOwnerPackage := self packageNamed:aMethod package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   340
    oldOwnerPackage movedMethod:aMethod toPackage:newOwnerPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   341
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   342
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   343
removeClass:aClass fromPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   344
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   345
        self error:'The package manager does not know of the package ', aPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   346
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   347
    self moveClass:aClass toPackage:workingPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   348
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   349
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   350
removeMethod:aMethod fromPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   351
    "add method to a package. At this point it is determined to be a loose method or not"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   352
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   353
        self error:'The package manager does not know of the package ', aPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   354
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   355
    aPackage removedMethod:aMethod
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   356
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   357
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   358
savePackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   359
    self savePackage:aPackage as:aPackage filename.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   360
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   361
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   362
savePackage:aPackage as:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   363
    "saves a package that the receiver is aware of if not raise an error
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   364
    for the sender to catch so it is able to handle it"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   365
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   366
        self error:'This package manager is not responsible of the package ', aPackage name,' so it cannot be saved!!'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   367
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   368
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   369
    (self getPackageHandlerForPackage:aPackage) savePackageAs:aFilename.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   370
    ^ aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   371
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   372
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   373
uninstallPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   374
    "need to include the restoration of packages aPackage has overridden!!!!!!!!"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   375
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   376
        self error:'The package manager does not know of the package ', aPackage name,' so it cannot be uninstalled!!'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   377
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   378
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   379
    ^ aPackage uninstall.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   380
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   381
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   382
unloadPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   383
    "unloads the package from the receiver.Does not need to
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   384
     make any checks here as it is not installed."
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   385
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   386
    (self includesPackage:aPackage) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   387
        self error:'The package manager does not know of the package ', aPackage name.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   388
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   389
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   390
    aPackage isInstalled ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   391
        self uninstallPackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   392
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   393
    self removePackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   394
    ^ aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   395
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   396
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   397
!PackageManager methodsFor:'change & update'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   398
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   399
changeSetChanged:something with:aChange from:changedObject
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   400
    "find out what type of change it is and send the packages the corresponding
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   401
     message to is if they are affected. If they are they should (if they are behaving)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   402
    send me a change notification to inform me about it(see packageChanged:with:from:)!!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   403
    "
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   404
    aChange isCollection ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   405
        "after checking in"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   406
        ^ self "do i need to do anything???"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   407
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   408
    (aChange isClassChange) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   409
        self halt:' What is this???'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   410
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   411
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   412
    (aChange isMethodCategoryChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   413
        self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   414
            (aPackage isDependentOnMethodCategoryChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   415
                aPackage methodCategoryChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   416
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   417
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   418
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   419
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   420
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   421
    "the following is similar to the one above"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   422
    (aChange isMethodCategoryRenameChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   423
        self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   424
            (aPackage isDependentOnMethodCategoryRenameChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   425
                aPackage methodCategoryRenameChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   426
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   427
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   428
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   429
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   430
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   431
    aChange isMethodRemoveChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   432
        self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   433
            (aPackage isDependentOnMethodRemoveChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   434
                aPackage methodRemoveChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   435
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   436
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   437
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   438
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   439
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   440
    aChange isMethodChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   441
        "A new created method or a modified method"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   442
        self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   443
            (aPackage isDependentOnMethodChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   444
                aPackage methodChanged:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   445
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   446
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   447
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   448
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   449
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   450
    aChange isClassChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   451
        (aChange isClassRemoveChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   452
            self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   453
                (aPackage isDependentOnClassRemoveChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   454
                    aPackage classRemoveChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   455
                ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   456
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   457
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   458
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   459
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   460
        aChange isClassDefinitionChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   461
            "changes to instance variables, classVariableNames, poolDictionaries, category"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   462
            self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   463
                (aPackage isDependentOnClassDefinitionChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   464
                    aPackage classDefinitionChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   465
                ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   466
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   467
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   468
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   469
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   470
        (aChange isClassInstVarDefinitionChange)  ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   471
            self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   472
                (aPackage isDependentOnClassInstVarDefinitionChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   473
                    aPackage classInstVarDefinitionChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   474
                ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   475
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   476
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   477
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   478
        (aChange isClassRenameChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   479
            self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   480
                (aPackage isDependentOnClassRenameChange:aChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   481
                    aPackage classRenameChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   482
                ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   483
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   484
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   485
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   486
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   487
        
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   488
        self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   489
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   490
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   491
    self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   492
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   493
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   494
classPackageChange:classToMove oldPackageName:oldPackageName
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   495
    "reacts to a class package change
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   496
    Assertion:
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   497
        aClass package ~= oldPackageName
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   498
    "
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   499
    | newPackageName oldOwnerPackage newOwnerPackage|
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   500
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   501
    newPackageName := classToMove package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   502
    newOwnerPackage := self packageNamed:newPackageName.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   503
    oldOwnerPackage := self packageNamed:oldPackageName.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   504
    oldOwnerPackage movedClass:classToMove toPackage:newOwnerPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   505
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   506
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   507
methodPackageChange:aMethod class:methodOwnedClass oldPackageName:oldPackageName
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   508
    | newPackageName oldOwnerPackage newOwnerPackage|
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   509
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   510
    newPackageName := aMethod package.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   511
    oldOwnerPackage :=(self packageNamed:oldPackageName).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   512
    newOwnerPackage := (self packageNamed:newPackageName).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   513
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   514
    newOwnerPackage ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   515
        PackageError raiseErrorString:'The package ', newPackageName, ' is not known',
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   516
            ' to this packageManager', ' and so cannot realise this methodPackageChange'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   517
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   518
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   519
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   520
    oldOwnerPackage ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   521
        PackageError raiseErrorString:'The package ', oldPackageName, ' is not known',
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   522
            ' to this packageManager', ' and so cannot realise this methodPackageChange'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   523
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   524
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   525
    oldOwnerPackage movedMethod:aMethod toPackage:newOwnerPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   526
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   527
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   528
packageChanged:something with:aParameter from:changedObject
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   529
   "maybe send a change notification for views here???"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   530
"/    self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   531
    self addChange:aParameter
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   532
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   533
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   534
update:something with:aParameter from:changedObject
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   535
    #mayChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   536
    (self packagesIncludes:changedObject) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   537
        self packageChanged:something with:aParameter from:changedObject.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   538
        ^ self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   539
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   540
    (changedObject == ChangeSet current) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   541
        self changeSetChanged:something with:aParameter from:changedObject.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   542
        ^ self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   543
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   544
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   545
    (something == #projectOrganization) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   546
        aParameter ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   547
            "no need to know about this. It has probably already been past here already!!"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   548
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   549
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   550
        aParameter size == 2 ifTrue:[| oldPackageName |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   551
            (oldPackageName := aParameter second). 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   552
            (oldPackageName isSymbol) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   553
            self 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   554
                classPackageChange:aParameter first 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   555
                oldPackageName:aParameter second.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   556
            ^ self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   557
            ] ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   558
             "ignore"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   559
             ^ self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   560
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   561
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   562
        aParameter size == 3 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   563
            self 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   564
                methodPackageChange:(aParameter second)      
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   565
                class:(aParameter first) 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   566
                oldPackageName:(aParameter third).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   567
            ^ self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   568
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   569
        aParameter size == 1 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   570
            Transcript 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   571
                    nextPutAll:'From PackageManager>>update:with:from:' ; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   572
                    cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   573
                    nextPutAll:'When does this happen' ; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   574
                    cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   575
                    "checking out changedObject = Smalltalk"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   576
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   577
            ^ self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   578
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   579
        self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   580
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   581
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   582
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   583
xxxchangeSetChanged:something with:aChange from:changedObject
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   584
    "find out what type of change it is and send the packages the corresponding
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   585
     message to is if they are affected. If they are they should (if they are behaving)
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   586
    send me a change notification to inform me about it(see packageChanged:with:from:)!!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   587
    "
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   588
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   589
    |currentPackageID currentPackage previousPackageID previousPackage  |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   590
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   591
    "will this still be ok when we change package names? is this the same as
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   592
    currentPackage := workingPackage. ??"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   593
    currentPackageID := Class packageQuerySignal query. 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   594
    currentPackage :=(self packageNamed:currentPackageID).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   595
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   596
"------------------------------- method changes -------------------------------"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   597
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   598
    (aChange isMethodCategoryChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   599
        currentPackage methodCategoryChange:aChange. 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   600
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   601
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   602
    "the following is similar to the one above"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   603
    (aChange isMethodCategoryRenameChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   604
        self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   605
        currentPackage methodCategoryRenameChange:aChange.     
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   606
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   607
        previousPackageID := aChange previousPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   608
        previousPackage := (self packageNamed:previousPackageID).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   609
        previousPackage ~= currentPackage ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   610
            previousPackage methodCategoryRenameChange:aChange.  
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   611
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   612
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   613
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   614
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   615
    aChange isMethodChange ifTrue:[| isInitialMethod |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   616
        "A new created method or a modified method"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   617
        currentPackage methodChanged:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   618
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   619
        previousPackageID := aChange previousPackage.   
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   620
        isInitialMethod := previousPackageID isNil.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   621
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   622
        isInitialMethod ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   623
            previousPackage := (self packageNamed:previousPackageID).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   624
            previousPackage methodChanged:aChange.  
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   625
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   626
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   627
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   628
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   629
    aChange isMethodRemoveChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   630
        "there is no current version for this type of change!!"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   631
        previousPackageID := aChange previousPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   632
        previousPackage := (self packageNamed:previousPackageID).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   633
        previousPackage methodRemoveChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   634
        ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   635
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   636
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   637
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   638
"------------------------------- class changes -------------------------------"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   639
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   640
    aChange isClassChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   641
        (aChange isClassRemoveChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   642
            previousPackage := currentPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   643
            previousPackage classRemoveChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   644
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   645
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   646
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   647
        aChange isClassDefinitionChange ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   648
            "changes to instance variables class variables"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   649
            currentPackage classDefinitionChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   650
            ClassDefinitionChange::ClassBeingChangedQuery query ifNotNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   651
                self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   652
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   653
            previousPackageID := aChange previousPackage. "does not work"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   654
            previousPackage := (self packageNamed:previousPackageID).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   655
            previousPackage ~= currentPackage ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   656
                previousPackage classDefinitionChange:aChange.  
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   657
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   658
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   659
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   660
        (aChange isClassInstVarDefinitionChange)  ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   661
            previousPackage classInstVarDefinitionChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   662
            previousPackage ~= currentPackage ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   663
                currentPackage classInstVarDefinitionChange:aChange.  
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   664
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   665
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   666
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   667
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   668
        (aChange isClassRenameChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   669
            previousPackage classRenameChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   670
            previousPackage ~= currentPackage ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   671
                currentPackage classRenameChange:aChange.  
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   672
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   673
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   674
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   675
        (aChange isClassCommentChange) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   676
            previousPackage classRenameChange:aChange.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   677
            previousPackage ~= currentPackage ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   678
                currentPackage classRenameChange:aChange.  
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   679
            ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   680
            ^ self
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   681
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   682
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   683
        self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   684
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   685
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   686
    (aChange isClassChange) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   687
        self halt:' What is this???'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   688
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   689
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   690
   self halt.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   691
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   692
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   693
!PackageManager methodsFor:'checks'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   694
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   695
canLoadPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   696
    ""
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   697
    (self includesPackage:aPackage) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   698
        Notification raise.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   699
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   700
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   701
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   702
!PackageManager methodsFor:'enumarating'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   703
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   704
packagesDo:aOneArgBlock
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   705
    aOneArgBlock value:workingPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   706
    super packagesDo:aOneArgBlock.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   707
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   708
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   709
!PackageManager methodsFor:'errors'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   710
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   711
recoveryHandlerDo:aBlock forException:packageErrorClass
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   712
    "an atomic action is about to happen. This should succeed or
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   713
    fail and return to the previous state."
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   714
    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   715
    "to do - this could be done by an extra class.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   716
    could save the state of the receiver before this action is done
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   717
    along with a 'transaction number' held in the receivers class to make
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   718
    sure we are consistant. The hard copy could then be the backup. This
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   719
    all depends on how long it takes to make the backup and how often
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   720
    we are going to do this.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   721
    "
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   722
    packageErrorClass handle:[:ex |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   723
        Transcript show:ex errorString.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   724
    ] do:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   725
        aBlock value
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   726
    ]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   727
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   728
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   729
!PackageManager methodsFor:'factory'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   730
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   731
getPackageSaverForPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   732
    ^ StxPackageFileWriter forPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   733
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   734
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   735
newPackageNamed:aString 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   736
    | newPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   737
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   738
    (self includesPackageNamed:aString) ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   739
        self breakPoint:''. "put some sort of error here"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   740
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   741
    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   742
    newPackage := self packageClass named:aString addToManager:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   743
    newPackage initializeInstalled.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   744
    ^ newPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   745
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   746
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   747
packageClass
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   748
    ^ Package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   749
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   750
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   751
!PackageManager methodsFor:'initialization'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   752
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   753
initialize
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   754
    super initialize.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   755
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   756
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   757
uninitialize
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   758
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   759
    self packagesDo:[:aPackage |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   760
        self removeDependent:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   761
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   762
    workingPackage removeDependent:self.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   763
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   764
    packages := nil.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   765
    super uninitialize.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   766
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   767
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   768
!PackageManager methodsFor:'private-opening'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   769
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   770
getPackageHandlerForPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   771
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   772
    | aPackageHandler |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   773
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   774
    (aPackageHandler := aPackage packageHandler) ifNil:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   775
        aPackageHandler := PackageHandler forPackage:aPackage.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   776
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   777
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   778
    ^ aPackageHandler
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   779
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   780
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   781
getPackageReaderForFile:aFilename 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   782
    ^ StxPackageFileReader forFilename:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   783
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   784
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   785
!PackageManager methodsFor:'queries'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   786
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   787
packagesIncludes:anObject 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   788
    ^ ((packages includes:anObject)or:[workingPackage == anObject])
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   789
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   790
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   791
!PackageManager class methodsFor:'documentation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   792
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   793
version
1242
a068bf774d2f *** empty log message ***
james
parents: 1231
diff changeset
   794
    ^ '$Header: /cvs/stx/stx/libbasic3/packages/PackageManager.st,v 1.2 2003-04-10 12:42:47 james Exp $'
1231
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   795
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   796
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   797
PackageManager initialize!