AutoDeletedFilename.st
author Stefan Vogel <sv@exept.de>
Fri, 24 Jul 2015 13:58:16 +0200
changeset 18635 4fe209fa4826
parent 18634 76a2b07859f7
child 18640 358b275dced9
child 21277 a459cc59be62
permissions -rw-r--r--
class: AutoDeletedFilename changed: #update:with:from:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
     1
"{ Encoding: utf8 }"
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
     2
10847
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     3
"
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     4
 COPYRIGHT (c) 2007 by eXept Software AG
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     5
              All Rights Reserved
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     6
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     7
 This software is furnished under a license and may be used
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     8
 only in accordance with the terms of that license and with the
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    10
 be provided or otherwise made available to, or used by, any
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    11
 other person.  No title to or ownership of the software is
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    12
 hereby transferred.
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    13
"
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
"{ Package: 'stx:libbasic' }"
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
    16
"{ NameSpace: Smalltalk }"
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
    17
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
Filename subclass:#AutoDeletedFilename
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	instanceVariableNames:''
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
    20
	classVariableNames:'Lobby'
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	poolDictionaries:''
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	category:'System-Support'
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!AutoDeletedFilename class methodsFor:'documentation'!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
10847
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    27
copyright
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    28
"
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    29
 COPYRIGHT (c) 2007 by eXept Software AG
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    30
              All Rights Reserved
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    31
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    32
 This software is furnished under a license and may be used
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    33
 only in accordance with the terms of that license and with the
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    35
 be provided or otherwise made available to, or used by, any
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    36
 other person.  No title to or ownership of the software is
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    37
 hereby transferred.
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    38
"
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    39
!
2f39b0b6f4e6 copyright
Claus Gittinger <cg@exept.de>
parents: 10761
diff changeset
    40
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
documentation
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
"
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    Used with temporary files - these will automatically delete themself,
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    when no longer referenced.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    See -> Filename asAutoDeletedFilename
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
examples
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
"
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    the following file will be automatically deleted after some time:
10931
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    52
                                                    [exBegin]
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    |f p|
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
15247
be9fd0956f80 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 14507
diff changeset
    55
    f := AutoDeletedFilename newTemporary.
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
    f writeStream
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
        nextPutLine:'hello';
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        close.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    p := f pathName.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    Transcript showCR:p.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    f := f asAutoDeletedFilename.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    self assert:(p asFilename exists).
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    ObjectMemory collectGarbage.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    Delay waitForSeconds:2.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
    self assert:(p asFilename exists).
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
    f := nil.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    ObjectMemory collectGarbage.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    Delay waitForSeconds:2.
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    self assert:(p asFilename exists not).
10931
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    70
                                                    [exEnd]
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    71
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    72
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    73
    you can also delete it manually:
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    74
                                                    [exBegin]
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    75
    |f p|
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    76
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    77
    f := Filename newTemporary.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    78
    f writeStream
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    79
        nextPutLine:'hello';
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    80
        close.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    81
    p := f pathName.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    82
    Transcript showCR:p.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    83
    f := f asAutoDeletedFilename.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    84
    self assert:(p asFilename exists).
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    85
    ObjectMemory collectGarbage.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    86
    Delay waitForSeconds:2.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    87
    self assert:(p asFilename exists).
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    88
    f remove.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    89
    f := nil.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    90
    ObjectMemory collectGarbage.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    91
    Delay waitForSeconds:2.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    92
    self assert:(p asFilename exists not).
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
    93
                                                    [exEnd]
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
"
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
! !
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
    97
!AutoDeletedFilename class methodsFor:'initialization'!
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
    98
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
    99
