Copy.st
author penk
Wed, 04 Sep 2002 17:20:15 +0200
changeset 1589 e3281d70e25c
parent 1588 6dde5ad32643
permissions -rw-r--r--
removed container

"{ Package: 'stx:libtool2' }"

FileOperations subclass:#Copy
	instanceVariableNames:'colOfCopiedFiles'
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Support'
!


!Copy class methodsFor:'actions'!

copyFile:aSourceFile to:aDestFile
    "delete current selected files/directories
    "

    |instance|

    instance := self new.
    instance copyFile:aSourceFile to:aDestFile.
    ^ instance
!

copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
    "delete current selected files/directories
    "

    |instance|

    instance := self new.
    instance copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning.
    ^ instance
!

copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy
    "delete current selected files/directories
    "

    |instance|

    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'!

copyFile:aSourceFile to:aDestFile
    "defete current selected files/directories
    "

    self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true
!

copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning
    "copy to
    "

    self copyFile:aSourceFile to:aDestFile withOverWriteWarning:true copyFileIfSame:true
!

copyFile:aSourceFile to:aDestFile withOverWriteWarning:overWriteWarning copyFileIfSame:copy
    "copy to
    "

    |newFile fileString targetDirectory targetIsDirectory sourceIsDirectory suffix|

    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 exists) ifTrue:[
        ((newFile asString = aSourceFile asString) and:[copy]) ifTrue:[
            [newFile exists] whileTrue:[
                suffix := newFile suffix.
                fileString := newFile baseName withoutSuffix, self class copyMoveIfExistSuffixString, '.', suffix.
                newFile := targetDirectory construct:fileString.
            ].
        ] ifFalse:[
            overWriteWarning ifTrue:[
                (self fileExistDialogFor:newFile) ifFalse:[ 
                    result := false.
                    ^ self.
                ]
            ] ifFalse:[
                    result := false.
                    ^ self.
            ]
        ].
    ].
    Error handle:[:ex|
        "was not able to copy it"
        WarningBox warn:'on copy file - ', ex errorString.
        self errorString:('on copy file - ', ex description asString).
        result := false.
    ] do:[
        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'!

version
    ^ '$Header$'
! !