-
Notifications
You must be signed in to change notification settings - Fork 1
/
P3-FileSystem.st
255 lines (208 loc) · 9.06 KB
/
P3-FileSystem.st
1
Object subclass: #Contenido instanceVariableNames: 'nombre fechaCreacion' classVariableNames: '' poolDictionaries: '' category: 'FileSystem-Practica3'!!Contenido methodsFor: 'as yet unclassified' stamp: 'ema 4/19/2018 15:41'!contar ^ SubclassResponsibility ! !!Contenido methodsFor: 'as yet unclassified' stamp: 'ema 4/13/2018 16:26'!tamanoTotalOcupado ^ SubclassResponsibility ! !!Contenido methodsFor: 'as yet unclassified' stamp: 'ema 4/19/2018 15:59'!agregarAlListado: unString sublista: otroString otroString isEmpty ifFalse: [ (unString , Character cr asString , otroString) ] .^ true! !!Contenido methodsFor: 'accessing' stamp: 'ema 4/13/2018 16:35'!nombre: unNombre nombre := unNombre ! !!Contenido methodsFor: 'accessing' stamp: 'ema 4/13/2018 16:36'!fechaCreacion: fecha fechaCreacion := fecha! !!Contenido methodsFor: 'accessing' stamp: 'ema 4/13/2018 16:37'!fechaCreacion ^ fechaCreacion ! !!Contenido methodsFor: 'accessing' stamp: 'ema 4/13/2018 16:38'!nombre ^ nombre! !Contenido subclass: #Archivo instanceVariableNames: 'size' classVariableNames: '' poolDictionaries: '' category: 'FileSystem-Practica3'!!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 11:14'!agregarAListadoConIndent: aNumber ^ String new.! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/19/2018 15:42'!contar ^ 1! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 22:35'!todosLosArchivos | listaConUnSoloArchivo | listaConUnSoloArchivo := OrderedCollection new. listaConUnSoloArchivo add: self. ^ listaConUnSoloArchivo ! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/14/2018 11:31'!tamanoTotalOcupado ^ size! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 14:47'!listadoDeContenidoIndent: aNumber ^ String new.! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/13/2018 16:41'!tamano: aSize size := aSize! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/14/2018 11:45'!tamano ^ size! !!Archivo methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 14:25'!listadoDeContenido ^ ''! !"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!Archivo class instanceVariableNames: ''!!Archivo class methodsFor: 'as yet unclassified' stamp: 'ema 4/14/2018 11:51'!llamado: unNombre creadoEl: unaFecha kBytes: unNumero | nuevoArchivo | nuevoArchivo := self new. nuevoArchivo nombre: unNombre. nuevoArchivo fechaCreacion: unaFecha. nuevoArchivo tamano: unNumero . ^ nuevoArchivo! !Contenido subclass: #Directorio instanceVariableNames: 'contenidos' classVariableNames: '' poolDictionaries: '' category: 'FileSystem-Practica3'!!Directorio methodsFor: 'initialization' stamp: 'ema 4/18/2018 13:56'!initialize contenidos := OrderedCollection new! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 11:29'!agregarAListadoConIndent: aNumber ^ Character cr asString , (self listadoDeContenidoIndent: aNumber)! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 14:43'!agregarRaizIndentada: aNumber | raiz | raiz := String new. aNumber timesRepeat: [ raiz := raiz , '-' ]. raiz := raiz , ' ', nombre. ^ raiz! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 23:03'!archivoMasGrande | listaOrdenadaPorPeso | listaOrdenadaPorPeso := self todosLosArchivos asSortedCollection: [ :a :b | a tamano > b tamano ]. listaOrdenadaPorPeso isEmpty ifTrue: [ ^ false ] ifFalse: [ ^ listaOrdenadaPorPeso at: 1 ]! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/19/2018 15:41'!contar ^ 0! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 22:31'!todosLosArchivos | listaDeArchivos | listaDeArchivos := OrderedCollection new. contenidos do: [ :c | c todosLosArchivos do: [:a | listaDeArchivos add: a ] ]. ^ listaDeArchivos ! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/14/2018 11:49'!tamanoTotalOcupado ^ (contenidos inject: 32 into: [ :sum :ea | sum + ea tamanoTotalOcupado ])! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 14:31'!agregarCantidadDeArchivos| cantArchivos | cantArchivos := 0. contenidos do: [ :c | cantArchivos := cantArchivos + c contar ]. cantArchivos > 0 ifTrue: [ ^ (' (' , cantArchivos asString , ' archivos)')] ifFalse: [ ^ '' ]! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/14/2018 18:35'!agregar: unContenido contenidos add: unContenido! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 14:45'!listadoDeContenidoIndent: aNumber^ (self agregarRaizIndentada: (aNumber)) , (self agregarCantidadDeArchivos), (self agregarSubdirectoriosIndentados: (aNumber + 1)).! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 23:10'!archivoMasNuevo | listaOrdenadaPorFecha | listaOrdenadaPorFecha := self todosLosArchivos asSortedCollection: [ :a :b | a fechaCreacion > b fechaCreacion ]. listaOrdenadaPorFecha isEmpty ifTrue: [ ^ false ] ifFalse: [ ^ listaOrdenadaPorFecha at: 1 ]! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/20/2018 14:55'!agregarSubdirectoriosIndentados: aNumber | subdirectorios | subdirectorios := String new. contenidos do: [ :c | subdirectorios := subdirectorios , (c agregarAListadoConIndent: (aNumber))]. ^ subdirectorios ! !!Directorio methodsFor: 'as yet unclassified' stamp: 'ema 4/18/2018 13:19'!listadoDeContenido ^ self listadoDeContenidoIndent: 1.! !"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!Directorio class instanceVariableNames: ''!!Directorio class methodsFor: 'as yet unclassified' stamp: 'ema 4/14/2018 11:25'!llamado: unString creadoEl: unaFecha | nuevoDir | nuevoDir := Directorio new. nuevoDir initialize. nuevoDir nombre: unString. nuevoDir fechaCreacion: unaFecha. ^ nuevoDir! !TestCase subclass: #DirectorioTest instanceVariableNames: 'vacio conUnArchivo conVariosArchivos conSubdirectorios config grande backup2015' classVariableNames: '' poolDictionaries: '' category: 'FileSystem-Practica3'!!DirectorioTest methodsFor: 'running' stamp: 'ema 4/20/2018 23:03'!testArchivoMasGrande self assert: conSubdirectorios archivoMasGrande tamano equals: 240000000! !!DirectorioTest methodsFor: 'running' stamp: 'JulianGrigera 4/6/2016 12:09'!testListadoDeContenido | listado listadoStream | self assert: vacio listadoDeContenido = '- home'. self assert: conUnArchivo listadoDeContenido = '- var (1 archivos)'. self assert: conVariosArchivos listadoDeContenido = '- tmp (4 archivos)'. listadoStream := WriteStream on: String new. listadoStream << '- log (1 archivos)'; cr. listadoStream << '-- mysql (4 archivos)'; cr. listadoStream << '--- older (1 archivos)'; cr. listadoStream << '-- postgres (3 archivos)'. listado := listadoStream contents. self assert: conSubdirectorios listadoDeContenido = listado! !!DirectorioTest methodsFor: 'running' stamp: 'JulianGrigera 4/6/2016 15:46'!setUp | date | date := '2015-01-01'. "Directorio vacío" vacio := Directorio llamado: 'home' creadoEl: date . "Directorio con un solo archivo" conUnArchivo := Directorio llamado: 'var' creadoEl: date. config := Archivo llamado: 'config.bak' creadoEl: '2016-04-02' asDate kBytes: 128. conUnArchivo agregar: config. "Directorio con varios archivos, pero sin subdirectorios" conVariosArchivos := Directorio llamado: 'tmp' creadoEl: date. grande := Archivo llamado: 'grande.tmp' creadoEl: '2016-04-02' asDate kBytes: 2000000. conVariosArchivos agregar: (Archivo llamado: 'nada.tmp' creadoEl: '2015-05-01' asDate kBytes: 0); agregar: (Archivo llamado: 'chico.tmp' creadoEl: '2013-06-03' asDate kBytes: 10); agregar: grande; agregar: (Archivo llamado: 'mediano.tmp' creadoEl: '1995-11-23' asDate kBytes: 10000). "Directorio con subdirectorios, archivos, y archivos dentro de los subdirectorios" conSubdirectorios := Directorio llamado: 'log' creadoEl: date. backup2015 := Archivo llamado: '2015.zip' creadoEl: '2016-04-06' asDate kBytes: 240000000. conSubdirectorios agregar: (Archivo llamado: 'sys.log' creadoEl: '2016-03-03' asDate kBytes: 90000); agregar: ((Directorio llamado: 'mysql' creadoEl: date) agregar: (Archivo llamado: 'mysql01.log' creadoEl: '2015-12-03' asDate kBytes: 1200000); agregar: (Archivo llamado: 'mysql02.log' creadoEl: '2014-03-03' asDate kBytes: 2000000); agregar: (Archivo llamado: 'mysql03.log' creadoEl: '2013-03-21' asDate kBytes: 2000000); agregar: (Archivo llamado: 'mysql04.log' creadoEl: '2014-07-15' asDate kBytes: 2000000); agregar: ((Directorio llamado: 'older' creadoEl: date) agregar: backup2015; yourself); yourself); agregar: ((Directorio llamado: 'postgres' creadoEl: date) agregar: (Archivo llamado: 'pg01.log' creadoEl: '2015-04-12' asDate kBytes: 1400000); agregar: (Archivo llamado: 'pg02.log' creadoEl: '2016-03-08' asDate kBytes: 4000000); agregar: (Archivo llamado: 'pg03.log' creadoEl: '2016-02-13' asDate kBytes: 4000000); yourself)! !!DirectorioTest methodsFor: 'running' stamp: 'ema 4/20/2018 23:12'!testArchivoMasNuevo self assert: conSubdirectorios archivoMasNuevo equals: backup2015! !