initialize
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   100
    Lobby isNil ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   101
        Lobby := Registry new.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   102
    ].
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   103
    Smalltalk addDependent:self.    "inform me when smalltalk exits"
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   104
! !
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   105
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   106
!AutoDeletedFilename class methodsFor:'change and update'!
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   107
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   108
update:anAspect with:aParameter from:changedObject
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   109
    "when Smalltalk exits, remove all auto deleted files"
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   110
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   111
    anAspect == #aboutToQuit ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   112
        |currentFilename|
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   113
        "do it with timeout in case of a non-responding remote file server"
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   114
        ([
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   115
            Lobby do:[:each|
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   116
                currentFilename := each.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   117
                each basicFinalize
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   118
            ].
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   119
        ] valueWithTimeout:1 minutes) isNil ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   120
            'AutoDeletedFilename: timed out while removing: ' errorPrint. currentFilename errorPrintCR.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   121
        ].
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   122
    ].
18634
76a2b07859f7 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 18632
diff changeset
   123
    super update:anAspect with:aParameter from:changedObject
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   124
! !
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   125
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
!AutoDeletedFilename methodsFor:'accessing'!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
15470
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   128
keep
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   129
    "do not delete the file on finalization"
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   130
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   131
    self unregisterForFinalization
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   132
!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   133
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   134
setName:aString
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   135
    super setName:aString.
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   136
    self registerForFinalization    
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   137
! !
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   138
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   139
!AutoDeletedFilename methodsFor:'copying'!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   140
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   141
shallowCopy
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   142
    "when copying, return a real filename
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   143
     (to avoid mutiple removals)"
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   144
15810
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   145
    ^ self species named:nameString
15470
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   146
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   147
    "
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   148
        'blaFaselQall.mist' asFilename asAutoDeletedFilename copy
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   149
    "
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   150
! !
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   151
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   152
!AutoDeletedFilename methodsFor:'finalization'!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   153
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   154
basicFinalize
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   155
    |linkInfo|
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   156
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   157
    linkInfo := self linkInfo.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   158
    linkInfo notNil ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   159
        linkInfo isDirectory ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   160
            super recursiveRemove
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   161
        ] ifFalse:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   162
            super removeFile.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   163
        ].
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   164
    ].
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   165
!
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   166
15470
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   167
executor
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   168
    ^ self class basicNew nameString:nameString
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   169
!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   170
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   171
finalizationLobby
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   172
    "answer the registry used for finalization.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   173
     we have our own Lobby."
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   174
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   175
    ^ Lobby
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   176
!
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   177
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
finalize
16550
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   179
    "/ do this in a forked process to avoid blocking
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   180
    "/ in case of an autodeleted remote file of a broken connection
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   181
    [
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   182
        "/ with timeout to avoid waiting forever
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   183
        [
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   184
            self basicFinalize.
16550
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   185
        ] valueWithTimeout:1 minutes.
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   186
    ] fork.
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
! !
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
15810
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   189
!AutoDeletedFilename methodsFor:'queries'!
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   190
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   191
species
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   192
    "filenames derived from me should not be autodeleted themself"
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   193
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   194
    ^ Filename concreteClass.
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   195
! !
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   196
10931
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   197
!AutoDeletedFilename methodsFor:'removing'!
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   198
11780
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   199
recursiveRemove
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   200
    super recursiveRemove.
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   201
    self unregisterForFinalization
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   202
!
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   203
10931
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   204
remove
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   205
    super remove.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   206
    self unregisterForFinalization
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   207
!
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   208
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   209
removeDirectory
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   210
    super removeDirectory.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   211
    self unregisterForFinalization
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   212
!
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   213
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   214
removeFile
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   215
    super removeFile.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   216
    self unregisterForFinalization
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   217
! !
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   218
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
!AutoDeletedFilename class methodsFor:'documentation'!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
version
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   222
    ^ '$Header$'
18634
76a2b07859f7 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 18632
diff changeset
   223
!
76a2b07859f7 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 18632
diff changeset
   224
76a2b07859f7 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 18632
diff changeset
   225
version_CVS
76a2b07859f7 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 18632
diff changeset
   226
    ^ '$Header$'
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
! !
15247
be9fd0956f80 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 14507
diff changeset
   228
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   229
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   230
AutoDeletedFilename initialize!