File size: 51,507 Bytes
da43f5e |
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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.43.0 (0)
-->
<!-- Title: %3 Pages: 1 -->
<svg width="2294pt" height="1216pt"
viewBox="0.00 0.00 2293.50 1216.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(36 1180)">
<title>%3</title>
<polygon fill="white" stroke="transparent" points="-36,36 -36,-1180 2257.5,-1180 2257.5,36 -36,36"/>
<!-- Reader -->
<g id="node1" class="node">
<title>Reader</title>
<path fill="#e8e8e8" stroke="transparent" d="M1157,-910C1157,-910 1392,-910 1392,-910 1398,-910 1404,-916 1404,-922 1404,-922 1404,-1128 1404,-1128 1404,-1134 1398,-1140 1392,-1140 1392,-1140 1157,-1140 1157,-1140 1151,-1140 1145,-1134 1145,-1128 1145,-1128 1145,-922 1145,-922 1145,-916 1151,-910 1157,-910"/>
<polygon fill="#bebebe" stroke="transparent" points="1146.5,-1117 1146.5,-1139 1403.5,-1139 1403.5,-1117 1146.5,-1117"/>
<text text-anchor="start" x="1256" y="-1126.2" font-family="Arial" font-weight="bold" font-size="11.00">Reader</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1107 1146.5,-1117 1403.5,-1117 1403.5,-1107 1146.5,-1107"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1085 1146.5,-1107 1403.5,-1107 1403.5,-1085 1146.5,-1085"/>
<text text-anchor="start" x="1151.5" y="-1093.2" font-family="Arial" font-size="11.00">- readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1063 1146.5,-1085 1403.5,-1085 1403.5,-1063 1146.5,-1063"/>
<text text-anchor="start" x="1151.5" y="-1071.2" font-family="Arial" font-size="11.00">+ username : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1041 1146.5,-1063 1403.5,-1063 1403.5,-1041 1146.5,-1041"/>
<text text-anchor="start" x="1151.5" y="-1049.2" font-family="Arial" font-size="11.00">+ email : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-1019 1146.5,-1041 1403.5,-1041 1403.5,-1019 1146.5,-1019"/>
<text text-anchor="start" x="1151.5" y="-1027.2" font-family="Arial" font-size="11.00">+ membershipType : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-997 1146.5,-1019 1403.5,-1019 1403.5,-997 1146.5,-997"/>
<text text-anchor="start" x="1151.5" y="-1005.2" font-family="Arial" font-size="11.00">+ readingStreak : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-987 1146.5,-997 1403.5,-997 1403.5,-987 1146.5,-987"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-977 1146.5,-987 1403.5,-987 1403.5,-977 1146.5,-977"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-955 1146.5,-977 1403.5,-977 1403.5,-955 1146.5,-955"/>
<text text-anchor="start" x="1151.5" y="-963.2" font-family="Arial" font-size="11.00">+ Reader(username: String, email: String) : Reader</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-933 1146.5,-955 1403.5,-955 1403.5,-933 1146.5,-933"/>
<text text-anchor="start" x="1151.5" y="-941.2" font-family="Arial" font-size="11.00">+ borrowBook(bookId: String) : BorrowRecord</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1146.5,-911 1146.5,-933 1403.5,-933 1403.5,-911 1146.5,-911"/>
<text text-anchor="start" x="1151.5" y="-919.2" font-family="Arial" font-size="11.00">+ addToWishlist(bookId: String) : void</text>
<polygon fill="black" stroke="black" points="1145.5,-1117 1145.5,-1117 1404.5,-1117 1404.5,-1117 1145.5,-1117"/>
<polygon fill="black" stroke="black" points="1145.5,-987 1145.5,-987 1404.5,-987 1404.5,-987 1145.5,-987"/>
<path fill="none" stroke="black" d="M1157,-910C1157,-910 1392,-910 1392,-910 1398,-910 1404,-916 1404,-922 1404,-922 1404,-1128 1404,-1128 1404,-1134 1398,-1140 1392,-1140 1392,-1140 1157,-1140 1157,-1140 1151,-1140 1145,-1134 1145,-1128 1145,-1128 1145,-922 1145,-922 1145,-916 1151,-910 1157,-910"/>
</g>
<!-- BorrowRecord -->
<g id="node2" class="node">
<title>BorrowRecord</title>
<path fill="#e8e8e8" stroke="transparent" d="M291.5,-608C291.5,-608 595.5,-608 595.5,-608 601.5,-608 607.5,-614 607.5,-620 607.5,-620 607.5,-804 607.5,-804 607.5,-810 601.5,-816 595.5,-816 595.5,-816 291.5,-816 291.5,-816 285.5,-816 279.5,-810 279.5,-804 279.5,-804 279.5,-620 279.5,-620 279.5,-614 285.5,-608 291.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="280.5,-793 280.5,-815 606.5,-815 606.5,-793 280.5,-793"/>
<text text-anchor="start" x="404.5" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">BorrowRecord</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-783 280.5,-793 606.5,-793 606.5,-783 280.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-761 280.5,-783 606.5,-783 606.5,-761 280.5,-761"/>
<text text-anchor="start" x="285.5" y="-769.2" font-family="Arial" font-size="11.00">- borrowId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-739 280.5,-761 606.5,-761 606.5,-739 280.5,-739"/>
<text text-anchor="start" x="285.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-717 280.5,-739 606.5,-739 606.5,-717 280.5,-717"/>
<text text-anchor="start" x="285.5" y="-725.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-695 280.5,-717 606.5,-717 606.5,-695 280.5,-695"/>
<text text-anchor="start" x="285.5" y="-703.2" font-family="Arial" font-size="11.00">+ borrowDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-673 280.5,-695 606.5,-695 606.5,-673 280.5,-673"/>
<text text-anchor="start" x="285.5" y="-681.2" font-family="Arial" font-size="11.00">+ dueDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-663 280.5,-673 606.5,-673 606.5,-663 280.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-653 280.5,-663 606.5,-663 606.5,-653 280.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-631 280.5,-653 606.5,-653 606.5,-631 280.5,-631"/>
<text text-anchor="start" x="285.5" y="-639.2" font-family="Arial" font-size="11.00">+ BorrowRecord(readerId: String, bookId: String) : BorrowRecord</text>
<polygon fill="#e8e8e8" stroke="transparent" points="280.5,-609 280.5,-631 606.5,-631 606.5,-609 280.5,-609"/>
<text text-anchor="start" x="285.5" y="-617.2" font-family="Arial" font-size="11.00">+ extendDueDate(days: int) : void</text>
<polygon fill="black" stroke="black" points="279.5,-793 279.5,-793 607.5,-793 607.5,-793 279.5,-793"/>
<polygon fill="black" stroke="black" points="279.5,-663 279.5,-663 607.5,-663 607.5,-663 279.5,-663"/>
<path fill="none" stroke="black" d="M291.5,-608C291.5,-608 595.5,-608 595.5,-608 601.5,-608 607.5,-614 607.5,-620 607.5,-620 607.5,-804 607.5,-804 607.5,-810 601.5,-816 595.5,-816 595.5,-816 291.5,-816 291.5,-816 285.5,-816 279.5,-810 279.5,-804 279.5,-804 279.5,-620 279.5,-620 279.5,-614 285.5,-608 291.5,-608"/>
</g>
<!-- Reader->BorrowRecord -->
<g id="edge1" class="edge">
<title>Reader->BorrowRecord</title>
<path fill="none" stroke="#4a4a4a" d="M1136.81,-1064C900.65,-1064 443.5,-1064 443.5,-1064 443.5,-1064 443.5,-830 443.5,-830"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="447,-830 443.5,-820 440,-830 447,-830"/>
<text text-anchor="middle" x="441.5" y="-822.8" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1133.81" y="-1066.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Review -->
<g id="node9" class="node">
<title>Review</title>
<path fill="#e8e8e8" stroke="transparent" d="M1250,-4C1250,-4 1485,-4 1485,-4 1491,-4 1497,-10 1497,-16 1497,-16 1497,-200 1497,-200 1497,-206 1491,-212 1485,-212 1485,-212 1250,-212 1250,-212 1244,-212 1238,-206 1238,-200 1238,-200 1238,-16 1238,-16 1238,-10 1244,-4 1250,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="1239.5,-189 1239.5,-211 1496.5,-211 1496.5,-189 1239.5,-189"/>
<text text-anchor="start" x="1349" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">Review</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-179 1239.5,-189 1496.5,-189 1496.5,-179 1239.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-157 1239.5,-179 1496.5,-179 1496.5,-157 1239.5,-157"/>
<text text-anchor="start" x="1244.5" y="-165.2" font-family="Arial" font-size="11.00">- reviewId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-135 1239.5,-157 1496.5,-157 1496.5,-135 1239.5,-135"/>
<text text-anchor="start" x="1244.5" y="-143.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-113 1239.5,-135 1496.5,-135 1496.5,-113 1239.5,-113"/>
<text text-anchor="start" x="1244.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-91 1239.5,-113 1496.5,-113 1496.5,-91 1239.5,-91"/>
<text text-anchor="start" x="1244.5" y="-99.2" font-family="Arial" font-size="11.00">+ rating : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-69 1239.5,-91 1496.5,-91 1496.5,-69 1239.5,-69"/>
<text text-anchor="start" x="1244.5" y="-77.2" font-family="Arial" font-size="11.00">+ comment : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-59 1239.5,-69 1496.5,-69 1496.5,-59 1239.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-49 1239.5,-59 1496.5,-59 1496.5,-49 1239.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-27 1239.5,-49 1496.5,-49 1496.5,-27 1239.5,-27"/>
<text text-anchor="start" x="1244.5" y="-35.2" font-family="Arial" font-size="11.00">+ Review(readerId: String, bookId: String) : Review</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1239.5,-5 1239.5,-27 1496.5,-27 1496.5,-5 1239.5,-5"/>
<text text-anchor="start" x="1244.5" y="-13.2" font-family="Arial" font-size="11.00">+ updateRating(newRating: int) : void</text>
<polygon fill="black" stroke="black" points="1238.5,-189 1238.5,-189 1497.5,-189 1497.5,-189 1238.5,-189"/>
<polygon fill="black" stroke="black" points="1238.5,-59 1238.5,-59 1497.5,-59 1497.5,-59 1238.5,-59"/>
<path fill="none" stroke="black" d="M1250,-4C1250,-4 1485,-4 1485,-4 1491,-4 1497,-10 1497,-16 1497,-16 1497,-200 1497,-200 1497,-206 1491,-212 1485,-212 1485,-212 1250,-212 1250,-212 1244,-212 1238,-206 1238,-200 1238,-200 1238,-16 1238,-16 1238,-10 1244,-4 1250,-4"/>
</g>
<!-- Reader->Review -->
<g id="edge8" class="edge">
<title>Reader->Review</title>
<path fill="none" stroke="#4a4a4a" d="M1326.33,-905.59C1326.33,-905.59 1326.33,-226.26 1326.33,-226.26"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1329.83,-226.26 1326.33,-216.26 1322.83,-226.26 1329.83,-226.26"/>
<text text-anchor="middle" x="1324.33" y="-219.06" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1323.33" y="-898.39" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Recommendation -->
<g id="node10" class="node">
<title>Recommendation</title>
<path fill="#e8e8e8" stroke="transparent" d="M1869.5,-608C1869.5,-608 2201.5,-608 2201.5,-608 2207.5,-608 2213.5,-614 2213.5,-620 2213.5,-620 2213.5,-804 2213.5,-804 2213.5,-810 2207.5,-816 2201.5,-816 2201.5,-816 1869.5,-816 1869.5,-816 1863.5,-816 1857.5,-810 1857.5,-804 1857.5,-804 1857.5,-620 1857.5,-620 1857.5,-614 1863.5,-608 1869.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="1858.5,-793 1858.5,-815 2212.5,-815 2212.5,-793 1858.5,-793"/>
<text text-anchor="start" x="1989" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Recommendation</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-783 1858.5,-793 2212.5,-793 2212.5,-783 1858.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-761 1858.5,-783 2212.5,-783 2212.5,-761 1858.5,-761"/>
<text text-anchor="start" x="1863.5" y="-769.2" font-family="Arial" font-size="11.00">- recommendationId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-739 1858.5,-761 2212.5,-761 2212.5,-739 1858.5,-739"/>
<text text-anchor="start" x="1863.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-717 1858.5,-739 2212.5,-739 2212.5,-717 1858.5,-717"/>
<text text-anchor="start" x="1863.5" y="-725.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-695 1858.5,-717 2212.5,-717 2212.5,-695 1858.5,-695"/>
<text text-anchor="start" x="1863.5" y="-703.2" font-family="Arial" font-size="11.00">+ confidence : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-673 1858.5,-695 2212.5,-695 2212.5,-673 1858.5,-673"/>
<text text-anchor="start" x="1863.5" y="-681.2" font-family="Arial" font-size="11.00">+ reason : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-663 1858.5,-673 2212.5,-673 2212.5,-663 1858.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-653 1858.5,-663 2212.5,-663 2212.5,-653 1858.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-631 1858.5,-653 2212.5,-653 2212.5,-631 1858.5,-631"/>
<text text-anchor="start" x="1863.5" y="-639.2" font-family="Arial" font-size="11.00">+ Recommendation(readerId: String, bookId: String) : Recommendation</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1858.5,-609 1858.5,-631 2212.5,-631 2212.5,-609 1858.5,-609"/>
<text text-anchor="start" x="1863.5" y="-617.2" font-family="Arial" font-size="11.00">+ calculateConfidence() : double</text>
<polygon fill="black" stroke="black" points="1857.5,-793 1857.5,-793 2213.5,-793 2213.5,-793 1857.5,-793"/>
<polygon fill="black" stroke="black" points="1857.5,-663 1857.5,-663 2213.5,-663 2213.5,-663 1857.5,-663"/>
<path fill="none" stroke="black" d="M1869.5,-608C1869.5,-608 2201.5,-608 2201.5,-608 2207.5,-608 2213.5,-614 2213.5,-620 2213.5,-620 2213.5,-804 2213.5,-804 2213.5,-810 2207.5,-816 2201.5,-816 2201.5,-816 1869.5,-816 1869.5,-816 1863.5,-816 1857.5,-810 1857.5,-804 1857.5,-804 1857.5,-620 1857.5,-620 1857.5,-614 1863.5,-608 1869.5,-608"/>
</g>
<!-- Reader->Recommendation -->
<g id="edge11" class="edge">
<title>Reader->Recommendation</title>
<path fill="none" stroke="#4a4a4a" d="M1412.22,-917C1615.9,-917 1973.67,-917 1973.67,-917 1973.67,-917 1973.67,-830.2 1973.67,-830.2"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1977.17,-830.2 1973.67,-820.2 1970.17,-830.2 1977.17,-830.2"/>
<text text-anchor="middle" x="1971.67" y="-823" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1415.22" y="-919.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- ReadingProgress -->
<g id="node12" class="node">
<title>ReadingProgress</title>
<path fill="#e8e8e8" stroke="transparent" d="M816,-4C816,-4 1147,-4 1147,-4 1153,-4 1159,-10 1159,-16 1159,-16 1159,-200 1159,-200 1159,-206 1153,-212 1147,-212 1147,-212 816,-212 816,-212 810,-212 804,-206 804,-200 804,-200 804,-16 804,-16 804,-10 810,-4 816,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="805.5,-189 805.5,-211 1158.5,-211 1158.5,-189 805.5,-189"/>
<text text-anchor="start" x="936" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">ReadingProgress</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-179 805.5,-189 1158.5,-189 1158.5,-179 805.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-157 805.5,-179 1158.5,-179 1158.5,-157 805.5,-157"/>
<text text-anchor="start" x="810.5" y="-165.2" font-family="Arial" font-size="11.00">- progressId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-135 805.5,-157 1158.5,-157 1158.5,-135 805.5,-135"/>
<text text-anchor="start" x="810.5" y="-143.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-113 805.5,-135 1158.5,-135 1158.5,-113 805.5,-113"/>
<text text-anchor="start" x="810.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-91 805.5,-113 1158.5,-113 1158.5,-91 805.5,-91"/>
<text text-anchor="start" x="810.5" y="-99.2" font-family="Arial" font-size="11.00">+ currentPage : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-69 805.5,-91 1158.5,-91 1158.5,-69 805.5,-69"/>
<text text-anchor="start" x="810.5" y="-77.2" font-family="Arial" font-size="11.00">+ totalPages : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-59 805.5,-69 1158.5,-69 1158.5,-59 805.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-49 805.5,-59 1158.5,-59 1158.5,-49 805.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-27 805.5,-49 1158.5,-49 1158.5,-27 805.5,-27"/>
<text text-anchor="start" x="810.5" y="-35.2" font-family="Arial" font-size="11.00">+ ReadingProgress(readerId: String, bookId: String) : ReadingProgress</text>
<polygon fill="#e8e8e8" stroke="transparent" points="805.5,-5 805.5,-27 1158.5,-27 1158.5,-5 805.5,-5"/>
<text text-anchor="start" x="810.5" y="-13.2" font-family="Arial" font-size="11.00">+ updateProgress(page: int) : void</text>
<polygon fill="black" stroke="black" points="804.5,-189 804.5,-189 1159.5,-189 1159.5,-189 804.5,-189"/>
<polygon fill="black" stroke="black" points="804.5,-59 804.5,-59 1159.5,-59 1159.5,-59 804.5,-59"/>
<path fill="none" stroke="black" d="M816,-4C816,-4 1147,-4 1147,-4 1153,-4 1159,-10 1159,-16 1159,-16 1159,-200 1159,-200 1159,-206 1153,-212 1147,-212 1147,-212 816,-212 816,-212 810,-212 804,-206 804,-200 804,-200 804,-16 804,-16 804,-10 810,-4 816,-4"/>
</g>
<!-- Reader->ReadingProgress -->
<g id="edge12" class="edge">
<title>Reader->ReadingProgress</title>
<path fill="none" stroke="#4a4a4a" d="M1136.89,-985C1060.7,-985 981.25,-985 981.25,-985 981.25,-985 981.25,-226.42 981.25,-226.42"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="984.75,-226.42 981.25,-216.42 977.75,-226.42 984.75,-226.42"/>
<text text-anchor="middle" x="979.25" y="-219.22" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="1133.89" y="-987.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Analytics -->
<g id="node13" class="node">
<title>Analytics</title>
<path fill="#e8e8e8" stroke="transparent" d="M1089.5,-608C1089.5,-608 1263.5,-608 1263.5,-608 1269.5,-608 1275.5,-614 1275.5,-620 1275.5,-620 1275.5,-804 1275.5,-804 1275.5,-810 1269.5,-816 1263.5,-816 1263.5,-816 1089.5,-816 1089.5,-816 1083.5,-816 1077.5,-810 1077.5,-804 1077.5,-804 1077.5,-620 1077.5,-620 1077.5,-614 1083.5,-608 1089.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="1078.5,-793 1078.5,-815 1274.5,-815 1274.5,-793 1078.5,-793"/>
<text text-anchor="start" x="1152" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Analytics</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-783 1078.5,-793 1274.5,-793 1274.5,-783 1078.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-761 1078.5,-783 1274.5,-783 1274.5,-761 1078.5,-761"/>
<text text-anchor="start" x="1083.5" y="-769.2" font-family="Arial" font-size="11.00">- analyticsId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-739 1078.5,-761 1274.5,-761 1274.5,-739 1078.5,-739"/>
<text text-anchor="start" x="1083.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-717 1078.5,-739 1274.5,-739 1274.5,-717 1078.5,-717"/>
<text text-anchor="start" x="1083.5" y="-725.2" font-family="Arial" font-size="11.00">+ totalBooksRead : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-695 1078.5,-717 1274.5,-717 1274.5,-695 1078.5,-695"/>
<text text-anchor="start" x="1083.5" y="-703.2" font-family="Arial" font-size="11.00">+ averageRating : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-673 1078.5,-695 1274.5,-695 1274.5,-673 1078.5,-673"/>
<text text-anchor="start" x="1083.5" y="-681.2" font-family="Arial" font-size="11.00">+ readingTime : long</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-663 1078.5,-673 1274.5,-673 1274.5,-663 1078.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-653 1078.5,-663 1274.5,-663 1274.5,-653 1078.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-631 1078.5,-653 1274.5,-653 1274.5,-631 1078.5,-631"/>
<text text-anchor="start" x="1083.5" y="-639.2" font-family="Arial" font-size="11.00">+ Analytics(readerId: String) : Analytics</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1078.5,-609 1078.5,-631 1274.5,-631 1274.5,-609 1078.5,-609"/>
<text text-anchor="start" x="1083.5" y="-617.2" font-family="Arial" font-size="11.00">+ generateReport() : String</text>
<polygon fill="black" stroke="black" points="1077.5,-793 1077.5,-793 1275.5,-793 1275.5,-793 1077.5,-793"/>
<polygon fill="black" stroke="black" points="1077.5,-663 1077.5,-663 1275.5,-663 1275.5,-663 1077.5,-663"/>
<path fill="none" stroke="black" d="M1089.5,-608C1089.5,-608 1263.5,-608 1263.5,-608 1269.5,-608 1275.5,-614 1275.5,-620 1275.5,-620 1275.5,-804 1275.5,-804 1275.5,-810 1269.5,-816 1263.5,-816 1263.5,-816 1089.5,-816 1089.5,-816 1083.5,-816 1077.5,-810 1077.5,-804 1077.5,-804 1077.5,-620 1077.5,-620 1077.5,-614 1083.5,-608 1089.5,-608"/>
</g>
<!-- Reader->Analytics -->
<g id="edge14" class="edge">
<title>Reader->Analytics</title>
<path fill="none" stroke="#4a4a4a" d="M1210.25,-905.78C1210.25,-905.78 1210.25,-830.11 1210.25,-830.11"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1213.75,-830.11 1210.25,-820.11 1206.75,-830.11 1213.75,-830.11"/>
<text text-anchor="middle" x="1207.25" y="-822.91" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="1207.25" y="-898.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Subscription -->
<g id="node14" class="node">
<title>Subscription</title>
<path fill="#e8e8e8" stroke="transparent" d="M1479.5,-608C1479.5,-608 1771.5,-608 1771.5,-608 1777.5,-608 1783.5,-614 1783.5,-620 1783.5,-620 1783.5,-804 1783.5,-804 1783.5,-810 1777.5,-816 1771.5,-816 1771.5,-816 1479.5,-816 1479.5,-816 1473.5,-816 1467.5,-810 1467.5,-804 1467.5,-804 1467.5,-620 1467.5,-620 1467.5,-614 1473.5,-608 1479.5,-608"/>
<polygon fill="#bebebe" stroke="transparent" points="1468.5,-793 1468.5,-815 1782.5,-815 1782.5,-793 1468.5,-793"/>
<text text-anchor="start" x="1591.5" y="-802.2" font-family="Arial" font-weight="bold" font-size="11.00">Subscription</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-783 1468.5,-793 1782.5,-793 1782.5,-783 1468.5,-783"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-761 1468.5,-783 1782.5,-783 1782.5,-761 1468.5,-761"/>
<text text-anchor="start" x="1473.5" y="-769.2" font-family="Arial" font-size="11.00">- subscriptionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-739 1468.5,-761 1782.5,-761 1782.5,-739 1468.5,-739"/>
<text text-anchor="start" x="1473.5" y="-747.2" font-family="Arial" font-size="11.00">+ readerId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-717 1468.5,-739 1782.5,-739 1782.5,-717 1468.5,-717"/>
<text text-anchor="start" x="1473.5" y="-725.2" font-family="Arial" font-size="11.00">+ planType : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-695 1468.5,-717 1782.5,-717 1782.5,-695 1468.5,-695"/>
<text text-anchor="start" x="1473.5" y="-703.2" font-family="Arial" font-size="11.00">+ monthlyFee : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-673 1468.5,-695 1782.5,-695 1782.5,-673 1468.5,-673"/>
<text text-anchor="start" x="1473.5" y="-681.2" font-family="Arial" font-size="11.00">+ accessLevel : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-663 1468.5,-673 1782.5,-673 1782.5,-663 1468.5,-663"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-653 1468.5,-663 1782.5,-663 1782.5,-653 1468.5,-653"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-631 1468.5,-653 1782.5,-653 1782.5,-631 1468.5,-631"/>
<text text-anchor="start" x="1473.5" y="-639.2" font-family="Arial" font-size="11.00">+ Subscription(readerId: String, planType: String) : Subscription</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1468.5,-609 1468.5,-631 1782.5,-631 1782.5,-609 1468.5,-609"/>
<text text-anchor="start" x="1473.5" y="-617.2" font-family="Arial" font-size="11.00">+ upgradeAccess(newLevel: String) : void</text>
<polygon fill="black" stroke="black" points="1467.5,-793 1467.5,-793 1783.5,-793 1783.5,-793 1467.5,-793"/>
<polygon fill="black" stroke="black" points="1467.5,-663 1467.5,-663 1783.5,-663 1783.5,-663 1467.5,-663"/>
<path fill="none" stroke="black" d="M1479.5,-608C1479.5,-608 1771.5,-608 1771.5,-608 1777.5,-608 1783.5,-614 1783.5,-620 1783.5,-620 1783.5,-804 1783.5,-804 1783.5,-810 1777.5,-816 1771.5,-816 1771.5,-816 1479.5,-816 1479.5,-816 1473.5,-816 1467.5,-810 1467.5,-804 1467.5,-804 1467.5,-620 1467.5,-620 1467.5,-614 1473.5,-608 1479.5,-608"/>
</g>
<!-- Reader->Subscription -->
<g id="edge15" class="edge">
<title>Reader->Subscription</title>
<path fill="none" stroke="#4a4a4a" d="M1369.17,-905.78C1369.17,-817.32 1369.17,-712 1369.17,-712 1369.17,-712 1449.18,-712 1449.18,-712"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1449.18,-715.5 1459.18,-712 1449.18,-708.5 1449.18,-715.5"/>
<text text-anchor="middle" x="1456.18" y="-714.8" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="1366.17" y="-898.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- DigitalBook -->
<g id="node3" class="node">
<title>DigitalBook</title>
<path fill="#e8e8e8" stroke="transparent" d="M638,-306C638,-306 873,-306 873,-306 879,-306 885,-312 885,-318 885,-318 885,-502 885,-502 885,-508 879,-514 873,-514 873,-514 638,-514 638,-514 632,-514 626,-508 626,-502 626,-502 626,-318 626,-318 626,-312 632,-306 638,-306"/>
<polygon fill="#bebebe" stroke="transparent" points="627.5,-491 627.5,-513 884.5,-513 884.5,-491 627.5,-491"/>
<text text-anchor="start" x="725" y="-500.2" font-family="Arial" font-weight="bold" font-size="11.00">DigitalBook</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-481 627.5,-491 884.5,-491 884.5,-481 627.5,-481"/>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-459 627.5,-481 884.5,-481 884.5,-459 627.5,-459"/>
<text text-anchor="start" x="632.5" y="-467.2" font-family="Arial" font-size="11.00">- bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-437 627.5,-459 884.5,-459 884.5,-437 627.5,-437"/>
<text text-anchor="start" x="632.5" y="-445.2" font-family="Arial" font-size="11.00">+ title : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-415 627.5,-437 884.5,-437 884.5,-415 627.5,-415"/>
<text text-anchor="start" x="632.5" y="-423.2" font-family="Arial" font-size="11.00">+ isbn : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-393 627.5,-415 884.5,-415 884.5,-393 627.5,-393"/>
<text text-anchor="start" x="632.5" y="-401.2" font-family="Arial" font-size="11.00">+ fileFormat : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-371 627.5,-393 884.5,-393 884.5,-371 627.5,-371"/>
<text text-anchor="start" x="632.5" y="-379.2" font-family="Arial" font-size="11.00">+ fileSize : long</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-361 627.5,-371 884.5,-371 884.5,-361 627.5,-361"/>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-351 627.5,-361 884.5,-361 884.5,-351 627.5,-351"/>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-329 627.5,-351 884.5,-351 884.5,-329 627.5,-329"/>
<text text-anchor="start" x="632.5" y="-337.2" font-family="Arial" font-size="11.00">+ DigitalBook(title: String, isbn: String) : DigitalBook</text>
<polygon fill="#e8e8e8" stroke="transparent" points="627.5,-307 627.5,-329 884.5,-329 884.5,-307 627.5,-307"/>
<text text-anchor="start" x="632.5" y="-315.2" font-family="Arial" font-size="11.00">+ download(readerId: String) : String</text>
<polygon fill="black" stroke="black" points="626.5,-491 626.5,-491 885.5,-491 885.5,-491 626.5,-491"/>
<polygon fill="black" stroke="black" points="626.5,-361 626.5,-361 885.5,-361 885.5,-361 626.5,-361"/>
<path fill="none" stroke="black" d="M638,-306C638,-306 873,-306 873,-306 879,-306 885,-312 885,-318 885,-318 885,-502 885,-502 885,-508 879,-514 873,-514 873,-514 638,-514 638,-514 632,-514 626,-508 626,-502 626,-502 626,-318 626,-318 626,-312 632,-306 638,-306"/>
</g>
<!-- BorrowRecord->DigitalBook -->
<g id="edge2" class="edge">
<title>BorrowRecord->DigitalBook</title>
<path fill="none" stroke="#4a4a4a" d="M587.5,-603.81C587.5,-556.68 587.5,-512 587.5,-512 587.5,-512 607.92,-512 607.92,-512"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="607.92,-515.5 617.92,-512 607.92,-508.5 607.92,-515.5"/>
<text text-anchor="middle" x="614.92" y="-514.8" font-family="Arial" font-size="9.00">1</text>
<text text-anchor="middle" x="585.5" y="-596.61" font-family="Arial" font-size="9.00">*</text>
</g>
<!-- BookCollection -->
<g id="node6" class="node">
<title>BookCollection</title>
<path fill="#e8e8e8" stroke="transparent" d="M20,-4C20,-4 339,-4 339,-4 345,-4 351,-10 351,-16 351,-16 351,-200 351,-200 351,-206 345,-212 339,-212 339,-212 20,-212 20,-212 14,-212 8,-206 8,-200 8,-200 8,-16 8,-16 8,-10 14,-4 20,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="9.5,-189 9.5,-211 350.5,-211 350.5,-189 9.5,-189"/>
<text text-anchor="start" x="139" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">BookCollection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-179 9.5,-189 350.5,-189 350.5,-179 9.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-157 9.5,-179 350.5,-179 350.5,-157 9.5,-157"/>
<text text-anchor="start" x="14.5" y="-165.2" font-family="Arial" font-size="11.00">- relationId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-135 9.5,-157 350.5,-157 350.5,-135 9.5,-135"/>
<text text-anchor="start" x="14.5" y="-143.2" font-family="Arial" font-size="11.00">+ collectionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-113 9.5,-135 350.5,-135 350.5,-113 9.5,-113"/>
<text text-anchor="start" x="14.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-91 9.5,-113 350.5,-113 350.5,-91 9.5,-91"/>
<text text-anchor="start" x="14.5" y="-99.2" font-family="Arial" font-size="11.00">+ addedDate : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-69 9.5,-91 350.5,-91 350.5,-69 9.5,-69"/>
<text text-anchor="start" x="14.5" y="-77.2" font-family="Arial" font-size="11.00">+ priority : int</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-59 9.5,-69 350.5,-69 350.5,-59 9.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-49 9.5,-59 350.5,-59 350.5,-49 9.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-27 9.5,-49 350.5,-49 350.5,-27 9.5,-27"/>
<text text-anchor="start" x="14.5" y="-35.2" font-family="Arial" font-size="11.00">+ BookCollection(collectionId: String, bookId: String) : BookCollection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="9.5,-5 9.5,-27 350.5,-27 350.5,-5 9.5,-5"/>
<text text-anchor="start" x="14.5" y="-13.2" font-family="Arial" font-size="11.00">+ setPriority(priority: int) : void</text>
<polygon fill="black" stroke="black" points="8.5,-189 8.5,-189 351.5,-189 351.5,-189 8.5,-189"/>
<polygon fill="black" stroke="black" points="8.5,-59 8.5,-59 351.5,-59 351.5,-59 8.5,-59"/>
<path fill="none" stroke="black" d="M20,-4C20,-4 339,-4 339,-4 345,-4 351,-10 351,-16 351,-16 351,-200 351,-200 351,-206 345,-212 339,-212 339,-212 20,-212 20,-212 14,-212 8,-206 8,-200 8,-200 8,-16 8,-16 8,-10 14,-4 20,-4"/>
</g>
<!-- DigitalBook->BookCollection -->
<g id="edge5" class="edge">
<title>DigitalBook->BookCollection</title>
<path fill="none" stroke="#4a4a4a" d="M617.85,-307C501.03,-307 352.25,-307 352.25,-307 352.25,-307 352.25,-226.24 352.25,-226.24"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="355.75,-226.24 352.25,-216.24 348.75,-226.24 355.75,-226.24"/>
<text text-anchor="middle" x="350.25" y="-219.04" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="614.85" y="-309.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- SearchResult -->
<g id="node8" class="node">
<title>SearchResult</title>
<path fill="#e8e8e8" stroke="transparent" d="M437.5,-4C437.5,-4 717.5,-4 717.5,-4 723.5,-4 729.5,-10 729.5,-16 729.5,-16 729.5,-200 729.5,-200 729.5,-206 723.5,-212 717.5,-212 717.5,-212 437.5,-212 437.5,-212 431.5,-212 425.5,-206 425.5,-200 425.5,-200 425.5,-16 425.5,-16 425.5,-10 431.5,-4 437.5,-4"/>
<polygon fill="#bebebe" stroke="transparent" points="426.5,-189 426.5,-211 728.5,-211 728.5,-189 426.5,-189"/>
<text text-anchor="start" x="542" y="-198.2" font-family="Arial" font-weight="bold" font-size="11.00">SearchResult</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-179 426.5,-189 728.5,-189 728.5,-179 426.5,-179"/>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-157 426.5,-179 728.5,-179 728.5,-157 426.5,-157"/>
<text text-anchor="start" x="431.5" y="-165.2" font-family="Arial" font-size="11.00">- resultId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-135 426.5,-157 728.5,-157 728.5,-135 426.5,-135"/>
<text text-anchor="start" x="431.5" y="-143.2" font-family="Arial" font-size="11.00">+ query : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-113 426.5,-135 728.5,-135 728.5,-113 426.5,-113"/>
<text text-anchor="start" x="431.5" y="-121.2" font-family="Arial" font-size="11.00">+ bookId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-91 426.5,-113 728.5,-113 728.5,-91 426.5,-91"/>
<text text-anchor="start" x="431.5" y="-99.2" font-family="Arial" font-size="11.00">+ relevanceScore : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-69 426.5,-91 728.5,-91 728.5,-69 426.5,-69"/>
<text text-anchor="start" x="431.5" y="-77.2" font-family="Arial" font-size="11.00">+ timestamp : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-59 426.5,-69 728.5,-69 728.5,-59 426.5,-59"/>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-49 426.5,-59 728.5,-59 728.5,-49 426.5,-49"/>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-27 426.5,-49 728.5,-49 728.5,-27 426.5,-27"/>
<text text-anchor="start" x="431.5" y="-35.2" font-family="Arial" font-size="11.00">+ SearchResult(query: String, bookId: String) : SearchResult</text>
<polygon fill="#e8e8e8" stroke="transparent" points="426.5,-5 426.5,-27 728.5,-27 728.5,-5 426.5,-5"/>
<text text-anchor="start" x="431.5" y="-13.2" font-family="Arial" font-size="11.00">+ calculateRelevance() : double</text>
<polygon fill="black" stroke="black" points="425.5,-189 425.5,-189 729.5,-189 729.5,-189 425.5,-189"/>
<polygon fill="black" stroke="black" points="425.5,-59 425.5,-59 729.5,-59 729.5,-59 425.5,-59"/>
<path fill="none" stroke="black" d="M437.5,-4C437.5,-4 717.5,-4 717.5,-4 723.5,-4 729.5,-10 729.5,-16 729.5,-16 729.5,-200 729.5,-200 729.5,-206 723.5,-212 717.5,-212 717.5,-212 437.5,-212 437.5,-212 431.5,-212 425.5,-206 425.5,-200 425.5,-200 425.5,-16 425.5,-16 425.5,-10 431.5,-4 437.5,-4"/>
</g>
<!-- DigitalBook->SearchResult -->
<g id="edge7" class="edge">
<title>DigitalBook->SearchResult</title>
<path fill="none" stroke="#4a4a4a" d="M677.75,-301.82C677.75,-301.82 677.75,-226.18 677.75,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="681.25,-226.18 677.75,-216.18 674.25,-226.18 681.25,-226.18"/>
<text text-anchor="middle" x="675.75" y="-218.98" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="674.75" y="-294.62" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- DigitalBook->Review -->
<g id="edge9" class="edge">
<title>DigitalBook->Review</title>
<path fill="none" stroke="#4a4a4a" d="M893.13,-410C1041.52,-410 1256.75,-410 1256.75,-410 1256.75,-410 1256.75,-226.18 1256.75,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="1260.25,-226.18 1256.75,-216.18 1253.25,-226.18 1260.25,-226.18"/>
<text text-anchor="middle" x="1254.75" y="-218.98" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="896.13" y="-412.8" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- DigitalBook->ReadingProgress -->
<g id="edge13" class="edge">
<title>DigitalBook->ReadingProgress</title>
<path fill="none" stroke="#4a4a4a" d="M844.5,-301.82C844.5,-301.82 844.5,-226.18 844.5,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="848,-226.18 844.5,-216.18 841,-226.18 848,-226.18"/>
<text text-anchor="middle" x="842.5" y="-218.98" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="841.5" y="-294.62" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Author -->
<g id="node4" class="node">
<title>Author</title>
<path fill="#e8e8e8" stroke="transparent" d="M694,-619C694,-619 873,-619 873,-619 879,-619 885,-625 885,-631 885,-631 885,-793 885,-793 885,-799 879,-805 873,-805 873,-805 694,-805 694,-805 688,-805 682,-799 682,-793 682,-793 682,-631 682,-631 682,-625 688,-619 694,-619"/>
<polygon fill="#bebebe" stroke="transparent" points="683.5,-782 683.5,-804 884.5,-804 884.5,-782 683.5,-782"/>
<text text-anchor="start" x="765.5" y="-791.2" font-family="Arial" font-weight="bold" font-size="11.00">Author</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-772 683.5,-782 884.5,-782 884.5,-772 683.5,-772"/>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-750 683.5,-772 884.5,-772 884.5,-750 683.5,-750"/>
<text text-anchor="start" x="688.5" y="-758.2" font-family="Arial" font-size="11.00">- authorId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-728 683.5,-750 884.5,-750 884.5,-728 683.5,-728"/>
<text text-anchor="start" x="688.5" y="-736.2" font-family="Arial" font-size="11.00">+ name : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-706 683.5,-728 884.5,-728 884.5,-706 683.5,-706"/>
<text text-anchor="start" x="688.5" y="-714.2" font-family="Arial" font-size="11.00">+ biography : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-684 683.5,-706 884.5,-706 884.5,-684 683.5,-684"/>
<text text-anchor="start" x="688.5" y="-692.2" font-family="Arial" font-size="11.00">+ nationality : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-674 683.5,-684 884.5,-684 884.5,-674 683.5,-674"/>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-664 683.5,-674 884.5,-674 884.5,-664 683.5,-664"/>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-642 683.5,-664 884.5,-664 884.5,-642 683.5,-642"/>
<text text-anchor="start" x="688.5" y="-650.2" font-family="Arial" font-size="11.00">+ Author(name: String) : Author</text>
<polygon fill="#e8e8e8" stroke="transparent" points="683.5,-620 683.5,-642 884.5,-642 884.5,-620 683.5,-620"/>
<text text-anchor="start" x="688.5" y="-628.2" font-family="Arial" font-size="11.00">+ publishBook(title: String) : DigitalBook</text>
<polygon fill="black" stroke="black" points="682.5,-782 682.5,-782 885.5,-782 885.5,-782 682.5,-782"/>
<polygon fill="black" stroke="black" points="682.5,-674 682.5,-674 885.5,-674 885.5,-674 682.5,-674"/>
<path fill="none" stroke="black" d="M694,-619C694,-619 873,-619 873,-619 879,-619 885,-625 885,-631 885,-631 885,-793 885,-793 885,-799 879,-805 873,-805 873,-805 694,-805 694,-805 688,-805 682,-799 682,-793 682,-793 682,-631 682,-631 682,-625 688,-619 694,-619"/>
</g>
<!-- Author->DigitalBook -->
<g id="edge3" class="edge">
<title>Author->DigitalBook</title>
<path fill="none" stroke="#4a4a4a" d="M783.5,-614.78C783.5,-614.78 783.5,-528.03 783.5,-528.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="787,-528.03 783.5,-518.03 780,-528.03 787,-528.03"/>
<text text-anchor="middle" x="781.5" y="-520.83" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="780.5" y="-607.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- Collection -->
<g id="node5" class="node">
<title>Collection</title>
<path fill="#e8e8e8" stroke="transparent" d="M94,-306C94,-306 265,-306 265,-306 271,-306 277,-312 277,-318 277,-318 277,-502 277,-502 277,-508 271,-514 265,-514 265,-514 94,-514 94,-514 88,-514 82,-508 82,-502 82,-502 82,-318 82,-318 82,-312 88,-306 94,-306"/>
<polygon fill="#bebebe" stroke="transparent" points="83.5,-491 83.5,-513 276.5,-513 276.5,-491 83.5,-491"/>
<text text-anchor="start" x="153" y="-500.2" font-family="Arial" font-weight="bold" font-size="11.00">Collection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-481 83.5,-491 276.5,-491 276.5,-481 83.5,-481"/>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-459 83.5,-481 276.5,-481 276.5,-459 83.5,-459"/>
<text text-anchor="start" x="88.5" y="-467.2" font-family="Arial" font-size="11.00">- collectionId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-437 83.5,-459 276.5,-459 276.5,-437 83.5,-437"/>
<text text-anchor="start" x="88.5" y="-445.2" font-family="Arial" font-size="11.00">+ name : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-415 83.5,-437 276.5,-437 276.5,-415 83.5,-415"/>
<text text-anchor="start" x="88.5" y="-423.2" font-family="Arial" font-size="11.00">+ description : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-393 83.5,-415 276.5,-415 276.5,-393 83.5,-393"/>
<text text-anchor="start" x="88.5" y="-401.2" font-family="Arial" font-size="11.00">+ theme : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-371 83.5,-393 276.5,-393 276.5,-371 83.5,-371"/>
<text text-anchor="start" x="88.5" y="-379.2" font-family="Arial" font-size="11.00">+ isPublic : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-361 83.5,-371 276.5,-371 276.5,-361 83.5,-361"/>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-351 83.5,-361 276.5,-361 276.5,-351 83.5,-351"/>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-329 83.5,-351 276.5,-351 276.5,-329 83.5,-329"/>
<text text-anchor="start" x="88.5" y="-337.2" font-family="Arial" font-size="11.00">+ Collection(name: String) : Collection</text>
<polygon fill="#e8e8e8" stroke="transparent" points="83.5,-307 83.5,-329 276.5,-329 276.5,-307 83.5,-307"/>
<text text-anchor="start" x="88.5" y="-315.2" font-family="Arial" font-size="11.00">+ addBook(bookId: String) : void</text>
<polygon fill="black" stroke="black" points="82.5,-491 82.5,-491 277.5,-491 277.5,-491 82.5,-491"/>
<polygon fill="black" stroke="black" points="82.5,-361 82.5,-361 277.5,-361 277.5,-361 82.5,-361"/>
<path fill="none" stroke="black" d="M94,-306C94,-306 265,-306 265,-306 271,-306 277,-312 277,-318 277,-318 277,-502 277,-502 277,-508 271,-514 265,-514 265,-514 94,-514 94,-514 88,-514 82,-508 82,-502 82,-502 82,-318 82,-318 82,-312 88,-306 94,-306"/>
</g>
<!-- Collection->BookCollection -->
<g id="edge4" class="edge">
<title>Collection->BookCollection</title>
<path fill="none" stroke="#4a4a4a" d="M179.5,-289.82C179.5,-289.82 179.5,-226.18 179.5,-226.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="179.5,-228.18 175.5,-222.18 179.5,-216.18 183.5,-222.18 179.5,-228.18"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="176,-291.82 179.5,-301.82 183,-291.82 176,-291.82"/>
<text text-anchor="middle" x="177.5" y="-294.62" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="176.5" y="-218.98" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- SearchEngine -->
<g id="node7" class="node">
<title>SearchEngine</title>
<path fill="#e8e8e8" stroke="transparent" d="M365.5,-317C365.5,-317 539.5,-317 539.5,-317 545.5,-317 551.5,-323 551.5,-329 551.5,-329 551.5,-491 551.5,-491 551.5,-497 545.5,-503 539.5,-503 539.5,-503 365.5,-503 365.5,-503 359.5,-503 353.5,-497 353.5,-491 353.5,-491 353.5,-329 353.5,-329 353.5,-323 359.5,-317 365.5,-317"/>
<polygon fill="#bebebe" stroke="transparent" points="354.5,-480 354.5,-502 550.5,-502 550.5,-480 354.5,-480"/>
<text text-anchor="start" x="415.5" y="-489.2" font-family="Arial" font-weight="bold" font-size="11.00">SearchEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-470 354.5,-480 550.5,-480 550.5,-470 354.5,-470"/>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-448 354.5,-470 550.5,-470 550.5,-448 354.5,-448"/>
<text text-anchor="start" x="359.5" y="-456.2" font-family="Arial" font-size="11.00">- engineId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-426 354.5,-448 550.5,-448 550.5,-426 354.5,-426"/>
<text text-anchor="start" x="359.5" y="-434.2" font-family="Arial" font-size="11.00">+ indexSize : long</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-404 354.5,-426 550.5,-426 550.5,-404 354.5,-404"/>
<text text-anchor="start" x="359.5" y="-412.2" font-family="Arial" font-size="11.00">+ lastUpdated : Date</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-382 354.5,-404 550.5,-404 550.5,-382 354.5,-382"/>
<text text-anchor="start" x="359.5" y="-390.2" font-family="Arial" font-size="11.00">+ isOnline : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-372 354.5,-382 550.5,-382 550.5,-372 354.5,-372"/>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-362 354.5,-372 550.5,-372 550.5,-362 354.5,-362"/>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-340 354.5,-362 550.5,-362 550.5,-340 354.5,-340"/>
<text text-anchor="start" x="359.5" y="-348.2" font-family="Arial" font-size="11.00">+ SearchEngine() : SearchEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="354.5,-318 354.5,-340 550.5,-340 550.5,-318 354.5,-318"/>
<text text-anchor="start" x="359.5" y="-326.2" font-family="Arial" font-size="11.00">+ search(query: String) : SearchResult</text>
<polygon fill="black" stroke="black" points="353.5,-480 353.5,-480 551.5,-480 551.5,-480 353.5,-480"/>
<polygon fill="black" stroke="black" points="353.5,-372 353.5,-372 551.5,-372 551.5,-372 353.5,-372"/>
<path fill="none" stroke="black" d="M365.5,-317C365.5,-317 539.5,-317 539.5,-317 545.5,-317 551.5,-323 551.5,-329 551.5,-329 551.5,-491 551.5,-491 551.5,-497 545.5,-503 539.5,-503 539.5,-503 365.5,-503 365.5,-503 359.5,-503 353.5,-497 353.5,-491 353.5,-491 353.5,-329 353.5,-329 353.5,-323 359.5,-317 365.5,-317"/>
</g>
<!-- SearchEngine->SearchResult -->
<g id="edge6" class="edge">
<title>SearchEngine->SearchResult</title>
<path fill="none" stroke="#4a4a4a" d="M488.5,-312.78C488.5,-312.78 488.5,-226.03 488.5,-226.03"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="492,-226.03 488.5,-216.03 485,-226.03 492,-226.03"/>
<text text-anchor="middle" x="486.5" y="-218.83" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="485.5" y="-305.58" font-family="Arial" font-size="9.00">1</text>
</g>
<!-- RecommendationEngine -->
<g id="node11" class="node">
<title>RecommendationEngine</title>
<path fill="#e8e8e8" stroke="transparent" d="M1870,-932C1870,-932 2201,-932 2201,-932 2207,-932 2213,-938 2213,-944 2213,-944 2213,-1106 2213,-1106 2213,-1112 2207,-1118 2201,-1118 2201,-1118 1870,-1118 1870,-1118 1864,-1118 1858,-1112 1858,-1106 1858,-1106 1858,-944 1858,-944 1858,-938 1864,-932 1870,-932"/>
<polygon fill="#bebebe" stroke="transparent" points="1859.5,-1095 1859.5,-1117 2212.5,-1117 2212.5,-1095 1859.5,-1095"/>
<text text-anchor="start" x="1971" y="-1104.2" font-family="Arial" font-weight="bold" font-size="11.00">RecommendationEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1085 1859.5,-1095 2212.5,-1095 2212.5,-1085 1859.5,-1085"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1063 1859.5,-1085 2212.5,-1085 2212.5,-1063 1859.5,-1063"/>
<text text-anchor="start" x="1864.5" y="-1071.2" font-family="Arial" font-size="11.00">- engineId : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1041 1859.5,-1063 2212.5,-1063 2212.5,-1041 1859.5,-1041"/>
<text text-anchor="start" x="1864.5" y="-1049.2" font-family="Arial" font-size="11.00">+ algorithm : String</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-1019 1859.5,-1041 2212.5,-1041 2212.5,-1019 1859.5,-1019"/>
<text text-anchor="start" x="1864.5" y="-1027.2" font-family="Arial" font-size="11.00">+ accuracy : double</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-997 1859.5,-1019 2212.5,-1019 2212.5,-997 1859.5,-997"/>
<text text-anchor="start" x="1864.5" y="-1005.2" font-family="Arial" font-size="11.00">+ isActive : boolean</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-987 1859.5,-997 2212.5,-997 2212.5,-987 1859.5,-987"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-977 1859.5,-987 2212.5,-987 2212.5,-977 1859.5,-977"/>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-955 1859.5,-977 2212.5,-977 2212.5,-955 1859.5,-955"/>
<text text-anchor="start" x="1864.5" y="-963.2" font-family="Arial" font-size="11.00">+ RecommendationEngine(algorithm: String) : RecommendationEngine</text>
<polygon fill="#e8e8e8" stroke="transparent" points="1859.5,-933 1859.5,-955 2212.5,-955 2212.5,-933 1859.5,-933"/>
<text text-anchor="start" x="1864.5" y="-941.2" font-family="Arial" font-size="11.00">+ generateRecommendations(readerId: String) : Recommendation</text>
<polygon fill="black" stroke="black" points="1858.5,-1095 1858.5,-1095 2213.5,-1095 2213.5,-1095 1858.5,-1095"/>
<polygon fill="black" stroke="black" points="1858.5,-987 1858.5,-987 2213.5,-987 2213.5,-987 1858.5,-987"/>
<path fill="none" stroke="black" d="M1870,-932C1870,-932 2201,-932 2201,-932 2207,-932 2213,-938 2213,-944 2213,-944 2213,-1106 2213,-1106 2213,-1112 2207,-1118 2201,-1118 2201,-1118 1870,-1118 1870,-1118 1864,-1118 1858,-1112 1858,-1106 1858,-1106 1858,-944 1858,-944 1858,-938 1864,-932 1870,-932"/>
</g>
<!-- RecommendationEngine->Recommendation -->
<g id="edge10" class="edge">
<title>RecommendationEngine->Recommendation</title>
<path fill="none" stroke="#4a4a4a" d="M2097.33,-927.68C2097.33,-927.68 2097.33,-830.16 2097.33,-830.16"/>
<polygon fill="#4a4a4a" stroke="#4a4a4a" points="2100.83,-830.16 2097.33,-820.16 2093.83,-830.16 2100.83,-830.16"/>
<text text-anchor="middle" x="2095.33" y="-822.96" font-family="Arial" font-size="9.00">*</text>
<text text-anchor="middle" x="2094.33" y="-920.48" font-family="Arial" font-size="9.00">1</text>
</g>
</g>
</svg>
|