Copy.st
changeset 1588 6dde5ad32643
parent 1585 91ec771207a2
--- a/Copy.st	Wed Sep 04 12:29:17 2002 +0200
+++ b/Copy.st	Wed Sep 04 14:23:01 2002 +0200
@@ -1,7 +1,7 @@
 "{ Package: 'stx:libtool2' }"
 
 FileOperations subclass:#Copy
-	instanceVariableNames:''
+	instanceVariableNames:'colOfCopiedFiles'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Interface-Support'
@@ -41,6 +41,50 @@
     instance := self new.
     instance copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
     ^ instance
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory
+    "delete current selected files/directories
+    "
+
+    |instance|
+
+    instance := self new.
+    instance copyFiles:aColOfSourceFiles to:aDirectory.
+    ^ instance
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
+    "delete current selected files/directories
+    "
+
+    |instance|
+
+    instance := self new.
+    instance copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning.
+    ^ instance
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
+    "delete current selected files/directories
+    "
+
+    |instance|
+
+    instance := self new.
+    instance copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
+    ^ instance
+! !
+
+!Copy methodsFor:'accessing'!
+
+colOfCopiedFiles
+    "return the value of the instance variable 'colOfCopiedFiles' (automatically generated)"
+
+    colOfCopiedFiles isNil ifTrue:[
+        colOfCopiedFiles := OrderedCollection new.
+    ].
+    ^ colOfCopiedFiles
 ! !
 
 !Copy methodsFor:'actions'!
@@ -56,27 +100,36 @@
     "copy to
     "
 
-    self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:false
+    self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:true
 !
 
 copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy
     "copy to
     "
 
-    |newFile fileString|
+    |newFile fileString targetDirectory targetIsDirectory sourceIsDirectory suffix|
 
-    aDestFile exists not ifTrue:[
-        DialogBox warn:'cant copy to:', aDestFile asString. 
+    sourceIsDirectory := aSourceFile isDirectory.
+    targetIsDirectory := aDestFile isDirectory.
+    targetIsDirectory ifTrue:[
+        targetDirectory := aDestFile.
+        newFile := aDestFile construct:(aSourceFile baseName).
+    ] ifFalse:[
+        targetDirectory := aDestFile directory.
+        newFile := aDestFile.
+    ].
+    "/ do not copy if destination directory doest exist.
+    (targetDirectory exists not) ifTrue:[
+        DialogBox warn:'cant copy to not existing directory ', targetDirectory asString. 
         result := false.
         ^ self
     ].
-    newFile := (aDestFile pathName asFilename) construct:(aSourceFile baseName).
-     (newFile exists) ifTrue:[
+    (newFile exists) ifTrue:[
         ((newFile asString = aSourceFile asString) and:[copy]) ifTrue:[
             [newFile exists] whileTrue:[
-                fileString := newFile baseName.
-                fileString := 'CopyOf', fileString.
-                newFile := (aDestFile pathName asFilename) construct:fileString.
+                suffix := newFile suffix.
+                fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+                newFile := targetDirectory construct:fileString.
             ].
         ] ifFalse:[
             overWriteWarning ifTrue:[
@@ -96,15 +149,88 @@
         self errorString:('on copy file - ', ex description asString).
         result := false.
     ] do:[
-        aSourceFile isDirectory ifFalse:[
-            aSourceFile copyTo:newFile.
-        ] ifTrue:[
+        sourceIsDirectory ifTrue:[
             OperatingSystem recursiveCopyDirectory:(aSourceFile pathName) 
                                                 to:newFile.
+        ] ifFalse:[
+            aSourceFile copyTo:newFile.
         ].
         DirectoryContents flushCachedDirectory:(aSourceFile directory).
         result := true.
     ].
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory
+
+    ^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:true. 
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning 
+
+    ^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:true.
+!
+
+copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
+
+
+    |newFile suffix fileString sourceIsDirectory askResult|
+
+    (aDirectory exists not) ifTrue:[
+        DialogBox warn:'cant copy to not existing directory ', aDirectory asString. 
+        result := false.
+        ^ self
+    ].
+    (aDirectory isDirectory not) ifTrue:[
+        DialogBox warn:'destination ', aDirectory asString, ' is not a directory'. 
+        result := false.
+        ^ self
+    ].
+    aColOfSourceFiles do:[: filename |
+        newFile := aDirectory construct:(filename baseName).
+        sourceIsDirectory := filename isDirectory.
+        (newFile exists) ifTrue:[
+            askResult := true.
+            ((newFile asString = filename asString) and:[copy]) ifTrue:[
+                [newFile exists] whileTrue:[
+                    suffix := newFile suffix.
+                    fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
+                    newFile := aDirectory construct:fileString.
+                ].
+            ] ifFalse:[
+                overWriteWarning ifTrue:[
+                    askResult := (self fileExistDialogFor:newFile withCancel:true).
+                    askResult isNil ifTrue:[
+                        result := false.
+                        ^ self.
+                    ]
+                ]
+            ].
+        ].
+        askResult ifTrue:[
+            Error handle:[:ex|
+                "was not able to copy it"
+                result := false.
+                self errorString:('on copy file - ', ex description asString).
+                ( Dialog 
+                    confirm:('error on copy file - ', ex description asString) 
+                    title:'Copy'
+                    yesLabel:'Continue' 
+                    noLabel:'Abort') ifFalse:[
+                    ^ self.
+                ].
+            ] do:[
+                sourceIsDirectory ifTrue:[
+                    OperatingSystem recursiveCopyDirectory:(filename asString)  
+                                                        to:(newFile asString).
+                ] ifFalse:[
+                    filename copyTo:newFile.
+                ].
+            ].
+            self colOfCopiedFiles add:filename
+        ]
+    ].
+    DirectoryContents flushCachedDirectory:aDirectory.
+    result := true.
 ! !
 
 !Copy class methodsFor:'documentation'!