AutoDeletedFilename.st
changeset 23665 071d110d9d1c
parent 21277 a459cc59be62
child 23666 7bc7a0c483d7
--- a/AutoDeletedFilename.st	Wed Feb 06 11:01:21 2019 +0100
+++ b/AutoDeletedFilename.st	Wed Feb 06 11:07:44 2019 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2007 by eXept Software AG
               All Rights Reserved
@@ -14,7 +16,7 @@
 "{ NameSpace: Smalltalk }"
 
 Filename subclass:#AutoDeletedFilename
-	instanceVariableNames:''
+	instanceVariableNames:'concreteFilename'
 	classVariableNames:'Lobby'
 	poolDictionaries:''
 	category:'System-Support'
@@ -43,6 +45,9 @@
     
     See -> Filename asAutoDeletedFilename
 
+    [instance variables:]
+        concreteFilename    UnixFilename|PCFilename     the concrete filename that
+                                                        implements the OS-specific behavior
     [author:]
         cg - original code
         sv - fixed and enhanced
@@ -106,6 +111,17 @@
     Smalltalk addDependent:self.    "inform me when smalltalk exits"
 ! !
 
+!AutoDeletedFilename class methodsFor:'instance creation'!
+
+named:aString
+    "return a filename for a directory named aString.
+     This is the same as 'aString asFilename'."
+
+    ^ self basicNew setName:aString
+
+    "Created: / 06-02-2019 / 10:15:01 / Stefan Vogel"
+! !
+
 !AutoDeletedFilename class methodsFor:'change and update'!
 
 update:anAspect with:aParameter from:changedObject
@@ -128,6 +144,10 @@
 
 !AutoDeletedFilename methodsFor:'accessing'!
 
+concreteFilename:something
+    concreteFilename := something.
+!
+
 keep
     "do not delete the file on finalization"
 
@@ -136,7 +156,28 @@
 
 setName:aString
     super setName:aString.
-    self registerForFinalization    
+    concreteFilename := ConcreteClass named:aString.
+    self registerForFinalization
+
+    "Modified: / 06-02-2019 / 10:16:06 / Stefan Vogel"
+!
+
+species
+    "filenames derived from me should not be autodeleted themself"
+
+    ^ ConcreteClass.    "of Filename"
+
+    "Modified: / 06-02-2019 / 10:06:23 / Stefan Vogel"
+! !
+
+!AutoDeletedFilename methodsFor:'converting'!
+
+asAutoDeletedFilename
+    "that's what I am"
+
+    ^ self
+
+    "Created: / 06-02-2019 / 10:10:43 / Stefan Vogel"
 ! !
 
 !AutoDeletedFilename methodsFor:'copying'!
@@ -152,6 +193,149 @@
     "
 ! !
 
