MCFtpRepository.st
author Claus Gittinger <cg@exept.de>
Sat, 20 Aug 2011 14:29:43 +0200
changeset 354 72ab0170f947
parent 233 979de6702a64
child 515 c89e117f2158
permissions -rw-r--r--
initial checkin

"{ Package: 'stx:goodies/monticello' }"

MCFileBasedRepository subclass:#MCFtpRepository
	instanceVariableNames:'host directory user password connection'
	classVariableNames:''
	poolDictionaries:''
	category:'Monticello-Repositories'
!


!MCFtpRepository class methodsFor:'as yet unclassified'!

creationTemplate
	^
'MCFtpRepository
	host: ''modules.squeakfoundation.org''
	directory: ''mc''
	user: ''squeak''
	password: ''squeak'''
	
!

description
	^ 'FTP'
!

host: host directory: directory user: user password: password
	^ self new
		host: host;
		directory: directory;
		user: user;
		password: password
!

templateCreationSelector
	^ #host:directory:user:password: 
! !

!MCFtpRepository methodsFor:'as yet unclassified'!

clientDo: aBlock
	| client |
	client := FTPClient openOnHostNamed: host.
	client loginUser: user password: password.
	directory isEmpty ifFalse: [client changeDirectoryTo: directory].
	^ [aBlock value: client] ensure: [client close]
!

directory: dirPath
	directory := dirPath
!

host: hostname
	host := hostname
!

parseDirectoryListing: aString
	| stream files line tokens |
	stream := aString readStream.
	files := OrderedCollection new.
	[stream atEnd] whileFalse:
		[line := stream nextLine.
		tokens := line findTokens: ' '.
		tokens size > 2 ifTrue: [files add: tokens last]].
	^ files
!

password: passwordString
	password := passwordString
!

user: userString
	user := userString
! !

!MCFtpRepository methodsFor:'required'!

allFileNames
	^ self clientDo:
		[:client |
		self parseDirectoryListing: client getDirectory]
!

description
	^ 'ftp://', user, '@', host, '/', directory
!

readStreamForFileNamed: aString do: aBlock
	| stream |
	^ self clientDo:
		[:client |
		client binary.
		stream := RWBinaryOrTextStream on: String new.
		stream nextPutAll: (client getFileNamed: aString).
		aBlock value: stream reset]
!

writeStreamForFileNamed: aString replace: ignoreBoolean do: aBlock
	| stream |
	stream := RWBinaryOrTextStream on: String new.
	aBlock value: stream.
	self clientDo:
		[:client |
		client binary.
		client putFileStreamContents: stream reset as: aString]
! !

!MCFtpRepository class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCFtpRepository.st,v 1.3 2011-08-20 12:29:43 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCFtpRepository.st,v 1.3 2011-08-20 12:29:43 cg Exp $'
!

version_SVN
    ^ '§Id: MCFtpRepository.st 5 2010-08-29 07:30:29Z vranyj1 §'
! !