packages/StxPackageFileWriter.st
author james
Thu, 10 Apr 2003 12:02:49 +0200
changeset 1240 6ab560ffad2c
parent 1238 b59fc0746f8c
child 1268 9dc8d1b8ce9b
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
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.
1240
6ab560ffad2c *** empty log message ***
james
parents: 1238
diff changeset
    89
        aPackage classesDo:[:aClass |
6ab560ffad2c *** empty log message ***
james
parents: 1238
diff changeset
    90
            aClass nameSpace isNameSpace ifTrue:[
6ab560ffad2c *** empty log message ***
james
parents: 1238
diff changeset
    91
                self fileOutClass:aClass on:aWriteStream.
1238
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    92
            ] ifFalse:[| ownerClass |
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    93
                "aClass is a privateClass"
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    94
                ownerClass := aClass nameSpace package.
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    95
                ownerClass package == aPackage name ifFalse:[
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    96
                ]. "ifTrue:[
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    97
                    Do nothing - the class has already been filed out by its ownerClass!!
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    98
                ]."
b59fc0746f8c changed #forPackage:saveClassDefinitionsOn:
james
parents: 1231
diff changeset
    99
            ]
1231
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   100
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   101
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   102
        aWriteStream nextPutAll:'"End of Class Definitions"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   103
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   104
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   105
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   106
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   107
forPackage:aPackage saveInstallationScriptChunkOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   108
    "create an installation script which is used to create
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   109
     an initial package which can help determine if the package
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   110
     is loadable"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   111
    self forPackage:aPackage savePackageFormatOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   112
    self forPackage:aPackage savePackageInstanceCreationOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   113
    self forPackage:aPackage savePackageFileVersionOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   114
    self forPackage:aPackage savePackageCommentOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   115
    self forPackage:aPackage saveClassNamesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   116
    self forPackage:aPackage saveLooseMethodNamesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   117
    self forPackage:aPackage saveScriptsOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   118
    self forPackage:aPackage savePrerequisitesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   119
    self forPackage:aPackage saveEndingOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   120
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   121
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   122
forPackage:aPackage saveLooseMethodsOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   123
    aPackage looseMethods size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   124
        aWriteStream nextPutAll:'"LooseMethods"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   125
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   126
        aPackage looseMethods do:[:aLooseMethod |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   127
            self fileOutLooseMethod:aLooseMethod on:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   128
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   129
        aWriteStream nextPutAll:'!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   130
        aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   131
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   132
        aWriteStream nextPutAll:'"End of LooseMethods"!!'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   133
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   134
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   135
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   136
!StxPackageFileWriter::Version1 methodsFor:'fileOut - subparts'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   137
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   138
fileOutClass:aClass on:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   139
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   140
    "ClassDescription fileOutErrorSignal can occur here from autoloaded classes"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   141
    aClass isLoaded ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   142
        aClass autoload
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   143
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   144
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   145
    package blockedMethods isEmpty ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   146
        Transcript 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   147
                nextPutAll:'Finnish me!!'; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   148
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   149
                nextPutAll:'''blockedMethods '' are not accounted for at the moment!!'' in:'; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   150
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   151
                nextPutAll:'Packages::StxPackageFileWriter::Version1>>fileOutClass:on:'  ; 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   152
                cr
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   153
        
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   154
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   155
    aClass fileOutOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   156
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   157
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   158
fileOutLooseMethod:aMethod on:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   159
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   160
    aWriteStream nextPut:$!!.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   161
    aWriteStream nextPutAll:aMethod mclass asString.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   162
    aWriteStream nextPutAll:' methodsFor:'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   163
    aWriteStream nextPut:$'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   164
    aWriteStream nextPutAll:(aMethod category).
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   165
    aWriteStream nextPut:$'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   166
    aWriteStream nextPut:$!!.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   167
    aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   168
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   169
    aWriteStream nextPutAll:aMethod source.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   170
    aWriteStream nextPut:$!!.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   171
    aWriteStream cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   172
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   173
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   174
forPackage:aPackage saveClassNamesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   175
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   176
    aPackage classNames size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   177
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   178
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   179
            nextPutAll:'"ClassNames"';
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
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   183
            nextPutAll:'aPackage ';
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
        aPackage classNames do:[:aClassname |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   187
            aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   188
                nextPutAll:'    addClassNamed:#', aClassname, ';';
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
        aWriteStream nextPutAll:'    yourself.'; "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   193
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   194
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   195
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   196
            nextPutAll:'"End of ClassNames"';
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
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   202
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   203
forPackage:aPackage saveEndingOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   204
    aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   205
        nextPutAll:'aPackage!!';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   206
        cr;
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
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   210
forPackage:aPackage saveLooseMethodNamesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   211
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   212
    aPackage looseMethods size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   213
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   214
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   215
            nextPutAll:'"LooseMethodNames"';
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
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   219
            nextPutAll:'aPackage ';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   220
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   221
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   222
        aPackage looseMethods do:[:aMethod |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   223
            aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   224
                nextPutAll:'    addMethodNamed:#', aMethod name, ' forClassNamed:#', aMethod mclass name,';';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   225
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   226
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   227
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   228
        aWriteStream nextPutAll:'    yourself.'. "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   229
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   230
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   231
            nextPutAll:'"End of LooseMethodNames"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   232
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   233
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   234
    ].
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 savePackageCommentOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   238
    aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   239
        nextPutAll:'aPackage packageComment:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   240
        nextPutAll:aPackage packageComment ? '''''';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   241
        nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   242
        cr;
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 savePackageFileVersionOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   247
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   248
    aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   249
        nextPutAll:'aPackage packageVersion:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   250
        nextPutAll:self fileOutVersion printString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   251
        nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   252
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   253
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   254
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   255
forPackage:aPackage savePackageFormatOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   256
    aWriteStream nextPutAll:'!!Packages::PackageHandler openStxPackageFormat:1!!';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   257
    cr
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   258
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   259
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   260
forPackage:aPackage savePackageInstanceCreationOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   261
    aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   262
        nextPutAll:'|aPackage|';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   263
        cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   264
        nextPutAll:'aPackage := Package named: ';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   265
        nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   266
        nextPutAll:aPackage name;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   267
        nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   268
        nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   269
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   270
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   271
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   272
forPackage:aPackage savePrerequisitesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   273
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   274
    aPackage prerequisites size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   275
        aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   276
            nextPutAll:'"Prerequisites"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   277
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   278
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   279
        self forPackage:aPackage savePrerequisteClassesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   280
        self forPackage:aPackage  savePrerequistePackagesOn:aWriteStream.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   281
        aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   282
            nextPutAll:'"End of Prerequisites"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   283
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   284
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   285
        
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   286
    ]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   287
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   288
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   289
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   290
forPackage:aPackage savePrerequisteClassesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   291
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   292
    aPackage classPrerequisites size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   293
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   294
        aPackage classPrerequisites do:[:prerequisite |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   295
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   296
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   297
                nextPutAll:'aPackage' ;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   298
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   299
                nextPutAll:'   addClassNamePrerequisite:#', prerequisite name;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   300
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   301
                nextPutAll:'   ifFailString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   302
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   303
                nextPutAll:prerequisite ifFailedString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   304
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   305
                nextPut:$;;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   306
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   307
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   308
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   309
        aWriteStream nextPutAll:'   yourself.'; "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   310
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   311
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   312
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   313
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   314
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   315
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   316
forPackage:aPackage savePrerequistePackagesOn:aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   317
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   318
    aPackage packagePrerequisites size > 0 ifTrue:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   319
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   320
        aPackage packagePrerequisites do:[:prerequisite |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   321
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   322
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   323
                nextPutAll:'aPackage' ;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   324
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   325
                nextPutAll:'   addPackageNamePrerequisite:#', prerequisite name;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   326
                cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   327
                nextPutAll:'   ifFailString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   328
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   329
                nextPutAll:prerequisite ifFailedString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   330
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   331
                nextPut:$;;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   332
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   333
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   334
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   335
        aWriteStream nextPutAll:'   yourself.'; "pointless but makes this code more readable"    
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   336
        cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   337
    ]
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   338
!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   339
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   340
forPackage:aPackage saveScriptsOn:aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   341
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   342
    aPackage scripts size > 0 ifTrue:[ | aScript |
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   343
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   344
        aWriteStream 
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   345
            nextPutAll:'"Scripts"';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   346
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   347
        (aScript := aPackage postInstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   348
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   349
                nextPutAll:'aPackage postInstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   350
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   351
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   352
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   353
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   354
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   355
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   356
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   357
        (aScript := aPackage preInstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   358
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   359
                nextPutAll:'aPackage preInstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   360
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   361
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   362
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   363
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   364
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   365
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   366
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   367
        (aScript := aPackage postUninstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   368
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   369
                nextPutAll:'aPackage postUninstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   370
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   371
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   372
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   373
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   374
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   375
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   376
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   377
        (aScript := aPackage postUninstallScript) getString size == 0 ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   378
            aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   379
                nextPutAll:'aPackage preUninstallScriptString:';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   380
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   381
                nextPutAll:aScript getString;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   382
                nextPut:$';
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   383
                nextPut:$.;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   384
                cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   385
        ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   386
        aWriteStream
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   387
            cr;
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   388
            cr.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   389
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   390
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   391
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   392
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   393
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   394
!StxPackageFileWriter::Version1 methodsFor:'helpers'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   395
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   396
createPathFor:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   397
    " create the path name for the filename if it does not already exist"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   398
    ^ aFilename directory makeDirectory.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   399
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   400
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   401
!StxPackageFileWriter::Version1 methodsFor:'instance creation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   402
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   403
forPackage:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   404
    ^ self basicNew package:aPackage
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   405
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   406
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   407
!StxPackageFileWriter::Version1 methodsFor:'queries'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   408
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   409
canWriteTo:aFilename
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   410
    "return an error if the reciever cannot write to aFilename"
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   411
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   412
    aFilename isFilename ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   413
        ^ self error:aFilename printString, ' is not a filename so cannot be written to.'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   414
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   415
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   416
    aFilename directory exists ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   417
        ^ self error:aFilename directory printString, ' directory does not exist.'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   418
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   419
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   420
    aFilename directory canBeWritten ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   421
        ^ self error:aFilename printString, ' cannot be written to.'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   422
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   423
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   424
    (aFilename isDirectory not) ifFalse:[
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   425
        ^ self error:aFilename printString, ' is a directory and cannot be written to'.
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   426
    ].
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   427
! !
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   428
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   429
!StxPackageFileWriter class methodsFor:'documentation'!
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   430
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   431
version
1240
6ab560ffad2c *** empty log message ***
james
parents: 1238
diff changeset
   432
    ^ '$Header: /cvs/stx/stx/libbasic3/packages/StxPackageFileWriter.st,v 1.3 2003-04-10 10:02:49 james Exp $'
1231
2f3a15bfac92 initial checkin
james
parents:
diff changeset
   433
! !