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