Copy.st
changeset 1588 6dde5ad32643
parent 1585 91ec771207a2
equal deleted inserted replaced
1587:91a7b38eb142 1588:6dde5ad32643
     1 "{ Package: 'stx:libtool2' }"
     1 "{ Package: 'stx:libtool2' }"
     2 
     2 
     3 FileOperations subclass:#Copy
     3 FileOperations subclass:#Copy
     4 	instanceVariableNames:''
     4 	instanceVariableNames:'colOfCopiedFiles'
     5 	classVariableNames:''
     5 	classVariableNames:''
     6 	poolDictionaries:''
     6 	poolDictionaries:''
     7 	category:'Interface-Support'
     7 	category:'Interface-Support'
     8 !
     8 !
     9 
     9 
    39     |instance|
    39     |instance|
    40 
    40 
    41     instance := self new.
    41     instance := self new.
    42     instance copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
    42     instance copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
    43     ^ instance
    43     ^ instance
       
    44 !
       
    45 
       
    46 copyFiles:aColOfSourceFiles to:aDirectory
       
    47     "delete current selected files/directories
       
    48     "
       
    49 
       
    50     |instance|
       
    51 
       
    52     instance := self new.
       
    53     instance copyFiles:aColOfSourceFiles to:aDirectory.
       
    54     ^ instance
       
    55 !
       
    56 
       
    57 copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning
       
    58     "delete current selected files/directories
       
    59     "
       
    60 
       
    61     |instance|
       
    62 
       
    63     instance := self new.
       
    64     instance copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning.
       
    65     ^ instance
       
    66 !
       
    67 
       
    68 copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
       
    69     "delete current selected files/directories
       
    70     "
       
    71 
       
    72     |instance|
       
    73 
       
    74     instance := self new.
       
    75     instance copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy.
       
    76     ^ instance
       
    77 ! !
       
    78 
       
    79 !Copy methodsFor:'accessing'!
       
    80 
       
    81 colOfCopiedFiles
       
    82     "return the value of the instance variable 'colOfCopiedFiles' (automatically generated)"
       
    83 
       
    84     colOfCopiedFiles isNil ifTrue:[
       
    85         colOfCopiedFiles := OrderedCollection new.
       
    86     ].
       
    87     ^ colOfCopiedFiles
    44 ! !
    88 ! !
    45 
    89 
    46 !Copy methodsFor:'actions'!
    90 !Copy methodsFor:'actions'!
    47 
    91 
    48 copyFile:aSourceFile to:aDestFile
    92 copyFile:aSourceFile to:aDestFile
    54 
    98 
    55 copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
    99 copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
    56     "copy to
   100     "copy to
    57     "
   101     "
    58 
   102 
    59     self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:false
   103     self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:true
    60 !
   104 !
    61 
   105 
    62 copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy
   106 copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy
    63     "copy to
   107     "copy to
    64     "
   108     "
    65 
   109 
    66     |newFile fileString|
   110     |newFile fileString targetDirectory targetIsDirectory sourceIsDirectory suffix|
    67 
   111 
    68     aDestFile exists not ifTrue:[
   112     sourceIsDirectory := aSourceFile isDirectory.
    69         DialogBox warn:'cant copy to:', aDestFile asString. 
   113     targetIsDirectory := aDestFile isDirectory.
       
   114     targetIsDirectory ifTrue:[
       
   115         targetDirectory := aDestFile.
       
   116         newFile := aDestFile construct:(aSourceFile baseName).
       
   117     ] ifFalse:[
       
   118         targetDirectory := aDestFile directory.
       
   119         newFile := aDestFile.
       
   120     ].
       
   121     "/ do not copy if destination directory doest exist.
       
   122     (targetDirectory exists not) ifTrue:[
       
   123         DialogBox warn:'cant copy to not existing directory ', targetDirectory asString. 
    70         result := false.
   124         result := false.
    71         ^ self
   125         ^ self
    72     ].
   126     ].
    73     newFile := (aDestFile pathName asFilename) construct:(aSourceFile baseName).
   127     (newFile exists) ifTrue:[
    74      (newFile exists) ifTrue:[
       
    75         ((newFile asString = aSourceFile asString) and:[copy]) ifTrue:[
   128         ((newFile asString = aSourceFile asString) and:[copy]) ifTrue:[
    76             [newFile exists] whileTrue:[
   129             [newFile exists] whileTrue:[
    77                 fileString := newFile baseName.
   130                 suffix := newFile suffix.
    78                 fileString := 'CopyOf', fileString.
   131                 fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
    79                 newFile := (aDestFile pathName asFilename) construct:fileString.
   132                 newFile := targetDirectory construct:fileString.
    80             ].
   133             ].
    81         ] ifFalse:[
   134         ] ifFalse:[
    82             overWriteWarning ifTrue:[
   135             overWriteWarning ifTrue:[
    83                 (self fileExistDialogFor:newFile) ifFalse:[ 
   136                 (self fileExistDialogFor:newFile) ifFalse:[ 
    84                     result := false.
   137                     result := false.
    94         "was not able to copy it"
   147         "was not able to copy it"
    95         WarningBox warn:'on copy file - ', ex errorString.
   148         WarningBox warn:'on copy file - ', ex errorString.
    96         self errorString:('on copy file - ', ex description asString).
   149         self errorString:('on copy file - ', ex description asString).
    97         result := false.
   150         result := false.
    98     ] do:[
   151     ] do:[
    99         aSourceFile isDirectory ifFalse:[
   152         sourceIsDirectory ifTrue:[
   100             aSourceFile copyTo:newFile.
       
   101         ] ifTrue:[
       
   102             OperatingSystem recursiveCopyDirectory:(aSourceFile pathName) 
   153             OperatingSystem recursiveCopyDirectory:(aSourceFile pathName) 
   103                                                 to:newFile.
   154                                                 to:newFile.
       
   155         ] ifFalse:[
       
   156             aSourceFile copyTo:newFile.
   104         ].
   157         ].
   105         DirectoryContents flushCachedDirectory:(aSourceFile directory).
   158         DirectoryContents flushCachedDirectory:(aSourceFile directory).
   106         result := true.
   159         result := true.
   107     ].
   160     ].
       
   161 !
       
   162 
       
   163 copyFiles:aColOfSourceFiles to:aDirectory
       
   164 
       
   165     ^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:true. 
       
   166 !
       
   167 
       
   168 copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning 
       
   169 
       
   170     ^ self copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:true.
       
   171 !
       
   172 
       
   173 copyFiles:aColOfSourceFiles to:aDirectory withOverWriteWarning:overWriteWarning copyFileIfSame:copy
       
   174 
       
   175 
       
   176     |newFile suffix fileString sourceIsDirectory askResult|
       
   177 
       
   178     (aDirectory exists not) ifTrue:[
       
   179         DialogBox warn:'cant copy to not existing directory ', aDirectory asString. 
       
   180         result := false.
       
   181         ^ self
       
   182     ].
       
   183     (aDirectory isDirectory not) ifTrue:[
       
   184         DialogBox warn:'destination ', aDirectory asString, ' is not a directory'. 
       
   185         result := false.
       
   186         ^ self
       
   187     ].
       
   188     aColOfSourceFiles do:[: filename |
       
   189         newFile := aDirectory construct:(filename baseName).
       
   190         sourceIsDirectory := filename isDirectory.
       
   191         (newFile exists) ifTrue:[
       
   192             askResult := true.
       
   193             ((newFile asString = filename asString) and:[copy]) ifTrue:[
       
   194                 [newFile exists] whileTrue:[
       
   195                     suffix := newFile suffix.
       
   196                     fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
       
   197                     newFile := aDirectory construct:fileString.
       
   198                 ].
       
   199             ] ifFalse:[
       
   200                 overWriteWarning ifTrue:[
       
   201                     askResult := (self fileExistDialogFor:newFile withCancel:true).
       
   202                     askResult isNil ifTrue:[
       
   203                         result := false.
       
   204                         ^ self.
       
   205                     ]
       
   206                 ]
       
   207             ].
       
   208         ].
       
   209         askResult ifTrue:[
       
   210             Error handle:[:ex|
       
   211                 "was not able to copy it"
       
   212                 result := false.
       
   213                 self errorString:('on copy file - ', ex description asString).
       
   214                 ( Dialog 
       
   215                     confirm:('error on copy file - ', ex description asString) 
       
   216                     title:'Copy'
       
   217                     yesLabel:'Continue' 
       
   218                     noLabel:'Abort') ifFalse:[
       
   219                     ^ self.
       
   220                 ].
       
   221             ] do:[
       
   222                 sourceIsDirectory ifTrue:[
       
   223                     OperatingSystem recursiveCopyDirectory:(filename asString)  
       
   224                                                         to:(newFile asString).
       
   225                 ] ifFalse:[
       
   226                     filename copyTo:newFile.
       
   227                 ].
       
   228             ].
       
   229             self colOfCopiedFiles add:filename
       
   230         ]
       
   231     ].
       
   232     DirectoryContents flushCachedDirectory:aDirectory.
       
   233     result := true.
   108 ! !
   234 ! !
   109 
   235 
   110 !Copy class methodsFor:'documentation'!
   236 !Copy class methodsFor:'documentation'!
   111 
   237 
   112 version
   238 version