+!AutoDeletedFilename methodsFor:'delegated to concrete filename'!
+
+directoryName
+    ^ concreteFilename directoryName.
+
+    "Modified: / 07-09-1995 / 10:42:03 / claus"
+    "Modified: / 21-10-1998 / 22:52:25 / cg"
+    "Modified: / 27-10-1998 / 13:19:26 / ps"
+    "Modified: / 06-02-2019 / 10:52:20 / Stefan Vogel"
+!
+
+fileType
+    ^ concreteFilename fileType.
+
+    "Modified: / 21-07-1998 / 11:25:56 / cg"
+    "Modified: / 06-02-2019 / 10:50:51 / Stefan Vogel"
+!
+
+fullAlternativePathName
+    ^ concreteFilename fullAlternativePathName.
+
+    "Modified: / 06-02-2019 / 10:53:56 / Stefan Vogel"
+!
+
+isDirectory
+    ^ concreteFilename isDirectory.
+
+    "Modified: / 21-09-1998 / 15:53:10 / cg"
+    "Modified: / 06-02-2019 / 10:51:48 / Stefan Vogel"
+!
+
+isExecutableProgram
+    ^ concreteFilename isExecutableProgram.
+
+    "Modified: / 06-02-2019 / 10:54:15 / Stefan Vogel"
+!
+
+isExplicitRelative
+    ^ concreteFilename isExplicitRelative.
+
+    "Modified: / 06-02-2019 / 10:52:48 / Stefan Vogel"
+!
+
+isHidden
+    ^ concreteFilename isHidden.
+
+    "Modified: / 06-02-2019 / 10:54:30 / Stefan Vogel"
+!
+
+isImplicit
+    ^ concreteFilename isImplicit.
+
+    "Created: / 18-09-1997 / 18:04:51 / stefan"
+    "Modified: / 06-02-2019 / 10:53:08 / Stefan Vogel"
+!
+
+isRootDirectory
+    ^ concreteFilename isRootDirectory.
+
+    "Modified: / 06-02-2019 / 10:20:31 / Stefan Vogel"
+!
+
+isVolumeAbsolute
+    ^ concreteFilename isVolumeAbsolute.
+
+    "Created: / 07-09-1997 / 23:54:20 / cg"
+    "Modified: / 09-09-1998 / 20:38:54 / cg"
+    "Modified: / 06-02-2019 / 10:20:43 / Stefan Vogel"
+!
+
+localPathName
+    ^ concreteFilename localPathName.
+
+    "Modified: / 24-09-1998 / 19:09:53 / cg"
+    "Modified (format): / 06-02-2019 / 10:21:08 / Stefan Vogel"
+!
+
+makeLegalFilename
+    ^ concreteFilename makeLegalFilename.
+
+    "Modified: / 01-12-2010 / 18:53:59 / cg"
+    "Modified: / 06-02-2019 / 10:21:28 / Stefan Vogel"
+!
+
+osNameForAccess
+    ^ concreteFilename osNameForAccess.
+
+    "Modified: / 06-02-2019 / 10:21:47 / Stefan Vogel"
+!
+
+osNameForDirectory
+    ^ concreteFilename osNameForDirectory.
+
+    "Modified: / 20-01-1998 / 15:39:06 / md"
+    "Modified: / 17-08-1998 / 10:04:01 / cg"
+    "Modified: / 06-02-2019 / 10:22:02 / Stefan Vogel"
+!
+
+osNameForDirectoryContents
+    ^ concreteFilename osNameForDirectoryContents.
+
+    "Modified: / 20-01-1998 / 15:39:06 / md"
+    "Created: / 03-08-1998 / 21:37:46 / cg"
+    "Modified: / 17-08-1998 / 10:04:22 / cg"
+    "Modified: / 06-02-2019 / 10:22:21 / Stefan Vogel"
+!
+
+osNameForFile
+    ^ concreteFilename osNameForFile.
+
+    "Modified: / 21-07-2012 / 19:35:19 / cg"
+    "Modified: / 06-02-2019 / 10:22:32 / Stefan Vogel"
+!
+
+pathName
+    ^ concreteFilename pathName.
+
+    "Modified: / 24-09-1998 / 19:09:53 / cg"
+    "Modified: / 06-02-2019 / 10:22:43 / Stefan Vogel"
+!
+
+renameTo:newName
+    ^ concreteFilename renameTo:newName.
+
+    "Modified: / 20-01-1998 / 15:33:00 / md"
+    "Modified: / 21-09-2006 / 18:19:47 / cg"
+    "Modified (format): / 12-12-2017 / 12:45:47 / stefan"
+    "Modified: / 06-02-2019 / 10:22:59 / Stefan Vogel"
+!
+
+setHidden
+    ^ concreteFilename setHidden.
+
+    "Modified: / 06-02-2019 / 10:23:25 / Stefan Vogel"
+!
+
+volume
+    ^ concreteFilename volume.
+
+    "Modified: / 24-09-1998 / 19:04:27 / cg"
+    "Modified: / 06-02-2019 / 10:23:54 / Stefan Vogel"
+! !
+
 !AutoDeletedFilename methodsFor:'finalization'!
 
 basicFinalize
@@ -168,7 +352,11 @@
 !
 
 executor
-    ^ self class basicNew nameString:nameString
+    ^ self class basicNew 
+            nameString:nameString;
+            concreteFilename:concreteFilename.
+
+    "Modified: / 06-02-2019 / 10:27:14 / Stefan Vogel"
 !
 
 finalizationLobby
@@ -189,14 +377,6 @@
     ] fork.
 ! !
 
-!AutoDeletedFilename methodsFor:'queries'!
-
-species
-    "filenames derived from me should not be autodeleted themself"
-
-    ^ Filename concreteClass.
-! !
-
 !AutoDeletedFilename methodsFor:'removing'!
 
 recursiveRemove