AutoDeletedFilename.st
author Stefan Vogel <sv@exept.de>
Fri, 24 Jul 2015 12:22:51 +0200
changeset 18632 5f99981d6418
parent 16550 4bda4424570d
child 18634 76a2b07859f7
permissions -rw-r--r--
class: AutoDeletedFilename class definition added: #basicFinalize #finalizationLobby #initialize #update:with:from: changed: #finalize Make sure that autodelete foles are removed on exit
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
    ].
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   123
! !
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   124
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
!AutoDeletedFilename methodsFor:'accessing'!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
15470
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   127
keep
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   128
    "do not delete the file on finalization"
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   129
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   130
    self unregisterForFinalization
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   131
!
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
setName:aString
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   134
    super setName:aString.
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   135
    self registerForFinalization    
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   136
! !
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
!AutoDeletedFilename methodsFor:'copying'!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   139
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   140
shallowCopy
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   141
    "when copying, return a real filename
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   142
     (to avoid mutiple removals)"
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   143
15810
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   144
    ^ self species named:nameString
15470
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   145
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
        'blaFaselQall.mist' asFilename asAutoDeletedFilename copy
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   148
    "
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
!AutoDeletedFilename methodsFor:'finalization'!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   152
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   153
basicFinalize
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   154
    |linkInfo|
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   155
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   156
    linkInfo := self linkInfo.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   157
    linkInfo notNil ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   158
        linkInfo isDirectory ifTrue:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   159
            super recursiveRemove
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   160
        ] ifFalse:[
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   161
            super removeFile.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   162
        ].
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
15470
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   166
executor
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   167
    ^ self class basicNew nameString:nameString
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   168
!
492825160f68 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15247
diff changeset
   169
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   170
finalizationLobby
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   171
    "answer the registry used for finalization.
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   172
     we have our own Lobby."
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   173
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   174
    ^ Lobby
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   175
!
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   176
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
finalize
16550
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   178
    "/ do this in a forked process to avoid blocking
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   179
    "/ in case of an autodeleted remote file of a broken connection
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   180
    [
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   181
        "/ with timeout to avoid waiting forever
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   182
        [
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   183
            self basicFinalize.
16550
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   184
        ] valueWithTimeout:1 minutes.
4bda4424570d class: AutoDeletedFilename
Claus Gittinger <cg@exept.de>
parents: 15810
diff changeset
   185
    ] fork.
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
! !
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
15810
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   188
!AutoDeletedFilename methodsFor:'queries'!
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   189
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   190
species
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   191
    "filenames derived from me should not be autodeleted themself"
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   192
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   193
    ^ Filename concreteClass.
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   194
! !
fabc99a4a88a class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 15470
diff changeset
   195
10931
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   196
!AutoDeletedFilename methodsFor:'removing'!
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   197
11780
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   198
recursiveRemove
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   199
    super recursiveRemove.
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   200
    self unregisterForFinalization
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   201
!
f7543590f82a recursive remove directories when finalizing
Stefan Vogel <sv@exept.de>
parents: 10931
diff changeset
   202
10931
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   203
remove
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   204
    super remove.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   205
    self unregisterForFinalization
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   206
!
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
removeDirectory
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   209
    super removeDirectory.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   210
    self unregisterForFinalization
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   211
!
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
removeFile
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   214
    super removeFile.
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   215
    self unregisterForFinalization
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   216
! !
54107ed355be unregister from finalizatioin when deleting explicitly
Stefan Vogel <sv@exept.de>
parents: 10847
diff changeset
   217
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
!AutoDeletedFilename class methodsFor:'documentation'!
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
version
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   221
    ^ '$Header$'
10761
6a63674a5cb1 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
! !
15247
be9fd0956f80 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 14507
diff changeset
   223
18632
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   224
5f99981d6418 class: AutoDeletedFilename
Stefan Vogel <sv@exept.de>
parents: 16550
diff changeset
   225
AutoDeletedFilename initialize!