packages/StxPackageFileWriter.st
author james
Wed, 09 Apr 2003 13:38:42 +0200
changeset 1231 2f3a15bfac92
child 1238 b59fc0746f8c
permissions -rw-r--r--
initial checkin
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
Object subclass:#StxPackageFileWriter
2f3a15bfac92 initial checkin
james
parents:
diff changeset
     6
	instanceVariableNames:'handler stream'
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-Handlers'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    10
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    11
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    12
Object subclass:#Version1
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    13
	instanceVariableNames:'package'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    14
	classVariableNames:''
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    15
	poolDictionaries:''
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    16
	privateIn:StxPackageFileWriter
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    17
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    18
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    19
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    20
!StxPackageFileWriter class methodsFor:'instance creation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    21
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    22
forPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    23
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    24
    ^ (self version:1) forPackage:aPackage 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    25
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    26
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    27
version:aVersionNumber
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    28
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    29
    aVersionNumber == 1 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    30
        ^ Version1.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    31
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    32
    self error:'Version unknown'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    33
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    34
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    35
!StxPackageFileWriter::Version1 class methodsFor:'instance creation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    36
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    37
forPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    38
    ^ self basicNew package:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    39
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    40
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    41
!StxPackageFileWriter::Version1 methodsFor:'accessing'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    42
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    43
fileOutVersion
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    44
    ^ 1
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    45
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    46
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    47
package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    48
    "return the value of the instance variable 'package' (automatically generated)"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    49
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    50
    ^ package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    51
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    52
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    53
package:something
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    54
    "set the value of the instance variable 'package' (automatically generated)"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    55
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    56
    package := something.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    57
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    58
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    59
!StxPackageFileWriter::Version1 methodsFor:'api'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    60
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    61
savePackageAs:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    62
    | writeStream |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    63
    self createPathFor:aFilename.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    64
    [ 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    65
        self canWriteTo:aFilename. "may return exceptions"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    66
        writeStream := aFilename writeStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    67
        self savePackageOn:writeStream.   "may return exceptions"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    68
    ] ensure:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    69
        writeStream close.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    70
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    71
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    72
    package markClean.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    73
    ^ package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    74
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    75
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    76
savePackageOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    77
    self forPackage:package saveInstallationScriptChunkOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    78
    self forPackage:package saveClassDefinitionsOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    79
    self forPackage:package saveLooseMethodsOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    80
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    81
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    82
!StxPackageFileWriter::Version1 methodsFor:'fileOut - chunks'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    83
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    84
forPackage:aPackage saveClassDefinitionsOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    85
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    86
    aPackage classNames size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    87
        aWriteStream nextPutAll:'"Class Definitions"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    88
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    89
        aPackage classNames do:[:aClass |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    90
            self fileOutClass:(Smalltalk at:aClass) on:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    91
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    92
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    93
        aWriteStream nextPutAll:'"End of Class Definitions"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    94
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    95
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    96
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    97
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    98
forPackage:aPackage saveInstallationScriptChunkOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
    99
    "create an installation script which is used to create
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   100
     an initial package which can help determine if the package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   101
     is loadable"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   102
    self forPackage:aPackage savePackageFormatOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   103
    self forPackage:aPackage savePackageInstanceCreationOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   104
    self forPackage:aPackage savePackageFileVersionOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   105
    self forPackage:aPackage savePackageCommentOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   106
    self forPackage:aPackage saveClassNamesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   107
    self forPackage:aPackage saveLooseMethodNamesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   108
    self forPackage:aPackage saveScriptsOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   109
    self forPackage:aPackage savePrerequisitesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   110
    self forPackage:aPackage saveEndingOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   111
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   112
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   113
forPackage:aPackage saveLooseMethodsOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   114
    aPackage looseMethods size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   115
        aWriteStream nextPutAll:'"LooseMethods"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   116
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   117
        aPackage looseMethods do:[:aLooseMethod |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   118
            self fileOutLooseMethod:aLooseMethod on:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   119
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   120
        aWriteStream nextPutAll:'!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   121
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   122
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   123
        aWriteStream nextPutAll:'"End of LooseMethods"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   124
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   125
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   126
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   127
!StxPackageFileWriter::Version1 methodsFor:'fileOut - subparts'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   128
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   129
fileOutClass:aClass on:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   130
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   131
    "ClassDescription fileOutErrorSignal can occur here from autoloaded classes"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   132
    aClass isLoaded ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   133
        aClass autoload
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   134
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   135
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   136
    package blockedMethods isEmpty ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   137
        Transcript 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   138
                nextPutAll:'Finnish me!!'; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   139
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   140
                nextPutAll:'''blockedMethods '' are not accounted for at the moment!!'' in:'; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   141
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   142
                nextPutAll:'Packages::StxPackageFileWriter::Version1>>fileOutClass:on:'  ; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   143
                cr
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   144
        
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   145
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   146
    aClass fileOutOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   147
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   148
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   149
fileOutLooseMethod:aMethod on:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   150
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   151
    aWriteStream nextPut:$!!.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   152
    aWriteStream nextPutAll:aMethod mclass asString.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   153
    aWriteStream nextPutAll:' methodsFor:'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   154
    aWriteStream nextPut:$'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   155
    aWriteStream nextPutAll:(aMethod category).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   156
    aWriteStream nextPut:$'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   157
    aWriteStream nextPut:$!!.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   158
    aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   159
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   160
    aWriteStream nextPutAll:aMethod source.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   161
    aWriteStream nextPut:$!!.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   162
    aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   163
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   164
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   165
forPackage:aPackage saveClassNamesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   166
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   167
    aPackage classNames size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   168
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   169
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   170
            nextPutAll:'"ClassNames"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   171
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   172
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   173
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   174
            nextPutAll:'aPackage ';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   175
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   176
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   177
        aPackage classNames do:[:aClassname |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   178
            aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   179
                nextPutAll:'    addClassNamed:#', aClassname, ';';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   180
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   181
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   182
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   183
        aWriteStream nextPutAll:'    yourself.'; "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   184
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   185
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   186
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   187
            nextPutAll:'"End of ClassNames"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   188
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   189
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   190
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   191
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   192
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   193
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   194
forPackage:aPackage saveEndingOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   195
    aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   196
        nextPutAll:'aPackage!!';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   197
        cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   198
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   199
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   200
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   201
forPackage:aPackage saveLooseMethodNamesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   202
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   203
    aPackage looseMethods size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   204
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   205
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   206
            nextPutAll:'"LooseMethodNames"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   207
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   208
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   209
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   210
            nextPutAll:'aPackage ';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   211
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   212
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   213
        aPackage looseMethods do:[:aMethod |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   214
            aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   215
                nextPutAll:'    addMethodNamed:#', aMethod name, ' forClassNamed:#', aMethod mclass name,';';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   216
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   217
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   218
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   219
        aWriteStream nextPutAll:'    yourself.'. "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   220
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   221
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   222
            nextPutAll:'"End of LooseMethodNames"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   223
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   224
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   225
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   226
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   227
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   228
forPackage:aPackage savePackageCommentOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   229
    aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   230
        nextPutAll:'aPackage packageComment:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   231
        nextPutAll:aPackage packageComment ? '''''';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   232
        nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   233
        cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   234
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   235
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   236
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   237
forPackage:aPackage savePackageFileVersionOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   238
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   239
    aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   240
        nextPutAll:'aPackage packageVersion:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   241
        nextPutAll:self fileOutVersion printString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   242
        nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   243
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   244
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   245
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   246
forPackage:aPackage savePackageFormatOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   247
    aWriteStream nextPutAll:'!!Packages::PackageHandler openStxPackageFormat:1!!';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   248
    cr
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   249
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   250
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   251
forPackage:aPackage savePackageInstanceCreationOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   252
    aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   253
        nextPutAll:'|aPackage|';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   254
        cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   255
        nextPutAll:'aPackage := Package named: ';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   256
        nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   257
        nextPutAll:aPackage name;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   258
        nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   259
        nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   260
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   261
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   262
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   263
forPackage:aPackage savePrerequisitesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   264
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   265
    aPackage prerequisites size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   266
        aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   267
            nextPutAll:'"Prerequisites"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   268
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   269
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   270
        self forPackage:aPackage savePrerequisteClassesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   271
        self forPackage:aPackage  savePrerequistePackagesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   272
        aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   273
            nextPutAll:'"End of Prerequisites"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   274
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   275
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   276
        
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   277
    ]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   278
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   279
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   280
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   281
forPackage:aPackage savePrerequisteClassesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   282
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   283
    aPackage classPrerequisites size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   284
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   285
        aPackage classPrerequisites do:[:prerequisite |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   286
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   287
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   288
                nextPutAll:'aPackage' ;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   289
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   290
                nextPutAll:'   addClassNamePrerequisite:#', prerequisite name;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   291
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   292
                nextPutAll:'   ifFailString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   293
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   294
                nextPutAll:prerequisite ifFailedString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   295
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   296
                nextPut:$;;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   297
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   298
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   299
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   300
        aWriteStream nextPutAll:'   yourself.'; "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   301
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   302
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   303
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   304
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   305
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   306
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   307
forPackage:aPackage savePrerequistePackagesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   308
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   309
    aPackage packagePrerequisites size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   310
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   311
        aPackage packagePrerequisites do:[:prerequisite |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   312
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   313
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   314
                nextPutAll:'aPackage' ;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   315
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   316
                nextPutAll:'   addPackageNamePrerequisite:#', prerequisite name;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   317
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   318
                nextPutAll:'   ifFailString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   319
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   320
                nextPutAll:prerequisite ifFailedString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   321
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   322
                nextPut:$;;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   323
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   324
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   325
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   326
        aWriteStream nextPutAll:'   yourself.'; "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   327
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   328
    ]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   329
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   330
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   331
forPackage:aPackage saveScriptsOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   332
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   333
    aPackage scripts size > 0 ifTrue:[ | aScript |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   334
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   335
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   336
            nextPutAll:'"Scripts"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   337
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   338
        (aScript := aPackage postInstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   339
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   340
                nextPutAll:'aPackage postInstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   341
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   342
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   343
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   344
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   345
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   346
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   347
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   348
        (aScript := aPackage preInstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   349
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   350
                nextPutAll:'aPackage preInstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   351
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   352
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   353
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   354
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   355
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   356
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   357
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   358
        (aScript := aPackage postUninstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   359
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   360
                nextPutAll:'aPackage postUninstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   361
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   362
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   363
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   364
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   365
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   366
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   367
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   368
        (aScript := aPackage postUninstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   369
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   370
                nextPutAll:'aPackage preUninstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   371
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   372
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   373
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   374
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   375
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   376
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   377
        aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   378
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   379
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   380
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   381
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   382
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   383
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   384
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   385
!StxPackageFileWriter::Version1 methodsFor:'helpers'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   386
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   387
createPathFor:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   388
    " create the path name for the filename if it does not already exist"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   389
    ^ aFilename directory makeDirectory.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   390
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   391
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   392
!StxPackageFileWriter::Version1 methodsFor:'instance creation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   393
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   394
forPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   395
    ^ self basicNew package:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   396
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   397
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   398
!StxPackageFileWriter::Version1 methodsFor:'queries'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   399
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   400
canWriteTo:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   401
    "return an error if the reciever cannot write to aFilename"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   402
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   403
    aFilename isFilename ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   404
        ^ self error:aFilename printString, ' is not a filename so cannot be written to.'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   405
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   406
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   407
    aFilename directory exists ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   408
        ^ self error:aFilename directory printString, ' directory does not exist.'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   409
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   410
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   411
    aFilename directory canBeWritten ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   412
        ^ self error:aFilename printString, ' cannot be written to.'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   413
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   414
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   415
    (aFilename isDirectory not) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   416
        ^ self error:aFilename printString, ' is a directory and cannot be written to'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   417
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   418
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   419
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   420
!StxPackageFileWriter class methodsFor:'documentation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   421
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   422
version
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   423
    ^ '$Header: /cvs/stx/stx/libbasic3/packages/StxPackageFileWriter.st,v 1.1 2003-04-09 11:34:02 james Exp $'
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   424
! !