FileURI.st
author tm
Thu, 10 Jul 2003 14:07:39 +0200
changeset 1266 4522fd38deef
parent 1264 650132956801
child 1267 5e7f102e094d
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libbasic2' }"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     2
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     3
HierarchicalURI subclass:#FileURI
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     7
	category:'Resources'
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     8
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
     9
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    10
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    11
!FileURI class methodsFor:'instance creation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    12
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    13
fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    14
    "create an URI based on an a filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    15
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
    ^ self new fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
!FileURI class methodsFor:'accessing'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
schemes
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
    "answer the list of supported schemes"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
    ^ #(file)
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    25
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    26
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    27
!FileURI methodsFor:'converting'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    28
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    29
asFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    30
    "answer the receiver represented as filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    31
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    32
    ^ authority notNil ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    33
        Filename remoteHost:authority rootComponents:pathSegments.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    34
    ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    35
        Filename rootComponents:pathSegments
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    36
    ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    37
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    38
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    39
!FileURI methodsFor:'initialize'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
fromFilename:aFilename
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    "create an URI based on an a filename"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
    |components|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
    components := aFilename components.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
    aFilename isAbsolute ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
        (components size > 3 and:[(components at:2) size == 0]) ifTrue:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
            "this is a MS-Windows network path: \\host\path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
            authority := components at:3.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
            pathSegments := components copyFrom:4.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
        ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
            "this is an absolute path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
            isAbsolute := true.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
            pathSegments := components copyFrom:2.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
        ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
    ] ifFalse:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
        "this is a relative path"
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
        isAbsolute := false.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
        pathSegments := components.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
    ]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    63
    "
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
    64
      self fromFilename:'/a/b/c'  asFilename   
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
    65
      self fromFilename:'//a/b/c' asFilename  
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
    66
      self fromFilename:'a/b/c'   asFilename    
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    68
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    69
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    70
!FileURI methodsFor:'queries'!
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    71
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    72
pathExists
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    73
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    74
    ^ self asFilename exists
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    75
! !
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    76
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    77
!FileURI methodsFor:'stream access'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    78
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    80
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    81
    ^ self asFilename readStream
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    82
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    83
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    84
     'file:/etc/group' asURI readStream contents
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    85
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    86
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
readStreamDo:aBlock
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    "evaluate a block with the read stream as first argument
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    90
     and a dictionary containing attributes as second argument.
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    91
     The stream is closed after aBlock has been evaluated."
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    92
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    93
    |attributes file stream|
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    94
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    95
    attributes := self class attributes.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    96
    file := self asFilename.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    97
    attributes at:#fileSize put:(file fileSize).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    98
    attributes at:#baseName put:file baseName.  
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
    99
    attributes at:#uriInfo  put:self printString.  
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   100
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   101
    ^ [ 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   102
        stream := file readStream.
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
        aBlock value:stream value:attributes
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
     ] ensure:[
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
        stream notNil ifTrue:[stream close]
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
     ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   107
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   108
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   109
     'file:/etc/group' asURI readStreamDo:[:stream :attributes|
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   110
        stream contents         
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   111
                addFirst:attributes printString; 
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
                yourself
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   113
     ].
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   114
    "
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   115
!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   116
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   117
readStreamsDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   118
    "evaluate the block with a Collection of streams as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   119
     and a dictionary containing attributes as second argument,
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   120
     - a collection with a stream on a single file,
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   121
     - or a collection with streams on a directorie's files, but not recursive"
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   122
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   123
    self readStreamsDo:aBlock thenRemove:false.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   124
!
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   125
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   126
readStreamsDo:aBlock thenRemove:doRemoveSource
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   127
    "evaluate the block with a Collection of streams as first argument
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   128
     and a dictionary containing attributes as second argument,
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   129
     - a collection with a stream on a single file,
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   130
     - or a collection with streams on a directorie's files, but not recursive"
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   131
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   132
    |attributes fn files list dirPath|
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   133
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   134
    fn := self asFilename.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   135
    files := OrderedCollection new.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   136
    list := OrderedCollection new.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   137
    attributes := self class attributes.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   138
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   139
    fn isDirectory ifTrue:[
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   140
        dirPath := fn pathName.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   141
        attributes at:#requestDirectory put:true.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   142
        (DirectoryContents directoryNamed:dirPath) filesDo:[:aFile|
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   143
            files add:aFile
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   144
        ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   145
    ] ifFalse:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   146
        attributes at:#requestDirectory put:false.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   147
        files add:fn.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   148
    ].
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   149
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   150
    fn isDirectory ifFalse:[ |bName|
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   151
        bName := fn baseName.
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   152
        (bName startsWith:'*') ifTrue:[
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   153
            files removeAll.
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   154
            fn := fn directory.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   155
            dirPath := fn pathName.
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   156
            attributes at:#requestDirectory put:true.
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   157
            (DirectoryContents directoryNamed:dirPath) filesDo:[:aFile|
1264
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   158
                files add:aFile
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   159
            ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   160
        ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   161
        (bName startsWith:'*.') ifTrue:[ |rest|
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   162
            rest := bName restAfter:$*.
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   163
            (rest includesString:'*') ifTrue:[
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   164
                self error:'can''t resolve path:', self printString
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   165
            ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   166
            files := files select:[:aFile| aFile pathName endsWith:rest ]
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   167
        ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   168
    ].
650132956801 allow '*' and '*.' in path
tm
parents: 1258
diff changeset
   169
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   170
    files do:[:aFile| |baseName stream|
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   171
        [
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   172
            baseName := aFile baseName.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   173
            attributes at:#fileSize put:(aFile fileSize).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   174
            attributes at:#baseName put:baseName.  
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   175
            (self pathSegements includes:baseName) ifTrue:[
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   176
                attributes at:#uriInfo put:self.  
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   177
            ] ifFalse:[ |uri col|
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   178
                uri := self copy.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   179
                col := self pathSegements copy.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   180
                col removeLast.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   181
                col add:baseName.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   182
                uri pathSegements:col.
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   183
                attributes at:#uriInfo put:uri.  
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   184
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   185
            stream := aFile readStream.
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   186
            aBlock value:stream value:attributes.
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   187
        ] ensure:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   188
            stream notNil ifTrue:[stream close]
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   189
        ].
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   190
        doRemoveSource == true ifTrue:[
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   191
            aFile remove
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   192
        ].
1254
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   193
    ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   194
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   195
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   196
        (URI fromString:'file:/home/tm/tmp') 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   197
            readStreamsDo:[:stream :attributes | 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   198
                Transcript showCR:(attributes at:#baseName).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   199
                Transcript showCR:(attributes at:#fileSize).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   200
                Transcript showCR:(attributes at:#requestDirectory).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   201
                Transcript showCR:(attributes at:#uriInfo).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   202
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   203
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   204
!
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   205
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   206
writeStreamDo:aBlock
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   207
    "evaluate a block with the write stream as first argument
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   208
     and a dictionary containing attributes as second argument.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   209
     The stream is closed after aBlock has been evaluated.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   210
     Attributes may be the mime type (key #MIME)"
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   211
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   212
    |stream|
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   213
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   214
    ^ [
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   215
        stream := self asFilename writeStream.
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   216
        aBlock value:stream value:self class attributes
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   217
     ] ensure:[
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   218
        stream notNil ifTrue:[stream close]
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   219
     ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   220
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   221
    "
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   222
        (URI fromString:'file:/home/tm/tmp') 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   223
            readStreamsDo:[:stream :attributes| 
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   224
                Transcript showCR:(attributes at:#MIME).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   225
                Transcript showCR:(stream isWritable).
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   226
            ].
baf01931b9d6 *** empty log message ***
tm
parents: 1005
diff changeset
   227
    "
1258
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   228
!
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   229
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   230
writeStreamDo:aBlock create:doCreate
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   231
    "evaluate a block with the write stream as first argument
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   232
     and a dictionary containing attributes as second argument.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   233
     The stream is closed after aBlock has been evaluated.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   234
     Attributes may be the mime type (key #MIME)"
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   235
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   236
    |stream fileName|
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   237
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   238
    fileName := self asFilename.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   239
    [
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   240
        Stream streamErrorSignal handle:[:ex|
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   241
            doCreate ifFalse:[
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   242
                ex reject
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   243
            ].    
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   244
            (fileName directory) recursiveMakeDirectory.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   245
            stream := fileName writeStream.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   246
        ] do:[
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   247
            stream := fileName writeStream.
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   248
        ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   249
        aBlock value:stream value:self class attributes
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   250
    ] ensure:[
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   251
        stream notNil ifTrue:[stream close]
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   252
    ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   253
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   254
    "
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   255
        (URI fromString:'file:/home/tm/tmp') 
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   256
            readStreamsDo:[:stream :attributes| 
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   257
                Transcript showCR:(attributes at:#MIME).
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   258
                Transcript showCR:(stream isWritable).
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   259
            ].
a0eda4db4dad fileTransfer
tm
parents: 1254
diff changeset
   260
    "
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   261
! !
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   262
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   263
!FileURI class methodsFor:'documentation'!
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   264
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   265
version
1266
4522fd38deef *** empty log message ***
tm
parents: 1264
diff changeset
   266
    ^ '$Header: /cvs/stx/stx/libbasic2/FileURI.st,v 1.5 2003-07-10 12:07:29 tm Exp $'
1005
7ed6fa7ccfba initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   267
! !