-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTDA_document.bak
138 lines (110 loc) · 5.32 KB
/
TDA_document.bak
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#lang racket
; se definira el TDA de documento con la siguiente estructura de lista
; (id, autor, fechaCreacion, (versiones), nombre, contenido, (usuarios con permisos ))
(require "TDA_fechas.rkt")
(require "TDA_usuarios.rkt")
(require "TDA_access.rkt")
(provide to-string)
(provide documento)
(provide DocumentGetId)
(provide DocumentGetAutor)
(provide DocumentGetDate)
(provide DocumentGetVersions)
(provide DocumentGetNombre)
(provide DocumentGetContent)
(provide DocumentGetAccess)
(provide DocumentInfo)
(provide DocumentAddContent)
(provide DocumentSetAccess)
(provide DocumentAddIAccess)
(provide DocumentAddAccess)
; Funcion de apoyo que transforma numeros a string
; Dom: Numero
; Rec: String
( define (to-string numero) (format "~v" numero))
; se redefine la funcion list-update para quedar acorde con el TDA
(define Document-set list-set)
; constuctor de un documento
; Dominio: Numero X String X String X DAte X String X String
; Recorrido: un documento
(define (documento id autor fechaC nombre contenido)(
list id autor fechaC '() nombre contenido '() '() ))
; extrae el id de un documento
; Dominio: Documento
; Recorrido: Numero
(define (DocumentGetId documento) (list-ref documento 0))
; extrae autor de un documento
; Dominio: Documento
; Recorrido: String
(define (DocumentGetAutor documento) (list-ref documento 1))
; extrae la fecha de un documento
; Dominio: Documento
; Recorrido: Date
(define (DocumentGetDate documento) (list-ref documento 2))
; extrae las versiones guardadas de un documento
; Dominio: Documento
; Recorrido: lista de documentos
(define (DocumentGetVersions documento) (list-ref documento 3))
; extrae el nombre de un documento
; Dominio: Documento
; Recorrido: String
(define (DocumentGetNombre documento) (list-ref documento 4))
; extrae el contenido de un documento
; Dominio: Documento
; Recorrido: String
(define (DocumentGetContent documento) (list-ref documento 5))
; extrae los usuarios de un documento
; Dominio: Documento
; Recorrido: lista de usuarios
(define (DocumentGetAccess documento) (list-ref documento 6))
; extrae los accesos de un documento
; Dominio: Documento
; Recorrido: lista de accesos
(define (DocumentSetAccess documento listAccess) (Document-set documento 6 listAccess))
; Funcion que Recopila toda la informacion referente a un Documento en un string
; Dominio: Documento
; Recorrido: String
(define (DocumentInfo documento FDe) (
string-append
"Id: " (to-string (DocumentGetId documento)) "\n"
"autor: " (DocumentGetAutor documento) "\n"
"Fecha de creacion: " (DateString (DocumentGetDate documento)) "\n"
"Nombre: " (DocumentGetNombre documento) "\n"
"Contenido: " "\n" "\"" (FDe (DocumentGetContent documento)) "\"" "\n"
"usuarios compartidos: \n"
"-------------------------------------------\n"))
; funcion que añade texto al final de un documento
; Dominio: Documento X String
; Recorrido: Documento
(define (DocumentAddContent documento texto FEn FDe) (
Document-set documento 5 (
FEn(string-append (FDe(DocumentGetContent documento)) texto))))
; funcion que revisa si un usuario esta en una lista de acceso, entrega la posicion en la que este y -1 si no se encuentra
; Dominio: listaAccesos X usuario X Numero
; Recorrido: Numero
(define (isShared? listAccess user pos) (if (null? listAccess) -1 (
if (equal? (accGetName (car listAccess)) user) pos (isShared? (cdr listAccess) user (+ 1 pos)) )))
; funcion que añade un acceso sin tomar en cuenta ninguna restriccion
; Dominio: documento X acceso
; Recorrido: documento
(define (DocumentAddIAccess documento access) (DocumentSetAccess documento (append (DocumentGetAccess documento) (list access)) ) )
; funcion que edita un acceso sin tomar en cuenta ninguna restriccion
; Dominio: documento X String X caracter
; Recorrido: documento
(define (DocumentEditAccess documento user type) (DocumentSetAccess documento (list-set (DocumentGetAccess documento) (isShared? (DocumentGetAccess documento) user 0) (accSetType (list-ref (DocumentGetAccess documento) (isShared? (DocumentGetAccess documento) user 0)) type) )))
; funcion que añade un acceso tomando en cuenta restricciones
; Dominio: documento X acceso
; Recorrido: documento
(define (DocumentAddAccess documento access) (if (= -1 (isShared? (DocumentGetAccess documento) (accGetName access) 0)) (DocumentAddIAccess documento access) (DocumentEditAccess documento (accGetName access) (accGetType access)) ))
(define (DocumentAddVersion documento version) (Document-set documento ))
;pruebas
(define hoy (date 03 05 2002))
(define DC1 (documento 01 "nicolas" hoy "Documento 1" "hola que tal"))
(define ac1 (access "nico" #\w))
(define ac2 (access "ale" #\w))
(define ac3 (access "vic" #\w))
(define ac4 (access "loki" #\w))
(define lista (list ac1 ac2 ac3 ac4))
(define dc1 (DocumentAddIAccess DC1 ac1))
(define dc2 (DocumentAddIAccess dc1 ac2))
(define dc3 (DocumentAddIAccess dc2 ac3))