MCDirectoryRepository.st
author Jan Vrany <jan.vrany@labware.com>
Mon, 03 May 2021 22:03:54 +0100
branchjv
changeset 1142 f43bfccabfdb
parent 1121 c5661215109c
permissions -rw-r--r--
Add creation template for `MCDirectoryRepository` ... therefore also for and `TonelRepository`

"
COPYRIGHT (c) 2020-2021 LabWare
"
"{ Package: 'stx:goodies/monticello' }"

"{ NameSpace: Smalltalk }"

MCFileBasedRepository subclass:#MCDirectoryRepository
	instanceVariableNames:'directory'
	classVariableNames:''
	poolDictionaries:''
	category:'SCM-Monticello-Repositories'
!

!MCDirectoryRepository class methodsFor:'documentation'!

copyright
"
COPYRIGHT (c) 2020-2021 LabWare


"
! !

!MCDirectoryRepository class methodsFor:'initialization'!

new
    ^self basicNew initialize
! !

!MCDirectoryRepository class methodsFor:'instance creation'!

directory: aStringOrFileDirectory

    ^self new directory: aStringOrFileDirectory

    "Created: / 16-09-2010 / 14:51:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 16-09-2010 / 15:59:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

morphicConfigure
	| directory |
	^ (directory := UIManager default chooseDirectory) ifNotNil:
		[
		self new directory: directory]
! !

!MCDirectoryRepository class methodsFor:'as yet unclassified'!

fillInTheBlankRequest
    "superclass MCRepository class says that I am responsible to implement this method"

    ^ self shouldImplement
! !

!MCDirectoryRepository class methodsFor:'queries'!

creationTemplate
    "superclass MCRepository class says that I am responsible to implement this method"

    ^ self creationTemplateDirectory: (Filename currentDirectory asAbsoluteFilename / 'package-cache') asString

    "
    MCDirectoryRepository creationTemplate
    (TonelRepository directory:'/tmp') asCreationTemplate
    "

    "Modified: / 16-09-2010 / 14:53:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 01-12-2011 / 20:31:31 / cg"
    "Modified (comment): / 03-05-2021 / 22:02:22 / Jan Vrany <jan.vrany@labware.com>"
!

creationTemplateDirectory: directory
    "superclass MCRepository class says that I am responsible to implement this method"

    ^'%1 directory: ''%2''' bindWith: self name with: directory

    "Created: / 03-05-2021 / 21:21:19 / Jan Vrany <jan.vrany@labware.com>"
!

description
	^ 'directory'
! !

!MCDirectoryRepository methodsFor:'accessing'!

description
	^ directory pathName
!

directory
	^ directory
!

directory: aStringOrFilename
    self assert: (aStringOrFilename isString or: [ aStringOrFilename isFilename ]).

    directory := aStringOrFilename asFilename

    "Modified: / 16-09-2010 / 15:58:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 25-08-2020 / 10:00:58 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCDirectoryRepository methodsFor:'as yet unclassified'!

asCreationTemplate
    self creationTemplate isNil ifTrue: [ 
        ^ self class creationTemplateDirectory: directory pathName.
    ].
    ^ super asCreationTemplate

    "Created: / 03-05-2021 / 21:19:21 / Jan Vrany <jan.vrany@labware.com>"
!

isValid
	^directory exists
!

literalArrayEncoding

    ^Array 
        with: self class name asSymbol
        with: #directory:
        with: directory pathName "directoryName"

    "
        (MCDirectoryRepository directory: '/tmp')
            literalArrayEncoding decodeAsLiteralArray
    "

    "Created: / 16-09-2010 / 16:01:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 01-12-2011 / 21:01:25 / cg"
!

readStreamForFileNamed: aString do: aBlock
    ^ (directory / aString) readingFileDo: aBlock

    "Modified: / 25-08-2020 / 10:10:34 / Jan Vrany <jan.vrany@labware.com>"
!

writeStreamForFileNamed: aString replace: aBoolean do: aBlock
    | file |

    file := directory / aString.
    (aBoolean not and: [ file exists ]) ifTrue: [
        self error: ('File already exists: %1' bindWith: file pathName)
    ].
    ^ file writingFileDo: aBlock

    "Modified: / 25-08-2020 / 10:10:39 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCDirectoryRepository methodsFor:'comparing'!

hash
	^ directory pathName hash
! !

!MCDirectoryRepository methodsFor:'displaying'!

displayString

    ^directory pathName "/ directoryName

    "Created: / 14-09-2010 / 23:18:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 01-12-2011 / 21:00:33 / cg"
! !

!MCDirectoryRepository methodsFor:'initialization'!

initialize
    super initialize.
    directory := Filename currentDirectory

    "Modified: / 25-08-2020 / 10:05:44 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCDirectoryRepository methodsFor:'queries'!

allFileNames
    ^ (directory directoryContentsAsFilenames asArray sortBy: [:a :b | a modificationTime >= b modificationTime]) collect: [:ea | ea baseName]

    "Modified: / 03-07-2020 / 20:30:51 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCDirectoryRepository class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCDirectoryRepository.st,v 1.7 2014-02-12 14:53:38 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCDirectoryRepository.st,v 1.7 2014-02-12 14:53:38 cg Exp $'
!

version_HG

    ^ '$Changeset: <not expanded> $'
!

version_SVN
    ^ '$Id: MCDirectoryRepository.st,v 1.7 2014-02-12 14:53:38 cg Exp $'
! !