From 0129efe4007a6ff8b6e48414a6afb6ef37bca09e Mon Sep 17 00:00:00 2001 From: GabrieleRadice <265572328+GabrieleRadice@users.noreply.github.com> Date: Fri, 19 Jun 2026 22:57:43 +0200 Subject: [PATCH] FIx: Fixed Coverage Screenshots And htmlRepot. --- deliverables/Coverage/coverage_1.JPG | Bin 248080 -> 250691 bytes deliverables/Coverage/coverage_2.JPG | Bin 246572 -> 244867 bytes .../css/coverage.css | 0 .../css/idea.min.css | 0 .../img/arrowDown.gif | Bin .../{htmlReport => htmReport}/img/arrowUp.gif | Bin .../{htmlReport => htmReport}/index.html | 106 ++++---- .../index_SORT_BY_BLOCK.html | 106 ++++---- .../index_SORT_BY_BLOCK_DESC.html | 106 ++++---- .../index_SORT_BY_CLASS.html | 106 ++++---- .../index_SORT_BY_CLASS_DESC.html | 106 ++++---- .../index_SORT_BY_LINE.html | 228 ++++++++--------- .../index_SORT_BY_LINE_DESC.html | 228 ++++++++--------- .../index_SORT_BY_METHOD.html | 230 +++++++++--------- .../index_SORT_BY_METHOD_DESC.html | 228 ++++++++--------- .../index_SORT_BY_NAME_DESC.html | 106 ++++---- .../js/highlight.min.js | 0 .../js/highlightjs-line-numbers.min.js | 0 .../{htmlReport => htmReport}/ns-1/index.html | 22 +- .../ns-1/index_SORT_BY_BLOCK.html | 22 +- .../ns-1/index_SORT_BY_BLOCK_DESC.html | 22 +- .../ns-1/index_SORT_BY_CLASS.html | 22 +- .../ns-1/index_SORT_BY_CLASS_DESC.html | 22 +- .../ns-1/index_SORT_BY_LINE.html | 22 +- .../ns-1/index_SORT_BY_LINE_DESC.html | 22 +- .../ns-1/index_SORT_BY_METHOD.html | 22 +- .../ns-1/index_SORT_BY_METHOD_DESC.html | 22 +- .../ns-1/index_SORT_BY_NAME_DESC.html | 22 +- .../ns-1/sources/source-1.html | 9 +- .../ns-1/sources/source-2.html | 130 ++++++---- .../ns-1/sources/source-3.html | 28 ++- .../ns-1/sources/source-4.html | 31 +-- .../ns-1/sources/source-5.html | 15 +- .../ns-1/sources/source-6.html | 5 +- .../ns-1/sources/source-7.html | 15 +- .../ns-10/index.html | 6 +- .../ns-10/index_SORT_BY_BLOCK.html | 6 +- .../ns-10/index_SORT_BY_BLOCK_DESC.html | 6 +- .../ns-10/index_SORT_BY_CLASS.html | 6 +- .../ns-10/index_SORT_BY_CLASS_DESC.html | 6 +- .../ns-10/index_SORT_BY_LINE.html | 6 +- .../ns-10/index_SORT_BY_LINE_DESC.html | 6 +- .../ns-10/index_SORT_BY_METHOD.html | 6 +- .../ns-10/index_SORT_BY_METHOD_DESC.html | 6 +- .../ns-10/index_SORT_BY_NAME_DESC.html | 6 +- .../ns-10/sources/source-1.html | 37 ++- .../ns-11/index.html | 12 +- .../ns-11/index_SORT_BY_BLOCK.html | 12 +- .../ns-11/index_SORT_BY_BLOCK_DESC.html | 12 +- .../ns-11/index_SORT_BY_CLASS.html | 12 +- .../ns-11/index_SORT_BY_CLASS_DESC.html | 12 +- .../ns-11/index_SORT_BY_LINE.html | 12 +- .../ns-11/index_SORT_BY_LINE_DESC.html | 12 +- .../ns-11/index_SORT_BY_METHOD.html | 12 +- .../ns-11/index_SORT_BY_METHOD_DESC.html | 12 +- .../ns-11/index_SORT_BY_NAME_DESC.html | 12 +- .../ns-11/sources/source-1.html | 22 +- .../ns-11/sources/source-2.html | 16 +- .../ns-11/sources/source-3.html | 22 +- .../ns-12/index.html | 24 +- .../ns-12/index_SORT_BY_BLOCK.html | 24 +- .../ns-12/index_SORT_BY_BLOCK_DESC.html | 24 +- .../ns-12/index_SORT_BY_CLASS.html | 24 +- .../ns-12/index_SORT_BY_CLASS_DESC.html | 24 +- .../ns-12/index_SORT_BY_LINE.html | 24 +- .../ns-12/index_SORT_BY_LINE_DESC.html | 24 +- .../ns-12/index_SORT_BY_METHOD.html | 24 +- .../ns-12/index_SORT_BY_METHOD_DESC.html | 24 +- .../ns-12/index_SORT_BY_NAME_DESC.html | 24 +- .../ns-12/sources/source-1.html | 154 ++++++++++-- .../ns-12/sources/source-2.html | 74 +++--- .../ns-12/sources/source-3.html | 37 ++- .../ns-12/sources/source-4.html | 42 ++-- .../ns-12/sources/source-5.html | 122 ++++++---- .../ns-12/sources/source-6.html | 23 +- .../ns-13/index.html | 22 +- .../ns-13/index_SORT_BY_BLOCK.html | 22 +- .../ns-13/index_SORT_BY_BLOCK_DESC.html | 22 +- .../ns-13/index_SORT_BY_CLASS.html | 22 +- .../ns-13/index_SORT_BY_CLASS_DESC.html | 22 +- .../ns-13/index_SORT_BY_LINE.html | 22 +- .../ns-13/index_SORT_BY_LINE_DESC.html | 22 +- .../ns-13/index_SORT_BY_METHOD.html | 70 +++--- .../ns-13/index_SORT_BY_METHOD_DESC.html | 70 +++--- .../ns-13/index_SORT_BY_NAME_DESC.html | 22 +- .../ns-13/sources/source-1.html | 101 +++++--- .../ns-13/sources/source-2.html | 40 +-- .../ns-13/sources/source-3.html | 105 ++++---- .../ns-14/index.html | 2 +- .../ns-14/index_SORT_BY_BLOCK.html | 2 +- .../ns-14/index_SORT_BY_BLOCK_DESC.html | 2 +- .../ns-14/index_SORT_BY_CLASS.html | 2 +- .../ns-14/index_SORT_BY_CLASS_DESC.html | 2 +- .../ns-14/index_SORT_BY_LINE.html | 2 +- .../ns-14/index_SORT_BY_LINE_DESC.html | 2 +- .../ns-14/index_SORT_BY_METHOD.html | 2 +- .../ns-14/index_SORT_BY_METHOD_DESC.html | 2 +- .../ns-14/index_SORT_BY_NAME_DESC.html | 2 +- .../ns-14/sources/source-1.html | 2 +- .../ns-15/index.html | 2 +- .../ns-15/index_SORT_BY_BLOCK.html | 2 +- .../ns-15/index_SORT_BY_BLOCK_DESC.html | 2 +- .../ns-15/index_SORT_BY_CLASS.html | 2 +- .../ns-15/index_SORT_BY_CLASS_DESC.html | 2 +- .../ns-15/index_SORT_BY_LINE.html | 2 +- .../ns-15/index_SORT_BY_LINE_DESC.html | 2 +- .../ns-15/index_SORT_BY_METHOD.html | 2 +- .../ns-15/index_SORT_BY_METHOD_DESC.html | 2 +- .../ns-15/index_SORT_BY_NAME_DESC.html | 2 +- .../ns-15/sources/source-1.html | 3 +- .../ns-15/sources/source-2.html | 2 +- .../{htmlReport => htmReport}/ns-2/index.html | 20 +- .../ns-2/index_SORT_BY_BLOCK.html | 20 +- .../ns-2/index_SORT_BY_BLOCK_DESC.html | 20 +- .../ns-2/index_SORT_BY_CLASS.html | 20 +- .../ns-2/index_SORT_BY_CLASS_DESC.html | 20 +- .../ns-2/index_SORT_BY_LINE.html | 20 +- .../ns-2/index_SORT_BY_LINE_DESC.html | 20 +- .../ns-2/index_SORT_BY_METHOD.html | 20 +- .../ns-2/index_SORT_BY_METHOD_DESC.html | 20 +- .../ns-2/index_SORT_BY_NAME_DESC.html | 20 +- .../ns-2/sources/source-1.html | 11 +- .../ns-2/sources/source-2.html | 18 +- .../{htmlReport => htmReport}/ns-3/index.html | 54 ++-- .../ns-3/index_SORT_BY_BLOCK.html | 116 ++++----- .../ns-3/index_SORT_BY_BLOCK_DESC.html | 116 ++++----- .../ns-3/index_SORT_BY_CLASS.html | 54 ++-- .../ns-3/index_SORT_BY_CLASS_DESC.html | 54 ++-- .../ns-3/index_SORT_BY_LINE.html | 118 ++++----- .../ns-3/index_SORT_BY_LINE_DESC.html | 120 ++++----- .../ns-3/index_SORT_BY_METHOD.html | 116 ++++----- .../ns-3/index_SORT_BY_METHOD_DESC.html | 116 ++++----- .../ns-3/index_SORT_BY_NAME_DESC.html | 54 ++-- .../ns-3/sources/source-1.html | 25 +- .../ns-3/sources/source-2.html | 29 +-- .../ns-3/sources/source-3.html | 40 +-- .../ns-3/sources/source-4.html | 21 +- .../ns-3/sources/source-5.html | 27 +- .../ns-3/sources/source-6.html | 107 ++++---- .../ns-3/sources/source-7.html | 39 +-- .../ns-3/sources/source-8.html | 2 +- .../{htmlReport => htmReport}/ns-4/index.html | 20 +- .../ns-4/index_SORT_BY_BLOCK.html | 20 +- .../ns-4/index_SORT_BY_BLOCK_DESC.html | 20 +- .../ns-4/index_SORT_BY_CLASS.html | 20 +- .../ns-4/index_SORT_BY_CLASS_DESC.html | 20 +- .../ns-4/index_SORT_BY_LINE.html | 20 +- .../ns-4/index_SORT_BY_LINE_DESC.html | 20 +- .../ns-4/index_SORT_BY_METHOD.html | 20 +- .../ns-4/index_SORT_BY_METHOD_DESC.html | 20 +- .../ns-4/index_SORT_BY_NAME_DESC.html | 20 +- .../ns-4/sources/source-1.html | 46 ++-- .../ns-4/sources/source-2.html | 9 +- .../{htmlReport => htmReport}/ns-5/index.html | 2 +- .../ns-5/index_SORT_BY_BLOCK.html | 2 +- .../ns-5/index_SORT_BY_BLOCK_DESC.html | 2 +- .../ns-5/index_SORT_BY_CLASS.html | 2 +- .../ns-5/index_SORT_BY_CLASS_DESC.html | 2 +- .../ns-5/index_SORT_BY_LINE.html | 2 +- .../ns-5/index_SORT_BY_LINE_DESC.html | 2 +- .../ns-5/index_SORT_BY_METHOD.html | 2 +- .../ns-5/index_SORT_BY_METHOD_DESC.html | 2 +- .../ns-5/index_SORT_BY_NAME_DESC.html | 2 +- .../ns-5/sources/source-1.html | 2 +- .../ns-5/sources/source-2.html | 10 +- .../{htmlReport => htmReport}/ns-6/index.html | 26 +- .../ns-6/index_SORT_BY_BLOCK.html | 26 +- .../ns-6/index_SORT_BY_BLOCK_DESC.html | 26 +- .../ns-6/index_SORT_BY_CLASS.html | 26 +- .../ns-6/index_SORT_BY_CLASS_DESC.html | 26 +- .../ns-6/index_SORT_BY_LINE.html | 136 +++++------ .../ns-6/index_SORT_BY_LINE_DESC.html | 136 +++++------ .../ns-6/index_SORT_BY_METHOD.html | 136 +++++------ .../ns-6/index_SORT_BY_METHOD_DESC.html | 136 +++++------ .../ns-6/index_SORT_BY_NAME_DESC.html | 26 +- .../ns-6/sources/source-1.html | 3 +- .../ns-6/sources/source-2.html | 25 +- .../ns-6/sources/source-3.html | 3 +- .../ns-6/sources/source-4.html | 28 +-- .../ns-6/sources/source-5.html | 3 +- .../ns-6/sources/source-6.html | 3 +- .../ns-6/sources/source-7.html | 3 +- .../{htmlReport => htmReport}/ns-7/index.html | 14 +- .../ns-7/index_SORT_BY_BLOCK.html | 14 +- .../ns-7/index_SORT_BY_BLOCK_DESC.html | 14 +- .../ns-7/index_SORT_BY_CLASS.html | 14 +- .../ns-7/index_SORT_BY_CLASS_DESC.html | 14 +- .../ns-7/index_SORT_BY_LINE.html | 14 +- .../ns-7/index_SORT_BY_LINE_DESC.html | 14 +- .../ns-7/index_SORT_BY_METHOD.html | 14 +- .../ns-7/index_SORT_BY_METHOD_DESC.html | 14 +- .../ns-7/index_SORT_BY_NAME_DESC.html | 14 +- .../ns-7/sources/source-1.html | 24 +- .../ns-7/sources/source-2.html | 2 +- .../ns-7/sources/source-3.html | 35 +-- .../ns-7/sources/source-4.html | 2 +- .../{htmlReport => htmReport}/ns-8/index.html | 36 +-- .../ns-8/index_SORT_BY_BLOCK.html | 36 +-- .../ns-8/index_SORT_BY_BLOCK_DESC.html | 36 +-- .../ns-8/index_SORT_BY_CLASS.html | 36 +-- .../ns-8/index_SORT_BY_CLASS_DESC.html | 36 +-- .../ns-8/index_SORT_BY_LINE.html | 96 ++++---- .../ns-8/index_SORT_BY_LINE_DESC.html | 82 +++---- .../ns-8/index_SORT_BY_METHOD.html | 96 ++++---- .../ns-8/index_SORT_BY_METHOD_DESC.html | 82 +++---- .../ns-8/index_SORT_BY_NAME_DESC.html | 36 +-- .../ns-8/sources/source-1.html | 20 +- .../ns-8/sources/source-2.html | 37 +-- .../ns-8/sources/source-3.html | 20 +- .../ns-8/sources/source-4.html | 39 +-- .../ns-8/sources/source-5.html | 29 +-- .../ns-8/sources/source-6.html | 26 +- .../{htmlReport => htmReport}/ns-9/index.html | 86 +++---- .../ns-9/index_SORT_BY_BLOCK.html | 86 +++---- .../ns-9/index_SORT_BY_BLOCK_DESC.html | 86 +++---- .../ns-9/index_SORT_BY_CLASS.html | 86 +++---- .../ns-9/index_SORT_BY_CLASS_DESC.html | 86 +++---- .../ns-9/index_SORT_BY_LINE.html | 86 +++---- .../ns-9/index_SORT_BY_LINE_DESC.html | 86 +++---- .../ns-9/index_SORT_BY_METHOD.html | 86 +++---- .../ns-9/index_SORT_BY_METHOD_DESC.html | 86 +++---- .../ns-9/index_SORT_BY_NAME_DESC.html | 86 +++---- .../ns-9/sources/source-1.html | 22 +- .../ns-9/sources/source-2.html | 29 +-- .../ns-9/sources/source-3.html | 40 +-- .../ns-9/sources/source-4.html | 17 +- .../{htmlReport => htmReport}/ns-a/index.html | 2 +- .../ns-a/index_SORT_BY_BLOCK.html | 2 +- .../ns-a/index_SORT_BY_BLOCK_DESC.html | 2 +- .../ns-a/index_SORT_BY_CLASS.html | 2 +- .../ns-a/index_SORT_BY_CLASS_DESC.html | 2 +- .../ns-a/index_SORT_BY_LINE.html | 2 +- .../ns-a/index_SORT_BY_LINE_DESC.html | 2 +- .../ns-a/index_SORT_BY_METHOD.html | 2 +- .../ns-a/index_SORT_BY_METHOD_DESC.html | 2 +- .../ns-a/index_SORT_BY_NAME_DESC.html | 2 +- .../ns-a/sources/source-1.html | 20 +- .../ns-a/sources/source-2.html | 19 +- .../ns-a/sources/source-3.html | 2 +- .../{htmlReport => htmReport}/ns-b/index.html | 16 +- .../ns-b/index_SORT_BY_BLOCK.html | 16 +- .../ns-b/index_SORT_BY_BLOCK_DESC.html | 16 +- .../ns-b/index_SORT_BY_CLASS.html | 16 +- .../ns-b/index_SORT_BY_CLASS_DESC.html | 16 +- .../ns-b/index_SORT_BY_LINE.html | 16 +- .../ns-b/index_SORT_BY_LINE_DESC.html | 16 +- .../ns-b/index_SORT_BY_METHOD.html | 16 +- .../ns-b/index_SORT_BY_METHOD_DESC.html | 16 +- .../ns-b/index_SORT_BY_NAME_DESC.html | 16 +- .../ns-b/sources/source-1.html | 17 +- .../ns-b/sources/source-2.html | 2 +- .../ns-b/sources/source-3.html | 2 +- .../ns-b/sources/source-4.html | 2 +- .../ns-b/sources/source-5.html | 2 +- .../{htmlReport => htmReport}/ns-c/index.html | 2 +- .../ns-c/index_SORT_BY_BLOCK.html | 2 +- .../ns-c/index_SORT_BY_BLOCK_DESC.html | 2 +- .../ns-c/index_SORT_BY_CLASS.html | 2 +- .../ns-c/index_SORT_BY_CLASS_DESC.html | 2 +- .../ns-c/index_SORT_BY_LINE.html | 2 +- .../ns-c/index_SORT_BY_LINE_DESC.html | 2 +- .../ns-c/index_SORT_BY_METHOD.html | 2 +- .../ns-c/index_SORT_BY_METHOD_DESC.html | 2 +- .../ns-c/index_SORT_BY_NAME_DESC.html | 2 +- .../ns-c/sources/source-1.html | 9 +- .../ns-c/sources/source-2.html | 6 +- .../ns-c/sources/source-3.html | 18 +- .../ns-c/sources/source-4.html | 10 +- .../ns-c/sources/source-5.html | 2 +- .../ns-c/sources/source-6.html | 2 +- .../{htmlReport => htmReport}/ns-d/index.html | 32 +-- .../ns-d/index_SORT_BY_BLOCK.html | 32 +-- .../ns-d/index_SORT_BY_BLOCK_DESC.html | 32 +-- .../ns-d/index_SORT_BY_CLASS.html | 32 +-- .../ns-d/index_SORT_BY_CLASS_DESC.html | 32 +-- .../ns-d/index_SORT_BY_LINE.html | 32 +-- .../ns-d/index_SORT_BY_LINE_DESC.html | 32 +-- .../ns-d/index_SORT_BY_METHOD.html | 32 +-- .../ns-d/index_SORT_BY_METHOD_DESC.html | 32 +-- .../ns-d/index_SORT_BY_NAME_DESC.html | 32 +-- .../ns-d/sources/source-1.html | 12 +- .../ns-d/sources/source-2.html | 21 +- .../ns-d/sources/source-3.html | 12 +- .../ns-d/sources/source-4.html | 12 +- .../ns-d/sources/source-5.html | 12 +- .../ns-d/sources/source-6.html | 12 +- .../ns-d/sources/source-7.html | 12 +- .../ns-d/sources/source-8.html | 8 +- .../ns-d/sources/source-9.html | 11 +- .../ns-d/sources/source-a.html | 10 +- .../ns-d/sources/source-b.html | 12 +- .../ns-d/sources/source-c.html | 24 +- .../{htmlReport => htmReport}/ns-e/index.html | 2 +- .../ns-e/index_SORT_BY_BLOCK.html | 2 +- .../ns-e/index_SORT_BY_BLOCK_DESC.html | 2 +- .../ns-e/index_SORT_BY_CLASS.html | 2 +- .../ns-e/index_SORT_BY_CLASS_DESC.html | 2 +- .../ns-e/index_SORT_BY_LINE.html | 2 +- .../ns-e/index_SORT_BY_LINE_DESC.html | 2 +- .../ns-e/index_SORT_BY_METHOD.html | 2 +- .../ns-e/index_SORT_BY_METHOD_DESC.html | 2 +- .../ns-e/index_SORT_BY_NAME_DESC.html | 2 +- .../ns-e/sources/source-1.html | 5 +- .../ns-e/sources/source-2.html | 23 +- .../{htmlReport => htmReport}/ns-f/index.html | 16 +- .../ns-f/index_SORT_BY_BLOCK.html | 16 +- .../ns-f/index_SORT_BY_BLOCK_DESC.html | 16 +- .../ns-f/index_SORT_BY_CLASS.html | 16 +- .../ns-f/index_SORT_BY_CLASS_DESC.html | 16 +- .../ns-f/index_SORT_BY_LINE.html | 16 +- .../ns-f/index_SORT_BY_LINE_DESC.html | 16 +- .../ns-f/index_SORT_BY_METHOD.html | 16 +- .../ns-f/index_SORT_BY_METHOD_DESC.html | 16 +- .../ns-f/index_SORT_BY_NAME_DESC.html | 16 +- .../ns-f/sources/source-1.html | 16 +- .../ns-f/sources/source-2.html | 61 ++--- 316 files changed, 4566 insertions(+), 4497 deletions(-) rename deliverables/Coverage/{htmlReport => htmReport}/css/coverage.css (100%) rename deliverables/Coverage/{htmlReport => htmReport}/css/idea.min.css (100%) rename deliverables/Coverage/{htmlReport => htmReport}/img/arrowDown.gif (100%) rename deliverables/Coverage/{htmlReport => htmReport}/img/arrowUp.gif (100%) rename deliverables/Coverage/{htmlReport => htmReport}/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/js/highlight.min.js (100%) rename deliverables/Coverage/{htmlReport => htmReport}/js/highlightjs-line-numbers.min.js (100%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-1.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-2.html (80%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-3.html (68%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-4.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-5.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-6.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-1/sources/source-7.html (91%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-10/sources/source-1.html (91%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/sources/source-1.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/sources/source-2.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-11/sources/source-3.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_BLOCK.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_BLOCK_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_CLASS.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_CLASS_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_LINE.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_LINE_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_METHOD.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_METHOD_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/index_SORT_BY_NAME_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/sources/source-1.html (68%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/sources/source-2.html (89%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/sources/source-3.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/sources/source-4.html (88%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/sources/source-5.html (90%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-12/sources/source-6.html (93%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/sources/source-1.html (74%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/sources/source-2.html (79%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-13/sources/source-3.html (77%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-14/sources/source-1.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/sources/source-1.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-15/sources/source-2.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/sources/source-1.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-2/sources/source-2.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_BLOCK.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_BLOCK_DESC.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_CLASS.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_CLASS_DESC.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_LINE.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_LINE_DESC.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_METHOD.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_METHOD_DESC.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/index_SORT_BY_NAME_DESC.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-1.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-2.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-3.html (87%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-4.html (93%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-5.html (86%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-6.html (86%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-7.html (89%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-3/sources/source-8.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/sources/source-1.html (91%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-4/sources/source-2.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/sources/source-1.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-5/sources/source-2.html (83%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-1.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-2.html (88%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-3.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-4.html (90%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-5.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-6.html (99%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-6/sources/source-7.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/sources/source-1.html (85%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/sources/source-2.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/sources/source-3.html (75%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-7/sources/source-4.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_BLOCK.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_BLOCK_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_CLASS.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_CLASS_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_LINE.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_LINE_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_METHOD.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_METHOD_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/index_SORT_BY_NAME_DESC.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/sources/source-1.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/sources/source-2.html (87%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/sources/source-3.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/sources/source-4.html (81%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/sources/source-5.html (86%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-8/sources/source-6.html (85%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/sources/source-1.html (93%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/sources/source-2.html (87%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/sources/source-3.html (88%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-9/sources/source-4.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_BLOCK.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_BLOCK_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_CLASS.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_CLASS_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_LINE.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_LINE_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_METHOD.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_METHOD_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/index_SORT_BY_NAME_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/sources/source-1.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/sources/source-2.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-a/sources/source-3.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/sources/source-1.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/sources/source-2.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/sources/source-3.html (99%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/sources/source-4.html (99%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-b/sources/source-5.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_BLOCK.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_BLOCK_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_CLASS.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_CLASS_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_LINE.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_LINE_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_METHOD.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_METHOD_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/index_SORT_BY_NAME_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/sources/source-1.html (91%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/sources/source-2.html (95%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/sources/source-3.html (87%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/sources/source-4.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/sources/source-5.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-c/sources/source-6.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_BLOCK.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_BLOCK_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_CLASS.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_CLASS_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_LINE.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_LINE_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_METHOD.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_METHOD_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/index_SORT_BY_NAME_DESC.html (97%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-1.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-2.html (89%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-3.html (93%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-4.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-5.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-6.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-7.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-8.html (94%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-9.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-a.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-b.html (92%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-d/sources/source-c.html (87%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_BLOCK.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_BLOCK_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_CLASS.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_CLASS_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_LINE.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_LINE_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_METHOD.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_METHOD_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/index_SORT_BY_NAME_DESC.html (98%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/sources/source-1.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-e/sources/source-2.html (93%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_BLOCK.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_BLOCK_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_CLASS.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_CLASS_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_LINE.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_LINE_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_METHOD.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_METHOD_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/index_SORT_BY_NAME_DESC.html (96%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/sources/source-1.html (89%) rename deliverables/Coverage/{htmlReport => htmReport}/ns-f/sources/source-2.html (91%) diff --git a/deliverables/Coverage/coverage_1.JPG b/deliverables/Coverage/coverage_1.JPG index 3cb96bb99362f4b9e507d266a95f7e78409f4e99..32f01e44ac21d0520cead0be3629a4caed720165 100644 GIT binary patch delta 147633 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

}aD7{;Y~bM}S>1^2XFee{Wdd7kHlmj5toua6Zu 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 delta 135240 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 F{}06qNtgft diff --git a/deliverables/Coverage/coverage_2.JPG b/deliverables/Coverage/coverage_2.JPG index 34fbd2b37667d512249d84bb7f1df66d58dd236b..1550e9f7092c61b13f4930e27985d79315e9af46 100644 GIT binary patch delta 137059 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 D(lsh` delta 129470 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�)@ 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%0DydK}h8=YBv-vir?tRw8NL+NF#C!umJk)*s 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 U|AsUH)Ev8JkFit$<9r|gKlA-xM*si- diff --git a/deliverables/Coverage/htmlReport/css/coverage.css b/deliverables/Coverage/htmReport/css/coverage.css similarity index 100% rename from deliverables/Coverage/htmlReport/css/coverage.css rename to deliverables/Coverage/htmReport/css/coverage.css diff --git a/deliverables/Coverage/htmlReport/css/idea.min.css b/deliverables/Coverage/htmReport/css/idea.min.css similarity index 100% rename from deliverables/Coverage/htmlReport/css/idea.min.css rename to deliverables/Coverage/htmReport/css/idea.min.css diff --git a/deliverables/Coverage/htmlReport/img/arrowDown.gif b/deliverables/Coverage/htmReport/img/arrowDown.gif similarity index 100% rename from deliverables/Coverage/htmlReport/img/arrowDown.gif rename to deliverables/Coverage/htmReport/img/arrowDown.gif diff --git a/deliverables/Coverage/htmlReport/img/arrowUp.gif b/deliverables/Coverage/htmReport/img/arrowUp.gif similarity index 100% rename from deliverables/Coverage/htmlReport/img/arrowUp.gif rename to deliverables/Coverage/htmReport/img/arrowUp.gif diff --git a/deliverables/Coverage/htmlReport/index.html b/deliverables/Coverage/htmReport/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/index.html rename to deliverables/Coverage/htmReport/index.html index 14f1208..62df9f4 100644 --- a/deliverables/Coverage/htmlReport/index.html +++ b/deliverables/Coverage/htmReport/index.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -125,7 +125,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -133,7 +133,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -157,18 +157,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -184,26 +184,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -219,10 +219,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -235,10 +235,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -282,10 +282,10 @@ Current scope: all classes - 100% + 94.7% - (38/38) + (36/38) @@ -298,10 +298,10 @@ Current scope: all classes - 100% + 98.4% - (129/129) + (127/129) @@ -320,7 +320,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -329,7 +329,7 @@ Current scope: all classes 100% - (29/29) + (26/26) @@ -345,10 +345,10 @@ Current scope: all classes - 100% + 94.3% - (49/49) + (50/53) @@ -361,10 +361,10 @@ Current scope: all classes - 100% + 97.2% - (108/108) + (103/106) @@ -383,7 +383,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -399,7 +399,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -458,10 +458,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -469,7 +469,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -523,7 +523,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -539,7 +539,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -593,7 +593,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -601,7 +601,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -609,7 +609,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -636,7 +636,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -671,7 +671,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -679,7 +679,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -698,7 +698,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -706,7 +706,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -714,7 +714,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -730,10 +730,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -746,10 +746,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -775,7 +775,7 @@ Current scope: all classes

diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/index_SORT_BY_BLOCK.html index 7e0d1b2..6eeed9b 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_BLOCK.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -145,7 +145,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -154,7 +154,7 @@ Current scope: all classes 100% - (29/29) + (26/26) @@ -181,7 +181,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -189,7 +189,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -243,7 +243,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -259,7 +259,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -313,7 +313,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -321,7 +321,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -329,7 +329,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -356,7 +356,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -391,7 +391,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -399,7 +399,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -418,7 +418,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -426,7 +426,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -434,7 +434,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -450,10 +450,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -466,10 +466,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -493,18 +493,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -520,26 +520,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -563,10 +563,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -574,7 +574,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -590,10 +590,10 @@ Current scope: all classes - 100% + 94.7% - (38/38) + (36/38) @@ -606,10 +606,10 @@ Current scope: all classes - 100% + 98.4% - (129/129) + (127/129) @@ -660,10 +660,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -676,10 +676,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -695,10 +695,10 @@ Current scope: all classes - 100% + 94.3% - (49/49) + (50/53) @@ -711,10 +711,10 @@ Current scope: all classes - 100% + 97.2% - (108/108) + (103/106) @@ -733,7 +733,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -749,7 +749,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/index_SORT_BY_BLOCK_DESC.html index a5b86da..490cb72 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_BLOCK_DESC.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -117,7 +117,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -133,7 +133,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -149,10 +149,10 @@ Current scope: all classes - 100% + 94.3% - (49/49) + (50/53) @@ -165,10 +165,10 @@ Current scope: all classes - 100% + 97.2% - (108/108) + (103/106) @@ -184,10 +184,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -200,10 +200,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -254,10 +254,10 @@ Current scope: all classes - 100% + 94.7% - (38/38) + (36/38) @@ -270,10 +270,10 @@ Current scope: all classes - 100% + 98.4% - (129/129) + (127/129) @@ -297,10 +297,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -308,7 +308,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -324,26 +324,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -367,18 +367,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -394,10 +394,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -410,10 +410,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -432,7 +432,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -440,7 +440,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -448,7 +448,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -475,7 +475,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -483,7 +483,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -510,7 +510,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -537,7 +537,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -545,7 +545,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -553,7 +553,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -607,7 +607,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -623,7 +623,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -685,7 +685,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -693,7 +693,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -712,7 +712,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -721,7 +721,7 @@ Current scope: all classes 100% - (29/29) + (26/26) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/index_SORT_BY_CLASS.html index 6dbfa6f..80a16d3 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_CLASS.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -125,7 +125,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -133,7 +133,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -187,7 +187,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -203,7 +203,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -257,7 +257,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -265,7 +265,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -273,7 +273,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -300,7 +300,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -335,7 +335,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -343,7 +343,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -362,7 +362,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -370,7 +370,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -378,7 +378,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -402,18 +402,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -429,10 +429,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -445,10 +445,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -464,26 +464,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -499,10 +499,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -515,10 +515,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -562,10 +562,10 @@ Current scope: all classes - 100% + 94.7% - (38/38) + (36/38) @@ -578,10 +578,10 @@ Current scope: all classes - 100% + 98.4% - (129/129) + (127/129) @@ -600,7 +600,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -609,7 +609,7 @@ Current scope: all classes 100% - (29/29) + (26/26) @@ -625,10 +625,10 @@ Current scope: all classes - 100% + 94.3% - (49/49) + (50/53) @@ -641,10 +641,10 @@ Current scope: all classes - 100% + 97.2% - (108/108) + (103/106) @@ -663,7 +663,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -679,7 +679,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -738,10 +738,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -749,7 +749,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/index_SORT_BY_CLASS_DESC.html index af31910..b3e2186 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_CLASS_DESC.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -122,10 +122,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -133,7 +133,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -187,7 +187,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -203,7 +203,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -219,10 +219,10 @@ Current scope: all classes - 100% + 94.3% - (49/49) + (50/53) @@ -235,10 +235,10 @@ Current scope: all classes - 100% + 97.2% - (108/108) + (103/106) @@ -257,7 +257,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -266,7 +266,7 @@ Current scope: all classes 100% - (29/29) + (26/26) @@ -282,10 +282,10 @@ Current scope: all classes - 100% + 94.7% - (38/38) + (36/38) @@ -298,10 +298,10 @@ Current scope: all classes - 100% + 98.4% - (129/129) + (127/129) @@ -345,10 +345,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -361,10 +361,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -380,26 +380,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -415,10 +415,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -431,10 +431,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -458,18 +458,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -488,7 +488,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -496,7 +496,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -504,7 +504,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -531,7 +531,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -539,7 +539,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -566,7 +566,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -593,7 +593,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -601,7 +601,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -609,7 +609,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -663,7 +663,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -679,7 +679,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -741,7 +741,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -749,7 +749,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/index_SORT_BY_LINE.html index 8ea3920..8e560d9 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_LINE.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -125,7 +125,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -133,7 +133,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -187,7 +187,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -203,7 +203,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -257,7 +257,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -265,7 +265,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -273,7 +273,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -300,7 +300,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -335,7 +335,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -343,7 +343,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -362,7 +362,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -370,7 +370,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -378,7 +378,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -394,10 +394,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -410,10 +410,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -437,18 +437,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -464,26 +464,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -542,10 +542,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -553,7 +553,42 @@ Current scope: all classes 96.5% - (111/115) + (110/114) + + + + + it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters + + + 100% + + + (6/6) + + + + + 94.3% + + + (50/53) + + + + + 100% + + + (40/40) + + + + + 97.2% + + + (103/106) @@ -569,10 +604,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -583,12 +618,47 @@ Current scope: all classes (25/25) + + + 98.1% + + + (52/53) + + + + + it.polimi.ingsw.gc14.Model.Cards.Building.Effects 100% - (58/58) + (7/7) + + + + + 94.7% + + + (36/38) + + + + + 92% + + + (46/50) + + + + + 98.4% + + + (127/129) @@ -618,41 +688,6 @@ Current scope: all classes (7/7) - - - - it.polimi.ingsw.gc14.Model.Cards.Building.Effects - - - 100% - - - (7/7) - - - - - 100% - - - (38/38) - - - - - 92% - - - (46/50) - - - - - 100% - - - (129/129) - @@ -670,7 +705,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -679,42 +714,7 @@ Current scope: all classes 100% - (29/29) - - - - - it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - - - 100% - - - (6/6) - - - - - 100% - - - (49/49) - - - - - 100% - - - (40/40) - - - - - 100% - - - (108/108) + (26/26) @@ -733,7 +733,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -749,7 +749,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/index_SORT_BY_LINE_DESC.html index b34f70c..cf910f4 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_LINE_DESC.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -117,7 +117,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -133,42 +133,7 @@ Current scope: all classes 100% - (91/91) - - - - - it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - - - 100% - - - (6/6) - - - - - 100% - - - (49/49) - - - - - 100% - - - (40/40) - - - - - 100% - - - (108/108) + (93/93) @@ -187,7 +152,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -196,42 +161,7 @@ Current scope: all classes 100% - (29/29) - - - - - it.polimi.ingsw.gc14.Model.Cards.Building.Effects - - - 100% - - - (7/7) - - - - - 100% - - - (38/38) - - - - - 92% - - - (46/50) - - - - - 100% - - - (129/129) + (26/26) @@ -261,6 +191,41 @@ Current scope: all classes (7/7) + + + + it.polimi.ingsw.gc14.Model.Cards.Building.Effects + + + 100% + + + (7/7) + + + + + 94.7% + + + (36/38) + + + + + 92% + + + (46/50) + + + + + 98.4% + + + (127/129) + @@ -275,10 +240,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -289,12 +254,47 @@ Current scope: all classes (25/25) + + + 98.1% + + + (52/53) + + + + + it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (58/58) + (6/6) + + + + + 94.3% + + + (50/53) + + + + + 100% + + + (40/40) + + + + + 97.2% + + + (103/106) @@ -318,10 +318,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -329,7 +329,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -380,26 +380,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -423,18 +423,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -450,10 +450,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -466,10 +466,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -488,7 +488,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -496,7 +496,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -504,7 +504,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -531,7 +531,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -539,7 +539,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -566,7 +566,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -593,7 +593,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -601,7 +601,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -609,7 +609,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -663,7 +663,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -679,7 +679,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -741,7 +741,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -749,7 +749,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/index_SORT_BY_METHOD.html index 44f562a..4c55b13 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_METHOD.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -125,7 +125,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -133,7 +133,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -187,7 +187,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -203,7 +203,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -257,7 +257,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -265,7 +265,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -273,7 +273,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -300,7 +300,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -335,7 +335,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -343,7 +343,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -362,7 +362,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -370,7 +370,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -378,7 +378,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -402,18 +402,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -429,10 +429,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -445,10 +445,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -464,26 +464,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -520,6 +520,76 @@ Current scope: all classes (120/136) + + + + it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters + + + 100% + + + (6/6) + + + + + 94.3% + + + (50/53) + + + + + 100% + + + (40/40) + + + + + 97.2% + + + (103/106) + + + + + it.polimi.ingsw.gc14.Model.Cards.Building.Effects + + + 100% + + + (7/7) + + + + + 94.7% + + + (36/38) + + + + + 92% + + + (46/50) + + + + + 98.4% + + + (127/129) + @@ -534,10 +604,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -550,10 +620,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -583,41 +653,6 @@ Current scope: all classes (7/7) - - - - it.polimi.ingsw.gc14.Model.Cards.Building.Effects - - - 100% - - - (7/7) - - - - - 100% - - - (38/38) - - - - - 92% - - - (46/50) - - - - - 100% - - - (129/129) - @@ -635,7 +670,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -644,42 +679,7 @@ Current scope: all classes 100% - (29/29) - - - - - it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - - - 100% - - - (6/6) - - - - - 100% - - - (49/49) - - - - - 100% - - - (40/40) - - - - - 100% - - - (108/108) + (26/26) @@ -698,7 +698,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -714,7 +714,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -738,10 +738,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -749,7 +749,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/index_SORT_BY_METHOD_DESC.html index f7c944b..1fbd7a8 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_METHOD_DESC.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -122,10 +122,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -133,7 +133,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -152,7 +152,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -168,42 +168,7 @@ Current scope: all classes 100% - (91/91) - - - - - it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - - - 100% - - - (6/6) - - - - - 100% - - - (49/49) - - - - - 100% - - - (40/40) - - - - - 100% - - - (108/108) + (93/93) @@ -222,7 +187,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -231,42 +196,7 @@ Current scope: all classes 100% - (29/29) - - - - - it.polimi.ingsw.gc14.Model.Cards.Building.Effects - - - 100% - - - (7/7) - - - - - 100% - - - (38/38) - - - - - 92% - - - (46/50) - - - - - 100% - - - (129/129) + (26/26) @@ -310,10 +240,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -324,12 +254,82 @@ Current scope: all classes (25/25) + + + 98.1% + + + (52/53) + + + + + it.polimi.ingsw.gc14.Model.Cards.Building.Effects 100% - (58/58) + (7/7) + + + + + 94.7% + + + (36/38) + + + + + 92% + + + (46/50) + + + + + 98.4% + + + (127/129) + + + + + it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters + + + 100% + + + (6/6) + + + + + 94.3% + + + (50/53) + + + + + 100% + + + (40/40) + + + + + 97.2% + + + (103/106) @@ -380,26 +380,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -415,10 +415,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -431,10 +431,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -458,18 +458,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -488,7 +488,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -496,7 +496,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -504,7 +504,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -531,7 +531,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -539,7 +539,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -566,7 +566,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -593,7 +593,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -601,7 +601,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -609,7 +609,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -663,7 +663,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -679,7 +679,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -741,7 +741,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -749,7 +749,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/index_SORT_BY_NAME_DESC.html index 2b9cbe7..6aee1ee 100644 --- a/deliverables/Coverage/htmlReport/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/index_SORT_BY_NAME_DESC.html @@ -52,26 +52,26 @@ Current scope: all classes - 45.4% + 45.1% - (333/734) + (330/731) - 43.2% + 42.8% - (664/1536) + (660/1542) - 36% + 35.6% - (1326/3684) + (1308/3671) @@ -114,10 +114,10 @@ Current scope: all classes - 53.3% + 58.5% - (24/45) + (24/41) @@ -130,10 +130,10 @@ Current scope: all classes - 38.7% + 36.3% - (84/217) + (82/226) @@ -152,7 +152,7 @@ Current scope: all classes 0% - (0/130) + (0/132) @@ -160,7 +160,7 @@ Current scope: all classes 0% - (0/291) + (0/302) @@ -168,7 +168,7 @@ Current scope: all classes 0% - (0/1000) + (0/1014) @@ -195,7 +195,7 @@ Current scope: all classes 0% - (0/50) + (0/52) @@ -203,7 +203,7 @@ Current scope: all classes 0% - (0/166) + (0/164) @@ -230,7 +230,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -257,7 +257,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -265,7 +265,7 @@ Current scope: all classes 0% - (0/36) + (0/38) @@ -273,7 +273,7 @@ Current scope: all classes 0% - (0/113) + (0/105) @@ -327,7 +327,7 @@ Current scope: all classes 0% - (0/41) + (0/40) @@ -343,7 +343,7 @@ Current scope: all classes 0% - (0/175) + (0/162) @@ -402,10 +402,10 @@ Current scope: all classes - 88.2% + 89.2% - (67/76) + (66/74) @@ -413,7 +413,7 @@ Current scope: all classes 96.5% - (111/115) + (110/114) @@ -467,7 +467,7 @@ Current scope: all classes 100% - (24/24) + (28/28) @@ -483,7 +483,7 @@ Current scope: all classes 100% - (91/91) + (93/93) @@ -499,10 +499,10 @@ Current scope: all classes - 100% + 94.3% - (49/49) + (50/53) @@ -515,10 +515,10 @@ Current scope: all classes - 100% + 97.2% - (108/108) + (103/106) @@ -537,7 +537,7 @@ Current scope: all classes 100% - (15/15) + (12/12) @@ -546,7 +546,7 @@ Current scope: all classes 100% - (29/29) + (26/26) @@ -562,10 +562,10 @@ Current scope: all classes - 100% + 94.7% - (38/38) + (36/38) @@ -578,10 +578,10 @@ Current scope: all classes - 100% + 98.4% - (129/129) + (127/129) @@ -625,10 +625,10 @@ Current scope: all classes - 100% + 95% - (20/20) + (19/20) @@ -641,10 +641,10 @@ Current scope: all classes - 100% + 98.1% - (58/58) + (52/53) @@ -660,26 +660,26 @@ Current scope: all classes - 77.6% + 78.5% - (97/125) + (95/121) - 73.5% + 72.8% - (349/475) + (343/471) - 82% + 82.1% - (547/667) + (541/659) @@ -703,18 +703,18 @@ Current scope: all classes - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -741,7 +741,7 @@ Current scope: all classes 0% - (0/149) + (0/144) @@ -749,7 +749,7 @@ Current scope: all classes 0% - (0/394) + (0/391) @@ -775,7 +775,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/js/highlight.min.js b/deliverables/Coverage/htmReport/js/highlight.min.js similarity index 100% rename from deliverables/Coverage/htmlReport/js/highlight.min.js rename to deliverables/Coverage/htmReport/js/highlight.min.js diff --git a/deliverables/Coverage/htmlReport/js/highlightjs-line-numbers.min.js b/deliverables/Coverage/htmReport/js/highlightjs-line-numbers.min.js similarity index 100% rename from deliverables/Coverage/htmlReport/js/highlightjs-line-numbers.min.js rename to deliverables/Coverage/htmReport/js/highlightjs-line-numbers.min.js diff --git a/deliverables/Coverage/htmlReport/ns-1/index.html b/deliverables/Coverage/htmReport/ns-1/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index.html rename to deliverables/Coverage/htmReport/ns-1/index.html index 902753a..6cdf453 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index.html +++ b/deliverables/Coverage/htmReport/ns-1/index.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -146,7 +146,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -154,7 +154,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -244,7 +244,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -260,7 +260,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -288,7 +288,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -323,7 +323,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_BLOCK.html index d41ab41..ec4239b 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_BLOCK.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -183,7 +183,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -202,7 +202,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -210,7 +210,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -253,7 +253,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -272,7 +272,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -288,7 +288,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -323,7 +323,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_BLOCK_DESC.html index 5a4a6e2..a41e6d5 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_BLOCK_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_CLASS.html index 8f87b87..42b1200 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_CLASS.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -146,7 +146,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -154,7 +154,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -244,7 +244,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -260,7 +260,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -288,7 +288,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -323,7 +323,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_CLASS_DESC.html index e7cf41a..35e5cff 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_CLASS_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -279,7 +279,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -287,7 +287,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -295,7 +295,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_LINE.html index 037a43c..919c4aa 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_LINE.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -146,7 +146,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -154,7 +154,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -244,7 +244,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -260,7 +260,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -288,7 +288,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -323,7 +323,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_LINE_DESC.html index a7f816a..1a58809 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_LINE_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -279,7 +279,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -287,7 +287,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -295,7 +295,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_METHOD.html index dcfb312..3ce859a 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_METHOD.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -146,7 +146,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -154,7 +154,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -244,7 +244,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -260,7 +260,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -288,7 +288,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -323,7 +323,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_METHOD_DESC.html index 6e78f3e..69a0862 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_METHOD_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -279,7 +279,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -287,7 +287,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -295,7 +295,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-1/index_SORT_BY_NAME_DESC.html index 27997af..0e35554 100644 --- a/deliverables/Coverage/htmlReport/ns-1/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-1/index_SORT_BY_NAME_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14 0% - (0/149) + (0/144) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14 0% - (0/394) + (0/391) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14 0% - (0/72) + (0/71) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14 0% - (0/23) + (0/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14 0% - (0/16) + (0/15) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14 0% - (0/28) + (0/27) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14 0% - (0/108) + (0/111) @@ -279,7 +279,7 @@ it.polimi.ingsw.gc14 0% - (0/11) + (0/12) @@ -287,7 +287,7 @@ it.polimi.ingsw.gc14 0% - (0/67) + (0/62) @@ -295,7 +295,7 @@ it.polimi.ingsw.gc14 0% - (0/142) + (0/139) @@ -350,7 +350,7 @@ it.polimi.ingsw.gc14 diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-1.html b/deliverables/Coverage/htmReport/ns-1/sources/source-1.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-1.html index 99363ec..30bd842 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-1.html @@ -116,12 +116,15 @@ Current scope: all classes   *   * @param args command-line arguments passed to the JavaFX runtime.   */ -  public static void main(String[] args) { +  static void main(String[] args) {   System.setProperty("glass.gtk.uiScale", "1.0");   System.setProperty("glass.win.uiScale", "1.0");   Application.launch(GUIApp.class, args);   } -  //TODO +  /** +  * Inner {@link Application} subclass that wires the GUI to the client controller +  * and hands off control to {@link GUI#start(Stage)}. +  */   public static class GUIApp extends Application {   @Override   public void start(Stage stage) throws Exception { @@ -155,7 +158,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-2.html b/deliverables/Coverage/htmReport/ns-1/sources/source-2.html similarity index 80% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-2.html index 1e6fae1..7a3b0c2 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-2.html @@ -59,7 +59,7 @@ Current scope: all classes 0% - (0/11) + (0/12) @@ -67,7 +67,7 @@ Current scope: all classes 0% - (0/67) + (0/62) @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/142) + (0/139) @@ -91,6 +91,7 @@ Current scope: all classes    import it.polimi.ingsw.gc14.Controller.ClientController;  import it.polimi.ingsw.gc14.Model.GamePackage.GameStages; + import it.polimi.ingsw.gc14.Network.IClient;  import it.polimi.ingsw.gc14.Network.NetworkConfig;  import it.polimi.ingsw.gc14.Network.InterfaceResolver;  import it.polimi.ingsw.gc14.Network.RMI.Client.RMIClient; @@ -114,13 +115,13 @@ Current scope: all classes   * Handles login, connects to the server, and drives the JLine-powered command loop.   */  public class ClientLauncherTUI { -  //TODO +  /** TUI view shared with the client controller. */   private TUI view; -  //TODO +  /** JLine terminal used for all input/output. */   private Terminal terminal; -  //TODO +  /** Line reader used during active gameplay, with tab-completion wired. */   private LineReader gameReader; -  //TODO +  /** Username of the currently logged-in player; empty string before login. */   private String currentUsername = "";     private static final String BUILDING_DETAILS = @@ -170,17 +171,21 @@ Current scope: all classes   "HUNTERS — Adding a Hunter without the \uD83C\uDF56 icon: nothing. Adding a Hunter WITH the \uD83C\uDF56 icon:\n" +   " immediately take 1 \uD83C\uDF56 for each Hunter in your tribe (with or without the icon).\n" +   " During Hunt Event, take \uD83C\uDF56 and gain PP based on your Hunter count (see 'details events')."; -  //TODO -  public static void main(String[] args) throws InterruptedException { +  /** +  * Launches the TUI client. +  * +  * @param args command-line arguments (unused). +  * @throws InterruptedException if the thread is interrupted during startup. +  */ +  static void main(String[] args) throws InterruptedException {   new ClientLauncherTUI().start();   }     /**   * Starts the TUI client. Creates a JLine terminal, loops through login → game → rematch.   * -  * @throws InterruptedException if the thread is interrupted while waiting.   */ -  private void start() throws InterruptedException { +  private void start() {   try {   System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));   System.setErr(new PrintStream(System.err, true, StandardCharsets.UTF_8)); @@ -204,7 +209,7 @@ Current scope: all classes   if (!doLogin(controller)) continue;     while (controller.getClient() != null) { -  String prompt = buildPrompt(controller); +  String prompt = buildPrompt();   String line;   try {   line = gameReader.readLine(prompt); @@ -221,7 +226,12 @@ Current scope: all classes   }   }   } -  //TODO +  /** +  * Prompts for username, player count, network type, and server IP, then connects. +  * +  * @param controller the client controller to connect. +  * @return {@code true} on successful connection; {@code false} if input is invalid or connection fails. +  */   private boolean doLogin(ClientController controller) {   LineReader loginReader = LineReaderBuilder.builder()   .terminal(terminal) @@ -232,6 +242,22 @@ Current scope: all classes   .completer(new StringsCompleter("localhost"))   .build();   +  view.setLineReader(loginReader); +  try { +  return doLoginInner(controller, loginReader, ipReader); +  } finally { +  view.setLineReader(gameReader); +  } +  } +  /** +  * Reads login fields from the terminal and connects to the server. +  * +  * @param controller the client controller to connect. +  * @param loginReader line reader used for username, player count, and network type. +  * @param ipReader line reader with localhost auto-complete for the server IP. +  * @return {@code true} on successful connection; {@code false} if input is invalid or connection fails. +  */ +  private boolean doLoginInner(ClientController controller, LineReader loginReader, LineReader ipReader) {   String username, networkStr, ip;   int nPlayers;   @@ -245,7 +271,7 @@ Current scope: all classes   System.exit(0);   return false;   } catch (NumberFormatException e) { -  System.out.println("Invalid number of players."); +  loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: Invalid number of players.\033[0m");   return false;   }   @@ -253,45 +279,47 @@ Current scope: all classes   view.setUsername(username);   controller.setMyUsername(username);   +  IClient client;   if (networkStr.equals("rmi")) {   String myIP;   try {   myIP = InterfaceResolver.resolveLocalInterface(ip);   } catch (Exception e) { -  System.out.println("Cannot resolve local interface: " + e.getMessage()); +  loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: Cannot resolve local interface: " + e.getMessage() + "\033[0m");   return false;   }   System.setProperty("java.rmi.server.hostname", myIP); -  RMIClient client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, myIP); +  client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, myIP);   ErrorType err = client.connect(username, nPlayers);   if (err != null) { -  terminal.writer().print("\033[H\033[2J"); -  terminal.writer().flush(); -  System.out.println("Errore: " + err); +  loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: " + err + "\033[0m");   return false;   } -  System.out.println("Connected via RMI."); +  System.out.println("Connected via RMI, waiting for other players...");   controller.setClient(client);     } else if (networkStr.equals("tcp")) { -  TCPClient client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT); +  client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT);   ErrorType err = client.connect(username, nPlayers);   if (err != null) { -  terminal.writer().print("\033[H\033[2J"); -  terminal.writer().flush(); -  System.out.println("Errore: " + err); +  loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: " + err + "\033[0m");   return false;   } -  System.out.println("Connected via TCP."); +  System.out.println("Connected via TCP, waiting for other players...");   controller.setClient(client);     } else { -  System.out.println("Unknown network type '" + networkStr + "'. Use rmi or tcp."); +  loginReader.printAbove("\033[H\033[2J" + "\033[31mERROR: Unknown network type '" + networkStr + "'. Use rmi or tcp.\033[0m");   return false;   }   return true;   } -  //TODO +  /** +  * Builds the JLine {@link LineReader} used during gameplay, with tab-completion +  * for all valid commands. +  * +  * @return the configured {@link LineReader}. +  */   private LineReader buildGameReader() {   Completer completer = new TreeCompleter(   node("slot"), @@ -304,8 +332,7 @@ Current scope: all classes   node("building"))),   node("totem"),   node("skip"), -  node("render"), -  node("help"), +  node("clear"),   node("details", node("buildings"), node("events"), node("characters")),   node("rematch"),   node("quit") @@ -316,8 +343,12 @@ Current scope: all classes   .option(LineReader.Option.DISABLE_EVENT_EXPANSION, true)   .build();   } -  //TODO -  private String buildPrompt(ClientController controller) { +  /** +  * Returns the command-line prompt string showing the current username. +  * +  * @return the prompt string. +  */ +  private String buildPrompt() {   return currentUsername.isEmpty() ? "> " : currentUsername + "> ";   }   @@ -329,16 +360,15 @@ Current scope: all classes   switch (cmd) {   case "slot" -> {   int pos = parsePos(parts, 1); -  if (pos >= 0) controller.slotChoice(pos); +  controller.slotChoice(pos);   }   case "draw" -> handleDraw(parts, controller);   case "totem" -> {   int pos = parsePos(parts, 1); -  if (pos >= 0) controller.totemChoice(pos); +  controller.totemChoice(pos);   }   case "skip" -> controller.skipTurn(); -  case "render" -> handleRender(parts); -  case "help" -> gameReader.printAbove("Commands: slot, draw, totem, skip, render, help, details, rematch, quit"); +  case "clear" -> handleRender();   case "details" -> {   if (parts.length > 1 && parts[1].equalsIgnoreCase("buildings"))   gameReader.printAbove(BUILDING_DETAILS); @@ -368,7 +398,12 @@ Current scope: all classes   }   return false;   } -  //TODO +  /** +  * Handles the {@code draw} command, dispatching to the appropriate controller draw method. +  * +  * @param parts the tokenized command: {@code [draw, upper|lower, tribe|building, pos]}. +  * @param controller the client controller to invoke. +  */   private void handleDraw(String[] parts, ClientController controller) {   if (parts.length < 4) {   view.showError(ErrorType.GENERIC_ERROR, "Usage: draw upper|lower tribe|building <pos>"); @@ -384,11 +419,20 @@ Current scope: all classes   else if (tribe) controller.drawLowerTribeCard(pos);   else controller.drawLowerBuildingCard(pos);   } -  //TODO -  private void handleRender(String[] parts) { +  /** +  * Handles the {@code clear} command by triggering a full board re-render. +  * +  */ +  private void handleRender() {   view.renderBoard();   } -  //TODO +  /** +  * Parses an integer position argument at {@code idx} in {@code parts}. +  * +  * @param parts the tokenized command array. +  * @param idx index of the position argument. +  * @return the parsed integer, or {@code -1} if missing or malformed. +  */   private int parsePos(String[] parts, int idx) {   if (parts.length <= idx) {   view.showError(ErrorType.GENERIC_ERROR, "Missing position argument."); @@ -402,7 +446,11 @@ Current scope: all classes   return -1;   }   } -  //TODO +  /** +  * Disconnects the client if one is currently connected; safe to call when already disconnected. +  * +  * @param controller the client controller to disconnect. +  */   private void safeQuit(ClientController controller) {   if (controller.getClient() != null) controller.disconnect();   } @@ -430,7 +478,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-3.html b/deliverables/Coverage/htmReport/ns-1/sources/source-3.html similarity index 68% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-3.html index 5302623..91d2163 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-3.html @@ -79,19 +79,39 @@ Current scope: all classes    /** Enumeration of error types that can be returned by server-side operations. */  public enum ErrorType { -  USER_NOT_FOUND("User not found"), -  USERNAME_ALREADY_USED("Username is already in use"), +  /** The chosen username is already taken by another connected player. */ +  INVALID_USERNAME("Username is already in use or too long"), +  /** The user is already connected to the server. */   USER_ALREADY_CONNECTED("User is already connected"), +  /** The requested number of players is outside the allowed range. */   WRONG_PLAYER_NUMBER("Wrong player number"), +  /** The server has crashed or become unreachable. */   SERVER_CRASHED("Server crashed"), +  /** The server is unreachable. */ +  SERVER_UNREACHABLE("Server unreachable"), +  /** A generic, unclassified error occurred. */   GENERIC_ERROR("Generic error"), +  /** The game has already started and cannot accept new players. */   GAME_ALREADY_STARTED("Game already started"), +  /** The action attempted is not valid in the current game state. */   WRONG_ACTION("Wrong action"); -  //TODO +  /** Human-readable description of this error, returned by {@link #toString()}. */   private final String description; +  +  /** +  * Creates an error type constant with the given human-readable description. +  * +  * @param description the message returned by {@link #toString()}. +  */   ErrorType(String description) {   this.description = description;   } +  +  /** +  * Returns the human-readable description of this error. +  * +  * @return the error description string. +  */   @Override   public String toString() {   return description; @@ -120,7 +140,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-4.html b/deliverables/Coverage/htmReport/ns-1/sources/source-4.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-4.html index 7dfdab3..cc81fe4 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-4.html @@ -64,7 +64,7 @@ Current scope: all classes 0% - (0/107) + (0/110) @@ -110,7 +110,7 @@ Current scope: all classes 0% - (0/108) + (0/111) @@ -144,7 +144,7 @@ Current scope: all classes   * <p>The three top-level states that determine routing are:   * <ul>   * <li><b>Inactive</b> – no game model is present, or the game has ended. -  * Only disconnection clean-up is performed.</li> +  * Only disconnection cleanup is performed.</li>   * <li><b>Suspended</b> – a forfeit timer is running because exactly one   * player remains online. Only reconnection events are accepted.</li>   * <li><b>Active</b> – normal gameplay; every event is applied, saved, @@ -156,11 +156,15 @@ Current scope: all classes   * thread via {@link #doFirstEvent()}.   */  public class GameEventProcessor { -  +  /** Queue from which incoming client events are consumed one at a time. */   private final BlockingQueue<NetworkEvent> actionQueue; +  /** Server-side game controller; all model mutations go through this. */   private final GameController gameController; +  /** Shared map tracking each player's online status ({@code true} = online). */   private final LimitedMap<String, Boolean> playerList; +  /** Broadcaster used to push events and model snapshots to all connected clients. */   private final CompositeClientBroadcaster broadcaster; +  /** Persists and deletes game save files. */   private final SaveManager saveManager;     /** Single-thread executor used exclusively for the forfeit timer. Daemon so it does not block JVM shutdown. */ @@ -173,7 +177,7 @@ Current scope: all classes     /**   * Handle to the running forfeit timer, or {@code null} when no timer is active. -  * A non-null value signals that the game is in the {@em suspended} state. +  * A non-null value signals that the game is in the suspended state.   */   private ScheduledFuture<?> disconnectionTimer;   @@ -199,7 +203,6 @@ Current scope: all classes   this.saveManager = saveManager;   }   -  // ── Public entry point ────────────────────────────────────────────────────     /**   * Blocks until one event is available in the queue, then routes it to the @@ -220,7 +223,6 @@ Current scope: all classes   }   }   -  // ── State guards ──────────────────────────────────────────────────────────     /**   * Returns {@code true} when there is an ongoing game that has not yet ended. @@ -239,11 +241,10 @@ Current scope: all classes   return disconnectionTimer != null;   }   -  // ── Inactive game path ────────────────────────────────────────────────────     /**   * Handles events that arrive when no active game exists (not yet started, -  * or already ended). Only disconnection clean-up is relevant here. +  * or already ended). Only disconnection cleanup is relevant here.   *   * @param event the incoming event.   */ @@ -259,7 +260,6 @@ Current scope: all classes   }   }   -  // ── Suspended game path ───────────────────────────────────────────────────     /**   * Routes events while the game is suspended waiting for a reconnection. @@ -303,7 +303,6 @@ Current scope: all classes   broadcaster.notifyAll(event);   }   -  // ── Active game path ──────────────────────────────────────────────────────     /**   * Applies the event to the game controller, saves the updated state, @@ -331,6 +330,9 @@ Current scope: all classes   if (!saveManager.save(game)) {   System.out.println("\n!!! Save failed !!!\n");   } +  else { +  System.out.println(event.getUsername()+": "+ event.getEventType() + " save successful."); +  }     // During the lobby phase a disconnection only removes the player   // from the list; no broadcast is needed. @@ -378,7 +380,7 @@ Current scope: all classes   * Schedules the 60-second forfeit timer if a disconnection has left   * exactly one player online.   * -  * <p>If a previous timer is still pending it is cancelled first to avoid +  * <p>If a previous timer is still pending it is canceled first to avoid   * duplicate timers.   *   * @param event the event that was just applied. @@ -391,12 +393,14 @@ Current scope: all classes     if (disconnectionTimer != null && !disconnectionTimer.isDone()) {   disconnectionTimer.cancel(false); +  System.out.println("Disconnection TIMER reset");   }     disconnectionTimer = timerExecutor.schedule(   () -> endGameForfeit(game),   1, TimeUnit.MINUTES   ); +  System.out.println("Disconnection TIMER started, 60 seconds from now..." );   }     /** @@ -459,7 +463,6 @@ Current scope: all classes   }   }   -  // ── Utilities ─────────────────────────────────────────────────────────────     /**   * Returns the number of players currently marked as online in the player list. @@ -517,7 +520,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-5.html b/deliverables/Coverage/htmReport/ns-1/sources/source-5.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-5.html index 453f922..fb729ed 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-5.html @@ -59,7 +59,7 @@ Current scope: all classes 0% - (0/16) + (0/15) @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/28) + (0/27) @@ -103,7 +103,7 @@ Current scope: all classes   * @param <V> the type of mapped values.   */  public class LimitedMap<K, V> implements Map<K, V> { -  +  /** The underlying thread-safe hash map storing all key-value pairs. */   private final ConcurrentHashMap<K, V> map = new ConcurrentHashMap<>();     /** @@ -191,13 +191,6 @@ Current scope: all classes   public void setLimit(int num) { this.limit = num; }     /** -  * Returns the current size limit of this map. -  * -  * @return the current limit. -  */ -  public int getLimit() { return limit; } -  -  /**   * Sets a new action to execute when the map size reaches or exceeds the limit.   *   * @param action the new action to set; must not be {@code null}. @@ -230,7 +223,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-6.html b/deliverables/Coverage/htmReport/ns-1/sources/source-6.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-6.html index 32bc5e2..b9498f2 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-6.html @@ -63,7 +63,7 @@ Current scope: all classes 0% - (0/23) + (0/22) @@ -142,7 +142,6 @@ Current scope: all classes   try (ObjectOutputStream oos = new ObjectOutputStream(   new BufferedOutputStream(new FileOutputStream(filePath.toFile())))) {   oos.writeObject(game); -  System.out.println("Game saved to: " + filePath.toAbsolutePath());   return true;   }   } catch (IOException e) { @@ -210,7 +209,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-1/sources/source-7.html b/deliverables/Coverage/htmReport/ns-1/sources/source-7.html similarity index 91% rename from deliverables/Coverage/htmlReport/ns-1/sources/source-7.html rename to deliverables/Coverage/htmReport/ns-1/sources/source-7.html index 42d562d..cf99b7f 100644 --- a/deliverables/Coverage/htmlReport/ns-1/sources/source-7.html +++ b/deliverables/Coverage/htmReport/ns-1/sources/source-7.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/72) + (0/71) @@ -143,17 +143,16 @@ Current scope: all classes   actionQueue, gameController, playerList, broadcaster, saveManager);   }   -  // ── Entry point ───────────────────────────────────────────────────────────     /** -  * Initialises all server components, wires them together, restores a saved +  * Initializes all server components, wires them together, restores a saved   * game if available, and starts the event-processing loop and both network   * servers.   *   * @param args command-line arguments (unused).   * @throws RemoteException if the RMI server cannot be created.   */ -  public static void main(String[] args) throws RemoteException { +  static void main(String[] args) throws RemoteException {   LimitedMap<String, Boolean> playerList = new LimitedMap<>(5, () -> {});   BlockingQueue<NetworkEvent> actionQueue = new LinkedBlockingQueue<>();   GameController gameController = new GameController(); @@ -206,10 +205,8 @@ Current scope: all classes     rmiServer.start();   new Thread(() -> tcpServer.start()).start(); -  System.out.println("Server RMI: " + System.getProperty("java.rmi.server.hostname"));   }   -  // ── Game loop ─────────────────────────────────────────────────────────────     /**   * Runs the event-processing loop until the thread is interrupted. @@ -227,14 +224,13 @@ Current scope: all classes   }   }   -  // ── Crash recovery ────────────────────────────────────────────────────────     /**   * Attempts to restore a previously saved game.   *   * <p>The save is discarded if all but at most one player was offline at the   * time of the crash, since there would be nobody to resume the game with. -  * Otherwise the model is restored, the player-list limit is set, and each +  * Otherwise, the model is restored, the player-list limit is set, and each   * player who was offline at crash time is pre-populated as offline so the   * reconnection flow can handle them correctly.   * @@ -270,7 +266,6 @@ Current scope: all classes   System.out.println("Game restored from save (" + game.getNPlayers() + " players).");   }   -  // ── Network interface selection ───────────────────────────────────────────     /**   * Lists active non-loopback IPv4 network interfaces and prompts the operator @@ -334,7 +329,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-10/index.html b/deliverables/Coverage/htmReport/ns-10/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index.html rename to deliverables/Coverage/htmReport/ns-10/index.html index 49cbb56..d9248d6 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index.html +++ b/deliverables/Coverage/htmReport/ns-10/index.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_BLOCK.html index a4dee60..ceb797f 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_BLOCK.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_BLOCK_DESC.html index 4442931..d6f5a65 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_BLOCK_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_CLASS.html index df5c91d..3af84ca 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_CLASS.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_CLASS_DESC.html index b5c5fdd..f2b37cf 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_CLASS_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_LINE.html index ef31f5e..e5e64d5 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_LINE.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_LINE_DESC.html index 74dd8b3..e148473 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_LINE_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_METHOD.html index f827250..308985f 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_METHOD.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_METHOD_DESC.html index 57659d3..4fe1e6f 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_METHOD_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-10/index_SORT_BY_NAME_DESC.html index df71b79..50813be 100644 --- a/deliverables/Coverage/htmlReport/ns-10/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-10/index_SORT_BY_NAME_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client 0% - (0/26) + (0/24) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.TCP.Client diff --git a/deliverables/Coverage/htmlReport/ns-10/sources/source-1.html b/deliverables/Coverage/htmReport/ns-10/sources/source-1.html similarity index 91% rename from deliverables/Coverage/htmlReport/ns-10/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-10/sources/source-1.html index e166537..3c1f462 100644 --- a/deliverables/Coverage/htmlReport/ns-10/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-10/sources/source-1.html @@ -67,7 +67,7 @@ Current scope: all classes 0% - (0/26) + (0/24) @@ -107,7 +107,9 @@ Current scope: all classes   * Client TCP. Sends and receives messages with the TCP server.   */  public class TCPClient implements IClient { +  /** Byte value sent by the client to signal it is still alive. */   private static final int PING = 1; +  /** Byte value expected from the server in response to a {@link #PING}. */   private static final int PONG = 2;     /** Socket TCP */ @@ -120,18 +122,21 @@ Current scope: all classes   private ObjectOutputStream socketSend;     /** Client game's controller */ -  private ClientController controller; +  private final ClientController controller;     /** IP address of the server to connect to */ -  private String hostname; -  +  private final String hostname; +  /** {@code true} while the connection is active; set to {@code false} on disconnect. */   private boolean running;   /** TCP port */ -  private int mainPort; -  -  private int heartbeatPort; +  private final int mainPort; +  /** TCP port dedicated to heartbeat communication. */ +  private final int heartbeatPort; +  /** Socket used exclusively for heartbeat ping/pong exchange. */   private Socket heartbeatSocket; +  /** Output stream of {@link #heartbeatSocket}, used to write {@link #PING} bytes. */   private OutputStream heartbeatOut; +  /** Input stream of {@link #heartbeatSocket}, used to read {@link #PONG} bytes. */   private InputStream heartbeatIn;     @@ -157,7 +162,7 @@ Current scope: all classes   * Otherwise, a listener thread is started.   * @param user The username of the player   * @param proposedNPlayers The desired number of players for the game -  * @return true if the connection is successful, false otherwise. +  * @return null if the connection is successful, GENERIC_ERROR otherwise.   */   public ErrorType connect(String user, int proposedNPlayers) {   try { @@ -194,10 +199,14 @@ Current scope: all classes     } catch (IOException e) {   e.printStackTrace(); -  return ErrorType.GENERIC_ERROR; +  return ErrorType.SERVER_UNREACHABLE;   }   } -  +  /** +  * Sends a {@link #PING} byte to the server every 3 seconds and waits for a {@link #PONG} reply. +  * If no reply arrives within {@value NetworkConfig#SILENCE_THRESHOLD_MS} ms, the server is +  * considered unreachable and {@link #disconnect()} is called. +  */   private void heartbeatLoop() {   ScheduledExecutorService sender = Executors.newSingleThreadScheduledExecutor();   sender.scheduleAtFixedRate(() -> { @@ -223,7 +232,7 @@ Current scope: all classes   heartbeatSocket.setSoTimeout((int) NetworkConfig.SILENCE_THRESHOLD_MS);   while (running) {   int b = heartbeatIn.read(); -  if (b == -1 || b != PONG) { +  if (b != PONG) {   disconnect();   controller.getView().showError(ErrorType.SERVER_CRASHED, ErrorType.SERVER_CRASHED.toString());   break; @@ -243,6 +252,10 @@ Current scope: all classes   sender.shutdownNow();   }   } +  +  /** +  * Disconnects the player and cleans model and controller +  */   private synchronized void disconnect() {   if (!running) return;   running = false; @@ -423,7 +436,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-11/index.html b/deliverables/Coverage/htmReport/ns-11/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index.html rename to deliverables/Coverage/htmReport/ns-11/index.html index 66b1790..775e257 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index.html +++ b/deliverables/Coverage/htmReport/ns-11/index.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_BLOCK.html index c802910..5f1906f 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_BLOCK.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_BLOCK_DESC.html index 43a0b4a..dd650c2 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_BLOCK_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_CLASS.html index b1326d3..1b02777 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_CLASS.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_CLASS_DESC.html index 4b3dc5b..fb7e8b2 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_CLASS_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_LINE.html index ed8485c..fa4700b 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_LINE.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_LINE_DESC.html index faac8f3..cd8e322 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_LINE_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_METHOD.html index 6fa987d..f0c6e11 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_METHOD.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_METHOD_DESC.html index 67d2f65..b892449 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_METHOD_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-11/index_SORT_BY_NAME_DESC.html index a15292f..ddb5687 100644 --- a/deliverables/Coverage/htmlReport/ns-11/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-11/index_SORT_BY_NAME_DESC.html @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/50) + (0/52) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/166) + (0/164) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/28) + (0/30) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/29) + (0/28) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server 0% - (0/32) + (0/31) @@ -231,7 +231,7 @@ it.polimi.ingsw.gc14.Network.TCP.Server diff --git a/deliverables/Coverage/htmlReport/ns-11/sources/source-1.html b/deliverables/Coverage/htmReport/ns-11/sources/source-1.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-11/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-11/sources/source-1.html index 4feb039..551683b 100644 --- a/deliverables/Coverage/htmlReport/ns-11/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-11/sources/source-1.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/32) + (0/31) @@ -90,7 +90,6 @@ Current scope: all classes  package it.polimi.ingsw.gc14.Network.TCP.Server;    import it.polimi.ingsw.gc14.LimitedMap; - import it.polimi.ingsw.gc14.Model.Game;  import it.polimi.ingsw.gc14.Model.MiniModel;  import it.polimi.ingsw.gc14.Network.NetworkEvent;  import it.polimi.ingsw.gc14.Network.NetworkEvents.DisconnectedPlayer; @@ -111,7 +110,7 @@ Current scope: all classes   * The username of the connected client on this handler   */   private final String username; -  +  /** {@code true} while the handler is actively reading from the socket; set to {@code false} on disconnect. */   private volatile boolean running;     /** @@ -123,25 +122,25 @@ Current scope: all classes   return username;   }   /** The TCP socket */ -  private Socket clientSocket; +  private final Socket clientSocket;     /** Input stream used to receive objects from the client */ -  private ObjectInputStream in; +  private final ObjectInputStream in;     /** Output stream used to send objects to the client */ -  private ObjectOutputStream out; +  private final ObjectOutputStream out;     /**   * Shared list of all client handlers.   * This handler removes itself from the list when disconnected.   */ -  private List<ClientHandler> clientHandlers; +  private final List<ClientHandler> clientHandlers;     /** Maps each connected player's username to their connection state (true = connected). */ -  private LimitedMap<String, Boolean> limitedMap; +  private final LimitedMap<String, Boolean> limitedMap;     /** Queue containing the events to be applied to the game model */ -  private BlockingQueue<NetworkEvent> actionQueue; +  private final BlockingQueue<NetworkEvent> actionQueue;       /** @@ -181,7 +180,6 @@ Current scope: all classes   }   }   } catch (IOException e) { -  System.err.println("Error in incoming connection/disconnection: " + username);   } catch (ClassNotFoundException e) {   System.err.println("Class not found: " + username);   } finally { @@ -234,7 +232,7 @@ Current scope: all classes   clientHandlers.remove(this);   limitedMap.put(username, false);   actionQueue.add(new DisconnectedPlayer(username)); -  System.out.println("Disconnected player: " + username); +  System.err.println("(TCP) Disconnected player: " + username);   try { clientSocket.close(); } catch (IOException ignored) {}   }  } @@ -261,7 +259,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-11/sources/source-2.html b/deliverables/Coverage/htmReport/ns-11/sources/source-2.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-11/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-11/sources/source-2.html index 5e540fd..1de640a 100644 --- a/deliverables/Coverage/htmlReport/ns-11/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-11/sources/source-2.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/29) + (0/28) @@ -105,10 +105,13 @@ Current scope: all classes   * both the heartbeat connection and the main client connection are disconnected.   */  public class HeartbeatHandler implements Runnable { -  +  /** Username of the client associated with this heartbeat connection. */   private final String username; +  /** Dedicated socket used solely for heartbeat ping/pong exchange. */   private final Socket socket; +  /** Input stream of {@link #socket} used to receive {@code PING} bytes from the client. */   private final InputStream in; +  /** Output stream of {@link #socket} used to send {@code PONG} bytes back to the client. */   private final OutputStream out;     /** @@ -173,10 +176,10 @@ Current scope: all classes   startWatchdog();   try {   while (running) { -  int b = in.read(); // blocks until a byte arrives +  int b = in.read();   if (b == -1) {   disconnect(); -  break; // stream closed +  break;   }   if (b == PING) {   lastReceivedTime = System.currentTimeMillis(); @@ -213,8 +216,7 @@ Current scope: all classes   private synchronized void disconnect() {   running = false;   watchdog.shutdownNow(); -  mainHandler.disconnect(); // disconnette anche il socket principale -  System.out.println("Disconnected: " + username); +  mainHandler.disconnect();   try { socket.close(); } catch (IOException ignored) {}   }  } @@ -241,7 +243,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-11/sources/source-3.html b/deliverables/Coverage/htmReport/ns-11/sources/source-3.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-11/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-11/sources/source-3.html index 5b356c9..47120f7 100644 --- a/deliverables/Coverage/htmlReport/ns-11/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-11/sources/source-3.html @@ -67,7 +67,7 @@ Current scope: all classes 0% - (0/28) + (0/30) @@ -124,12 +124,12 @@ Current scope: all classes   /**   * Main TCP port used for standard client-server communication.   */ -  private int port; +  private final int port;     /**   * TCP port dedicated to heartbeat communication.   */ -  private int heartbeatPort; +  private final int heartbeatPort;     /**   * Main server socket used to accept client connections. @@ -149,17 +149,17 @@ Current scope: all classes   /**   * Queue containing network events received from clients.   */ -  private BlockingQueue<NetworkEvent> actionQueue; +  private final BlockingQueue<NetworkEvent> actionQueue;     /**   * Map storing the online/offline status of connected players.   */ -  private LimitedMap<String, Boolean> playerList; +  private final LimitedMap<String, Boolean> playerList;     /**   * List of active TCP client handlers.   */ -  private CopyOnWriteArrayList<ClientHandler> clientHandlers; +  private final CopyOnWriteArrayList<ClientHandler> clientHandlers;       /** @@ -214,7 +214,7 @@ Current scope: all classes   }     System.out.println("TCP server started on port: " + port); -  System.out.println("Heartbeat server started on port: " + heartbeatPort); +  System.out.println("TCP heartbeat server started on port: " + heartbeatPort);     new Thread(this::acceptHeartbeat, "heartbeat-acceptor").start();   @@ -249,11 +249,11 @@ Current scope: all classes   synchronized (controller) {   String username = eventAddPlayer.getUsername();   //reconnect players after a server crash -  if (playerList.isEmpty()&& controller.getModel()==null) { +  if (playerList.isEmpty() &&(controller.getModel()==null || controller.getModel().getCurrentState().getGameStage().equals(GameStages.WAITING))) {   Game model = new Game(eventAddPlayer.getProposedNPlayer());   controller.setModel(model);   playerList.setLimit(eventAddPlayer.getProposedNPlayer()); -  System.out.println("Game Created With :"+eventAddPlayer.getProposedNPlayer()+" Players"); +  System.out.println("Game Created With: "+eventAddPlayer.getProposedNPlayer()+" Players");   }   if(controller.getModel().getCurrentState().getGameStage()!= GameStages.WAITING ) {   if (controller.getModel().getPlayers().stream().noneMatch(p -> p.getUserName().equals(username))|| controller.getModel().getCurrentState().getGameStage()==GameStages.ENDED) { @@ -275,7 +275,7 @@ Current scope: all classes   new Thread(handler).start();   continue;   } else { -  eventAddPlayer.setErrorType(ErrorType.USERNAME_ALREADY_USED); +  eventAddPlayer.setErrorType(ErrorType.INVALID_USERNAME);   eventAddPlayer.setIsError(true);   clientSend.writeObject(eventAddPlayer);   clientSocket.close(); @@ -432,7 +432,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-12/index.html b/deliverables/Coverage/htmReport/ns-12/index.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index.html rename to deliverables/Coverage/htmReport/ns-12/index.html index 6d23daa..5bd414d 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index.html +++ b/deliverables/Coverage/htmReport/ns-12/index.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_BLOCK.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_BLOCK.html index 62971b8..7d69cef 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_BLOCK.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_BLOCK_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_BLOCK_DESC.html index ae466fe..0d21161 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_BLOCK_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_CLASS.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_CLASS.html index 3f8e5d1..af71e73 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_CLASS.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_CLASS_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_CLASS_DESC.html index d7ec019..41f4d9a 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_CLASS_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_LINE.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_LINE.html index a931949..d0f0b98 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_LINE.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_LINE_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_LINE_DESC.html index 1598621..f444f85 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_LINE_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_METHOD.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_METHOD.html index 0069a94..a9647ea 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_METHOD.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_METHOD_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_METHOD_DESC.html index e2380f9..31e64cc 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_METHOD_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_NAME_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-12/index_SORT_BY_NAME_DESC.html index 6ad726f..f0c0b5a 100644 --- a/deliverables/Coverage/htmlReport/ns-12/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-12/index_SORT_BY_NAME_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/130) + (0/132) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/291) + (0/302) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/1000) + (0/1014) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/50) + (0/53) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/124) + (0/137) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/426) + (0/448) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/182) + (0/181) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/116) + (0/110) @@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/15) + (0/14) @@ -301,7 +301,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/73) + (0/71) @@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.View.GUI 0% - (0/123) + (0/122) @@ -336,7 +336,7 @@ it.polimi.ingsw.gc14.View.GUI diff --git a/deliverables/Coverage/htmlReport/ns-12/sources/source-1.html b/deliverables/Coverage/htmReport/ns-12/sources/source-1.html similarity index 68% rename from deliverables/Coverage/htmlReport/ns-12/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-12/sources/source-1.html index 54af74a..1e56f52 100644 --- a/deliverables/Coverage/htmlReport/ns-12/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-12/sources/source-1.html @@ -48,7 +48,7 @@ Current scope: all classes 0% - (0/6) + (0/5) @@ -56,7 +56,7 @@ Current scope: all classes 0% - (0/31) + (0/29) @@ -64,7 +64,7 @@ Current scope: all classes 0% - (0/50) + (0/49) @@ -129,7 +129,7 @@ Current scope: all classes 0% - (0/15) + (0/14) @@ -137,7 +137,7 @@ Current scope: all classes 0% - (0/73) + (0/71) @@ -145,7 +145,7 @@ Current scope: all classes 0% - (0/123) + (0/122) @@ -169,23 +169,50 @@ Current scope: all classes  import java.util.List;  import java.util.Random;   - //TODO ALL JAVADOC + /** +  * Ambient fire-particle effect rendered on a transparent overlay pane. +  * +  * <p>Three particle types float from the screen corners toward the center: +  * <ul> +  * <li><b>embers</b> (type 0) — slow, glowing orange circles with a soft halo.</li> +  * <li><b>sparks</b> (type 1) — fast, short-lived bright particles.</li> +  * <li><b>dust</b> (type 2) — large, translucent brown drifting circles.</li> +  * </ul> +  * +  * <p>Call {@link #start()} after adding {@link #getPane()} to the scene graph +  */  public class FireParticleSystem {   +  /** Maximum number of live particles at any given time. */   private static final int MAX_PARTICLES = 30; +  /** Minimum nanoseconds between particle spawn batches. */   private static final long SPAWN_INTERVAL_NS = 100_000_000L; -  private static final long FRAME_INTERVAL_NS = 1_000_000_000L / 30; // 30 fps cap -  private static final int STEPS_PER_FRAME = 3; // physics steps per frame → 3× speed +  /** Minimum nanoseconds between rendered frames (30 fps cap). */ +  private static final long FRAME_INTERVAL_NS = 1_000_000_000L / 30; +  /** Physics update steps applied per rendered frame (multiplies effective speed). */ +  private static final int STEPS_PER_FRAME = 3;   +  /** Mouse-transparent overlay pane that hosts all particle nodes. */   private final Pane pane; +  /** The scene whose dimensions are used to position and fade particles. */   private final Scene scene; +  /** Currently live particles. */   private final List<Particle> particles = new ArrayList<>(); +  /** Shared random source for particle initialization and physics noise. */   private final Random rnd = new Random(); -  private AnimationTimer timer; +  /** Timestamp (ns) of the last particle spawn batch. */   private long lastSpawn = 0; +  /** Timestamp (ns) of the last rendered frame. */   private long lastFrame = 0; +  /** {@code true} after the first tick pre-populates the particle pool. */   private boolean warmedUp = false;   +  /** +  * Creates the particle system bound to the given scene. +  * The internal overlay pane is transparent and mouse-transparent. +  * +  * @param scene the scene whose dimensions are used for particle positioning and fading. +  */   public FireParticleSystem(Scene scene) {   this.scene = scene;   pane = new Pane(); @@ -193,12 +220,16 @@ Current scope: all classes   pane.setPickOnBounds(false);   }   -  /** Returns the transparent overlay pane that holds all particle nodes. */ +  /** +  * Returns the transparent overlay pane that holds all particle nodes. +  * +  * @return the mouse-transparent {@link Pane} overlay. +  */   public Pane getPane() { return pane; }     /** Starts the animation timer. */   public void start() { -  timer = new AnimationTimer() { +  AnimationTimer timer = new AnimationTimer() {   @Override   public void handle(long now) {   if (now - lastFrame < FRAME_INTERVAL_NS) return; @@ -209,11 +240,12 @@ Current scope: all classes   timer.start();   }   -  /** Stops the animation timer. */ -  public void stop() { -  if (timer != null) timer.stop(); -  } -  +  /** +  * Advances the simulation by one frame: pre-warms on first call, spawns new particles, +  * steps existing ones, removes dead ones, and updates their visual state. +  * +  * @param now the current timestamp in nanoseconds from the animation timer. +  */   private void tick(long now) {   double w = scene.getWidth();   double h = scene.getHeight(); @@ -256,6 +288,13 @@ Current scope: all classes   }   }   +  /** +  * Creates a new particle starting near one of the four screen corners. +  * +  * @param w scene width in pixels. +  * @param h scene height in pixels. +  * @return the newly constructed {@link Particle}. +  */   private Particle spawnParticle(double w, double h) {   int corner = rnd.nextInt(4);   double margin = 0.12; @@ -269,20 +308,52 @@ Current scope: all classes   return new Particle(x, y, w, h, corner, rnd);   }   -  // ── Particle ──────────────────────────────────────────────────────────────   +  /** +  * A single fire particle with position, velocity, wobble, and JavaFX visual nodes. +  * Particles are typed: 0 = ember, 1 = spark, 2 = dust. +  */   private static class Particle {   -  double x, y, vx, vy; +  /** Current X position in scene pixels. */ +  double x; +  /** Current Y position in scene pixels. */ +  double y; +  /** Horizontal velocity component. */ +  double vx; +  /** Vertical velocity component. */ +  double vy; +  /** Remaining life fraction (1.0 = full, 0.0 = dead); only decrements for sparks. */   double life; -  double size; -  double wobblePhase, wobbleSpeed, wobbleAmp; +  /** Visual radius of the particle's core circle. */ +  final double size; +  /** Current phase of the sinusoidal wobble. */ +  double wobblePhase; +  /** Angular speed of the wobble oscillation. */ +  final double wobbleSpeed; +  /** Amplitude factor of the wobble displacement. */ +  final double wobbleAmp; +  /** Particle type: 0 = ember, 1 = spark, 2 = dust. */   final int type; +  /** Shared random source used during physics updates. */   final Random rnd;   +  /** Primary visible circle node. */   final Circle core; -  final Circle glow; // non-null only for embers +  /** Soft glow halo circle behind {@link #core}; non-null only for embers (type 0). */ +  final Circle glow;   +  /** +  * Initializes the particle at position ({@code x}, {@code y}) with velocity +  * aimed roughly from the given {@code corner} toward the scene center. +  * +  * @param x spawn X coordinate. +  * @param y spawn Y coordinate. +  * @param w scene width (used to compute target direction). +  * @param h scene height (used to compute target direction). +  * @param corner spawn corner index: 0 = bottom-left, 1 = bottom-right, 2 = top-left, 3 = top-right. +  * @param rnd shared random source. +  */   Particle(double x, double y, double w, double h, int corner, Random rnd) {   this.x = x;   this.y = y; @@ -296,17 +367,17 @@ Current scope: all classes   double angle = baseAngle + (rnd.nextDouble() - 0.5) * (Math.PI / 3.5);     double speed; -  if (type == 0) { // ember +  if (type == 0) {   speed = 0.5 + rnd.nextDouble() * 0.7;   size = rnd.nextDouble() * 3 + 2;   glow = new Circle(size * 2.2);   core = new Circle(size / 2); -  } else if (type == 1) { // spark +  } else if (type == 1) {   speed = 1.5 + rnd.nextDouble() * 2.0;   size = rnd.nextDouble() * 1.5 + 0.5;   glow = null;   core = new Circle(size / 2); -  } else { // dust +  } else {   speed = 0.2 + rnd.nextDouble() * 0.35;   size = rnd.nextDouble() * 8 + 5;   glow = null; @@ -321,6 +392,12 @@ Current scope: all classes   wobbleAmp = 0.1 + rnd.nextDouble() * 0.4;   }   +  /** +  * Returns a particle type weighted toward embers (55% ember, 23% spark, 22% dust). +  * +  * @param rnd the random source. +  * @return particle type: 0, 1, or 2. +  */   private static int weightedType(Random rnd) {   double r = rnd.nextDouble();   if (r < 0.55) return 0; @@ -328,16 +405,27 @@ Current scope: all classes   return 2;   }   +  /** +  * Adds this particle's visual nodes to {@code pane} (glow first so core renders on top). +  * +  * @param pane the overlay pane to add nodes to. +  */   void addTo(Pane pane) {   if (glow != null) pane.getChildren().add(glow);   pane.getChildren().add(core);   }   +  /** +  * Removes this particle's visual nodes from {@code pane}. +  * +  * @param pane the overlay pane to remove nodes from. +  */   void removeFrom(Pane pane) {   pane.getChildren().remove(core);   if (glow != null) pane.getChildren().remove(glow);   }   +  /** Advances this particle by one physics step: applies wobble, moves, and decrements spark life. */   void update() {   wobblePhase += wobbleSpeed;   vx += Math.sin(wobblePhase) * wobbleAmp * 0.05; @@ -347,12 +435,26 @@ Current scope: all classes   if (type == 1) life -= 0.008 + rnd.nextDouble() * 0.006;   }   +  /** +  * Returns {@code true} when this particle has left the scene bounds or, for sparks, its life reached zero. +  * +  * @param w scene width. +  * @param h scene height. +  * @return {@code true} if the particle should be removed. +  */   boolean isDead(double w, double h) {   double pad = size * 4;   return x < -pad || x > w + pad || y < -pad || y > h + pad   || (type == 1 && life <= 0);   }   +  /** +  * Updates color, opacity, and translate position of this particle's visual nodes +  * based on distance from scene edges and remaining life. +  * +  * @param w scene width. +  * @param h scene height. +  */   void updateVisual(double w, double h) {   double edge = Math.min(w, h) * 0.05;   double fadeX = Math.min(x / edge, Math.min((w - x) / edge, 1.0)); @@ -407,7 +509,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-12/sources/source-2.html b/deliverables/Coverage/htmReport/ns-12/sources/source-2.html similarity index 89% rename from deliverables/Coverage/htmlReport/ns-12/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-12/sources/source-2.html index b148f7b..0519e89 100644 --- a/deliverables/Coverage/htmlReport/ns-12/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-12/sources/source-2.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/116) + (0/110) @@ -104,8 +104,7 @@ Current scope: all classes  import javafx.scene.input.KeyEvent;  import javafx.scene.input.KeyCombination;  import javafx.scene.layout.StackPane; - import javafx.scene.media.Media; - import javafx.scene.media.MediaPlayer; +   import javafx.scene.paint.Color;  import javafx.scene.shape.Rectangle;  import javafx.stage.Screen; @@ -122,49 +121,45 @@ Current scope: all classes   * main game, and leaderboard scenes based on the current game state.   */  public class GUI extends Application implements IView { -  //TODO +  /** The primary JavaFX stage. */   private Stage primaryStage; -  //TODO +  /** Latest mini model received from the server. */   private volatile MiniModel miniModel; -  //TODO +  /** FXML loader for the login scene. */   private FXMLLoader loaderLogin; -  //TODO +  /** The login scene. */   private Scene loginScene; -  //TODO +  /** Controller for the login FXML scene. */   private LoginFXMLController controllerLogin; -  //TODO +  /** FXML loader for the totem selection scene. */   private FXMLLoader loaderTotem; -  //TODO +  /** The totem selection scene. */   private Scene totemScene; -  //TODO +  /** Controller for the totem FXML scene. */   private TotemFXMLController controllerTotem; -  //TODO +  /** FXML loader for the main game scene. */   private FXMLLoader loaderMain; -  -  //TODO +  /** The main game scene. */   private Scene mainScene; -  //TODO +  /** Controller for the main FXML scene. */   private MainFXMLController controllerMain; -  //TODO +  /** FXML loader for the leaderboard scene. */   private FXMLLoader loaderLeaderboard; -  //TODO +  /** The end-of-game leaderboard scene. */   private Scene leaderboardScene; -  //TODO +  /** Controller for the leaderboard FXML scene. */   private LeaderboardFXMLController controllerLeaderboard; -  -  //TODO +  /** Client controller injected before JavaFX startup. */   private ClientController controller; -  //TODO +  /** When {@code true}, the app re-enters fullscreen automatically after ESC is pressed. */   private boolean autoReenterFullscreen = true; -  //TODO +  /** Guards against overlapping fade transitions. */   private boolean isFading = false; -  //TODO -  private MediaPlayer bgMusic;       /**   * JavaFX entry point: loads all FXML scenes, wires up controllers, -  * configures fullscreen behaviour, and shows the login scene. +  * configures fullscreen behavior, and shows the login scene.   *   * @param stage the primary stage provided by the JavaFX runtime.   * @throws Exception if any FXML resource cannot be loaded. @@ -196,7 +191,7 @@ Current scope: all classes   controllerLogin.updateLoginButton(true);   controllerLogin.showError("");   fadeToScene(loginScene); -  }, loginScene); +  });       @@ -247,15 +242,6 @@ Current scope: all classes   primaryStage.show();   Platform.runLater(() -> primaryStage.setFullScreen(true));   -  try { -  String musicUrl = getClass().getResource("/Audio/Music.mp3").toExternalForm(); -  bgMusic = new MediaPlayer(new Media(musicUrl)); -  bgMusic.setCycleCount(MediaPlayer.INDEFINITE); -  bgMusic.setVolume(0.4); -  bgMusic.play(); -  } catch (Exception e) { -  System.err.println("Audio unavailable: " + e.getMessage()); -  }   }     @@ -297,12 +283,22 @@ Current scope: all classes   }   });   } -  //TODO +  /** +  * Wraps the current root of {@code scene} in a {@link StackPane} so that +  * fade overlay rectangles can be layered over it during scene transitions. +  * +  * @param scene the scene whose root to wrap. +  */   private void wrapScene(Scene scene) {   Parent root = scene.getRoot();   scene.setRoot(new StackPane(root));   } -  //TODO +  /** +  * Performs a black-overlay crossfade from the current scene to {@code newScene}. +  * No-op if already fading or if {@code newScene} is already displayed. +  * +  * @param newScene the scene to transition to. +  */   private void fadeToScene(Scene newScene) {   Scene currentScene = primaryStage.getScene();   if (currentScene == newScene || isFading) return; @@ -348,7 +344,7 @@ Current scope: all classes   * Displays an error on the JavaFX application thread.   *   * <p>If the server crashed, returns to the login scene and re-enables the login button. -  * Otherwise delegates to the active scene's error display. +  * Otherwise, delegates to the active scene's error display.   *   * @param error the error type.   * @param message a human-readable description of the error. @@ -392,7 +388,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-12/sources/source-3.html b/deliverables/Coverage/htmReport/ns-12/sources/source-3.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-12/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-12/sources/source-3.html index 6bc607c..9fed9c1 100644 --- a/deliverables/Coverage/htmlReport/ns-12/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-12/sources/source-3.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/182) + (0/181) @@ -95,7 +95,6 @@ Current scope: all classes  import it.polimi.ingsw.gc14.Model.PlayableCard;  import javafx.event.Event;  import javafx.fxml.FXML; - import javafx.scene.Scene;  import javafx.scene.control.ScrollPane;  import javafx.stage.Popup;  import javafx.geometry.Insets; @@ -113,7 +112,6 @@ Current scope: all classes  import javafx.scene.paint.Stop;  import javafx.scene.paint.CycleMethod;  import javafx.scene.text.Font; - import javafx.stage.Stage;  import javafx.stage.Window;  import javafx.util.Duration;   @@ -125,29 +123,28 @@ Current scope: all classes   * <p>Displays the final player rankings and a winner/game-over banner.   */  public class LeaderboardFXMLController { -  +  /** Root pane of the leaderboard scene; used to set the background and anchor the popup. */   @FXML private StackPane rootPane; +  /** Main vertical container holding the outcome label and ranking rows. */   @FXML private VBox mainVBox; +  /** Vertical list populated with one {@code HBox} row per ranked player. */   @FXML private VBox rankingList; -  // title label removed; outcome text is added dynamically in render() -  //TODO -  private ClientController controller; -  //TODO -  private Popup popup; -  //TODO -  private VBox popupContent; -  //TODO -  private static final Map<String, Image> imageCache = new HashMap<>(); -  //TODO -  private Scene loginScene;   -  //TODO +  /** Client controller for fetching game state and sending actions. */ +  private ClientController controller; +  /** Auto-hiding popup that shows detailed player card information. */ +  private Popup popup; +  /** Content container inside {@link #popup}. */ +  private VBox popupContent; +  /** Shared image cache to avoid reloading resources multiple times. */ +  private static final Map<String, Image> imageCache = new HashMap<>(); +  /** Action run when the player returns to the login screen (disconnect + scene switch). */   private Runnable action;     /** Returns a cached {@link Image} for the given classpath {@code path}, loading it on first access. */   private Image loadImage(String path) {   return imageCache.computeIfAbsent(path, -  p -> new Image(getClass().getResourceAsStream(p))); +  p -> new Image(Objects.requireNonNull(getClass().getResourceAsStream(p))));   }     @@ -156,11 +153,9 @@ Current scope: all classes   *   * @param controller the client controller.   * @param action the action to run when the player returns to the login screen. -  * @param loginScene the login scene to show on exit.   */ -  public void setController(ClientController controller, Runnable action, Scene loginScene) { +  public void setController(ClientController controller, Runnable action) {   this.controller = controller; -  this.loginScene = loginScene;   this.action = action;   }   @@ -492,7 +487,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-12/sources/source-4.html b/deliverables/Coverage/htmReport/ns-12/sources/source-4.html similarity index 88% rename from deliverables/Coverage/htmlReport/ns-12/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-12/sources/source-4.html index ae9add3..757c70b 100644 --- a/deliverables/Coverage/htmlReport/ns-12/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-12/sources/source-4.html @@ -91,6 +91,7 @@ Current scope: all classes    import it.polimi.ingsw.gc14.Controller.ClientController;  import it.polimi.ingsw.gc14.ErrorType; + import it.polimi.ingsw.gc14.Network.IClient;  import it.polimi.ingsw.gc14.Network.NetworkConfig;  import it.polimi.ingsw.gc14.Network.InterfaceResolver;  import it.polimi.ingsw.gc14.Network.RMI.Client.RMIClient; @@ -108,8 +109,7 @@ Current scope: all classes  import javafx.stage.Screen;  import javafx.util.Duration;   - import java.net.*; - import java.util.Enumeration; + import java.util.Objects;    /**   * FXML controller for the login scene. @@ -118,33 +118,33 @@ Current scope: all classes   * and initiates the connection to the server.   */  public class LoginFXMLController { -  //TODO +  /** Background image displayed behind the login form. */   @FXML private ImageView backgroundImage; -  //TODO +  /** Text field for the player's username. */   @FXML private TextField campoNome; -  //TODO +  /** Text field for the desired number of players. */   @FXML private TextField campoNumPlayers; -  //TODO +  /** Text field for the server IP address. */   @FXML private TextField campoIP; -  //TODO +  /** Button that submits the login form. */   @FXML private Button btnAccedi; -  //TODO +  /** Label used to show error or success messages. */   @FXML private Label labelErrore; -  //TODO +  /** VBox containing the login form controls. */   @FXML private VBox formPanel; -  //TODO +  /** Toggle container for switching between RMI and TCP. */   @FXML private StackPane protocolToggle; -  //TODO +  /** Sliding thumb inside the protocol toggle. */   @FXML private Region toggleThumb; -  //TODO +  /** Label for the RMI side of the protocol toggle. */   @FXML private Label labelRMI; -  //TODO +  /** Label for the TCP side of the protocol toggle. */   @FXML private Label labelTCP; -  //TODO +  /** {@code true} when RMI is selected; {@code false} for TCP. */   private boolean isRMI = true; -  //TODO +  /** Client controller used to initiate the connection. */   private ClientController controller; -  //TODO +  /** CSS pseudo-class applied to the active protocol label. */   private final PseudoClass activeProtocolPseudo = PseudoClass.getPseudoClass("active-protocol");     /** @@ -160,7 +160,7 @@ Current scope: all classes   @FXML   public void initialize() {   // Background setup -  Image img = new Image(getClass().getResourceAsStream("/GUIImages/BackgroundLogin.png")); +  Image img = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/GUIImages/BackgroundLogin.png")));   backgroundImage.setImage(img);   Rectangle2D screenBounds = Screen.getPrimary().getBounds();   backgroundImage.setFitWidth(screenBounds.getWidth()); @@ -185,7 +185,6 @@ Current scope: all classes   tt.setToX(isRMI ? 0 : 110);   tt.play();   -  // pseudoClassStateChanged preserves layout properties unlike direct style mutation   labelRMI.pseudoClassStateChanged(activeProtocolPseudo, isRMI);   labelTCP.pseudoClassStateChanged(activeProtocolPseudo, !isRMI);   } @@ -248,8 +247,9 @@ Current scope: all classes     /** Connects to the server using the selected protocol and transitions to the waiting state on success. */   private void connect(String nome, String ip, int numPlayers, String localInterface) { +  IClient client;   if (isRMI) { -  RMIClient client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, localInterface); +  client = new RMIClient(controller, ip, NetworkConfig.RMI_PORT, localInterface);   ErrorType serverResponse = client.connect(nome, numPlayers);   if (serverResponse == null) {   controller.setClient(client); @@ -261,7 +261,7 @@ Current scope: all classes   });   }   } else { -  TCPClient client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT); +  client = new TCPClient(controller, ip, NetworkConfig.TCP_PORT, NetworkConfig.HEARTBEAT_PORT);   ErrorType serverResponse = client.connect(nome, numPlayers);   if (serverResponse == null) {   controller.setClient(client); @@ -323,7 +323,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-12/sources/source-5.html b/deliverables/Coverage/htmReport/ns-12/sources/source-5.html similarity index 90% rename from deliverables/Coverage/htmlReport/ns-12/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-12/sources/source-5.html index 0e4481e..bcda61e 100644 --- a/deliverables/Coverage/htmlReport/ns-12/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-12/sources/source-5.html @@ -59,7 +59,7 @@ Current scope: all classes 0% - (0/50) + (0/53) @@ -67,7 +67,7 @@ Current scope: all classes 0% - (0/124) + (0/137) @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/426) + (0/448) @@ -95,21 +95,16 @@ Current scope: all classes  import it.polimi.ingsw.gc14.Model.Cards.TribeCard;  import it.polimi.ingsw.gc14.Model.Orders.OrderPlayer;  import it.polimi.ingsw.gc14.Network.EventType; - import it.polimi.ingsw.gc14.Network.NetworkEvent; + import javafx.application.Platform; + import javafx.animation.PauseTransition;  import javafx.animation.ScaleTransition;  import javafx.animation.TranslateTransition; - import javafx.application.Platform; - import javafx.beans.value.ChangeListener; - import javafx.beans.value.ObservableValue;  import javafx.event.Event;  import javafx.fxml.FXML; - import javafx.geometry.Bounds;  import javafx.geometry.Insets;  import javafx.geometry.Pos; - import javafx.geometry.Rectangle2D;  import javafx.scene.Cursor;  import javafx.scene.Node; - import javafx.scene.Scene;  import javafx.scene.control.Button;  import javafx.scene.control.Label;  import javafx.scene.control.ScrollPane; @@ -122,7 +117,6 @@ Current scope: all classes  import javafx.scene.shape.*;  import javafx.scene.text.Font;  import javafx.stage.Popup; - import javafx.stage.Screen;  import javafx.stage.Window;  import javafx.util.Duration;   @@ -135,47 +129,49 @@ Current scope: all classes   * the player's hand, and action buttons (skip, details).   */  public class MainFXMLController { -  //TODO -  @FXML private GridPane leftGrid; -  //TODO +  /** Scrollable container holding all player side-panel cards. */   @FXML private ScrollPane playerSide; -  //TODO +  /** Root HBox containing all main scene elements. */   @FXML private HBox mainHBox; -  //TODO -  @FXML private ImageView backgroundImage; -  //TODO +  /** HBox holding the board slot and order cards. */   @FXML private HBox board; -  //TODO +  /** HBox holding the upper tribe card row (and upper building stack). */   @FXML private HBox upperList; -  //TODO +  /** HBox holding the lower tribe card row (and lower building stack). */   @FXML private HBox lowerList; -  //TODO +  /** HBox displaying the local player's card piles. */   @FXML private HBox myHand; -  //TODO +  /** Button that sends a skip-turn command. */   @FXML private Button skipBtn; -  //TODO +  /** Button that opens the game details popup. */   @FXML private Button detailsBtn; -  //TODO +  /** Button that disconnects and closes the client. */ +  @FXML private Button quitBtn; +  /** Label showing the current round number and game stage. */   @FXML private Label infoText; -  //TODO +  /** Maps each player's username to their current food-value label in the side panel. */   private final Map<String, Label> foodLabels = new HashMap<>(); -  //TODO +  /** Maps each player's username to their current prestige-value label in the side panel. */   private final Map<String, Label> prestigeLabels = new HashMap<>(); -  //TODO +  /** Maps each player's username to their player-card VBox in the side panel. */   private final Map<String, VBox> playerCards = new HashMap<>(); -  //TODO +  /** Maps each player's username to their ordered list of card-type icon ImageViews. */   private final Map<String, List<ImageView>> iconViews = new HashMap<>(); -  //TODO +  /** Shared popup used for card previews and building selection. */   private Popup popup; -  //TODO +  /** HBox inside {@link #popup} that holds the displayed card images. */   private HBox popupCards; -  //TODO +  /** Client controller for fetching game state and sending player actions. */   private ClientController controller;     /** {@code true} when the last received event was an error response. */   private boolean isError;   -  /** Sets the error flag; called by {@link GUI} before delegating to {@link #render()}. */ +  /** +  * Sets the error flag; called by {@link GUI} before delegating to {@link #render()}. +  * +  * @param error {@code true} if the last received event was an error response. +  */   public void setError(boolean error) { this.isError = error; }     // ==== IMAGE CACHE ==== @@ -184,7 +180,7 @@ Current scope: all classes   /** Returns a cached {@link Image} for the given classpath {@code path}, loading it on first access. */   private Image loadImage(String path) {   return imageCache.computeIfAbsent(path, -  p -> new Image(getClass().getResourceAsStream(p))); +  p -> new Image(Objects.requireNonNull(getClass().getResourceAsStream(p))));   }     /** @@ -195,6 +191,30 @@ Current scope: all classes   public void setController(ClientController controller) {   this.controller = controller;   skipBtn.setOnAction(e -> controller.skipTurn()); +  +  PauseTransition quitTimer = new PauseTransition(javafx.util.Duration.seconds(3)); +  quitTimer.setOnFinished(e -> { +  quitBtn.setText("Quit"); +  quitBtn.setStyle(""); +  }); +  final boolean[] quitPending = {false}; +  quitBtn.setOnAction(e -> { +  if (quitPending[0]) { +  controller.disconnect(); +  Platform.exit(); +  System.exit(0); +  } else { +  quitPending[0] = true; +  quitBtn.setText("Sure?"); +  quitBtn.setStyle("-fx-background-color: #c0392b; -fx-text-fill: white;"); +  quitTimer.playFromStart(); +  quitTimer.setOnFinished(ev -> { +  quitPending[0] = false; +  quitBtn.setText("Quit"); +  quitBtn.setStyle(""); +  }); +  } +  });   }     /** Initializes the scene: loads fonts, sets up the popup, and registers input listeners. */ @@ -204,6 +224,7 @@ Current scope: all classes     addHoverZoom(skipBtn);   addHoverZoom(detailsBtn); +  addHoverZoom(quitBtn);   popup = new Popup();   mainHBox.sceneProperty().addListener((obs, oldScene, newScene) -> {   if (newScene != null) { @@ -234,7 +255,9 @@ Current scope: all classes   /** Incrementally re-renders only the parts of the scene affected by the last network event. */   public void render() {   if(foodLabels.isEmpty() || controller.getMiniModel().lastEvent == null -  || controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE)) +  || controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE) +  || controller.getMiniModel().lastEvent.getEventType().equals(EventType.RECONNECT_PLAYER) +  || controller.getMiniModel().lastEvent.getEventType().equals(EventType.DISCONNECTED_PLAYER))   buildSidePanel();   if(isError)   { @@ -242,7 +265,7 @@ Current scope: all classes   isError=false;   return;   } -  if(controller.getMiniModel().lastEvent==null ||controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.NEXT_ROUND)) { +  if(controller.getMiniModel().lastEvent==null ||controller.getMiniModel().lastEvent.getEventType().equals(EventType.TOTEM_CHOICE) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.NEXT_ROUND) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.RECONNECT_PLAYER) || controller.getMiniModel().lastEvent.getEventType().equals(EventType.DISCONNECTED_PLAYER)) {   renderMyHand();   renderUpper();   renderBoard(); @@ -478,7 +501,7 @@ Current scope: all classes   // ==== GROUPS ====   /** Builds the full side panel from scratch, creating a player card for each connected player. */   private void buildSidePanel() { -  infoText.setText("Round: "+Integer.toString(controller.getMiniModel().currentState.getRound()) + " • " + controller.getMiniModel().currentState.getGameStage().toString()); +  infoText.setText("Round: "+ controller.getMiniModel().currentState.getRound() + " • " + controller.getMiniModel().currentState.getGameStage().toString());   VBox playerList = new VBox();   playerList.setFillWidth(true);   for (Player p : controller.getMiniModel().players.values()) { @@ -491,10 +514,9 @@ Current scope: all classes     /** Updates food/prestige labels, current-player highlight, card-icon opacity, and plays error shake if needed. */   private void updateSidePanel() { -  infoText.setText("Round: "+Integer.toString(controller.getMiniModel().currentState.getRound()) + " • " + controller.getMiniModel().currentState.getGameStage().toString()); +  infoText.setText("Round: "+ controller.getMiniModel().currentState.getRound() + " • " + controller.getMiniModel().currentState.getGameStage().toString());   if (controller.getMiniModel().currentState.getCurrentPlayer() == null) return;   String current = controller.getMiniModel().currentState.getCurrentPlayer().getUserName(); -  // ordine: building, artists, gatherers, inventors, builders, shamans, hunters   String[] fields = {"building", "artists", "gatherers", "inventors", "builders", "shamans", "hunters"};     for (Player p : controller.getMiniModel().players.values()) { @@ -625,8 +647,13 @@ Current scope: all classes   int i = 0;   for (TribeCard card : controller.getMiniModel().upperListTribeCards) {   final int index = i; -  StackPane img = createCard(card, true, true, upperList); -  img.setOnMouseClicked(e -> controller.drawUpperTribeCard(index)); +  StackPane img; +  if(!card.isEventCard()) { +  img = createCard(card, true, true, upperList); +  img.setOnMouseClicked(e -> controller.drawUpperTribeCard(index)); +  } else { +  img = createCard(card, false, false, upperList); +  }   upperList.getChildren().add(img);   i++;   } @@ -642,8 +669,13 @@ Current scope: all classes   int i = 0;   for (TribeCard card : controller.getMiniModel().lowerListTribeCards) {   final int index = i; -  StackPane img = createCard(card, true, true, lowerList); -  img.setOnMouseClicked(e -> controller.drawLowerTribeCard(index)); +  StackPane img; +  if(!card.isEventCard()) { +  img = createCard(card, true, true, lowerList); +  img.setOnMouseClicked(e -> controller.drawLowerTribeCard(index)); +  } else { +  img = createCard(card, false, false, lowerList); +  }   lowerList.getChildren().add(img);   i++;   } @@ -678,7 +710,6 @@ Current scope: all classes   /** Adds the era-specific deck back image to the board. */   private void renderDeck() {   String path = switch (controller.getMiniModel().currentState.getEra()) { -  case 1 -> "/GUIImages/Backs/back-001.png";   case 2 -> "/GUIImages/Backs/back-030.png";   case 3 -> "/GUIImages/Backs/back-058.png";   default -> "/GUIImages/Backs/back-001.png"; @@ -687,8 +718,6 @@ Current scope: all classes   back.fitHeightProperty().bind(board.sceneProperty().get().heightProperty().subtract(56).divide(4).multiply(0.94));   back.setPreserveRatio(true);   addClip(back); -  addShadow(back); -  addHoverZoom(back);   board.getChildren().add(back);   }   @@ -736,7 +765,6 @@ Current scope: all classes   totem.setLayoutX(nv.doubleValue() * 0.364);   });   -  // initialize immediately if already laid out   if (card.getHeight() > 0) totem.setLayoutY(card.getHeight() *(yRatio-0.196));   if (card.getWidth() > 0) totem.setLayoutX(card.getWidth() * 0.364);   @@ -896,7 +924,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-12/sources/source-6.html b/deliverables/Coverage/htmReport/ns-12/sources/source-6.html similarity index 93% rename from deliverables/Coverage/htmlReport/ns-12/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-12/sources/source-6.html index 1582b47..ac05c37 100644 --- a/deliverables/Coverage/htmlReport/ns-12/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-12/sources/source-6.html @@ -105,6 +105,7 @@ Current scope: all classes  import javafx.util.Duration;    import java.util.Locale; + import java.util.Objects;    /**   * FXML controller for the totem selection scene. @@ -113,20 +114,20 @@ Current scope: all classes   * other players see a waiting banner.   */  public class TotemFXMLController { -  //TODO +  /** Background image displayed behind the totem selection grid. */   @FXML private ImageView backgroundImage; -  //TODO +  /** HBox containing the totem card widgets. */   @FXML private HBox mainHBox; -  //TODO +  /** Banner label showing whose turn it is to choose a totem. */   @FXML private Label turnBanner; -  //TODO +  /** Button that submits the selected totem to the server. */   @FXML private Button confirmButton;   -  //TODO +  /** Client controller for sending the totem choice. */   private ClientController controller; -  //TODO +  /** Index of the currently selected totem, or {@code -1} if none selected. */   private int selectedIndex = -1; -  //TODO +  /** The {@link StackPane} frame of the currently selected totem card, or {@code null}. */   private StackPane selectedFrame = null;     /** @@ -141,7 +142,7 @@ Current scope: all classes   /** Initializes the scene: sets the background image to fill the screen. */   @FXML   public void initialize() { -  Image img = new Image(getClass().getResourceAsStream("/GUIImages/Background.png")); +  Image img = new Image(Objects.requireNonNull(getClass().getResourceAsStream("/GUIImages/Background.png")));   backgroundImage.setImage(img);   Rectangle2D screenBounds = Screen.getPrimary().getBounds();   backgroundImage.setFitWidth(screenBounds.getWidth()); @@ -211,7 +212,7 @@ Current scope: all classes     /** Builds a totem card widget; if {@code interactive}, wires click/hover handlers and selection logic. */   private VBox buildCard(Totems totem, int idx, boolean interactive) { -  ImageView img = new ImageView(new Image(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + String.valueOf(totem).toLowerCase(Locale.ROOT) + ".png"))); +  ImageView img = new ImageView(new Image(Objects.requireNonNull(getClass().getResourceAsStream("/GUIImages/Totems/totem_" + String.valueOf(totem).toLowerCase(Locale.ROOT) + ".png"))));   img.setFitHeight(150);   img.setPreserveRatio(true);   @@ -301,7 +302,7 @@ Current scope: all classes   "-fx-text-fill: " + (selected ? "#FFD700" : "#ffffff") + ";";   }   -  /** Returns the totem name with only the first letter capitalised. */ +  /** Returns the totem name with only the first letter capitalized. */   private String capitalize(Totems t) {   String s = t.name().toLowerCase(Locale.ROOT);   return Character.toUpperCase(s.charAt(0)) + s.substring(1); @@ -339,7 +340,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-13/index.html b/deliverables/Coverage/htmReport/ns-13/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index.html rename to deliverables/Coverage/htmReport/ns-13/index.html index 37110f5..5a702e4 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index.html +++ b/deliverables/Coverage/htmReport/ns-13/index.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -150,19 +150,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_BLOCK.html index 2ccee0e..36b3279 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_BLOCK.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -146,7 +146,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_BLOCK_DESC.html index e619b1e..ef18440 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_BLOCK_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -185,19 +185,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_CLASS.html index 485e336..c64d6c2 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_CLASS.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -185,19 +185,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_CLASS_DESC.html index 6feb925..3d3b10a 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_CLASS_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_LINE.html index 0382d86..90cad0b 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_LINE.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -185,19 +185,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_LINE_DESC.html index 029f14c..cd4192d 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_LINE_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_METHOD.html index 171c5f7..dcb39b4 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_METHOD.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -134,35 +134,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) - - - - - BorderStyle - - - 100% - - - (1/1) - - - - - 82.4% - - - (14/17) - - - - - - 88.9% - - - (24/27) + (0/131) @@ -199,6 +171,34 @@ it.polimi.ingsw.gc14.View.TUI (60/73) + + + + BorderStyle + + + 100% + + + (1/1) + + + + + 100% + + + (14/14) + + + + + + 100% + + + (22/22) + @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_METHOD_DESC.html index c6e51ee..4a43d93 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_METHOD_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -103,6 +103,34 @@ it.polimi.ingsw.gc14.View.TUI Line, % + + BorderStyle + + + 100% + + + (1/1) + + + + + 100% + + + (14/14) + + + + + + 100% + + + (22/22) + + + AsciiTable @@ -136,34 +164,6 @@ it.polimi.ingsw.gc14.View.TUI (60/73) - - - - BorderStyle - - - 100% - - - (1/1) - - - - - 82.4% - - - (14/17) - - - - - - 88.9% - - - (24/27) - @@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-13/index_SORT_BY_NAME_DESC.html index 117182d..487907f 100644 --- a/deliverables/Coverage/htmlReport/ns-13/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-13/index_SORT_BY_NAME_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.View.TUI - 53.3% + 58.5% - (24/45) + (24/41) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.View.TUI - 38.7% + 36.3% - (84/217) + (82/226) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/17) + (0/16) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.View.TUI 0% - (0/117) + (0/131) @@ -150,19 +150,19 @@ it.polimi.ingsw.gc14.View.TUI - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.View.TUI diff --git a/deliverables/Coverage/htmlReport/ns-13/sources/source-1.html b/deliverables/Coverage/htmReport/ns-13/sources/source-1.html similarity index 74% rename from deliverables/Coverage/htmlReport/ns-13/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-13/sources/source-1.html index 08637a2..a498a80 100644 --- a/deliverables/Coverage/htmlReport/ns-13/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-13/sources/source-1.html @@ -110,33 +110,62 @@ Current scope: all classes   * }</pre>   */  public class AsciiTable { -  //TODO +  /** Border style used to draw corners, lines, and junctions. */   private final BorderStyle s; -  //TODO +  +  /** Number of columns in this table. */   private final int cols; -  //TODO +  +  /** All rows of the table, in insertion order. */   private final List<List<String>> rows = new ArrayList<>(); -  //TODO +  +  /** Indices of rows after which a horizontal separator line is drawn. */   private final List<Integer> separators = new ArrayList<>(); -  //TODO +  +  /** +  * Creates a new empty table with the given border style and column count. +  * +  * @param s the border style to use when rendering. +  * @param cols the number of columns. +  */   public AsciiTable(BorderStyle s, int cols) {   this.s = s; this.cols = cols;   } -  //TODO +  +  /** +  * Appends a row using varargs cells. +  * +  * @param cells one value per column. +  */   public void addRow(String... cells) { rows.add(Arrays.asList(cells)); } -  //TODO +  +  /** +  * Appends a row from an existing list. +  * +  * @param cells one value per column. +  */   public void addRow(List<String> cells) { rows.add(cells); } -  //TODO +  +  /** +  * Inserts a header row at position 0 and marks it with a separator line below it. +  * +  * @param cells one header label per column. +  */   public void addHeader(String... cells) {   rows.add(0, Arrays.asList(cells));   separators.add(0);   } -  //TODO +  +  /** +  * Marks a separator line to be drawn after the last row added so far. +  */   public void addSeparator() { separators.add(rows.size() - 1); }     /**   * Renders the table to a multi-line string.   * Column width is the widest cell in display columns (wide chars = 2), plus 1. +  * +  * @return the fully rendered table as a multi-line string.   */   public String build() {   var sb = new StringBuilder(); @@ -156,11 +185,19 @@ Current scope: all classes   sb.append(hline(s.bl(), s.mb(), s.br(), maxWidth));   return sb.toString();   } -  //TODO +  /** +  * Builds a single horizontal borderline across all columns. +  * +  * @param l left-end character. +  * @param m middle junction character (between columns). +  * @param r right-end character. +  * @param maxWidth width in display columns of each cell (including padding). +  * @return the rendered horizontal line string. +  */   private String hline(String l, String m, String r, int maxWidth) {   var sb = new StringBuilder(l);   for (int i = 0; i < cols; i++) { -  sb.append(s.h().repeat(maxWidth)); +  sb.repeat(Objects.requireNonNull(s.h()), maxWidth);   if (i < cols - 1) sb.append(m);   }   return sb.append(r).toString(); @@ -180,6 +217,11 @@ Current scope: all classes   * Places two pre-rendered text blocks side by side, separated by a gap.   * Left-block lines are padded to a uniform display width so the right block   * always starts at the same column. Uses {@link #displayWidth} for measurement. +  * +  * @param left lines of the left block. +  * @param right lines of the right block. +  * @param gap number of space characters between the two blocks. +  * @return the combined multi-line string.   */   public static String sideBySide(List<String> left, List<String> right, int gap) {   int leftWidth = left.stream().mapToInt(AsciiTable::displayWidth).max().orElse(0); @@ -196,11 +238,13 @@ Current scope: all classes   return sb.toString();   }   -  // ── Wide-character width ──────────────────────────────────────────────────     /**   * Returns the number of terminal columns required to display {@code s}.   * Wide characters (emoji, CJK, full-width) count as 2; all others as 1. +  * +  * @param s the string to measure; ANSI escape sequences are stripped before counting. +  * @return the display width in terminal columns.   */   public static int displayWidth(String s) {   s = s.replaceAll("\033\\[[^m]*m", ""); @@ -220,34 +264,33 @@ Current scope: all classes   */   private static boolean isWide(int cp) {   if (cp < 0x1100) return false; -  if (cp <= 0x115F) return true; // Hangul Jamo +  if (cp <= 0x115F) return true;   if (cp < 0x2E80) { -  // Specific wide symbols below 0x2E80 -  return cp == 0x2B50 // ⭐ STAR -  || cp == 0x2B55; // ⭕ HEAVY LARGE CIRCLE +  return cp == 0x2B50 +  || cp == 0x2B55;   } -  if (cp <= 0x303E) return true; // CJK Radicals, Kangxi, CJK Symbols +  if (cp <= 0x303E) return true;   if (cp < 0x3041) return false; -  if (cp <= 0xA4CF) return true; // Hiragana, Katakana, Bopomofo, CJK Unified +  if (cp <= 0xA4CF) return true;   if (cp < 0xA960) return false; -  if (cp <= 0xA97F) return true; // Hangul Jamo Extended-A +  if (cp <= 0xA97F) return true;   if (cp < 0xAC00) return false; -  if (cp <= 0xD7AF) return true; // Hangul Syllables +  if (cp <= 0xD7AF) return true;   if (cp < 0xF900) return false; -  if (cp <= 0xFAFF) return true; // CJK Compatibility Ideographs +  if (cp <= 0xFAFF) return true;   if (cp < 0xFE10) return false; -  if (cp <= 0xFE1F) return true; // Vertical Forms +  if (cp <= 0xFE1F) return true;   if (cp < 0xFE30) return false; -  if (cp <= 0xFE6F) return true; // CJK Compatibility Forms +  if (cp <= 0xFE6F) return true;   if (cp < 0xFF00) return false; -  if (cp <= 0xFF60) return true; // Fullwidth Latin, punctuation +  if (cp <= 0xFF60) return true;   if (cp < 0xFFE0) return false; -  if (cp <= 0xFFE6) return true; // Fullwidth Signs +  if (cp <= 0xFFE6) return true;   if (cp < 0x1F004) return false; -  if (cp <= 0x1FAFF) return true; // Emoji (mahjong, playing cards, flags, -  // misc symbols, transport, 🍖 U+1F357, ...) +  if (cp <= 0x1FAFF) return true;  if (cp < 0x20000) return false; -  return cp <= 0x3FFFD; // CJK Extension B through G +  return cp <= 0x3FFFD;   }  } @@ -273,7 +316,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-13/sources/source-2.html b/deliverables/Coverage/htmReport/ns-13/sources/source-2.html similarity index 79% rename from deliverables/Coverage/htmlReport/ns-13/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-13/sources/source-2.html index 9acb87b..fc4e9f7 100644 --- a/deliverables/Coverage/htmlReport/ns-13/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-13/sources/source-2.html @@ -52,18 +52,18 @@ Current scope: all classes - 82.4% + 100% - (14/17) + (14/14) - 88.9% + 100% - (24/27) + (22/22) @@ -84,23 +84,14 @@ Current scope: all classes   * <p>Each style stores the characters needed to draw table corners,   * horizontal and vertical lines, and junctions.   */ - public enum BorderStyle { -  -  /** -  * Unicode box-drawing border style. -  */ -  UNICODE("╔","╗","╚","╝","═","║","╠","╣","╦","╩","╬","├","┤","┼"), -  -  /** -  * Plain ASCII border style. -  */ -  ASCII ("+","+","+","+","-","|","+","+","+","+","+","+","+","+"), + @SuppressWarnings("ALL") + public enum BorderStyle {     /**   * Rounded Unicode border style.   */   ROUNDED("╭","╮","╰","╯","─","│","├","┤","┬","┴","┼","├","┤","┼"); -  +  /** Corner (tl/tr/bl/br), line (h/v), outer junction (ml/mr/mt/mb/x), and separator junction (sl/sr/sx) characters. */   private final String tl,tr,bl,br,h,v,ml,mr,mt,mb,x,sl,sr,sx;     BorderStyle(String tl,String tr,String bl,String br, @@ -148,16 +139,6 @@ Current scope: all classes   public String v() { return v; }     /** -  * @return the middle-left junction character. -  */ -  public String ml() { return ml; } -  -  /** -  * @return the middle-right junction character. -  */ -  public String mr() { return mr; } -  -  /**   * @return the top-middle junction character.   */   public String mt() { return mt; } @@ -168,11 +149,6 @@ Current scope: all classes   public String mb() { return mb; }     /** -  * @return the center junction character. -  */ -  public String x() { return x; } -  -  /**   * @return the separator-left junction character.   */   public String sl() { return sl; } @@ -210,7 +186,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-13/sources/source-3.html b/deliverables/Coverage/htmReport/ns-13/sources/source-3.html similarity index 77% rename from deliverables/Coverage/htmlReport/ns-13/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-13/sources/source-3.html index 9e13e82..f8a16b4 100644 --- a/deliverables/Coverage/htmlReport/ns-13/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-13/sources/source-3.html @@ -59,7 +59,7 @@ Current scope: all classes 0% - (0/17) + (0/16) @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/117) + (0/131) @@ -135,14 +135,21 @@ Current scope: all classes   this.username = "";   }   -  // ── Setters ───────────────────────────────────────────────────────────────   -  /** Sets the username of the local player. */ +  /** +  * Sets the username of the local player. +  * +  * @param username the username to assign. +  */   public void setUsername(String username) {   this.username = username;   }   -  /** Updates the model stored in this view. */ +  /** +  * Updates the model stored in this view. +  * +  * @param model the latest mini model to display. +  */   @Override   public void setModel(MiniModel model) {   this.model = model; @@ -152,13 +159,14 @@ Current scope: all classes   * Registers the active JLine {@link LineReader}.   * Once set, all output routes through {@link LineReader#printAbove} so the   * prompt survives background-thread renders. +  * +  * @param lineReader the JLine reader to use for output; also provides the terminal reference.   */   public void setLineReader(LineReader lineReader) {   this.lineReader = lineReader;   this.terminal = lineReader.getTerminal();   }   -  // ── Public render entry points ────────────────────────────────────────────     /**   * Default render: dispatches to the right view based on game stage. @@ -169,21 +177,20 @@ Current scope: all classes   GameStages stage = model.currentState.getGameStage();   if (stage == GameStages.TOTEM_CHOICE) {   display(buildTotemsContent()); +  printLine("\033[2mCommands: totem <pos>\033[0m");   } else if (stage == GameStages.ENDED) { -  display(buildStandingContent() + "\nType 'rematch' to play again or 'quit' to exit"); +  display(buildStandingContent()); +  printLine("Type 'rematch' to play again or 'quit' to exit");   } else {   display(buildBoardContent()); +  printLine("\033[2mCommands: slot <pos> | draw upper/lower tribe/building <pos> | totem <pos> | skip | clear | details buildings/events/characters | quit\033[0m");   }   }     /** Renders the board + menu (top) and all players' hands in a grid (bottom). */   public void renderBoard() {   display(buildBoardContent()); -  } -  -  /** Renders the totem-choice panel. */ -  public void renderTotems() { -  display(buildTotemsContent()); +  printLine("\033[2mCommands: slot <pos> | draw upper/lower tribe/building <pos> | totem <pos> | skip | clear | details buildings/events/characters | quit\033[0m");   }     /** @@ -206,10 +213,10 @@ Current scope: all classes   text += "\nPress any key to continue";   }   } -  printLine(text); +  render(); +  printLine("\033[31m" + text + "\033[0m");   }   -  // ── Content builders (return strings, do not print) ───────────────────────     /**   * Builds the main view: board + menu side by side, followed by all players' @@ -227,6 +234,7 @@ Current scope: all classes   */   private String buildAllHandsContent() {   List<Player> players = new ArrayList<>(model.players.values()); +  players.removeIf(p -> model.disconnectedPlayers.contains(p.getUserName()));   if (players.isEmpty()) return "";     int n = players.size(); @@ -237,11 +245,23 @@ Current scope: all classes   for (int i = 0; i < leftCount; i++) leftSb.append(players.get(i).toString()).append("\n");   for (int i = leftCount; i < n; i++) rightSb.append(players.get(i).toString()).append("\n");   -  if (rightSb.isEmpty()) return leftSb.toString(); +  String handsBlock; +  if (rightSb.isEmpty()) { +  handsBlock = leftSb.toString(); +  } else { +  handsBlock = AsciiTable.sideBySide( +  List.of(leftSb.toString().split("\n", -1)), +  List.of(rightSb.toString().split("\n", -1)), 3); +  }   -  return AsciiTable.sideBySide( -  List.of(leftSb.toString().split("\n", -1)), -  List.of(rightSb.toString().split("\n", -1)), 3); +  if (!model.disconnectedPlayers.isEmpty()) { +  var box = new AsciiTable(BorderStyle.ROUNDED, 1); +  box.addHeader("Disconnected"); +  model.disconnectedPlayers.forEach(box::addRow); +  handsBlock += "\n" + box.build(); +  } +  +  return handsBlock;   }     private String buildTotemsContent() { @@ -254,31 +274,29 @@ Current scope: all classes   String current = model.currentState.getCurrentPlayer() != null   ? model.currentState.getCurrentPlayer().getUserName() + " — "   : ""; -  return current + "TOTEMS AVAILABLE:\n" + table.build() + "\nType: totem <pos>"; +  return current + "TOTEMS AVAILABLE:\n" + table.build();   }     private String buildStandingContent() {   if (model.standingPlayers == null || model.standingPlayers.isEmpty()) return ""; -  StringBuilder sb = new StringBuilder(); -  int size = model.standingPlayers.size(); -  for (int i = 0; i < size / 2; i++) { -  sb.append(AsciiTable.sideBySide( -  List.of(model.standingPlayers.get(i * 2).toString().split("\n")), -  List.of(model.standingPlayers.get(i * 2 + 1).toString().split("\n")), 2)); +  String banner = model.standingPlayers.get(0).getUserName().equals(username) +  ? "WINNER!" : "GAME OVER"; +  List<String> lines = new ArrayList<>(); +  for (int i = 0; i < model.standingPlayers.size(); i++) { +  var p = model.standingPlayers.get(i); +  lines.add((i + 1) + ". " + p.getUserName() +  + " (" + p.getTotem().toString() + ")" +  + " \uD83C\uDF56:" + p.getFoodValue() +  + " \uD83C\uDFC5:" + p.getPrestigeValue());   } -  sb.append("\n"); -  if (size % 2 != 0) { -  sb.append(model.standingPlayers.get(size - 1)).append("\n"); -  } -  if (model.standingPlayers.get(0).getUserName().equals(username)) { -  sb.append("GAME ENDED: !!!YOU WON!!!"); -  } else { -  sb.append("GAME ENDED: !!!YOU LOST!!!"); -  } -  return sb.toString(); +  int contentWidth = lines.stream().mapToInt(AsciiTable::displayWidth).max().orElse(0); +  int pad = Math.max(0, (contentWidth - AsciiTable.displayWidth(banner)) / 2); +  var table = new AsciiTable(BorderStyle.ROUNDED, 1); +  table.addHeader(" ".repeat(pad) + banner); +  lines.forEach(table::addRow); +  return table.build();   }   -  // ── Core display primitive ────────────────────────────────────────────────     /**   * Clears the terminal and displays {@code content}, horizontally centered. @@ -345,7 +363,6 @@ Current scope: all classes   return AsciiTable.displayWidth(line);   }   -  // ── Board / players stamp helpers ─────────────────────────────────────────     /**   * Returns the board state as a multi-line string: turn order, upper cards, @@ -366,20 +383,20 @@ Current scope: all classes     var upperCards = new AsciiTable(BorderStyle.ROUNDED, 2);   var lowerCards = new AsciiTable(BorderStyle.ROUNDED, 2); -  upperCards.addHeader("Char/Events", "Building"); -  lowerCards.addHeader("Char/Events", "Building"); +  upperCards.addHeader("Char/\033[38;5;180mEvents\033[0m", "Building"); +  lowerCards.addHeader("Char/\033[38;5;180mEvents\033[0m", "Building");     int maxU = Math.max(model.upperListTribeCards.size(), model.upperListBuildingCards.size());   for (int i = 0; i < maxU; i++) { -  String t = i < model.upperListTribeCards.size() ? i + model.upperListTribeCards.get(i).toStringBoard() : ""; -  String b = i < model.upperListBuildingCards.size() ? i + model.upperListBuildingCards.get(i).toString() : ""; +  String t = i < model.upperListTribeCards.size() ? i + ":" + model.upperListTribeCards.get(i).toStringBoard() : ""; +  String b = i < model.upperListBuildingCards.size() ? i + ":" + model.upperListBuildingCards.get(i).toStringBoard() : "";   upperCards.addRow(t, b);   }     int maxL = Math.max(model.lowerListTribeCards.size(), model.lowerListBuildingCards.size());   for (int i = 0; i < maxL; i++) { -  String t = i < model.lowerListTribeCards.size() ? i + model.lowerListTribeCards.get(i).toStringBoard() : ""; -  String b = i < model.lowerListBuildingCards.size() ? i + model.lowerListBuildingCards.get(i).toString() : ""; +  String t = i < model.lowerListTribeCards.size() ? i + ":" + model.lowerListTribeCards.get(i).toStringBoard() : ""; +  String b = i < model.lowerListBuildingCards.size() ? i + ":" + model.lowerListBuildingCards.get(i).toStringBoard() : "";   lowerCards.addRow(t, b);   }   @@ -422,7 +439,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-14/index.html b/deliverables/Coverage/htmReport/ns-14/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index.html rename to deliverables/Coverage/htmReport/ns-14/index.html index 10d849d..6f6fd0d 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index.html +++ b/deliverables/Coverage/htmReport/ns-14/index.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_BLOCK.html index 03de07a..95a74b0 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_BLOCK.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_BLOCK_DESC.html index ddffd04..ea62456 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_BLOCK_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_CLASS.html index 2abb24f..440471b 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_CLASS.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_CLASS_DESC.html index 0386fb0..c771ef3 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_CLASS_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_LINE.html index 638f364..e1078f5 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_LINE.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_LINE_DESC.html index 569d0eb..c4a0c95 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_LINE_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_METHOD.html index bfef67e..d724615 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_METHOD.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_METHOD_DESC.html index e4fc43b..7f0261a 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_METHOD_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-14/index_SORT_BY_NAME_DESC.html index 826f103..2e6206c 100644 --- a/deliverables/Coverage/htmlReport/ns-14/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-14/index_SORT_BY_NAME_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.View diff --git a/deliverables/Coverage/htmlReport/ns-14/sources/source-1.html b/deliverables/Coverage/htmReport/ns-14/sources/source-1.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-14/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-14/sources/source-1.html index 7186b34..02bcc2a 100644 --- a/deliverables/Coverage/htmlReport/ns-14/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-14/sources/source-1.html @@ -88,7 +88,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-15/index.html b/deliverables/Coverage/htmReport/ns-15/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index.html rename to deliverables/Coverage/htmReport/ns-15/index.html index 3300bc4..1164fd8 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index.html +++ b/deliverables/Coverage/htmReport/ns-15/index.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_BLOCK.html index c126135..2ef4846 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_BLOCK.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_BLOCK_DESC.html index 188f371..dfcdd40 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_BLOCK_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_CLASS.html index 4d6fc6d..302b29e 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_CLASS.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_CLASS_DESC.html index b189787..b615779 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_CLASS_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_LINE.html index 6bf87c2..7fc0a27 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_LINE.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_LINE_DESC.html index 93882ef..ef66c93 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_LINE_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_METHOD.html index 3c9ccbf..cd72a65 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_METHOD.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_METHOD_DESC.html index 97271af..57f347c 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_METHOD_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-15/index_SORT_BY_NAME_DESC.html index bd673be..3d5401b 100644 --- a/deliverables/Coverage/htmlReport/ns-15/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-15/index_SORT_BY_NAME_DESC.html @@ -62,7 +62,7 @@ it.polimi.ingsw.gc14.Network.RMI.Common diff --git a/deliverables/Coverage/htmlReport/ns-15/sources/source-1.html b/deliverables/Coverage/htmReport/ns-15/sources/source-1.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-15/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-15/sources/source-1.html index 726abff..4ef9e67 100644 --- a/deliverables/Coverage/htmlReport/ns-15/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-15/sources/source-1.html @@ -46,7 +46,6 @@ Current scope: all classes    import java.io.Serializable;  import java.rmi.*; - import java.util.Map;    /**   * Callback interface used by the server to notify an RMI client about @@ -96,7 +95,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-15/sources/source-2.html b/deliverables/Coverage/htmReport/ns-15/sources/source-2.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-15/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-15/sources/source-2.html index 7087aeb..42a085a 100644 --- a/deliverables/Coverage/htmlReport/ns-15/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-15/sources/source-2.html @@ -168,7 +168,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-2/index.html b/deliverables/Coverage/htmReport/ns-2/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index.html rename to deliverables/Coverage/htmReport/ns-2/index.html index db0b2e1..a516c00 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index.html +++ b/deliverables/Coverage/htmReport/ns-2/index.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -158,18 +158,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_BLOCK.html index 2594ac5..a852d30 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_BLOCK.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -158,18 +158,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_BLOCK_DESC.html index 004edfe..88c9a77 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_BLOCK_DESC.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_CLASS.html index f57bad3..ee8e4ca 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_CLASS.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -158,18 +158,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_CLASS_DESC.html index 05ae182..f26e1df 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_CLASS_DESC.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_LINE.html index fceb909..12e99ed 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_LINE.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -158,18 +158,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_LINE_DESC.html index 9862c39..18c874b 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_LINE_DESC.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_METHOD.html index abc861a..1d560a3 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_METHOD.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -158,18 +158,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_METHOD_DESC.html index 9fa2653..ff388f3 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_METHOD_DESC.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-2/index_SORT_BY_NAME_DESC.html index afa2006..1cf769f 100644 --- a/deliverables/Coverage/htmlReport/ns-2/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-2/index_SORT_BY_NAME_DESC.html @@ -61,18 +61,18 @@ it.polimi.ingsw.gc14.Controller - 69.2% + 70% - (18/26) + (21/30) - 65.6% + 66.2% - (42/64) + (47/71) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Controller - 100% + 95.5% - (18/18) + (21/22) - 97.7% + 95.9% - (42/43) + (47/49) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Controller 0% - (0/21) + (0/22) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Controller diff --git a/deliverables/Coverage/htmlReport/ns-2/sources/source-1.html b/deliverables/Coverage/htmReport/ns-2/sources/source-1.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-2/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-2/sources/source-1.html index edf7980..0c96d88 100644 --- a/deliverables/Coverage/htmlReport/ns-2/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-2/sources/source-1.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/21) + (0/22) @@ -89,6 +89,7 @@ Current scope: all classes
  package it.polimi.ingsw.gc14.Controller;
  
+ import it.polimi.ingsw.gc14.ErrorType;
  import it.polimi.ingsw.gc14.Model.MiniModel;
  import it.polimi.ingsw.gc14.Network.IClient;
  import it.polimi.ingsw.gc14.View.IView;
@@ -107,7 +108,7 @@ Current scope:     all classes
      private MiniModel miniModel;
  
      /** View of the client. */
-     private IView view;
+     private final IView view;
  
      /** Network client, either TCP or RMI. */
      private IClient client;
@@ -271,8 +272,10 @@ Current scope:     all classes
       */
      public void totemChoice(int pos) {
          if (miniModel == null || miniModel.availableTotems == null
-                 || pos < 0 || pos >= miniModel.availableTotems.size())
+                 || pos < 0 || pos >= miniModel.availableTotems.size()) {
+             view.showError(ErrorType.WRONG_ACTION, "ERROR: Invalid Totem Choice");
              return;
+         }
          client.totemChoice(myUsername, String.valueOf(miniModel.availableTotems.get(pos)));
      }
  
@@ -308,7 +311,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-2/sources/source-2.html b/deliverables/Coverage/htmReport/ns-2/sources/source-2.html
similarity index 95%
rename from deliverables/Coverage/htmlReport/ns-2/sources/source-2.html
rename to deliverables/Coverage/htmReport/ns-2/sources/source-2.html
index 09f3c48..290ff02 100644
--- a/deliverables/Coverage/htmlReport/ns-2/sources/source-2.html
+++ b/deliverables/Coverage/htmReport/ns-2/sources/source-2.html
@@ -64,18 +64,18 @@ Current scope:     all classes
 
 
   
-    100%
+    95.5%
   
   
-    (18/18)
+    (21/22)
   
 
 
   
-    97.7%
+    95.9%
   
   
-    (42/43)
+    (47/49)
   
 
 
@@ -179,7 +179,13 @@ Current scope:     all classes
       *         {@code false} otherwise.
       */
      public synchronized boolean addPlayer(String username) {
-         return model.addPlayer(new Player(username));
+         if(username.trim().length()>10)
+             return false;
+         Player player = model.getPlayerByUsername(username);
+         if(player!=null)
+             return false;
+         player = new Player(username);
+         return model.addPlayer(player);
      }
  
      /**
@@ -326,7 +332,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index.html b/deliverables/Coverage/htmReport/ns-3/index.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index.html
rename to deliverables/Coverage/htmReport/ns-3/index.html
index dcbaffb..5c432fa 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index.html
+++ b/deliverables/Coverage/htmReport/ns-3/index.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -115,10 +115,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -131,10 +131,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
   
@@ -158,18 +158,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -188,7 +188,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -236,10 +236,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -298,18 +298,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
+    (103/105)
   
 
   
@@ -333,10 +333,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_BLOCK.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_BLOCK.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_BLOCK.html
index 4bf88a0..52453e9 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_BLOCK.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_BLOCK.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -146,7 +146,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -186,10 +186,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -221,18 +221,53 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
+  
+
+  
+  
+    Player
+
+  
+    100%
+  
+  
+    (2/2)
+  
+
+
+  
+    100%
+  
+  
+    (23/23)
+  
+
+
+  
+    84.5%
+  
+  
+    (49/58)
+  
+
+
+  
+    98.1%
+  
+  
+    (103/105)
   
 
   
@@ -264,45 +299,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
-  
-
-  
-  
-    Player
-
-  
-    100%
-  
-  
-    (2/2)
-  
-
-
-  
-    100%
-  
-  
-    (23/23)
-  
-
-
-  
-    96.6%
-  
-  
-    (56/58)
-  
-
-
-  
-    100%
-  
-  
-    (106/106)
+    (26/30)
   
 
   
@@ -318,10 +318,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -334,10 +334,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
   
@@ -356,7 +356,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_BLOCK_DESC.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_BLOCK_DESC.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_BLOCK_DESC.html
index 0ca7428..0deba65 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_BLOCK_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_BLOCK_DESC.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -150,10 +150,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -166,45 +166,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
-  
-
-  
-  
-    Player
-
-  
-    100%
-  
-  
-    (2/2)
-  
-
-
-  
-    100%
-  
-  
-    (23/23)
-  
-
-
-  
-    96.6%
-  
-  
-    (56/58)
-  
-
-
-  
-    100%
-  
-  
-    (106/106)
+    (72/82)
   
 
   
@@ -236,10 +201,45 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
+  
+
+  
+  
+    Player
+
+  
+    100%
+  
+  
+    (2/2)
+  
+
+
+  
+    100%
+  
+  
+    (23/23)
+  
+
+
+  
+    84.5%
+  
+  
+    (49/58)
+  
+
+
+  
+    98.1%
+  
+  
+    (103/105)
   
 
   
@@ -263,18 +263,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -298,10 +298,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -328,7 +328,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -344,7 +344,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_CLASS.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_CLASS.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_CLASS.html
index 1c8df40..d795927 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_CLASS.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_CLASS.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -150,10 +150,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -166,10 +166,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
   
@@ -193,18 +193,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -236,10 +236,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -258,7 +258,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -298,18 +298,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
+    (103/105)
   
 
   
@@ -333,10 +333,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_CLASS_DESC.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_CLASS_DESC.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_CLASS_DESC.html
index 10cdff3..fff6f38 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_CLASS_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_CLASS_DESC.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -151,10 +151,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -186,18 +186,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
+    (103/105)
   
 
   
@@ -216,7 +216,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -232,7 +232,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -264,10 +264,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -291,18 +291,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -318,10 +318,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -334,10 +334,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
   
@@ -356,7 +356,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_LINE.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_LINE.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_LINE.html
index 2c58426..9e5b967 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_LINE.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_LINE.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -158,10 +158,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -193,18 +193,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -236,10 +236,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -255,10 +255,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -271,45 +271,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
-  
-
-  
-  
-    PlayableCard
-
-  
-    100%
-  
-  
-    (1/1)
-  
-
-
-  
-    100%
-  
-  
-    (6/6)
-  
-
-
-  
-    100%
-  
-  
-    (8/8)
-  
-
-
-  
-    100%
-  
-  
-    (14/14)
+    (72/82)
   
 
   
@@ -333,10 +298,29 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
+  
+
+
+  
+    98.1%
+  
+  
+    (103/105)
+  
+
+  
+  
+    PlayableCard
+
+  
+    100%
+  
+  
+    (1/1)
   
 
 
@@ -344,7 +328,23 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (106/106)
+    (4/4)
+  
+
+
+  
+    100%
+  
+  
+    (8/8)
+  
+
+
+  
+    100%
+  
+  
+    (12/12)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_LINE_DESC.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_LINE_DESC.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_LINE_DESC.html
index 4a0a5b6..6c2ffc8 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_LINE_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_LINE_DESC.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -129,6 +129,41 @@ it.polimi.ingsw.gc14.Model
   
     (6/6)
   
+
+  
+  
+    PlayableCard
+
+  
+    100%
+  
+  
+    (1/1)
+  
+
+
+  
+    100%
+  
+  
+    (4/4)
+  
+
+
+  
+    100%
+  
+  
+    (8/8)
+  
+
+
+  
+    100%
+  
+  
+    (12/12)
+  
 
   
   
@@ -151,53 +186,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
-  
-
-  
-  
-    PlayableCard
-
-  
-    100%
-  
-  
-    (1/1)
-  
-
-
-  
-    100%
-  
-  
-    (6/6)
-  
-
-
-  
-    100%
-  
-  
-    (8/8)
-  
-
-
-  
-    100%
-  
-  
-    (14/14)
+    (103/105)
   
 
   
@@ -213,10 +213,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -229,10 +229,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
   
@@ -264,10 +264,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -291,18 +291,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -326,10 +326,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -356,7 +356,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_METHOD.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_METHOD.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_METHOD.html
index 73573d5..aca7758 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_METHOD.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_METHOD.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -166,10 +166,45 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
+  
+
+  
+  
+    DecksCreator
+
+  
+    100%
+  
+  
+    (3/3)
+  
+
+
+  
+    90%
+  
+  
+    (9/10)
+  
+
+
+  
+    100%
+  
+  
+    (57/57)
+  
+
+
+  
+    87.8%
+  
+  
+    (72/82)
   
 
   
@@ -193,10 +228,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -228,53 +263,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
-  
-
-  
-  
-    DecksCreator
-
-  
-    100%
-  
-  
-    (3/3)
-  
-
-
-  
-    100%
-  
-  
-    (9/9)
-  
-
-
-  
-    100%
-  
-  
-    (57/57)
-  
-
-
-  
-    88.9%
-  
-  
-    (72/81)
+    (285/343)
   
 
   
@@ -293,7 +293,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -333,18 +333,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
+    (103/105)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_METHOD_DESC.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_METHOD_DESC.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_METHOD_DESC.html
index 6347077..3d6a612 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_METHOD_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_METHOD_DESC.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -151,18 +151,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
+    (103/105)
   
 
   
@@ -181,7 +181,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -197,42 +197,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
-  
-
-  
-  
-    DecksCreator
-
-  
-    100%
-  
-  
-    (3/3)
-  
-
-
-  
-    100%
-  
-  
-    (9/9)
-  
-
-
-  
-    100%
-  
-  
-    (57/57)
-  
-
-
-  
-    88.9%
-  
-  
-    (72/81)
+    (12/12)
   
 
   
@@ -256,18 +221,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -291,10 +256,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -304,6 +269,41 @@ it.polimi.ingsw.gc14.Model
   
     (37/45)
   
+
+  
+  
+    DecksCreator
+
+  
+    100%
+  
+  
+    (3/3)
+  
+
+
+  
+    90%
+  
+  
+    (9/10)
+  
+
+
+  
+    100%
+  
+  
+    (57/57)
+  
+
+
+  
+    87.8%
+  
+  
+    (72/82)
+  
 
   
   
@@ -334,10 +334,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -356,7 +356,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_NAME_DESC.html
similarity index 94%
rename from deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_NAME_DESC.html
rename to deliverables/Coverage/htmReport/ns-3/index_SORT_BY_NAME_DESC.html
index 4d59068..54adeca 100644
--- a/deliverables/Coverage/htmlReport/ns-3/index_SORT_BY_NAME_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-3/index_SORT_BY_NAME_DESC.html
@@ -53,26 +53,26 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    77.6%
+    78.5%
   
   
-    (97/125)
+    (95/121)
   
 
 
   
-    73.5%
+    72.8%
   
   
-    (349/475)
+    (343/471)
   
 
 
   
-    82%
+    82.1%
   
   
-    (547/667)
+    (541/659)
   
 
   
@@ -151,10 +151,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    42.1%
+    53.3%
   
   
-    (8/19)
+    (8/15)
   
 
 
@@ -186,18 +186,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    96.6%
+    84.5%
   
   
-    (56/58)
+    (49/58)
   
 
 
   
-    100%
+    98.1%
   
   
-    (106/106)
+    (103/105)
   
 
   
@@ -216,7 +216,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -232,7 +232,7 @@ it.polimi.ingsw.gc14.Model
     100%
   
   
-    (14/14)
+    (12/12)
   
 
   
@@ -264,10 +264,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
   
@@ -286,7 +286,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Model
     0%
   
   
-    (0/44)
+    (0/36)
   
 
   
@@ -326,18 +326,18 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
   
@@ -353,10 +353,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -369,10 +369,10 @@ it.polimi.ingsw.gc14.Model
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
   
@@ -399,7 +399,7 @@ it.polimi.ingsw.gc14.Model
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-1.html b/deliverables/Coverage/htmReport/ns-3/sources/source-1.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-3/sources/source-1.html
rename to deliverables/Coverage/htmReport/ns-3/sources/source-1.html
index d3dc7e5..fdce4d8 100644
--- a/deliverables/Coverage/htmlReport/ns-3/sources/source-1.html
+++ b/deliverables/Coverage/htmReport/ns-3/sources/source-1.html
@@ -45,10 +45,10 @@ Current scope:     all classes
   DecksCreator
 
   
-    100%
+    87.5%
   
   
-    (7/7)
+    (7/8)
   
 
 
@@ -61,10 +61,10 @@ Current scope:     all classes
 
 
   
-    88.6%
+    87.5%
   
   
-    (70/79)
+    (70/80)
   
 
 
@@ -116,10 +116,10 @@ Current scope:     all classes
   Total
 
   
-    100%
+    90%
   
   
-    (9/9)
+    (9/10)
   
 
 
@@ -132,10 +132,10 @@ Current scope:     all classes
 
 
   
-    88.9%
+    87.8%
   
   
-    (72/81)
+    (72/82)
   
 
 
@@ -167,9 +167,8 @@ Current scope:     all classes
   * Utility class responsible for loading and creating decks of cards and slots for the game.
   * Cards are loaded from JSON resource files and instantiated according to their type and parameters.
   */
- public class DecksCreator {
+ public class DecksCreator {
  
-     private DecksCreator() {}
  
      /**
       * Loads the tribe card deck for the specified era from the corresponding JSON resource file.
@@ -360,7 +359,7 @@ Current scope:     all classes
          int era;
          boolean armed;
          boolean isEvent;
-         List<Object> params; // Object to support mixed boolean and numeric parameters from JSON
+         List<Object> params;
      }
  
      /**
@@ -373,7 +372,7 @@ Current scope:     all classes
          int era;
          int price;
          int prestigeValue;
-         List<Object> params; // Object to support mixed boolean and numeric parameters from JSON
+         List<Object> params;
      }
  }
 
@@ -399,7 +398,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-2.html b/deliverables/Coverage/htmReport/ns-3/sources/source-2.html
similarity index 98%
rename from deliverables/Coverage/htmlReport/ns-3/sources/source-2.html
rename to deliverables/Coverage/htmReport/ns-3/sources/source-2.html
index e3a703b..7d89aa3 100644
--- a/deliverables/Coverage/htmlReport/ns-3/sources/source-2.html
+++ b/deliverables/Coverage/htmReport/ns-3/sources/source-2.html
@@ -64,18 +64,18 @@ Current scope:     all classes
 
 
   
-    68.1%
+    68.4%
   
   
-    (209/307)
+    (210/307)
   
 
 
   
-    83.8%
+    83.1%
   
   
-    (285/340)
+    (285/343)
   
 
 
@@ -155,7 +155,7 @@ Current scope:     all classes
      /**
       * Queue containing the players who still have to choose their totem.
       */
-     private Queue<Player> totemChoiceQueue = new LinkedList<>();
+     private final Queue<Player> totemChoiceQueue = new LinkedList<>();
  
      /**
       * Assigns the selected totem to the specified player during the totem choice phase.
@@ -198,7 +198,7 @@ Current scope:     all classes
                  if(nextPlayer==null)
                  {
                      currentState.gameStageUpdate(GameStages.SLOT_CHOICE);
-                     currentState.playerUpdate(orderLogicCard.pull(),null);
+                     nextPlayerSetup();
                      return true;
                  }
              }
@@ -211,7 +211,7 @@ Current scope:     all classes
       * Map tracking the players who are currently disconnected.
       * Key: player; value: {@code true} if currently disconnected, {@code false} if reconnected.
       */
-     private Map<Player,Boolean> disconnectedPlayers = new HashMap<>();
+     private final Map<Player,Boolean> disconnectedPlayers = new HashMap<>();
  
      /**
       * Returns an unmodifiable view of the disconnected-players map.
@@ -249,17 +249,19 @@ Current scope:     all classes
          if(currentState.getCurrentPlayer().equals(player)) {
              if (currentState.getGameStage() != GameStages.TOTEM_CHOICE) {
                  nextPlayerSetup();
-                 return true;
              }
              else {
+                 totemChoiceQueue.removeIf(x->x.getUserName().equals(player.getUserName()));
+                 player.setTotem(getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size())));
                  if (totemChoiceQueue.isEmpty()) {
                      player.setTotem(getAvailableTotems().get(new Random().nextInt(getAvailableTotems().size())));
-                 } else {
-                     totemChoiceQueue.add(player);
+                     currentState.gameStageUpdate(GameStages.SLOT_CHOICE);
+                     nextPlayerSetup();
+                     return true;
                  }
                  currentState.playerUpdate(totemChoiceQueue.poll(), null);
-                 return true;
              }
+             return true;
          }
  
          return true;
@@ -531,7 +533,6 @@ Current scope:     all classes
          currentState.gameStageUpdate(GameStages.TOTEM_CHOICE);
      }
  
-     //region Controller Methods
  
      /**
       * Attempts to assign the slot at the specified index to the specified player.
@@ -1047,7 +1048,7 @@ Current scope:     all classes
          );
          currentState.gameStageUpdate(GameStages.ENDED);
          playerStanding=new ArrayList<>(playersList);
-         playerStanding.sort((y,x)->x.getPrestigeValue()==y.getPrestigeValue()?Integer.compare(x.getFoodValue(),y.getFoodValue()):Integer.compare(x.getPrestigeValue(),y.getPrestigeValue()));
+         playerStanding.sort((y,x)->x.getPrestigeValue()==y.getPrestigeValue()?Integer.compare(x.getFoodValue(),y.getFoodValue()):Integer.compare(x.getPrestigeValue(),y.getPrestigeValue()));
  
      }
  
@@ -1129,7 +1130,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-3.html b/deliverables/Coverage/htmReport/ns-3/sources/source-3.html
similarity index 87%
rename from deliverables/Coverage/htmlReport/ns-3/sources/source-3.html
rename to deliverables/Coverage/htmReport/ns-3/sources/source-3.html
index 8d790da..bdba5a8 100644
--- a/deliverables/Coverage/htmlReport/ns-3/sources/source-3.html
+++ b/deliverables/Coverage/htmReport/ns-3/sources/source-3.html
@@ -59,7 +59,7 @@ Current scope:     all classes
     0%
   
   
-    (0/21)
+    (0/18)
   
 
 
@@ -75,7 +75,7 @@ Current scope:     all classes
     0%
   
   
-    (0/44)
+    (0/36)
   
 
 
@@ -91,9 +91,7 @@ Current scope:     all classes
  
  import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
  import it.polimi.ingsw.gc14.Model.Cards.TribeCard;
- import it.polimi.ingsw.gc14.Model.GamePackage.Board;
  import it.polimi.ingsw.gc14.Model.GamePackage.CurrentState;
- import it.polimi.ingsw.gc14.Network.EventType;
  import it.polimi.ingsw.gc14.Network.NetworkEvent;
  
  import java.io.Serializable;
@@ -139,7 +137,7 @@ Current scope:     all classes
      /**
       * Map of players indexed by username.
       */
-     public Map<String, Player> players;
+     public final Map<String, Player> players;
  
      /**
       * List of totems still available for selection.
@@ -151,27 +149,6 @@ Current scope:     all classes
       */
      public List<Player> standingPlayers;
  
-     /**
-      * Constructs an empty mini model.
-      */
-     public MiniModel() {
-     }
- 
-     /**
-      * Constructs a mini model with only the card lists populated.
-      *
-      * @param upperListTribeCards  the upper row of tribe cards on the board.
-      * @param lowerListTribeCards  the lower row of tribe cards on the board.
-      * @param upperListBuildingCards the upper row of building cards on the board.
-      * @param lowerListBuildingCards the lower row of building cards on the board.
-      */
-     public MiniModel(ArrayList<TribeCard> upperListTribeCards,ArrayList<TribeCard>lowerListTribeCards,ArrayList<BuildingCard> upperListBuildingCards,ArrayList<BuildingCard>lowerListBuildingCards) {
-         this.upperListTribeCards = upperListTribeCards;
-         this.lowerListTribeCards = lowerListTribeCards;
-         this.upperListBuildingCards = upperListBuildingCards;
-         this.lowerListBuildingCards = lowerListBuildingCards;
-         this.disconnectedPlayers = new ArrayList<>();
-     }
  
      /**
       * Constructs a complete mini model from the current server-side game data.
@@ -267,15 +244,6 @@ Current scope:     all classes
      }
  
      /**
-      * Adds or updates a single player in the mini model.
-      *
-      * @param player the player to store.
-      */
-     public void setPlayer(Player player) {
-         players.put(player.getUserName(), player);
-     }
- 
-     /**
       * Sets the final standing of the players.
       *
       * @param standingPlayers the final ordered list of players.
@@ -407,7 +375,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-4.html b/deliverables/Coverage/htmReport/ns-3/sources/source-4.html
similarity index 93%
rename from deliverables/Coverage/htmlReport/ns-3/sources/source-4.html
rename to deliverables/Coverage/htmReport/ns-3/sources/source-4.html
index 3f426b7..0c69a9a 100644
--- a/deliverables/Coverage/htmlReport/ns-3/sources/source-4.html
+++ b/deliverables/Coverage/htmReport/ns-3/sources/source-4.html
@@ -72,10 +72,10 @@ Current scope:     all classes
 
 
   
-    87.1%
+    86.7%
   
   
-    (27/31)
+    (26/30)
   
 
 
@@ -89,14 +89,10 @@ Current scope:     all classes
 
  package it.polimi.ingsw.gc14.Model;
  
- import it.polimi.ingsw.gc14.Model.Cards.BuildingCard;
  import it.polimi.ingsw.gc14.Model.Orders.OrderPlayer;
- import it.polimi.ingsw.gc14.View.TUI.AsciiTable;
- import it.polimi.ingsw.gc14.View.TUI.BorderStyle;
  
  import java.io.Serializable;
  import java.util.*;
- import java.util.stream.Collectors;
  
  /**
   * Abstract base class for all order logic cards.
@@ -109,13 +105,13 @@ Current scope:     all classes
      /**
       * The queue of {@link Player Players} associated with this order logic card.
       */
-     private Queue<Player> players;
+     private final Queue<Player> players;
  
      /**
       * The list of {@link OrderPlayer} entries tracking turn order and played status.
       * Protected so subclasses can read it for display purposes (e.g., {@link #toString()}).
       */
-     protected List<OrderPlayer> playerList;
+     protected final List<OrderPlayer> playerList;
  
      /**
       * Returns an unmodifiable view of the player order list.
@@ -126,8 +122,6 @@ Current scope:     all classes
          return Collections.unmodifiableList(playerList);
      }
  
-     /** Total number of players in this game. */
-     protected final int nPlayers;
  
  
      /**
@@ -135,7 +129,7 @@ Current scope:     all classes
       *
       * <p>The input list is shuffled in place to establish a random initial turn order.
       * This is intentional: the caller's list (typically {@code Game.playersList}) is
-      * reordered so that the game's canonical player sequence reflects the randomised order.
+      * reordered so that the game's canonical player sequence reflects the randomized order.
       *
       * @param players the list of players associated with this order logic card.
       *                <strong>The list is mutated (shuffled) by this constructor.</strong>
@@ -143,7 +137,6 @@ Current scope:     all classes
      public OrderLogicCard(ArrayList<Player> players) {
          Collections.shuffle(players);
          this.players = new LinkedList<>(players);
-         nPlayers = players.size();
          this.playerList = new ArrayList<>(players.stream().map(x -> new OrderPlayer(x, false)).toList());
      }
  
@@ -155,7 +148,7 @@ Current scope:     all classes
       */
      public void push(Player player) {
          effect(player, players.size());
-         if (players.size() == 0) {
+         if (players.isEmpty()) {
              playerList.clear();
          }
          playerList.add(new OrderPlayer(player, false));
@@ -291,7 +284,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-5.html b/deliverables/Coverage/htmReport/ns-3/sources/source-5.html
similarity index 86%
rename from deliverables/Coverage/htmlReport/ns-3/sources/source-5.html
rename to deliverables/Coverage/htmReport/ns-3/sources/source-5.html
index 402a335..41f1387 100644
--- a/deliverables/Coverage/htmlReport/ns-3/sources/source-5.html
+++ b/deliverables/Coverage/htmReport/ns-3/sources/source-5.html
@@ -59,7 +59,7 @@ Current scope:     all classes
     100%
   
   
-    (6/6)
+    (4/4)
   
 
 
@@ -75,7 +75,7 @@ Current scope:     all classes
     100%
   
   
-    (14/14)
+    (12/12)
   
 
 
@@ -100,7 +100,7 @@ Current scope:     all classes
      /**
       * The image identifier of the playable card.
       */
-     private String idIMG;
+     private final String idIMG;
  
      /**
       * Returns the image identifier of this playable card.
@@ -114,7 +114,7 @@ Current scope:     all classes
      /**
       * The era associated with this playable card.
       */
-     private int era;
+     private final int era;
  
      /**
       * Returns the era of this playable card.
@@ -157,23 +157,18 @@ Current scope:     all classes
      }
  
      /**
-      * Returns a string representation of this playable card.
+      * Returns the compact representation shown in the player hand panel.
       *
-      * @return a string representation of this playable card.
+      * @return the player-hand string representation of this card.
       */
-     @Override
-     public String toString() {
-         return "";
-     }
+     public abstract String toStringPlayer();
  
      /**
-      * Returns a compact string representation used when rendering the board in the TUI.
+      * Returns the representation shown on the board (offer track cards).
       *
-      * @return a compact board representation of this card.
+      * @return the board string representation of this card.
       */
-     public String toStringBoard() {
-         return ":";
-     }
+     public abstract String toStringBoard();
  }
 
 
@@ -198,7 +193,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-6.html b/deliverables/Coverage/htmReport/ns-3/sources/source-6.html similarity index 86% rename from deliverables/Coverage/htmlReport/ns-3/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-3/sources/source-6.html index f89fecd..7cb1446 100644 --- a/deliverables/Coverage/htmlReport/ns-3/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-3/sources/source-6.html @@ -53,18 +53,18 @@ Current scope: all classes - 96.6% + 84.5% - (56/58) + (49/58) - 100% + 98.1% - (105/105) + (102/104) @@ -99,18 +99,18 @@ Current scope: all classes - 96.6% + 84.5% - (56/58) + (49/58) - 100% + 98.1% - (106/106) + (103/105) @@ -143,7 +143,7 @@ Current scope: all classes   /**   * The maximum length allowed for the username string.   */ -  private static final int MAX_USERNAME_LENGTH = 32; +  private static final int MAX_USERNAME_LENGTH = 10;     /**   * Identifier for the {@code Player} when displaying the game through the GUI. @@ -151,10 +151,9 @@ Current scope: all classes   */   private Totems totem;   -  // region Getters   /**   * Unique string identifier for players; must not be {@code null} and must not -  * exceed {@link #MAX_VALUE} otherwise an {@link IllegalArgumentException} will be thrown +  * exceed {@link #MAX_USERNAME_LENGTH} otherwise an {@link IllegalArgumentException} will be thrown   * when the {@link #Player(String) constructor} is called.   */   private final String userName; @@ -203,13 +202,41 @@ Current scope: all classes   case GATHERER -> gatherers.size();   };   } -  private ArrayList<BuildingCard> buildingCards; -  private ArrayList<Artist> artists; -  private ArrayList<Builder> builders; -  private ArrayList<Inventor> inventors; -  private ArrayList<Gatherer> gatherers; -  private ArrayList<Shaman> shamans; -  private ArrayList<Hunter> hunters; +  +  /** +  * The current {@link BuildingCard Building Cards} in the player's deck. +  */ +  private final ArrayList<BuildingCard> buildingCards; +  +  /** +  * The current {@link Artist Artist} cards in the player's deck. +  */ +  private final ArrayList<Artist> artists; +  +  /** +  * The current {@link Builder Builder} cards in the player's deck. +  */ +  private final ArrayList<Builder> builders; +  +  /** +  * The current {@link Inventor Inventor} cards in the player's deck. +  */ +  private final ArrayList<Inventor> inventors; +  +  /** +  * The current {@link Gatherer Gatherer} cards in the player's deck. +  */ +  private final ArrayList<Gatherer> gatherers; +  +  /** +  * The current {@link Shaman Shaman} cards in the player's deck. +  */ +  private final ArrayList<Shaman> shamans; +  +  /** +  * The current {@link Hunter Hunter} cards in the player's deck. +  */ +  private final ArrayList<Hunter> hunters;     /** @return this player's building cards. */   public ArrayList<BuildingCard> getBuildingCards() { return buildingCards; } @@ -253,10 +280,6 @@ Current scope: all classes   return prestigeValue;   }   -  // endregion getters -  -  // region Setters -    /**   * Adds {@code value} amount of Food to the Player.   * @param value The amount of Food to be added. Should be non-negative. @@ -310,9 +333,7 @@ Current scope: all classes   this.prestigeValue -= value;   }   -  // endregion setters   -  // region Constructors     /**   * Constructor for the class {@code Player}. Each Player is uniquely identified by the {@link #userName}. @@ -343,11 +364,14 @@ Current scope: all classes   this.prestigeValue = 0;   this.totem = null;   } -  // endregion constructors   -  // region Functions -  -  // TODO +  /** +  * Checks equality between this {@code Player} and another object. +  * Two players are equal if and only if they share the same {@code userName}. +  * +  * @param obj the object to compare with. +  * @return {@code true} if {@code obj} is a {@code Player} with the same username; {@code false} otherwise. +  */   @Override   public boolean equals(Object obj) {   if (this == obj) return true; @@ -379,11 +403,11 @@ Current scope: all classes   */   @Override   public String toString() { -  int last = -1; +  int last;     var table = new AsciiTable(ROUNDED, 1);   -  String totemStr = (this.totem != null) ? " (" + this.totem.toString() + ")" : ""; +  String totemStr = (this.totem != null) ? " (" + this.totem + ")" : "";   table.addHeader(this.getUserName() + totemStr + " | \uD83C\uDF56:" + this.getFoodValue() + " | \uD83C\uDFC5:" + this.getPrestigeValue());   table.addSeparator();   @@ -415,28 +439,28 @@ Current scope: all classes   table.addRow("CHARACTERS");   if(!this.artists.isEmpty()){   table.addRow(this.artists.size() + " Artists: \uD83C\uDFA8:" + this.artists.size()); -  if(last == 1){ +  if(last == 1){   table.addSeparator();   }   }     if(!this.builders.isEmpty()){   table.addRow(this.builders.size() + " Builders: " + "\uD83D\uDD28:" + this.builders.stream().mapToInt(Builder::getReductionValue).sum() + " \uD83C\uDFC5:" + this.builders.stream().mapToInt(Builder::getPrestigeValue).sum()); -  if(last == 2){ +  if(last == 2){   table.addSeparator();   }   }     if(!this.gatherers.isEmpty()){ -  table.addRow(this.gatherers.size() + " Gatherers: -\uD83E\uDD57:" + 3*this.gatherers.size()); -  if(last == 3){ +  table.addRow(this.gatherers.size() + " Gatherers: \uD83C\uDF56:" + 3*this.gatherers.size()); +  if(last == 3){   table.addSeparator();   }   }     if(!this.shamans.isEmpty()){   table.addRow(this.shamans.size() + " Shamans: " + "\uD83C\uDF1F:" + this.shamans.stream().mapToInt(Shaman::getIcon).sum()); -  if(last == 4){ +  if(last == 4){   table.addSeparator();   }   } @@ -451,7 +475,7 @@ Current scope: all classes   .sorted(Map.Entry.comparingByKey())   .map(e -> e.getKey() + ":" + e.getValue())   .collect(Collectors.joining(", "))); -  if(last == 5){ +  if(last == 5){   table.addSeparator();   }   } @@ -463,16 +487,15 @@ Current scope: all classes   }   table.addSeparator();   table.addRow("BUILDING CARDS" + -  (this.buildingCards.stream().mapToInt(BuildingCard::getPrestigeValue).sum() != 0 -  ? " 🏅:" + this.buildingCards.stream().mapToInt(BuildingCard::getPrestigeValue).sum() +  (this.buildingCards.stream().mapToInt(BuildingCard::getPrestigeValue).sum() != 0 +  ? " \uD83C\uDFC5:" + this.buildingCards.stream().mapToInt(BuildingCard::getPrestigeValue).sum()   : "")); -  if(!this.buildingCards.isEmpty()){ -  table.addRow(this.buildingCards.size() + " Buildings: " + this.buildingCards.stream().map(BuildingCard::toStringPlayer).collect(Collectors.joining(", "))); +  if(!this.buildingCards.isEmpty()){ +  table.addRow(this.buildingCards.size() + " Buildings: " + this.buildingCards.stream().map(BuildingCard::toStringPlayer).collect(Collectors.joining(", ")));   }     return table.build();   } -  // endregion functions  }
@@ -497,7 +520,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-7.html b/deliverables/Coverage/htmReport/ns-3/sources/source-7.html similarity index 89% rename from deliverables/Coverage/htmlReport/ns-3/sources/source-7.html rename to deliverables/Coverage/htmReport/ns-3/sources/source-7.html index 56730f2..51dfc34 100644 --- a/deliverables/Coverage/htmlReport/ns-3/sources/source-7.html +++ b/deliverables/Coverage/htmReport/ns-3/sources/source-7.html @@ -64,10 +64,10 @@ Current scope: all classes - 42.1% + 53.3% - (8/19) + (8/15) @@ -96,12 +96,11 @@ Current scope: all classes   * The slot configuration depends on the specified slot identifier.   */  public class Slot implements Serializable { -  // Getters     /**   * The identifier of this slot.   */ -  private char slotId; +  private final char slotId;     /**   * Returns the identifier of this slot. @@ -115,7 +114,7 @@ Current scope: all classes   /**   * The number of upper cards associated with this slot.   */ -  private int nUpper; +  private final int nUpper;   /**   * Returns the number of upper cards associated with this slot.   * @@ -143,7 +142,7 @@ Current scope: all classes   /**   * The number of lower cards associated with this slot.   */ -  private int nLower; +  private final int nLower;     /**   * Returns the number of lower cards associated with this slot. @@ -157,7 +156,7 @@ Current scope: all classes   /**   * The amount of Food associated with this slot.   */ -  private int food; +  private final int food;     /**   * Returns the amount of Food associated with this slot. @@ -167,9 +166,7 @@ Current scope: all classes   public int getFood(){   return food;   } -  // End getters   -  // Constructors     /**   * Creates a slot with the specified identifier. @@ -258,16 +255,21 @@ Current scope: all classes   public String toStringTUI()   {   StringBuilder s = new StringBuilder(" "); -  for(int i=0;i<this.getNUpper();i++) s.append("▲"); -  for(int i=0;i<this.getNLower();i++) s.append("▼"); -  if(getFood()!=0) s.append("+"+getFood()+" \uD83C\uDF56"); +  s.repeat("▲", Math.max(0, this.getNUpper())); +  s.repeat("▼", Math.max(0, this.getNLower())); +  if(getFood()!=0) s.append("+").append(getFood()).append(" \uD83C\uDF56");   s.append(" ");   return s.toString();   }   -  // Functions   -  // TODO +  /** +  * Checks equality between this {@code Slot} and another object. +  * Two slots are equal if and only if they share the same {@code slotId}. +  * +  * @param obj the object to compare with. +  * @return {@code true} if {@code obj} is a {@code Slot} with the same identifier; {@code false} otherwise. +  */   @Override   public boolean equals(Object obj) {   if (this == obj) return true; @@ -275,13 +277,16 @@ Current scope: all classes   return slotId == ((Slot) obj).slotId;   }   -  // TODO +  /** +  * Returns the hash code for this {@code Slot}, derived from {@link #slotId}. +  * +  * @return the hash code of the slot identifier. +  */   @Override   public int hashCode() {   return Character.hashCode(slotId);   }   -  // End functions  } @@ -306,7 +311,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-3/sources/source-8.html b/deliverables/Coverage/htmReport/ns-3/sources/source-8.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-3/sources/source-8.html rename to deliverables/Coverage/htmReport/ns-3/sources/source-8.html index 988217f..43c6ebf 100644 --- a/deliverables/Coverage/htmlReport/ns-3/sources/source-8.html +++ b/deliverables/Coverage/htmReport/ns-3/sources/source-8.html @@ -130,7 +130,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-4/index.html b/deliverables/Coverage/htmReport/ns-4/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index.html rename to deliverables/Coverage/htmReport/ns-4/index.html index 4a21c00..0fe6c50 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index.html +++ b/deliverables/Coverage/htmReport/ns-4/index.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -115,10 +115,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -131,10 +131,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_BLOCK.html index a9a6126..0539625 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_BLOCK.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -127,7 +127,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_BLOCK_DESC.html index d2cedca..0c530e6 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_BLOCK_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -115,10 +115,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -131,10 +131,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_CLASS.html index 9876ce7..9447098 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_CLASS.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -115,10 +115,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -131,10 +131,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_CLASS_DESC.html index aa1f29f..9c30c47 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_CLASS_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -127,7 +127,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_LINE.html index 6377122..e2cf88f 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_LINE.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -115,10 +115,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -131,10 +131,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_LINE_DESC.html index a5be4fb..12dded0 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_LINE_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -127,7 +127,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_METHOD.html index fc06fa0..92448ba 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_METHOD.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -115,10 +115,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -131,10 +131,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_METHOD_DESC.html index e7453e8..b27e0c6 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_METHOD_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -127,7 +127,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-4/index_SORT_BY_NAME_DESC.html index e674113..36d4223 100644 --- a/deliverables/Coverage/htmlReport/ns-4/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-4/index_SORT_BY_NAME_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 95% - (20/20) + (19/20) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 98.1% - (58/58) + (52/53) @@ -127,7 +127,7 @@ it.polimi.ingsw.gc14.Model.Cards 100% - (11/11) + (10/10) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 92.9% - (14/14) + (13/14) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards - 100% + 97.7% - (47/47) + (42/43) @@ -189,7 +189,7 @@ it.polimi.ingsw.gc14.Model.Cards diff --git a/deliverables/Coverage/htmlReport/ns-4/sources/source-1.html b/deliverables/Coverage/htmReport/ns-4/sources/source-1.html similarity index 91% rename from deliverables/Coverage/htmlReport/ns-4/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-4/sources/source-1.html index c0b7424..4ab74a2 100644 --- a/deliverables/Coverage/htmlReport/ns-4/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-4/sources/source-1.html @@ -56,10 +56,10 @@ Current scope: all classes - 100% + 92.9% - (14/14) + (13/14) @@ -72,10 +72,10 @@ Current scope: all classes - 100% + 97.7% - (47/47) + (42/43) @@ -108,7 +108,7 @@ Current scope: all classes   /**   * The price of this building card.   */ -  private int price; +  private final int price;     /**   * Returns the price of this building card. @@ -137,7 +137,7 @@ Current scope: all classes   /**   * The prestige value of this building card.   */ -  private int prestigeValue; +  private final int prestigeValue;     /**   * Returns the prestige value of this building card. @@ -254,15 +254,17 @@ Current scope: all classes   this.effectType = effectTypeFromId(effectId);   this.effectId = effectId;   } -  +  /** +  * Maps a building effect identifier to its corresponding {@link EffectType}. +  * +  * @param effectId the effect identifier to resolve. +  * @return the {@link EffectType} for the given identifier. +  * @throws IllegalArgumentException if {@code effectId} does not correspond to any known effect type. +  */   private static EffectType effectTypeFromId(int effectId) {   switch (effectId) { -  case 2: return EffectType.ON_EVENT; +  case 2, 9, 7, 6, 5: return EffectType.ON_EVENT;   case 3: return EffectType.ON_END_TURN; -  case 5: return EffectType.ON_EVENT; -  case 6: return EffectType.ON_EVENT; -  case 7: return EffectType.ON_EVENT; -  case 9: return EffectType.ON_EVENT;   case 12: return EffectType.ON_ROUND_END;   default: throw new IllegalArgumentException();   } @@ -314,26 +316,16 @@ Current scope: all classes   *   * @param player the player to whom the effect may be applied.   */ -  @Override   public void applyEffect(Player player) {}   -  /** -  * Returns the string representation of this building card. -  * -  * @return the string representation of this building card. -  */   @Override -  public String toString() { -  return ":" + " ID:" + getEffectId() + " \uD83C\uDF56:" + getPrice() + " \uD83C\uDFC5:" + getPrestigeValue(); +  public String toStringBoard() { +  return "ID:" + getEffectId() + " \uD83C\uDF56:" + getPrice() + " \uD83C\uDFC5:" + getPrestigeValue();   }   -  /** -  * Returns a compact player-view string representation of this building card. -  * -  * @return a compact string showing the effect identifier. -  */ +  @Override   public String toStringPlayer() { -  return "ID:" + getEffectId(); +  return "ID:" + getEffectId();   }  } @@ -359,7 +351,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-4/sources/source-2.html b/deliverables/Coverage/htmReport/ns-4/sources/source-2.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-4/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-4/sources/source-2.html index 7d1d206..9e97c33 100644 --- a/deliverables/Coverage/htmlReport/ns-4/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-4/sources/source-2.html @@ -63,7 +63,7 @@ Current scope: all classes 100% - (11/11) + (10/10) @@ -77,7 +77,6 @@ Current scope: all classes
  package it.polimi.ingsw.gc14.Model.Cards;
  
- import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character;
  import it.polimi.ingsw.gc14.Model.PlayableCard;
  import java.io.Serializable;
  
@@ -92,7 +91,7 @@ Current scope:     all classes
      /**
       * Indicates whether this tribe card is an event card.
       */
-     private boolean isEventCard;
+     private final boolean isEventCard;
  
      /**
       * Returns whether this tribe card is an event card.
@@ -106,7 +105,7 @@ Current scope:     all classes
      /**
       * The minimum number of players required for this tribe card.
       */
-     private int nMin=0;
+     private final int nMin;
  
      /**
       * Returns the minimum number of players required for this tribe card.
@@ -200,7 +199,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index.html b/deliverables/Coverage/htmReport/ns-5/index.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index.html
rename to deliverables/Coverage/htmReport/ns-5/index.html
index 5f52376..e9728ba 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index.html
+++ b/deliverables/Coverage/htmReport/ns-5/index.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_BLOCK.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_BLOCK.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_BLOCK.html
index 92d3a2f..2cd1aa2 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_BLOCK.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_BLOCK.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_BLOCK_DESC.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_BLOCK_DESC.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_BLOCK_DESC.html
index d875eb6..78af53a 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_BLOCK_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_BLOCK_DESC.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_CLASS.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_CLASS.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_CLASS.html
index 62e93f3..c311e33 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_CLASS.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_CLASS.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_CLASS_DESC.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_CLASS_DESC.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_CLASS_DESC.html
index 7d8219b..134850e 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_CLASS_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_CLASS_DESC.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_LINE.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_LINE.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_LINE.html
index 5476d43..4087dce 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_LINE.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_LINE.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_LINE_DESC.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_LINE_DESC.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_LINE_DESC.html
index c81778d..b7d1bfb 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_LINE_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_LINE_DESC.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_METHOD.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_METHOD.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_METHOD.html
index e682203..2bd2c66 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_METHOD.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_METHOD.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_METHOD_DESC.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_METHOD_DESC.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_METHOD_DESC.html
index dee6c6b..0b8c6b6 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_METHOD_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_METHOD_DESC.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_NAME_DESC.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_NAME_DESC.html
rename to deliverables/Coverage/htmReport/ns-5/index_SORT_BY_NAME_DESC.html
index ece7c13..cd64471 100644
--- a/deliverables/Coverage/htmlReport/ns-5/index_SORT_BY_NAME_DESC.html
+++ b/deliverables/Coverage/htmReport/ns-5/index_SORT_BY_NAME_DESC.html
@@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/sources/source-1.html b/deliverables/Coverage/htmReport/ns-5/sources/source-1.html
similarity index 97%
rename from deliverables/Coverage/htmlReport/ns-5/sources/source-1.html
rename to deliverables/Coverage/htmReport/ns-5/sources/source-1.html
index 8342b06..85c5e25 100644
--- a/deliverables/Coverage/htmlReport/ns-5/sources/source-1.html
+++ b/deliverables/Coverage/htmReport/ns-5/sources/source-1.html
@@ -135,7 +135,7 @@ Current scope:     all classes
 
 
 
 
diff --git a/deliverables/Coverage/htmlReport/ns-5/sources/source-2.html b/deliverables/Coverage/htmReport/ns-5/sources/source-2.html
similarity index 83%
rename from deliverables/Coverage/htmlReport/ns-5/sources/source-2.html
rename to deliverables/Coverage/htmReport/ns-5/sources/source-2.html
index 6661877..5b6449f 100644
--- a/deliverables/Coverage/htmlReport/ns-5/sources/source-2.html
+++ b/deliverables/Coverage/htmReport/ns-5/sources/source-2.html
@@ -41,8 +41,6 @@ Current scope:     all classes
 
  package it.polimi.ingsw.gc14.Model.Cards.Building;
  
- import it.polimi.ingsw.gc14.Model.Player;
- 
  /**
   * Defines the effect behavior of a building card.
   *
@@ -51,12 +49,6 @@ Current scope:     all classes
   */
  public interface BuildingEffect {
  
-     /**
-      * Applies the building effect to the specified player.
-      *
-      * @param player the player affected by the building effect.
-      */
-     void applyEffect(Player player);
  }
 
 
@@ -81,7 +73,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/index.html b/deliverables/Coverage/htmReport/ns-6/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index.html rename to deliverables/Coverage/htmReport/ns-6/index.html index 8519850..5381a97 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index.html +++ b/deliverables/Coverage/htmReport/ns-6/index.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -150,19 +150,19 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -213,10 +213,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 87.5% - (8/8) + (7/8) @@ -229,10 +229,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.4% - (18/18) + (17/18) @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_BLOCK.html index 30aec78..ed24290 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_BLOCK.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -248,10 +248,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 87.5% - (8/8) + (7/8) @@ -264,10 +264,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.4% - (18/18) + (17/18) @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_BLOCK_DESC.html index a6b0b80..5db6ea1 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_BLOCK_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -185,10 +185,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 87.5% - (8/8) + (7/8) @@ -201,10 +201,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.4% - (18/18) + (17/18) @@ -325,19 +325,19 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_CLASS.html index 2cf71b7..95356d4 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_CLASS.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -150,19 +150,19 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -213,10 +213,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 87.5% - (8/8) + (7/8) @@ -229,10 +229,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.4% - (18/18) + (17/18) @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_CLASS_DESC.html index 4609d66..4e20a9e 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_CLASS_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -220,10 +220,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 87.5% - (8/8) + (7/8) @@ -236,10 +236,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.4% - (18/18) + (17/18) @@ -290,19 +290,19 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_LINE.html index aedb385..d7277e2 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_LINE.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -103,6 +103,69 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects Line, % + + Building1 + + + 100% + + + (1/1) + + + + + 83.3% + + + (5/6) + + + + + + 91.7% + + + (11/12) + + + + + Building11 + + + 100% + + + (1/1) + + + + + 87.5% + + + (7/8) + + + + + 100% + + + (2/2) + + + + + 94.4% + + + (17/18) + + + Building0 @@ -136,34 +199,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (30/30) - - - - Building1 - - - 100% - - - (1/1) - - - - - 100% - - - (6/6) - - - - - - 100% - - - (12/12) - @@ -199,41 +234,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (14/14) - - - - Building11 - - - 100% - - - (1/1) - - - - - 100% - - - (8/8) - - - - - 100% - - - (2/2) - - - - - 100% - - - (18/18) - @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_LINE_DESC.html index 79aa9ea..e1e1b11 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_LINE_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -206,41 +206,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (10/10) - - - - Building11 - - - 100% - - - (1/1) - - - - - 100% - - - (8/8) - - - - - 100% - - - (2/2) - - - - - 100% - - - (18/18) - @@ -276,34 +241,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (14/14) - - - - Building1 - - - 100% - - - (1/1) - - - - - 100% - - - (6/6) - - - - - - 100% - - - (12/12) - @@ -339,6 +276,69 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (30/30) + + + + Building11 + + + 100% + + + (1/1) + + + + + 87.5% + + + (7/8) + + + + + 100% + + + (2/2) + + + + + 94.4% + + + (17/18) + + + + + Building1 + + + 100% + + + (1/1) + + + + + 83.3% + + + (5/6) + + + + + + 91.7% + + + (11/12) + @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_METHOD.html index 1f22342..e3ed1fd 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_METHOD.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -103,6 +103,69 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects Line, % + + Building1 + + + 100% + + + (1/1) + + + + + 83.3% + + + (5/6) + + + + + + 91.7% + + + (11/12) + + + + + Building11 + + + 100% + + + (1/1) + + + + + 87.5% + + + (7/8) + + + + + 100% + + + (2/2) + + + + + 94.4% + + + (17/18) + + + Building0 @@ -136,34 +199,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (30/30) - - - - Building1 - - - 100% - - - (1/1) - - - - - 100% - - - (6/6) - - - - - - 100% - - - (12/12) - @@ -199,41 +234,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (14/14) - - - - Building11 - - - 100% - - - (1/1) - - - - - 100% - - - (8/8) - - - - - 100% - - - (2/2) - - - - - 100% - - - (18/18) - @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_METHOD_DESC.html index 468ad96..08abfa6 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_METHOD_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -206,41 +206,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (10/10) - - - - Building11 - - - 100% - - - (1/1) - - - - - 100% - - - (8/8) - - - - - 100% - - - (2/2) - - - - - 100% - - - (18/18) - @@ -276,34 +241,6 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (14/14) - - - - Building1 - - - 100% - - - (1/1) - - - - - 100% - - - (6/6) - - - - - - 100% - - - (12/12) - @@ -339,6 +276,69 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects (30/30) + + + + Building11 + + + 100% + + + (1/1) + + + + + 87.5% + + + (7/8) + + + + + 100% + + + (2/2) + + + + + 94.4% + + + (17/18) + + + + + Building1 + + + 100% + + + (1/1) + + + + + 83.3% + + + (5/6) + + + + + + 91.7% + + + (11/12) + @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-6/index_SORT_BY_NAME_DESC.html index a0f80ff..a3f8c0f 100644 --- a/deliverables/Coverage/htmlReport/ns-6/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-6/index_SORT_BY_NAME_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.7% - (38/38) + (36/38) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 98.4% - (129/129) + (127/129) @@ -220,10 +220,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 87.5% - (8/8) + (7/8) @@ -236,10 +236,10 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 94.4% - (18/18) + (17/18) @@ -290,19 +290,19 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -364,7 +364,7 @@ it.polimi.ingsw.gc14.Model.Cards.Building.Effects diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-1.html b/deliverables/Coverage/htmReport/ns-6/sources/source-1.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-1.html index dc79fd5..dd696ba 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-1.html @@ -216,7 +216,6 @@ Current scope: all classes   * @param player the player who owns the building.   * @throws IllegalArgumentException if the specified player does not own this card.   */ -  @Override   public void applyEffect(Player player) throws IllegalArgumentException {   if(!player.getBuildingCards().contains(this))   throw new IllegalArgumentException(); @@ -258,7 +257,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-2.html b/deliverables/Coverage/htmReport/ns-6/sources/source-2.html similarity index 88% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-2.html index 3198d2f..ba8ab4f 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-2.html @@ -52,18 +52,18 @@ Current scope: all classes - 100% + 83.3% - (6/6) + (5/6) - 100% + 91.7% - (12/12) + (11/12) @@ -90,7 +90,7 @@ Current scope: all classes   /**   * Character type involved in the building effect.   */ -  private CharacterType icon ; +  private final CharacterType icon ;     /**   * Returns the character type associated with this building effect. @@ -143,21 +143,14 @@ Current scope: all classes   return new Building1(getIdIMG(),getEra(),getPrice(),getPrestigeValue(),getIcon());   }   -  /** -  * Returns a string representation of this building, including the character -  * type associated with its effect. -  * -  * @return a string representation of this building. -  */   @Override -  public String toString() { -  return super.toString() + " (Icon:" + this.icon.toString().substring(0, 3) + ")"; +  public String toStringBoard() { +  return super.toStringBoard() + " (Icon:" + this.icon.toString().substring(0, 3) + ")";   }   -  // TODO   @Override   public String toStringPlayer() { -  return super.toStringPlayer() + " (Icon:" + this.icon.toString().substring(0, 3) + ")"; +  return super.toStringPlayer() + " (Icon:" + this.icon.toString().substring(0, 3) + ")";   }  }
@@ -183,7 +176,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-3.html b/deliverables/Coverage/htmReport/ns-6/sources/source-3.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-3.html index 5301985..d093a3f 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-3.html @@ -153,7 +153,6 @@ Current scope: all classes   * @param player the player to whom the effect is applied.   * @throws IllegalArgumentException if the player does not own this building card.   */ -  @Override   public void applyEffect(Player player) throws IllegalArgumentException {   if(!player.getBuildingCards().contains(this))   throw new IllegalArgumentException(); @@ -191,7 +190,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-4.html b/deliverables/Coverage/htmReport/ns-6/sources/source-4.html similarity index 90% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-4.html index 004ed29..26c4b2e 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-4.html @@ -56,10 +56,10 @@ Current scope: all classes - 100% + 87.5% - (8/8) + (7/8) @@ -72,10 +72,10 @@ Current scope: all classes - 100% + 94.4% - (18/18) + (17/18) @@ -106,7 +106,7 @@ Current scope: all classes   /**   * The character type involved in this building effect.   */ -  private CharacterType characterType; +  private final CharacterType characterType;     /**   * Returns the CharacterType associated with this building card effect. @@ -118,7 +118,7 @@ Current scope: all classes   /**   * The prestige multiplier applied per matching character card at end of game.   */ -  private int prestigeMul; +  private final int prestigeMul;     /**   * Returns the prestige multiplier associated with this building card effect. @@ -182,28 +182,20 @@ Current scope: all classes   * @param player the player to whom the effect is applied.   * @throws IllegalArgumentException if the player does not own this building card.   */ -  @Override   public void applyEffect(Player player) throws IllegalArgumentException {   if(!player.getBuildingCards().contains(this))   throw new IllegalArgumentException();   player.addPrestige(player.getNType(getIcon()) * this.getPrestigeMul());   }   -  /** -  * Returns a string representation of this {@code Building11}, including the -  * character type associated with its effect and its prestige multiplier. -  * -  * @return a string representation of this {@code Building11}. -  */   @Override -  public String toString() { -  return super.toString() + "+" + this.characterType.toString().substring(0, 3) + "×" + this.prestigeMul; +  public String toStringBoard() { +  return super.toStringBoard() + "+" + this.characterType.toString().substring(0, 3) + "×" + this.prestigeMul;   }   -  // TODO   @Override   public String toStringPlayer() { -  return super.toStringPlayer() + " (\uD83C\uDFC5:" + this.characterType.toString().substring(0, 3) + "×" + this.prestigeMul + ")"; +  return super.toStringPlayer() + " (\uD83C\uDFC5:" + this.characterType.toString().substring(0, 3) + "×" + this.prestigeMul + ")";   }  } @@ -229,7 +221,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-5.html b/deliverables/Coverage/htmReport/ns-6/sources/source-5.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-5.html index b8df533..43ef4df 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-5.html @@ -146,7 +146,6 @@ Current scope: all classes   * @param player the player to whom the effect is applied.   * @throws IllegalArgumentException if the player does not own this building card.   */ -  @Override   public void applyEffect(Player player) throws IllegalArgumentException {   if(!player.getBuildingCards().contains(this))   throw new IllegalArgumentException(); @@ -177,7 +176,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-6.html b/deliverables/Coverage/htmReport/ns-6/sources/source-6.html similarity index 99% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-6.html index 139b32a..c2a56b6 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-6.html @@ -219,7 +219,6 @@ Current scope: all classes   * @param player The player who owns the building.   * @throws IllegalArgumentException Thrown if the specified player does not own this card.   */ -  @Override   public void applyEffect(Player player) throws IllegalArgumentException {   if(!player.getBuildingCards().contains(this))   throw new IllegalArgumentException(); @@ -268,7 +267,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-6/sources/source-7.html b/deliverables/Coverage/htmReport/ns-6/sources/source-7.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-6/sources/source-7.html rename to deliverables/Coverage/htmReport/ns-6/sources/source-7.html index d2d775c..027be39 100644 --- a/deliverables/Coverage/htmlReport/ns-6/sources/source-7.html +++ b/deliverables/Coverage/htmReport/ns-6/sources/source-7.html @@ -144,7 +144,6 @@ Current scope: all classes   * @param player The player who owns the building.   * @throws IllegalArgumentException Thrown if the specified player does not own this building.   */ -  @Override   public void applyEffect(Player player) throws IllegalArgumentException {   if(!player.getBuildingCards().contains(this))   throw new IllegalArgumentException(); @@ -177,7 +176,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-7/index.html b/deliverables/Coverage/htmReport/ns-7/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index.html rename to deliverables/Coverage/htmReport/ns-7/index.html index e3bb539..450f9f2 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index.html +++ b/deliverables/Coverage/htmReport/ns-7/index.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -102,7 +102,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -110,7 +110,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -156,7 +156,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -164,7 +164,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_BLOCK.html index 5169b9b..691f27a 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_BLOCK.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -102,7 +102,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -110,7 +110,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -156,7 +156,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -164,7 +164,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_BLOCK_DESC.html index 4a168d0..f2fca0e 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_BLOCK_DESC.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -129,7 +129,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -183,7 +183,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -191,7 +191,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_CLASS.html index aab603b..6b7f266 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_CLASS.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -102,7 +102,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -110,7 +110,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -156,7 +156,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -164,7 +164,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_CLASS_DESC.html index 75d3d34..c057f87 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_CLASS_DESC.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -129,7 +129,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -183,7 +183,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -191,7 +191,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_LINE.html index c4b4344..90844ca 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_LINE.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -102,7 +102,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -110,7 +110,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -156,7 +156,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -164,7 +164,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_LINE_DESC.html index de9ad3d..f11a767 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_LINE_DESC.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -129,7 +129,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -183,7 +183,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -191,7 +191,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_METHOD.html index 6393541..ed00dd7 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_METHOD.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -102,7 +102,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -110,7 +110,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -156,7 +156,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -164,7 +164,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_METHOD_DESC.html index 31a4e82..b1baae0 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_METHOD_DESC.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -129,7 +129,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -183,7 +183,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -191,7 +191,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-7/index_SORT_BY_NAME_DESC.html index b798557..2925ea5 100644 --- a/deliverables/Coverage/htmlReport/ns-7/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-7/index_SORT_BY_NAME_DESC.html @@ -52,7 +52,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (15/15) + (12/12) @@ -60,7 +60,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (29/29) + (26/26) @@ -129,7 +129,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (5/5) + (3/3) @@ -137,7 +137,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (7/7) + (5/5) @@ -183,7 +183,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (6/6) + (5/5) @@ -191,7 +191,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards 100% - (10/10) + (9/9) @@ -218,7 +218,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards diff --git a/deliverables/Coverage/htmlReport/ns-7/sources/source-1.html b/deliverables/Coverage/htmReport/ns-7/sources/source-1.html similarity index 85% rename from deliverables/Coverage/htmlReport/ns-7/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-7/sources/source-1.html index 1f5cb98..783b8c1 100644 --- a/deliverables/Coverage/htmlReport/ns-7/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-7/sources/source-1.html @@ -55,7 +55,7 @@ Current scope: all classes 100% - (6/6) + (5/5) @@ -63,7 +63,7 @@ Current scope: all classes 100% - (10/10) + (9/9) @@ -91,7 +91,7 @@ Current scope: all classes   /**   * The specific type of this character card.   */ -  private CharacterType type; +  private final CharacterType type;     /**   * Returns the type of this character card. @@ -154,22 +154,6 @@ Current scope: all classes   }     /** -  * Returns a string representation of this {@code Character}. This specific variation is used in the {@code Game}'s -  * toString to provide a more detailed version. -  * <p>Includes: -  * <li>{@link it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType Type} -  * </p> -  * @return {@code String} - a string representation of this {@code Character}. -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */ -  @Override -  public String toStringBoard() -  { -  return super.toStringBoard()+" "+getType().toString()+" "; -  } -  -  /**   * Creates and returns a copy of this character card.   *   * @return a clone of this character card. @@ -207,7 +191,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-7/sources/source-2.html b/deliverables/Coverage/htmReport/ns-7/sources/source-2.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-7/sources/source-2.html index ab54bf4..c467ec8 100644 --- a/deliverables/Coverage/htmlReport/ns-7/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-7/sources/source-2.html @@ -135,7 +135,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-7/sources/source-3.html b/deliverables/Coverage/htmReport/ns-7/sources/source-3.html similarity index 75% rename from deliverables/Coverage/htmlReport/ns-7/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-7/sources/source-3.html index c75151e..2a6d738 100644 --- a/deliverables/Coverage/htmlReport/ns-7/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-7/sources/source-3.html @@ -55,7 +55,7 @@ Current scope: all classes 100% - (5/5) + (3/3) @@ -63,7 +63,7 @@ Current scope: all classes 100% - (7/7) + (5/5) @@ -92,7 +92,7 @@ Current scope: all classes   /**   * The specific type of this event card.   */ -  private EventType type; +  private final EventType type;     /**   * Returns the type of this event card. @@ -133,33 +133,6 @@ Current scope: all classes   public abstract TribeCard clone();     /** -  * Returns the string representation of this event card. -  * The returned string includes the string representation of the superclass -  * and the string representation of the event type. -  * -  * @return the string representation of this event card. -  */ -  @Override -  public String toString() { -  return super.toString() + " " + type.toString(); -  } -  -  /** -  * Prints a string representation of this {@code EventCard}. This specific variation is used in the {@code Game}'s -  * toString to print a more detailed version. -  * <p>Includes: -  * <li>{@link #type Type} -  * </p> -  * @return {@code String} - a string representation of this {@code EventCard}. -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */ -  @Override -  public String toStringBoard() { -  return super.toStringBoard() + " " + type.toString(); -  } -  -  /**   * Activates the effect of this event card on the specified list of players.   *   * @param playerList the list of players affected by the event. @@ -190,7 +163,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-7/sources/source-4.html b/deliverables/Coverage/htmReport/ns-7/sources/source-4.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-7/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-7/sources/source-4.html index 7a3c463..d149ab2 100644 --- a/deliverables/Coverage/htmlReport/ns-7/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-7/sources/source-4.html @@ -125,7 +125,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-8/index.html b/deliverables/Coverage/htmReport/ns-8/index.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index.html rename to deliverables/Coverage/htmReport/ns-8/index.html index a5185e2..0be3f7a 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index.html +++ b/deliverables/Coverage/htmReport/ns-8/index.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.1% - (35/35) + (34/35) @@ -178,19 +178,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_BLOCK.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_BLOCK.html index f2a7d34..e896c1b 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_BLOCK.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -143,19 +143,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -199,10 +199,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -215,10 +215,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.1% - (35/35) + (34/35) @@ -253,7 +253,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_BLOCK_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_BLOCK_DESC.html index af20e92..2042ddf 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_BLOCK_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -185,10 +185,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -201,10 +201,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.1% - (35/35) + (34/35) @@ -248,19 +248,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -276,19 +276,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_CLASS.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_CLASS.html index 136cc9a..ca8cf4a 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_CLASS.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -115,19 +115,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -143,10 +143,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -159,10 +159,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.1% - (35/35) + (34/35) @@ -178,19 +178,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_CLASS_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_CLASS_DESC.html index 23d35e6..ae4e647 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_CLASS_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -213,19 +213,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -241,10 +241,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -257,10 +257,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.1% - (35/35) + (34/35) @@ -276,19 +276,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_LINE.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_LINE.html index 0dbc117..374c9d8 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_LINE.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -115,54 +115,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) - - - - - Builder - - - 100% - - - (1/1) - - - - - 100% - - - (10/10) - - - - - 100% - - - (16/16) - - - - - 100% - - - (35/35) + (8/9) @@ -178,19 +143,54 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) + + + 88.9% + + + (8/9) + + + + + Builder 100% - (7/7) + (1/1) + + + + + 90% + + + (9/10) + + + + + 100% + + + (16/16) + + + + + 97.1% + + + (34/35) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_LINE_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_LINE_DESC.html index e726993..5e08127 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_LINE_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -197,35 +197,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) - - - - - Gatherer - - - 100% - - - (1/1) - - - - - 100% - - - (6/6) - - - - - - 100% - - - (7/7) + (16/16) @@ -241,10 +213,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -255,12 +227,40 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters (16/16) + + + 97.1% + + + (34/35) + + + + + Gatherer 100% - (35/35) + (1/1) + + + + + 87.5% + + + (7/8) + + + + + + 88.9% + + + (8/9) @@ -276,19 +276,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_METHOD.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_METHOD.html index 2ecbc5e..5599620 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_METHOD.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -115,54 +115,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) - - - - - Builder - - - 100% - - - (1/1) - - - - - 100% - - - (10/10) - - - - - 100% - - - (16/16) - - - - - 100% - - - (35/35) + (8/9) @@ -178,19 +143,54 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) + + + 88.9% + + + (8/9) + + + + + Builder 100% - (7/7) + (1/1) + + + + + 90% + + + (9/10) + + + + + 100% + + + (16/16) + + + + + 97.1% + + + (34/35) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_METHOD_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_METHOD_DESC.html index 66ebcdc..56f5e48 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_METHOD_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -197,35 +197,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) - - - - - Gatherer - - - 100% - - - (1/1) - - - - - 100% - - - (6/6) - - - - - - 100% - - - (7/7) + (16/16) @@ -241,10 +213,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -255,12 +227,40 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters (16/16) + + + 97.1% + + + (34/35) + + + + + Gatherer 100% - (35/35) + (1/1) + + + + + 87.5% + + + (7/8) + + + + + + 88.9% + + + (8/9) @@ -276,19 +276,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_NAME_DESC.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-8/index_SORT_BY_NAME_DESC.html index 51b908a..67726a3 100644 --- a/deliverables/Coverage/htmlReport/ns-8/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-8/index_SORT_BY_NAME_DESC.html @@ -53,10 +53,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 94.3% - (49/49) + (50/53) @@ -69,10 +69,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.2% - (108/108) + (103/106) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters 100% - (22/22) + (16/16) @@ -213,19 +213,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -241,10 +241,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 90% - (10/10) + (9/10) @@ -257,10 +257,10 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 97.1% - (35/35) + (34/35) @@ -276,19 +276,19 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -315,7 +315,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters diff --git a/deliverables/Coverage/htmlReport/ns-8/sources/source-1.html b/deliverables/Coverage/htmReport/ns-8/sources/source-1.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-8/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-8/sources/source-1.html index 00dc0cc..1a01de5 100644 --- a/deliverables/Coverage/htmlReport/ns-8/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-8/sources/source-1.html @@ -52,18 +52,18 @@ Current scope: all classes - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -152,6 +152,16 @@ Current scope: all classes   player.getBuildingCards().stream().filter(x->x.getEffectId()==0).forEach(x->x.applyEffect(player));   }   +  @Override +  public String toStringPlayer() { +  return "\uD83C\uDFA8"; +  } +  +  @Override +  public String toStringBoard() { +  return "ARTIST"; +  } +   }
@@ -176,7 +186,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-8/sources/source-2.html b/deliverables/Coverage/htmReport/ns-8/sources/source-2.html similarity index 87% rename from deliverables/Coverage/htmlReport/ns-8/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-8/sources/source-2.html index 150af73..c428395 100644 --- a/deliverables/Coverage/htmlReport/ns-8/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-8/sources/source-2.html @@ -56,10 +56,10 @@ Current scope: all classes - 100% + 90% - (10/10) + (9/10) @@ -72,10 +72,10 @@ Current scope: all classes - 100% + 97.1% - (35/35) + (34/35) @@ -104,12 +104,12 @@ Current scope: all classes   /**   * The reduction value provided by this Builder card.   */ -  private int reductionValue; +  private final int reductionValue;     /**   * The prestige value provided by this Builder card.   */ -  private int prestigeValue; +  private final int prestigeValue;     /**   * Returns the reduction value of this Builder card. @@ -221,29 +221,14 @@ Current scope: all classes   this.prestigeValue = prestigeValue;   }   -  /** -  * Returns the string representation of this Builder card. -  * -  * @return the string representation of this Builder card. -  */   @Override -  public String toString() { -  return super.toStringBoard() + "\uD83D\uDD28:" + String.valueOf(reductionValue) + " \uD83C\uDFC5:" + String.valueOf(prestigeValue); +  public String toStringPlayer() { +  return "\uD83D\uDD28:" + reductionValue + " \uD83C\uDFC5:" + prestigeValue;   }   -  /** -  * Returns a detailed string representation of this {@code Builder} card, -  * including its reduction value and prestige value. -  * -  * @return a detailed string representation of this {@code Builder} card. -  * @see it.polimi.ingsw.gc14.Model.Cards.TribeCard TribeCard -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */   @Override -  public String toStringBoard() -  { -  return super.toStringBoard()+"\uD83D\uDD28:" + String.valueOf(reductionValue) + " \uD83C\uDFC5:" + String.valueOf(prestigeValue); +  public String toStringBoard() { +  return "BUILDER \uD83D\uDD28:" + reductionValue + " \uD83C\uDFC5:" + prestigeValue;   }     @@ -292,7 +277,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-8/sources/source-3.html b/deliverables/Coverage/htmReport/ns-8/sources/source-3.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-8/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-8/sources/source-3.html index 898de06..f82c29d 100644 --- a/deliverables/Coverage/htmlReport/ns-8/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-8/sources/source-3.html @@ -52,18 +52,18 @@ Current scope: all classes - 100% + 87.5% - (6/6) + (7/8) - 100% + 88.9% - (7/7) + (8/9) @@ -151,6 +151,16 @@ Current scope: all classes   player.getGatherers().add(this);   player.getBuildingCards().stream().filter(x->x.getEffectId()==0).forEach(x->x.applyEffect(player));   } +  +  @Override +  public String toStringPlayer() { +  return "\uD83C\uDF56"; +  } +  +  @Override +  public String toStringBoard() { +  return "GATHERER"; +  }  } @@ -175,7 +185,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-8/sources/source-4.html b/deliverables/Coverage/htmReport/ns-8/sources/source-4.html similarity index 81% rename from deliverables/Coverage/htmlReport/ns-8/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-8/sources/source-4.html index 044caf5..86fdac8 100644 --- a/deliverables/Coverage/htmlReport/ns-8/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-8/sources/source-4.html @@ -75,7 +75,7 @@ Current scope: all classes 100% - (22/22) + (16/16) @@ -106,7 +106,7 @@ Current scope: all classes   * {@code Hunter} with an {@code Hunter Icon} is added to the tribe, 1 {@code Food token} is awarded for each Hunter in the tribe   * (with or without an icon).   */ -  private boolean icon; +  private final boolean icon;     /**   * Returns whether this Hunter card has the icon. @@ -167,41 +167,14 @@ Current scope: all classes   this.icon = icon;   }   -  /** -  * Returns the string representation of this Hunter card. -  * -  * @return the string representation of this Hunter card. -  */   @Override -  public String toString() { -  String toPrint = super.toString(); -  if(this.icon){ -  toPrint += "\uD83C\uDF56"; -  } -  return toPrint; +  public String toStringPlayer() { +  return this.icon ? "\uD83C\uDF56" : "";   }   -  /** -  * Returns a detailed string representation of this {@code TribeCard}. -  * This specific variation is used in the {@code Game}'s -  * toString to provide a more detailed version. -  * -  * <p>Potentially includes: -  * <li>{@link #icon Icon} -  * </p> -  * -  * @return {@code String} - a string representation of this {@code TribeCard}. -  * @see it.polimi.ingsw.gc14.Model.Cards.TribeCard TribeCard -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */   @Override   public String toStringBoard() { -  String toPrint = super.toStringBoard(); -  if(this.icon){ -  toPrint += "\uD83C\uDF56"; -  } -  return toPrint; +  return "HUNTER" + (this.icon ? " \uD83C\uDF56" : "");   }     /** @@ -256,7 +229,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-8/sources/source-5.html b/deliverables/Coverage/htmReport/ns-8/sources/source-5.html similarity index 86% rename from deliverables/Coverage/htmlReport/ns-8/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-8/sources/source-5.html index 4abb9db..a033668 100644 --- a/deliverables/Coverage/htmlReport/ns-8/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-8/sources/source-5.html @@ -102,7 +102,7 @@ Current scope: all classes   /**   * The {@code Icons}'s ID. There are a total of 10 different Icons.   */ -  private int icon; +  private final int icon;     /**   * Returns the icon value of this Inventor card. @@ -175,33 +175,14 @@ Current scope: all classes   this.icon = icon;   }   -  /** -  * Returns the string representation of this Inventor card. -  * -  * @return the string representation of this Inventor card. -  */   @Override -  public String toString() { -  return super.toString() + "ID:" + String.valueOf(icon); +  public String toStringPlayer() { +  return "ID:" + icon;   }   -  /** -  * Returns a detailed string representation of this {@code TribeCard}. -  * This specific variation is used in the {@code Game}'s toString -  * to provide a more detailed version. -  * -  * <p>Includes: -  * <li>{@link #icon Icons's ID} -  * </p> -  * -  * @return {@code String} - a string representation of this {@code TribeCard}. -  * @see it.polimi.ingsw.gc14.Model.Cards.TribeCard TribeCard -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */   @Override   public String toStringBoard() { -  return super.toStringBoard() + "ID:" + String.valueOf(icon); +  return "INVENTOR ID:" + icon;   }     /** @@ -252,7 +233,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-8/sources/source-6.html b/deliverables/Coverage/htmReport/ns-8/sources/source-6.html similarity index 85% rename from deliverables/Coverage/htmlReport/ns-8/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-8/sources/source-6.html index 76a816d..9f531b5 100644 --- a/deliverables/Coverage/htmlReport/ns-8/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-8/sources/source-6.html @@ -95,7 +95,7 @@ Current scope: all classes   * having the minority, on the other hand, results in   * losing Prestige Points.   */ -  private int icon; +  private final int icon;     /**   * Returns the icon value of this Shaman card. @@ -156,30 +156,14 @@ Current scope: all classes   this.icon = icon;   }   -  /** -  * Returns the string representation of this Shaman card. -  * -  * @return the string representation of this Shaman card. -  */   @Override -  public String toString() { -  return super.toString() + "🌟:" + icon; +  public String toStringPlayer() { +  return "\uD83C\uDF1F:" + icon;   }   -  /** -  * Returns a string representation of this {@code TribeCard}. This specific variation is used in the {@code Game}'s -  * toString to provide a more detailed version. -  * <p>Includes: -  * <li>{@link #icon Number of stars} -  * </p> -  * @return {@code String} - a string representation of this {@code TribeCard}. -  * @see it.polimi.ingsw.gc14.Model.Cards.TribeCard TribeCard -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */   @Override   public String toStringBoard() { -  return super.toStringBoard() + "🌟:" + icon; +  return "SHAMAN \uD83C\uDF1F:" + icon;   }     /** @@ -228,7 +212,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-9/index.html b/deliverables/Coverage/htmReport/ns-9/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index.html rename to deliverables/Coverage/htmReport/ns-9/index.html index 91e998b..99d0373 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index.html +++ b/deliverables/Coverage/htmReport/ns-9/index.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -148,41 +148,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) - - - 100% - - - (6/6) - - - - - 100% - - - (6/6) - - - - - 100% - - - (18/18) - - - - - ShamanicRitual - - - 100% - - - (1/1) - - 100% @@ -191,6 +156,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) + + + 100% + + + (6/6) + + + + + 100% + + + (19/19) + + + + + ShamanicRitual + + + 100% + + + (1/1) + + + + + 100% + + + (8/8) + + 100% @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (30/30) + (29/29) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_BLOCK.html index d833c20..ff82edb 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_BLOCK.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -148,41 +148,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) - - - 100% - - - (6/6) - - - - - 100% - - - (6/6) - - - - - 100% - - - (18/18) - - - - - ShamanicRitual - - - 100% - - - (1/1) - - 100% @@ -191,6 +156,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) + + + 100% + + + (6/6) + + + + + 100% + + + (19/19) + + + + + ShamanicRitual + + + 100% + + + (1/1) + + + + + 100% + + + (8/8) + + 100% @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (30/30) + (29/29) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_BLOCK_DESC.html index 4de6dd4..1c42b50 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_BLOCK_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -148,6 +148,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) + + + 100% + + + (8/8) + + + + + 100% + + + (24/24) + + + + + 100% + + + (29/29) + + + + + Hunt + + + 100% + + + (1/1) + + 100% @@ -156,33 +191,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) - - - 100% - - - (24/24) - - - - - 100% - - - (30/30) - - - - - Hunt - - - 100% - - - (1/1) - - 100% @@ -196,15 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) - - - - - 100% - - - (18/18) + (19/19) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_CLASS.html index 3677cc4..e38d308 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_CLASS.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -148,41 +148,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) - - - 100% - - - (6/6) - - - - - 100% - - - (6/6) - - - - - 100% - - - (18/18) - - - - - ShamanicRitual - - - 100% - - - (1/1) - - 100% @@ -191,6 +156,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) + + + 100% + + + (6/6) + + + + + 100% + + + (19/19) + + + + + ShamanicRitual + + + 100% + + + (1/1) + + + + + 100% + + + (8/8) + + 100% @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (30/30) + (29/29) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_CLASS_DESC.html index 255e3c8..b242560 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_CLASS_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -148,6 +148,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) + + + 100% + + + (8/8) + + + + + 100% + + + (24/24) + + + + + 100% + + + (29/29) + + + + + Hunt + + + 100% + + + (1/1) + + 100% @@ -156,33 +191,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) - - - 100% - - - (24/24) - - - - - 100% - - - (30/30) - - - - - Hunt - - - 100% - - - (1/1) - - 100% @@ -196,15 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) - - - - - 100% - - - (18/18) + (19/19) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_LINE.html index 654a30e..bacb1f0 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_LINE.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -148,41 +148,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) - - - 100% - - - (6/6) - - - - - 100% - - - (6/6) - - - - - 100% - - - (18/18) - - - - - ShamanicRitual - - - 100% - - - (1/1) - - 100% @@ -191,6 +156,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) + + + 100% + + + (6/6) + + + + + 100% + + + (19/19) + + + + + ShamanicRitual + + + 100% + + + (1/1) + + + + + 100% + + + (8/8) + + 100% @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (30/30) + (29/29) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_LINE_DESC.html index 29f4faa..6e721cd 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_LINE_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -148,6 +148,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) + + + 100% + + + (8/8) + + + + + 100% + + + (24/24) + + + + + 100% + + + (29/29) + + + + + Hunt + + + 100% + + + (1/1) + + 100% @@ -156,33 +191,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) - - - 100% - - - (24/24) - - - - - 100% - - - (30/30) - - - - - Hunt - - - 100% - - - (1/1) - - 100% @@ -196,15 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) - - - - - 100% - - - (18/18) + (19/19) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_METHOD.html index 016eb82..d1568a6 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_METHOD.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -148,41 +148,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) - - - 100% - - - (6/6) - - - - - 100% - - - (6/6) - - - - - 100% - - - (18/18) - - - - - ShamanicRitual - - - 100% - - - (1/1) - - 100% @@ -191,6 +156,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) + + + 100% + + + (6/6) + + + + + 100% + + + (19/19) + + + + + ShamanicRitual + + + 100% + + + (1/1) + + + + + 100% + + + (8/8) + + 100% @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (30/30) + (29/29) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_METHOD_DESC.html index 9f9b6a7..fed1ec2 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_METHOD_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -148,6 +148,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) + + + 100% + + + (8/8) + + + + + 100% + + + (24/24) + + + + + 100% + + + (29/29) + + + + + Hunt + + + 100% + + + (1/1) + + 100% @@ -156,33 +191,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) - - - 100% - - - (24/24) - - - - - 100% - - - (30/30) - - - - - Hunt - - - 100% - - - (1/1) - - 100% @@ -196,15 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) - - - - - 100% - - - (18/18) + (19/19) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-9/index_SORT_BY_NAME_DESC.html index f6a32b9..e1322e7 100644 --- a/deliverables/Coverage/htmlReport/ns-9/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-9/index_SORT_BY_NAME_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (24/24) + (28/28) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (91/91) + (93/93) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) + (7/7) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (22/22) + (23/23) @@ -148,6 +148,41 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (1/1) + + + 100% + + + (8/8) + + + + + 100% + + + (24/24) + + + + + 100% + + + (29/29) + + + + + Hunt + + + 100% + + + (1/1) + + 100% @@ -156,33 +191,6 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events (7/7) - - - 100% - - - (24/24) - - - - - 100% - - - (30/30) - - - - - Hunt - - - 100% - - - (1/1) - - 100% @@ -196,15 +204,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (6/6) - - - - - 100% - - - (18/18) + (19/19) @@ -223,7 +223,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (5/5) + (6/6) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events 100% - (21/21) + (22/22) @@ -266,7 +266,7 @@ it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events diff --git a/deliverables/Coverage/htmlReport/ns-9/sources/source-1.html b/deliverables/Coverage/htmReport/ns-9/sources/source-1.html similarity index 93% rename from deliverables/Coverage/htmlReport/ns-9/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-9/sources/source-1.html index d60c76f..6e3beb4 100644 --- a/deliverables/Coverage/htmlReport/ns-9/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-9/sources/source-1.html @@ -59,7 +59,7 @@ Current scope: all classes 100% - (5/5) + (6/6) @@ -75,7 +75,7 @@ Current scope: all classes 100% - (21/21) + (22/22) @@ -90,10 +90,7 @@ Current scope: all classes  package it.polimi.ingsw.gc14.Model.Cards.TribeCards.Events;    import it.polimi.ingsw.gc14.Model.Cards.BuildingCard; - import it.polimi.ingsw.gc14.Model.Cards.TribeCard; - import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Character;  import it.polimi.ingsw.gc14.Model.Cards.TribeCards.CharacterType; - import it.polimi.ingsw.gc14.Model.Cards.TribeCards.Characters.Artist;  import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventType;  import it.polimi.ingsw.gc14.Model.Cards.TribeCards.EventCard;  import it.polimi.ingsw.gc14.Model.Player; @@ -110,17 +107,17 @@ Current scope: all classes   * The minimum number of Artist cards required to avoid the prestige penalty.   * Also, the bottom number on the card.   */ -  private int nLower; +  private final int nLower;     /**   * The amount of Prestige removed if the player has fewer Artist cards than {@code nLower}.   */ -  private int nPrestigeRem; // NPrestigeLower +  private final int nPrestigeRem;     /**   * The Prestige multiplier applied if the player has at least {@code nLower} Artist cards.   */ -  private int nPrestigeMul; // NPrestigeUpper +  private final int nPrestigeMul;     /**   * Creates a CavePaintings event card with the specified era and effect parameters. @@ -214,8 +211,13 @@ Current scope: all classes   * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board   */   @Override +  public String toStringPlayer() { +  return "CAVE_PAINTINGS"; +  } +  +  @Override   public String toStringBoard() { -  return super.toStringBoard()+" 0-"+(nLower-1)+":"+nPrestigeRem+" "+nLower+"+:"+nPrestigeMul; +  return "\033[38;5;180mCAVE_PAINTINGS 0-" + (nLower-1) + ":" + nPrestigeRem + " " + nLower + "+:" + nPrestigeMul + "\033[0m";   }  } @@ -241,7 +243,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-9/sources/source-2.html b/deliverables/Coverage/htmReport/ns-9/sources/source-2.html similarity index 87% rename from deliverables/Coverage/htmlReport/ns-9/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-9/sources/source-2.html index 3289093..8b78b46 100644 --- a/deliverables/Coverage/htmlReport/ns-9/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-9/sources/source-2.html @@ -59,7 +59,7 @@ Current scope: all classes 100% - (6/6) + (7/7) @@ -75,7 +75,7 @@ Current scope: all classes 100% - (18/18) + (19/19) @@ -106,8 +106,11 @@ Current scope: all classes   private static final int BASE_FOOD_PER_HUNTER = 1;     /** Prestige Points multiplier used during the event. */ -  private int prestigeMultiplier; +  private final int prestigeMultiplier;   +  /**Gets Prestige Points multiplier used during the event. +  * @return int {@code PrestigeMultiplier} +  */   int getPrestigeMultiplier() { return prestigeMultiplier; }     /** @@ -173,20 +176,14 @@ Current scope: all classes   return new Hunt(getIdIMG(),getEra(), prestigeMultiplier);   }   -  /** -  * Prints a string representation of this {@code TribeCard}. This specific variation is used in the {@code Game}'s -  * toString to print a more detailed version. -  * <p>includes: -  * <li>{@link #prestigeMultiplier} -  * </p> -  * @return {@code String} - a string representation of this {@code TribeCard}. -  * @see it.polimi.ingsw.gc14.Model.Cards.TribeCard TribeCard -  * @see it.polimi.ingsw.gc14.Model.Game Game -  * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board -  */ +  @Override +  public String toStringPlayer() { +  return "HUNT"; +  } +    @Override   public String toStringBoard() { -  return super.toStringBoard()+" 1\uD83C\uDF56+"+prestigeMultiplier+"\uD83C\uDFC5"+"×\uD83C\uDFF9"; +  return "\033[38;5;180mHUNT 1\uD83C\uDF56+" + prestigeMultiplier + "\uD83C\uDFC5×\uD83C\uDFF9" + "\033[0m";   }    } @@ -213,7 +210,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-9/sources/source-3.html b/deliverables/Coverage/htmReport/ns-9/sources/source-3.html similarity index 88% rename from deliverables/Coverage/htmlReport/ns-9/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-9/sources/source-3.html index c44431f..d095238 100644 --- a/deliverables/Coverage/htmlReport/ns-9/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-9/sources/source-3.html @@ -59,7 +59,7 @@ Current scope: all classes 100% - (7/7) + (8/8) @@ -75,7 +75,7 @@ Current scope: all classes 100% - (30/30) + (29/29) @@ -96,7 +96,6 @@ Current scope: all classes  import java.util.HashMap;  import java.util.List;  import java.util.Map; - import java.util.stream.Collectors;    /**   * When activated, rewards the player with the most shaman icons and penalizes the one with the fewest. @@ -108,15 +107,23 @@ Current scope: all classes   private static final int BUILDING5_BONUS_ICONS = 3;     /** Prestige points awarded to the player with the most shaman icons. */ -  private int prestigeToAdd; +  private final int prestigeToAdd;   -  // TODO +  /** +  * Returns the prestige points awarded to the player with the most shaman icons. +  * +  * @return prestige points to award. +  */   int getPrestigeToAdd() { return prestigeToAdd; }     /** Prestige points removed from the player with the fewest shaman icons. */ -  private int prestigeToRemove; +  private final int prestigeToRemove;   -  // TODO +  /** +  * Returns the prestige points removed from the player with the fewest shaman icons. +  * +  * @return prestige points to remove. +  */   int getPrestigeToRemove() { return prestigeToRemove; }     /** @@ -164,8 +171,8 @@ Current scope: all classes   @Override   public void activateEvent (ArrayList <Player> playerList){   Map<Player, Integer> playerMap = new HashMap<>(); -  int tmpIcons = 0; -  int tmpCount = 0; +  int tmpIcons; +  int tmpCount;     for (Player player : playerList) {   tmpIcons = player.getShamans().stream().mapToInt(sh -> sh.getIcon()).sum(); @@ -179,8 +186,8 @@ Current scope: all classes   int maxIcon = playerMap.values().stream().mapToInt(Integer::intValue).max().orElse(0);   int minIcon = playerMap.values().stream().mapToInt(Integer::intValue).min().orElse(0);   -  List<Player> maxIconsPlayer = playerMap.entrySet().stream().filter(e -> e.getValue() == maxIcon).map(Map.Entry::getKey).collect(Collectors.toList()); -  List<Player> minIconsPlayer = playerMap.entrySet().stream().filter(e -> e.getValue() == minIcon).map(Map.Entry::getKey).collect(Collectors.toList()); +  List<Player> maxIconsPlayer = playerMap.entrySet().stream().filter(e -> e.getValue() == maxIcon).map(Map.Entry::getKey).toList(); +  List<Player> minIconsPlayer = playerMap.entrySet().stream().filter(e -> e.getValue() == minIcon).map(Map.Entry::getKey).toList();       for (Player player : maxIconsPlayer) { @@ -192,7 +199,7 @@ Current scope: all classes   }     for (Player player : minIconsPlayer) { -  if (!(player.getBuildingCards().stream().anyMatch(b -> b.getEffectId() == 2))) { +  if (player.getBuildingCards().stream().noneMatch(b -> b.getEffectId() == 2)) {   player.removePrestige(prestigeToRemove);   }   } @@ -222,8 +229,13 @@ Current scope: all classes   * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board   */   @Override +  public String toStringPlayer() { +  return "SHAMANIC_RITUAL"; +  } +  +  @Override   public String toStringBoard() { -  return super.toStringBoard()+" \uD83C\uDF1F>:"+prestigeToAdd+" \uD83C\uDF1F<:"+prestigeToRemove; +  return "\033[38;5;180mSHAMANIC_RITUAL \uD83C\uDF1F>:" + prestigeToAdd + " \uD83C\uDF1F<:" + prestigeToRemove + "\033[0m";   }    } @@ -250,7 +262,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-9/sources/source-4.html b/deliverables/Coverage/htmReport/ns-9/sources/source-4.html similarity index 94% rename from deliverables/Coverage/htmlReport/ns-9/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-9/sources/source-4.html index 792017b..0baec0f 100644 --- a/deliverables/Coverage/htmlReport/ns-9/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-9/sources/source-4.html @@ -59,7 +59,7 @@ Current scope: all classes 100% - (6/6) + (7/7) @@ -75,7 +75,7 @@ Current scope: all classes 100% - (22/22) + (23/23) @@ -110,7 +110,7 @@ Current scope: all classes   /**   * The prestige penalty multiplier applied for each unpaid Food unit.   */ -  private int prestigeDebt; +  private final int prestigeDebt;     /**   * Returns the prestige penalty multiplier associated with this Sustenance event. @@ -181,7 +181,7 @@ Current scope: all classes   }   else{   foodDebt -= player.getFoodValue(); -  player.removeFood(player.getFoodValue()); // player.getFoodValue() == 0 +  player.removeFood(player.getFoodValue());   player.removePrestige(foodDebt * prestigeDebt);   }   } @@ -209,8 +209,13 @@ Current scope: all classes   * @see it.polimi.ingsw.gc14.Model.GamePackage.Board Board   */   @Override +  public String toStringPlayer() { +  return "SUSTENANCE"; +  } +  +  @Override   public String toStringBoard() { -  return super.toStringBoard()+" -1\uD83C\uDF56/-"+prestigeDebt+"\uD83C\uDFC5"; +  return "\033[38;5;180mSUSTENANCE -1\uD83C\uDF56/-" + prestigeDebt + "\uD83C\uDFC5\033[0m";   }  } @@ -236,7 +241,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-a/index.html b/deliverables/Coverage/htmReport/ns-a/index.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index.html rename to deliverables/Coverage/htmReport/ns-a/index.html index 4116065..a274cc8 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index.html +++ b/deliverables/Coverage/htmReport/ns-a/index.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_BLOCK.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_BLOCK.html index 00cd3e2..b56fe3d 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_BLOCK.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_BLOCK_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_BLOCK_DESC.html index 1f7eda8..14302d0 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_BLOCK_DESC.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_CLASS.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_CLASS.html index 0371489..cbd5c43 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_CLASS.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_CLASS_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_CLASS_DESC.html index d1e5fa0..be0208d 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_CLASS_DESC.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_LINE.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_LINE.html index e81adbf..644dabd 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_LINE.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_LINE_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_LINE_DESC.html index e73b600..96202f0 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_LINE_DESC.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_METHOD.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_METHOD.html index 984d980..82d37a0 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_METHOD.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_METHOD_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_METHOD_DESC.html index 9ce5e92..e3a3269 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_METHOD_DESC.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_NAME_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-a/index_SORT_BY_NAME_DESC.html index 83c5e20..0d150f6 100644 --- a/deliverables/Coverage/htmlReport/ns-a/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-a/index_SORT_BY_NAME_DESC.html @@ -224,7 +224,7 @@ it.polimi.ingsw.gc14.Model.GamePackage diff --git a/deliverables/Coverage/htmlReport/ns-a/sources/source-1.html b/deliverables/Coverage/htmReport/ns-a/sources/source-1.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-a/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-a/sources/source-1.html index 93a5daf..13b3e09 100644 --- a/deliverables/Coverage/htmlReport/ns-a/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-a/sources/source-1.html @@ -109,29 +109,29 @@ Current scope: all classes   * slotList contains the ordered list of slots (tiles). The slots changes based on the number of players.   * Each slot (tile) has special action as drawing from the upper/lower row or taking food.   */ -  private List<Slot> slotList; +  private final List<Slot> slotList;     /** tribeDeck is the deck from where you draw tribe cards as characters and events. */ -  private Queue<TribeCard> tribeDeck; +  private final Queue<TribeCard> tribeDeck;     /**   * The upper row of tribe cards. It contains a total of   * {@code nTotem + 4} tribe cards, which may include both character and event cards.   */ -  private List<TribeCard> upperListTribe; +  private final List<TribeCard> upperListTribe;     /**   * The lower row of the tribe card. During the first round, there will be (num. of players + 1) character cards.   * During the following rounds, lower row will be emptied and populated with upper row's cards.   * When an Event card gets in the lower row, the event effect will be activated at the end of the round.   */ -  private List<TribeCard> lowerListTribe; +  private final List<TribeCard> lowerListTribe;     /** Contains all the building cards of the upper list. When a new era starts, all its building cards are placed here. */ -  private List<BuildingCard> upperListBuilding; +  private final List<BuildingCard> upperListBuilding;     /** Contains all the building cards of the lower list. When a new era starts, the old era's buildings are moved from the upper to the lower list. */ -  private List<BuildingCard> lowerListBuilding; +  private final List<BuildingCard> lowerListBuilding;     /**   * Returns the upper row of tribe cards. @@ -161,10 +161,10 @@ Current scope: all classes   */   public List<BuildingCard> getLowerListBuilding() { return lowerListBuilding; }   -  // TODO +  /** All building card lists grouped by era; index 0 = era 1, index 1 = era 2, etc. */   private final ArrayList<List<BuildingCard>> buildingCardsAllEras;   /** Number of players */ -  private int nTotem; +  private final int nTotem;     /** Current era of the game */   private int era; @@ -310,7 +310,7 @@ Current scope: all classes   * Take the selected card from the upper tribe list of the board.   *   * @param tribeCard is the card to remove. -  * @return true if the card is succesfully removed. +  * @return true if the card is successfully removed.   */   public boolean removeUpperTribeCard(TribeCard tribeCard) {   return upperListTribe.remove(tribeCard); @@ -418,7 +418,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-a/sources/source-2.html b/deliverables/Coverage/htmReport/ns-a/sources/source-2.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-a/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-a/sources/source-2.html index 4629811..6a743f5 100644 --- a/deliverables/Coverage/htmlReport/ns-a/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-a/sources/source-2.html @@ -105,7 +105,6 @@ Current scope: all classes   * remaining upper and lower cards, and the current game stage.   */  public class CurrentState implements Serializable { -  // region Getters     /**   * The current player associated with the game state. @@ -205,9 +204,7 @@ Current scope: all classes   return gameStage;   }   -  // endregion getters   -  // region Setters     /**   * Increments the current era by 1. @@ -245,9 +242,7 @@ Current scope: all classes   public void gameStageUpdate(GameStages stage){   this.gameStage = stage;   } -  // endregion setters   -  // region Constructors     /**   * Creates a new CurrentState object with default initial values. @@ -263,14 +258,12 @@ Current scope: all classes   this.nLower = 0;   this.gameStage = GameStages.WAITING;   } -  // endregion constructors   -  // region Functions     /**   * Updates the current player, slot, and available draws.   * If {@code slot} is {@code null}, both {@link #nUpper} and {@link #nLower} are reset to 0. -  * Otherwise they are set from the slot's values. +  * Otherwise, they are set from the slot's values.   *   * @param player the new current player.   * @param slot the new current slot, or {@code null} when no slot is active. @@ -289,7 +282,12 @@ Current scope: all classes     }   -  // TODO +  /** +  * Returns a formatted ASCII table representation of the current game state. +  * Columns: Player, Round, Era, GameStage. +  * +  * @return a {@code String} containing the ASCII table. +  */   @Override   public String toString(){   var table= new AsciiTable(BorderStyle.ROUNDED,4); @@ -308,7 +306,6 @@ Current scope: all classes   table.addRow(values);   return table.build();   } -  // endregion functions  } @@ -333,7 +330,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-a/sources/source-3.html b/deliverables/Coverage/htmReport/ns-a/sources/source-3.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-a/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-a/sources/source-3.html index e4a11c7..567b64f 100644 --- a/deliverables/Coverage/htmlReport/ns-a/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-a/sources/source-3.html @@ -167,7 +167,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-b/index.html b/deliverables/Coverage/htmReport/ns-b/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index.html rename to deliverables/Coverage/htmReport/ns-b/index.html index 3798fdd..099d71a 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index.html +++ b/deliverables/Coverage/htmReport/ns-b/index.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_BLOCK.html index c180055..bf49b16 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_BLOCK.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -151,18 +151,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_BLOCK_DESC.html index af23b61..36909c6 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_BLOCK_DESC.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -228,18 +228,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_CLASS.html index 1940cad..ee22192 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_CLASS.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_CLASS_DESC.html index 3b5dac0..5c170ec 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_CLASS_DESC.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -256,18 +256,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_LINE.html index c9ea600..b2ae8ba 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_LINE.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_LINE_DESC.html index db918b1..bb75716 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_LINE_DESC.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -256,18 +256,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_METHOD.html index 1cfb39c..5f7dcd7 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_METHOD.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -123,18 +123,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_METHOD_DESC.html index 12222cb..a4c18b7 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_METHOD_DESC.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -256,18 +256,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-b/index_SORT_BY_NAME_DESC.html index 21b4ae6..7e53f9a 100644 --- a/deliverables/Coverage/htmlReport/ns-b/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-b/index_SORT_BY_NAME_DESC.html @@ -61,10 +61,10 @@ it.polimi.ingsw.gc14.Model.Orders - 88.2% + 89.2% - (67/76) + (66/74) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Model.Orders 96.5% - (111/115) + (110/114) @@ -256,18 +256,18 @@ it.polimi.ingsw.gc14.Model.Orders - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -294,7 +294,7 @@ it.polimi.ingsw.gc14.Model.Orders diff --git a/deliverables/Coverage/htmlReport/ns-b/sources/source-1.html b/deliverables/Coverage/htmReport/ns-b/sources/source-1.html similarity index 94% rename from deliverables/Coverage/htmlReport/ns-b/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-b/sources/source-1.html index 1a69f8b..88de3fa 100644 --- a/deliverables/Coverage/htmlReport/ns-b/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-b/sources/source-1.html @@ -64,18 +64,18 @@ Current scope: all classes - 83.3% + 87.5% - (15/18) + (14/16) - 95.8% + 95.7% - (23/24) + (22/23) @@ -95,7 +95,6 @@ Current scope: all classes  import it.polimi.ingsw.gc14.View.TUI.BorderStyle;    import java.util.*; - import java.util.stream.IntStream;    /**   * Represents the order logic card used in a two-player game. @@ -140,10 +139,8 @@ Current scope: all classes   buildingEffect(player);   return;   } -  if(index==1){ -  if(!player.removeFood(1)){ -  player.removePrestige(2); -  } +  if (!player.removeFood(1)) { +  player.removePrestige(2);   }   }   @@ -200,7 +197,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-b/sources/source-2.html b/deliverables/Coverage/htmReport/ns-b/sources/source-2.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-b/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-b/sources/source-2.html index 6854c16..5b8910c 100644 --- a/deliverables/Coverage/htmlReport/ns-b/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-b/sources/source-2.html @@ -208,7 +208,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-b/sources/source-3.html b/deliverables/Coverage/htmReport/ns-b/sources/source-3.html similarity index 99% rename from deliverables/Coverage/htmlReport/ns-b/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-b/sources/source-3.html index 5f1ad3a..1d5f733 100644 --- a/deliverables/Coverage/htmlReport/ns-b/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-b/sources/source-3.html @@ -212,7 +212,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-b/sources/source-4.html b/deliverables/Coverage/htmReport/ns-b/sources/source-4.html similarity index 99% rename from deliverables/Coverage/htmlReport/ns-b/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-b/sources/source-4.html index 1393ca8..11e4f4a 100644 --- a/deliverables/Coverage/htmlReport/ns-b/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-b/sources/source-4.html @@ -214,7 +214,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-b/sources/source-5.html b/deliverables/Coverage/htmReport/ns-b/sources/source-5.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-b/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-b/sources/source-5.html index e281875..8174447 100644 --- a/deliverables/Coverage/htmlReport/ns-b/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-b/sources/source-5.html @@ -170,7 +170,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-c/index.html b/deliverables/Coverage/htmReport/ns-c/index.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index.html rename to deliverables/Coverage/htmReport/ns-c/index.html index 7ac373e..c749ad5 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index.html +++ b/deliverables/Coverage/htmReport/ns-c/index.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_BLOCK.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_BLOCK.html index 97c0b6d..3b2e9c1 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_BLOCK.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_BLOCK_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_BLOCK_DESC.html index e2981ec..59e5960 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_BLOCK_DESC.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_CLASS.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_CLASS.html index f1f8779..ea64449 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_CLASS.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_CLASS_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_CLASS_DESC.html index a00f77f..5dfd367 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_CLASS_DESC.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_LINE.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_LINE.html index 9f25902..b1446bf 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_LINE.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_LINE_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_LINE_DESC.html index 410b4fa..3d72292 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_LINE_DESC.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_METHOD.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_METHOD.html index 8a6bc20..97c2ac8 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_METHOD.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_METHOD_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_METHOD_DESC.html index 7aedd9a..851ace1 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_METHOD_DESC.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_NAME_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-c/index_SORT_BY_NAME_DESC.html index fdfaac3..706156b 100644 --- a/deliverables/Coverage/htmlReport/ns-c/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-c/index_SORT_BY_NAME_DESC.html @@ -252,7 +252,7 @@ it.polimi.ingsw.gc14.Network diff --git a/deliverables/Coverage/htmlReport/ns-c/sources/source-1.html b/deliverables/Coverage/htmReport/ns-c/sources/source-1.html similarity index 91% rename from deliverables/Coverage/htmlReport/ns-c/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-c/sources/source-1.html index a10fec2..1581d0b 100644 --- a/deliverables/Coverage/htmlReport/ns-c/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-c/sources/source-1.html @@ -88,8 +88,9 @@ Current scope: all classes   * broadcaster without knowing which protocols are active underneath.   */  public class CompositeClientBroadcaster { -  +  /** RMI transport used to reach RMI-connected clients. */   private final RMIServer rmiServer; +  /** TCP transport used to reach TCP-connected clients. */   private final TCPServer tcpServer;     /** @@ -107,6 +108,8 @@ Current scope: all classes   * Forwards the event to both the RMI and the TCP server.   * Each server is responsible for filtering error events to the   * requesting player only. +  * +  * @param event the network event to broadcast.   */   public void notifyAll(NetworkEvent event) {   rmiServer.notifyAll(event); @@ -115,6 +118,8 @@ Current scope: all classes     /**   * Forwards the model snapshot to every client on both transports. +  * +  * @param model the mini model snapshot to broadcast.   */   public void notifyAll(MiniModel model) {   rmiServer.notifyAll(model); @@ -144,7 +149,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-c/sources/source-2.html b/deliverables/Coverage/htmReport/ns-c/sources/source-2.html similarity index 95% rename from deliverables/Coverage/htmlReport/ns-c/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-c/sources/source-2.html index 3ae58c3..18d6936 100644 --- a/deliverables/Coverage/htmlReport/ns-c/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-c/sources/source-2.html @@ -142,9 +142,9 @@ Current scope: all classes   * Event used to notify that the game has ended.   */   ENDED_GAME("Ended Game"); -  +  /** Human-readable label for this event type, returned by {@link #toString()}. */   private final String description; -  private EventType(String description) { +  EventType(String description) {   this.description = description;   }   @Override @@ -175,7 +175,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-c/sources/source-3.html b/deliverables/Coverage/htmReport/ns-c/sources/source-3.html similarity index 87% rename from deliverables/Coverage/htmlReport/ns-c/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-c/sources/source-3.html index 9e918ad..bd57a9a 100644 --- a/deliverables/Coverage/htmlReport/ns-c/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-c/sources/source-3.html @@ -100,7 +100,7 @@ Current scope: all classes   * Returns the local IPv4 address that can reach the given server IP.   *   * <p>If the server is localhost, returns {@code "127.0.0.1"}. -  * Otherwise iterates active non-loopback interfaces to find one on the same subnet; +  * Otherwise, iterates active non-loopback interfaces to find one on the same subnet;   * falls back to a UDP connect trick if no matching subnet is found.   *   * @param serverIp the server IP address or hostname. @@ -134,6 +134,14 @@ Current scope: all classes   return socket.getLocalAddress().getHostAddress();   }   } +  /** +  * Returns {@code true} if {@code a} and {@code b} share the same subnet given a CIDR {@code prefix} length. +  * +  * @param a first IPv4 address. +  * @param b second IPv4 address. +  * @param prefix CIDR prefix length (0–32). +  * @return {@code true} if both addresses belong to the same subnet. +  */   private static boolean sameSubnet(InetAddress a, InetAddress b, int prefix) {   if (prefix < 0 || prefix > 32) return false;   int maskBits = prefix == 0 ? 0 : (0xFFFFFFFF << (32 - prefix)); @@ -141,6 +149,12 @@ Current scope: all classes   int addrB = toInt(b.getAddress()) & maskBits;   return addrA == addrB;   } +  /** +  * Converts a 4-byte big-endian IPv4 address array to a signed 32-bit integer. +  * +  * @param bytes the 4-byte address array. +  * @return the corresponding signed integer. +  */   private static int toInt(byte[] bytes) {   return ((bytes[0] & 0xFF) << 24) |   ((bytes[1] & 0xFF) << 16) | @@ -171,7 +185,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-c/sources/source-4.html b/deliverables/Coverage/htmReport/ns-c/sources/source-4.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-c/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-c/sources/source-4.html index c9429ea..4f4305f 100644 --- a/deliverables/Coverage/htmlReport/ns-c/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-c/sources/source-4.html @@ -127,7 +127,7 @@ Current scope: all classes   /**   * Username of the player requesting the event.   */ -  protected String username; +  protected final String username;     /**   * Returns the username of the player requesting the event. @@ -141,7 +141,7 @@ Current scope: all classes   /**   * Type of the network event.   */ -  protected EventType eventType; +  protected final EventType eventType;     /**   * Map associating each occupied slot with the corresponding player. @@ -285,10 +285,8 @@ Current scope: all classes   * Applies this event to the specified client-side mini model.   *   * @param model the mini model on which the event must be applied. -  * @return {@code true} if the event is applied successfully, -  * {@code false} otherwise.   */ -  public abstract boolean apply(MiniModel model); +  public abstract void apply(MiniModel model);  } @@ -313,7 +311,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-c/sources/source-5.html b/deliverables/Coverage/htmReport/ns-c/sources/source-5.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-c/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-c/sources/source-5.html index c9e5cf9..ca272af 100644 --- a/deliverables/Coverage/htmlReport/ns-c/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-c/sources/source-5.html @@ -83,7 +83,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-c/sources/source-6.html b/deliverables/Coverage/htmReport/ns-c/sources/source-6.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-c/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-c/sources/source-6.html index 09809de..3f7c7a1 100644 --- a/deliverables/Coverage/htmlReport/ns-c/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-c/sources/source-6.html @@ -140,7 +140,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/index.html b/deliverables/Coverage/htmReport/ns-d/index.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index.html rename to deliverables/Coverage/htmReport/ns-d/index.html index 6bbfc28..1e87356 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index.html +++ b/deliverables/Coverage/htmReport/ns-d/index.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -365,7 +365,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -400,7 +400,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -435,7 +435,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -489,7 +489,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_BLOCK.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_BLOCK.html index adbafec..607a121 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_BLOCK.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -127,7 +127,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -155,7 +155,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -190,7 +190,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -225,7 +225,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -260,7 +260,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -295,7 +295,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -330,7 +330,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -365,7 +365,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -400,7 +400,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -435,7 +435,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -489,7 +489,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_BLOCK_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_BLOCK_DESC.html index 7da2516..cad0ef3 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_BLOCK_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -274,7 +274,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -309,7 +309,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -344,7 +344,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -379,7 +379,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -414,7 +414,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -449,7 +449,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -477,7 +477,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_CLASS.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_CLASS.html index bf108d4..91be195 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_CLASS.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -365,7 +365,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -400,7 +400,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -435,7 +435,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -489,7 +489,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_CLASS_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_CLASS_DESC.html index fdcd712..a41066f 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_CLASS_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -407,7 +407,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -442,7 +442,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_LINE.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_LINE.html index 03e168b..fd78de2 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_LINE.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -365,7 +365,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -400,7 +400,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -435,7 +435,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -489,7 +489,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_LINE_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_LINE_DESC.html index 165ca22..2272ddb 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_LINE_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -407,7 +407,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -442,7 +442,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_METHOD.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_METHOD.html index 2de3011..3780b05 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_METHOD.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -162,7 +162,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -197,7 +197,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -232,7 +232,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -365,7 +365,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -400,7 +400,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -435,7 +435,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -489,7 +489,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_METHOD_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_METHOD_DESC.html index a89b623..c70cea0 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_METHOD_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -407,7 +407,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -442,7 +442,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_NAME_DESC.html similarity index 97% rename from deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-d/index_SORT_BY_NAME_DESC.html index a4ad6a1..435cfde 100644 --- a/deliverables/Coverage/htmlReport/ns-d/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-d/index_SORT_BY_NAME_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/41) + (0/40) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/175) + (0/162) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/5) + (0/4) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/15) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/13) + (0/12) @@ -204,7 +204,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -239,7 +239,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/15) + (0/14) @@ -267,7 +267,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/12) + (0/11) @@ -302,7 +302,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -337,7 +337,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -372,7 +372,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -407,7 +407,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -442,7 +442,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/17) + (0/16) @@ -470,7 +470,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/19) + (0/18) @@ -505,7 +505,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents 0% - (0/14) + (0/13) @@ -532,7 +532,7 @@ it.polimi.ingsw.gc14.Network.NetworkEvents diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-1.html b/deliverables/Coverage/htmReport/ns-d/sources/source-1.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-1.html index 48dba63..c6d43e2 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-1.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/14) + (0/13) @@ -104,7 +104,7 @@ Current scope: all classes   */  public class AddPlayer extends NetworkEvent {   /** Number of players proposed by this player; used only when creating a new game. */ -  private int proposedNPlayer; +  private final int proposedNPlayer;     /**   * @return the number of proposed players to add to the match @@ -139,19 +139,17 @@ Current scope: all classes   * turn order, game state, and slot map.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;   miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard);   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }  } @@ -178,7 +176,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-2.html b/deliverables/Coverage/htmReport/ns-d/sources/source-2.html similarity index 89% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-2.html index 4f7ebbf..a4b37b8 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-2.html @@ -63,7 +63,7 @@ Current scope: all classes 0% - (0/19) + (0/18) @@ -102,11 +102,14 @@ Current scope: all classes   * always returns {@code false}.   */  public class ApplyNextRound extends NetworkEvent { -  -  private ArrayList<TribeCard> upperListTribeCards; -  private ArrayList<TribeCard> lowerListTribeCards; -  private ArrayList<BuildingCard> upperListBuildingCards; -  private ArrayList<BuildingCard> lowerListBuildingCards; +  /** Tribe cards shown in the upper row of the board for the new round. */ +  private final ArrayList<TribeCard> upperListTribeCards; +  /** Tribe cards shown in the lower row of the board for the new round. */ +  private final ArrayList<TribeCard> lowerListTribeCards; +  /** Building cards shown in the upper row of the board for the new round. */ +  private final ArrayList<BuildingCard> upperListBuildingCards; +  /** Building cards shown in the lower row of the board for the new round. */ +  private final ArrayList<BuildingCard> lowerListBuildingCards;       /** @@ -153,10 +156,9 @@ Current scope: all classes   * slot map, turn order, and game state for the new round.   *   * @param miniModel the client-side model to update. -  * @return {@code true} always (this event cannot produce an error).   */   @Override -  public boolean apply(MiniModel miniModel) { +  public void apply(MiniModel miniModel) {   synchronized (miniModel) {   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setOrderLogicCard(orderLogicCard); @@ -167,7 +169,6 @@ Current scope: all classes   miniModel.setUpperListBuildingCards(upperListBuildingCards);   miniModel.setLowerListBuildingCards(lowerListBuildingCards);   miniModel.setLastEvent(this); -  return true;   }   }  } @@ -194,7 +195,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-3.html b/deliverables/Coverage/htmReport/ns-d/sources/source-3.html similarity index 93% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-3.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-3.html index 754a538..68f567f 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-3.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-3.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/17) + (0/16) @@ -108,7 +108,7 @@ Current scope: all classes   * during totem selection may free a totem for other players.   */  public class DisconnectedPlayer extends NetworkEvent { -  //TODO +  /** Updated list of totems available after the disconnection frees any previously chosen totem. */   private List<Totems> availableTotems;     @@ -144,13 +144,12 @@ Current scope: all classes   * updating player data, turn order, game state, and disconnected player list.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;   miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard);   miniModel.setCurrentState(currentState); @@ -158,7 +157,6 @@ Current scope: all classes   miniModel.setDisconnectedPlayers(disconnectedPlayers);   miniModel.setAvailableTotems(availableTotems);   miniModel.setLastEvent(this); -  return true;   }   }   @@ -187,7 +185,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-4.html b/deliverables/Coverage/htmReport/ns-d/sources/source-4.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-4.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-4.html index 8c4e2a5..6e8cff1 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-4.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-4.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/14) + (0/13) @@ -101,7 +101,7 @@ Current scope: all classes   */  public class DrawLowerBuildingCard extends NetworkEvent{   /** Index of the card to draw */ -  private int pos; +  private final int pos;     /**   * Class constructor. @@ -129,13 +129,12 @@ Current scope: all classes   * from the lower building list and updating players, turn order, game state, and slot map.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;     miniModel.removeLowerBuildingCard(pos);   miniModel.setPlayers(playerList); @@ -143,7 +142,6 @@ Current scope: all classes   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }   @@ -171,7 +169,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-5.html b/deliverables/Coverage/htmReport/ns-d/sources/source-5.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-5.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-5.html index 2bd8f86..f96b31e 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-5.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-5.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/14) + (0/13) @@ -102,7 +102,7 @@ Current scope: all classes  public class DrawLowerTribeCard extends NetworkEvent{     /** Index of the card to draw */ -  private int pos; +  private final int pos;     /**   * Class constructor. @@ -128,13 +128,12 @@ Current scope: all classes   * from the lower tribe list and updating players, turn order, game state, and slot map.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;     miniModel.removeLowerTribeCard(pos);   miniModel.setPlayers(playerList); @@ -142,7 +141,6 @@ Current scope: all classes   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }   @@ -170,7 +168,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-6.html b/deliverables/Coverage/htmReport/ns-d/sources/source-6.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-6.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-6.html index 366f3f2..5285ddc 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-6.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-6.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/14) + (0/13) @@ -102,7 +102,7 @@ Current scope: all classes  public class DrawUpperBuildingCard extends NetworkEvent{     /** Index of the card to draw */ -  private int pos; +  private final int pos;     /**   * Class constructor. @@ -129,13 +129,12 @@ Current scope: all classes   * from the upper building list and updating players, turn order, game state, and slot map.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;     miniModel.removeUpperBuildingCard(pos);   miniModel.setPlayers(playerList); @@ -143,7 +142,6 @@ Current scope: all classes   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }  } @@ -170,7 +168,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-7.html b/deliverables/Coverage/htmReport/ns-d/sources/source-7.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-7.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-7.html index 7897173..07593f0 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-7.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-7.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/14) + (0/13) @@ -102,7 +102,7 @@ Current scope: all classes  public class DrawUpperTribeCard extends NetworkEvent{     /** Index of the card to draw */ -  private int pos; +  private final int pos;     /**   * Class constructor. @@ -128,20 +128,18 @@ Current scope: all classes   * from the upper tribe list and updating players, turn order, game state, and slot map.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;   miniModel.removeUpperTribeCard(pos);   miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard);   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }   @@ -170,7 +168,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-8.html b/deliverables/Coverage/htmReport/ns-d/sources/source-8.html similarity index 94% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-8.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-8.html index 7fba32c..4bf5a54 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-8.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-8.html @@ -63,7 +63,7 @@ Current scope: all classes 0% - (0/12) + (0/11) @@ -129,10 +129,9 @@ Current scope: all classes   * game state and setting the standings list for the leaderboard.   *   * @param miniModel the client-side model to update. -  * @return {@code true} always (this event cannot produce an error).   */   @Override -  public boolean apply(MiniModel miniModel) { +  public void apply(MiniModel miniModel) {   synchronized (miniModel) {   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setOrderLogicCard(orderLogicCard); @@ -140,7 +139,6 @@ Current scope: all classes   miniModel.setPlayers(playerList);   miniModel.setStandingPlayers(playerList);   miniModel.setLastEvent(this); -  return true;   }   }  } @@ -167,7 +165,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-9.html b/deliverables/Coverage/htmReport/ns-d/sources/source-9.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-9.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-9.html index 0682351..5608160 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-9.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-9.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/15) + (0/14) @@ -137,21 +137,18 @@ Current scope: all classes   * turn order, current game state, and slot assignments are updated.   *   * @param miniModel the mini model on which to apply the event. -  * @return {@code true} if the update is applied successfully, -  * {@code false} if the event represents an error.   */   @Override -  public boolean apply(MiniModel miniModel) { +  public void apply(MiniModel miniModel) {   synchronized (miniModel) {   if (isError) -  return false; +  return;   miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard);   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setDisconnectedPlayers(disconnectedPlayers);   miniModel.setLastEvent(this); -  return true;   }   }  } @@ -178,7 +175,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-a.html b/deliverables/Coverage/htmReport/ns-d/sources/source-a.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-a.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-a.html index 656ced9..6c23c99 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-a.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-a.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/12) + (0/11) @@ -123,19 +123,17 @@ Current scope: all classes   * turn order, game state, and slot map after a skip turn action.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;   miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard);   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }   @@ -163,7 +161,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-b.html b/deliverables/Coverage/htmReport/ns-d/sources/source-b.html similarity index 92% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-b.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-b.html index f88454b..139e3f1 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-b.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-b.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/13) + (0/12) @@ -102,7 +102,7 @@ Current scope: all classes  public class SlotChoice extends NetworkEvent {     /** Index of the selected slot. */ -  private int pos; +  private final int pos;     /**   * Class constructor. @@ -129,19 +129,17 @@ Current scope: all classes   * turn order, game state, and slot map after a slot selection.   *   * @param miniModel the client-side model to update. -  * @return {@code false} if the event is marked as an error; {@code true} otherwise.   */   @Override -  public boolean apply(MiniModel miniModel){ +  public void apply(MiniModel miniModel){   synchronized (miniModel) {   if (isError) -  return false; +  return;   miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard);   miniModel.setCurrentState(currentState);   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setLastEvent(this); -  return true;   }   }   @@ -169,7 +167,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-d/sources/source-c.html b/deliverables/Coverage/htmReport/ns-d/sources/source-c.html similarity index 87% rename from deliverables/Coverage/htmlReport/ns-d/sources/source-c.html rename to deliverables/Coverage/htmReport/ns-d/sources/source-c.html index 7d6c931..f82e1de 100644 --- a/deliverables/Coverage/htmlReport/ns-d/sources/source-c.html +++ b/deliverables/Coverage/htmReport/ns-d/sources/source-c.html @@ -59,7 +59,7 @@ Current scope: all classes 0% - (0/5) + (0/4) @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/17) + (0/15) @@ -109,7 +109,7 @@ Current scope: all classes   /**   * Name of the totem selected by the player.   */ -  private String totem; +  private final String totem;     /**   * List of totems still available after the choice has been processed. @@ -117,15 +117,6 @@ Current scope: all classes   private List<Totems> availableTotems;     /** -  * Sets the list of currently available totems. -  * -  * @param availableTotems the totems still available for selection. -  */ -  public void setAvailableTotems(List<Totems> availableTotems) { -  this.availableTotems = availableTotems; -  } -  -  /**   * Constructs a totem choice event for the specified player.   *   * @param username the username of the player making the choice. @@ -162,14 +153,12 @@ Current scope: all classes   * totems are updated.   *   * @param miniModel the mini model on which to apply the event. -  * @return {@code true} if the update is applied successfully, -  * {@code false} if the event represents an error.   */   @Override -  public boolean apply(MiniModel miniModel) { +  public void apply(MiniModel miniModel) {   synchronized (miniModel) {   if (isError) -  return false; +  return;     miniModel.setPlayers(playerList);   miniModel.setOrderLogicCard(orderLogicCard); @@ -177,7 +166,6 @@ Current scope: all classes   miniModel.setSlotPlayerMap(slotPlayerMap);   miniModel.setAvailableTotems(availableTotems);   miniModel.setLastEvent(this); -  return true;   }   }  } @@ -204,7 +192,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-e/index.html b/deliverables/Coverage/htmReport/ns-e/index.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index.html rename to deliverables/Coverage/htmReport/ns-e/index.html index f347661..807c68f 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index.html +++ b/deliverables/Coverage/htmReport/ns-e/index.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_BLOCK.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_BLOCK.html index dd2b73b..5706a18 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_BLOCK.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_BLOCK_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_BLOCK_DESC.html index a2f1024..663fd26 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_BLOCK_DESC.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_CLASS.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_CLASS.html index 0fc03bf..308dc7c 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_CLASS.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_CLASS_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_CLASS_DESC.html index 90e73e6..84a78e8 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_CLASS_DESC.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_LINE.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_LINE.html index 4e320f9..0a2c662 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_LINE.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_LINE_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_LINE_DESC.html index e9167c7..5c00c08 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_LINE_DESC.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_METHOD.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_METHOD.html index b3a3742..643ce55 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_METHOD.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_METHOD_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_METHOD_DESC.html index 213f4d9..ebfdec4 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_METHOD_DESC.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_NAME_DESC.html similarity index 98% rename from deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-e/index_SORT_BY_NAME_DESC.html index 554edf5..b154f5a 100644 --- a/deliverables/Coverage/htmlReport/ns-e/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-e/index_SORT_BY_NAME_DESC.html @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Client diff --git a/deliverables/Coverage/htmlReport/ns-e/sources/source-1.html b/deliverables/Coverage/htmReport/ns-e/sources/source-1.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-e/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-e/sources/source-1.html index adf67ab..ed671ec 100644 --- a/deliverables/Coverage/htmlReport/ns-e/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-e/sources/source-1.html @@ -93,7 +93,6 @@ Current scope: all classes  import it.polimi.ingsw.gc14.Model.MiniModel;  import it.polimi.ingsw.gc14.Network.NetworkEvent;  import it.polimi.ingsw.gc14.Network.RMI.Common.IClientCallback; - import javafx.application.Platform;    import java.rmi.RemoteException;  import java.rmi.server.UnicastRemoteObject; @@ -122,7 +121,7 @@ Current scope: all classes   /**   * Called by the server when the game is initialized.   * Sets the client game model in the {@link ClientController}. -  * @param model the initialized {@link Game} model +  * @param model the initialized {@link it.polimi.ingsw.gc14.Model.Game Game} model   * @throws RemoteException if any RMI error occurs   */   @Override @@ -173,7 +172,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-e/sources/source-2.html b/deliverables/Coverage/htmReport/ns-e/sources/source-2.html similarity index 93% rename from deliverables/Coverage/htmlReport/ns-e/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-e/sources/source-2.html index c41b845..536a820 100644 --- a/deliverables/Coverage/htmlReport/ns-e/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-e/sources/source-2.html @@ -97,25 +97,32 @@ Current scope: all classes  import it.polimi.ingsw.gc14.ErrorType;  import it.polimi.ingsw.gc14.Network.IClient;  import it.polimi.ingsw.gc14.Network.NetworkConfig; - import it.polimi.ingsw.gc14.Network.NetworkEvents.*;  import it.polimi.ingsw.gc14.Network.RMI.Common.IGameServer;    /**   * Client RMI. Uses the methods exposed by the server RMI.   */  public class RMIClient implements IClient { -  +  /** Hostname or IP address of the RMI server. */   private final String host; +  /** Port of the RMI registry. */   private final int port; +  /** Remote stub obtained from the RMI registry after a successful connection. */   private IGameServer stub; -  private ClientController controller; -  private String myIp; +  /** Client-side controller that receives and applies incoming game events. */ +  private final ClientController controller; +  /** Local IP address advertised to the RMI runtime so callbacks are routed correctly. */ +  private final String myIp; +  /** Username of the currently connected player; set during {@link #connect}. */   private String username; -  +  /** {@code true} while the heartbeat loop is active; set to {@code false} on disconnect. */   private volatile boolean running = false;     /** Scheduler that fires ping() every {@value NetworkConfig#KEEPALIVE_INTERVAL_MS} ms. */   private ScheduledExecutorService pingSender; +  /** +  * Future executor used for timer Running +  */   private ExecutorService executor;     /** @@ -160,7 +167,7 @@ Current scope: all classes   return status;   } catch (Exception e) {   e.printStackTrace(); -  return ErrorType.GENERIC_ERROR; +  return ErrorType.SERVER_UNREACHABLE;   }   }   @@ -174,7 +181,7 @@ Current scope: all classes   * <p>Mirrors the {@code ScheduledExecutorService} in   * {@code TCPClient.heartbeatLoop()} that writes {@code PING} every 3 s.   * On {@link RemoteException} the server is considered gone and -  * {@link #disconnect()} is called — mirrors the behaviour on +  * {@link #disconnect()} is called — mirrors the behavior on   * {@code SocketTimeoutException} / {@code IOException} in the TCP version.   */   private void startHeartbeat() { @@ -374,7 +381,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-f/index.html b/deliverables/Coverage/htmReport/ns-f/index.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index.html rename to deliverables/Coverage/htmReport/ns-f/index.html index e20131f..0c711f2 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index.html +++ b/deliverables/Coverage/htmReport/ns-f/index.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_BLOCK.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_BLOCK.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_BLOCK.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_BLOCK.html index 339280b..c266da7 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_BLOCK.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_BLOCK.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_BLOCK_DESC.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_BLOCK_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_BLOCK_DESC.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_BLOCK_DESC.html index 8a3907e..4cf68ec 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_BLOCK_DESC.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_BLOCK_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_CLASS.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_CLASS.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_CLASS.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_CLASS.html index 0ff2db5..50737e7 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_CLASS.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_CLASS.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_CLASS_DESC.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_CLASS_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_CLASS_DESC.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_CLASS_DESC.html index 16491e2..940c895 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_CLASS_DESC.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_CLASS_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_LINE.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_LINE.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_LINE.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_LINE.html index 200a359..7ca34b3 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_LINE.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_LINE.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_LINE_DESC.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_LINE_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_LINE_DESC.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_LINE_DESC.html index 792f6ef..2ee1194 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_LINE_DESC.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_LINE_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_METHOD.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_METHOD.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_METHOD.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_METHOD.html index a716116..f9abfa1 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_METHOD.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_METHOD.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -153,7 +153,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -161,7 +161,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_METHOD_DESC.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_METHOD_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_METHOD_DESC.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_METHOD_DESC.html index 097f812..5105e2b 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_METHOD_DESC.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_METHOD_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_NAME_DESC.html b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_NAME_DESC.html similarity index 96% rename from deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_NAME_DESC.html rename to deliverables/Coverage/htmReport/ns-f/index_SORT_BY_NAME_DESC.html index 0210f67..ab3a479 100644 --- a/deliverables/Coverage/htmlReport/ns-f/index_SORT_BY_NAME_DESC.html +++ b/deliverables/Coverage/htmReport/ns-f/index_SORT_BY_NAME_DESC.html @@ -56,7 +56,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/23) + (0/22) @@ -64,7 +64,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/36) + (0/38) @@ -72,7 +72,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/113) + (0/105) @@ -118,7 +118,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/17) + (0/16) @@ -126,7 +126,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/32) + (0/34) @@ -134,7 +134,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/88) + (0/81) @@ -169,7 +169,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server 0% - (0/25) + (0/24) @@ -196,7 +196,7 @@ it.polimi.ingsw.gc14.Network.RMI.Server diff --git a/deliverables/Coverage/htmlReport/ns-f/sources/source-1.html b/deliverables/Coverage/htmReport/ns-f/sources/source-1.html similarity index 89% rename from deliverables/Coverage/htmlReport/ns-f/sources/source-1.html rename to deliverables/Coverage/htmReport/ns-f/sources/source-1.html index e1e13ba..f1cac16 100644 --- a/deliverables/Coverage/htmlReport/ns-f/sources/source-1.html +++ b/deliverables/Coverage/htmReport/ns-f/sources/source-1.html @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/25) + (0/24) @@ -115,16 +115,20 @@ Current scope: all classes   * </ul>   */  public class RMIHeartbeat { -  -  private String username = ""; +  /** Username of the client monitored by this watchdog. */ +  private String username; +  /** Shared map used to mark the player as offline on timeout. */   private final LimitedMap<String, Boolean> playerList; +  /** Registry of active RMI callbacks; the entry for this player is removed on disconnect. */   private final Map<String, IClientCallback> clients; +  /** Shared event queue; a {@link DisconnectedPlayer} event is posted here on timeout. */   private final BlockingQueue<NetworkEvent> actionQueue;     /** Last time a ping was received from this client. */   private volatile long lastPingTime = System.currentTimeMillis(); +  /** {@code true} while the watchdog is running; set to {@code false} on first disconnect. */   private volatile boolean running = true; -  +  /** Single-thread executor that periodically checks whether the silence threshold has been exceeded. */   private final ScheduledExecutorService watchdog =   Executors.newSingleThreadScheduledExecutor(r -> {   Thread t = new Thread(r, "rmi-watchdog-" + username); @@ -187,7 +191,7 @@ Current scope: all classes     clients.remove(username);   actionQueue.add(new DisconnectedPlayer(username)); -  System.out.println("RMI disconnected: " + username); +  System.err.println("(RMI) Disconnected player: " + username);   }  } @@ -213,7 +217,7 @@ Current scope: all classes diff --git a/deliverables/Coverage/htmlReport/ns-f/sources/source-2.html b/deliverables/Coverage/htmReport/ns-f/sources/source-2.html similarity index 91% rename from deliverables/Coverage/htmlReport/ns-f/sources/source-2.html rename to deliverables/Coverage/htmReport/ns-f/sources/source-2.html index fec50ec..4b5c3f3 100644 --- a/deliverables/Coverage/htmlReport/ns-f/sources/source-2.html +++ b/deliverables/Coverage/htmReport/ns-f/sources/source-2.html @@ -59,7 +59,7 @@ Current scope: all classes 0% - (0/17) + (0/16) @@ -67,7 +67,7 @@ Current scope: all classes 0% - (0/32) + (0/34) @@ -75,7 +75,7 @@ Current scope: all classes 0% - (0/88) + (0/81) @@ -110,7 +110,6 @@ Current scope: all classes  import java.util.concurrent.BlockingQueue;  import java.util.concurrent.ConcurrentHashMap;   - import java.rmi.*;  import java.util.stream.Collectors;     @@ -123,9 +122,11 @@ Current scope: all classes   * shared network event queue.   */  public class RMIServer extends UnicastRemoteObject implements IGameServer { +  /** Hostname or IP address exposed by the RMI runtime ({@code java.rmi.server.hostname}). */   private final String host; +  /** Server-side game controller; all model access is synchronized on this object. */   private final GameController controller; -  private Registry registry; +  /** Port on which the RMI registry is bound. */   private final int nPort;     /** username → callback */ @@ -137,8 +138,9 @@ Current scope: all classes   * HeartbeatHandler in the TCP stack.   */   private final Map<String, RMIHeartbeat> watchdogs = new ConcurrentHashMap<>(); -  +  /** Shared queue to which player actions are added for sequential processing. */   private final BlockingQueue<NetworkEvent> actionQueue; +  /** Shared map tracking each player's connection status ({@code true} = online). */   private final LimitedMap<String, Boolean> playerList;     @@ -184,10 +186,10 @@ Current scope: all classes     synchronized (controller) {   -  if (playerList.isEmpty() && controller.getModel()==null) { +  if (playerList.isEmpty() &&(controller.getModel()==null || controller.getModel().getCurrentState().getGameStage().equals(GameStages.WAITING))) {   controller.setModel(new Game(preferredInt));   playerList.setLimit(preferredInt); -  System.out.println("Game Created With :"+preferredInt+" Players"); +  System.out.println("Game Created With: "+preferredInt+" Players");   }   if(controller.getModel().getCurrentState().getGameStage()!= GameStages.WAITING ) {   if (controller.getModel().getPlayers().stream().noneMatch(p -> p.getUserName().equals(username))|| controller.getModel().getCurrentState().getGameStage()==GameStages.ENDED) { @@ -198,11 +200,12 @@ Current scope: all classes   if (controller.addPlayer(username)) {   clients.put(username, callback);   playerList.put(username, true); -  startWatchdog(username);   System.out.println("Accepted player: " + username); +  startWatchdog(username); +  System.out.println("Heartbeat connected for: " + username);   return null;   } else { -  return ErrorType.USERNAME_ALREADY_USED; +  return ErrorType.INVALID_USERNAME;   }   }   @@ -210,8 +213,9 @@ Current scope: all classes   if(!playerList.containsKey(username)){   clients.put(username, callback);   playerList.put(username, true); -  startWatchdog(username);   System.out.println("(After crash)Reconnected player: " + username); +  startWatchdog(username); +  System.out.println("Heartbeat connected for: " + username);   return null;   }   else { @@ -221,6 +225,7 @@ Current scope: all classes   clients.put(username, callback);   System.out.println("Reconnected player: " + username);   startWatchdog(username); +  System.out.println("Heartbeat connected for: " + username);   Game game = controller.getModel();   callback.onGameInit(new MiniModel(   game.getSlotMap(), game.getOrderLogicCard(), game.getCurrentState(), @@ -386,43 +391,15 @@ Current scope: all classes   * <p>The method configures the server hostname, creates the RMI registry   * on the specified port, and registers this server instance under the   * {@code RMIGameServer} name. -  * -  * @return {@code true} if the server starts successfully, -  * {@code false} otherwise.   */ -  public boolean start() { +  public void start() {   try {   System.setProperty("java.rmi.server.hostname", host); -  registry = LocateRegistry.createRegistry(nPort); +  Registry registry = LocateRegistry.createRegistry(nPort);   registry.rebind("RMIGameServer", this);   System.out.println("RMI Server started on port: " + nPort); -  return true;   } catch (RemoteException e) {   e.printStackTrace(); -  return false; -  } -  } -  -  /** -  * Stops the RMI server and removes its binding from the registry. -  * -  * <p>The remote server object is unexported, the registry entry associated -  * with {@code RMIGameServer} is removed, and the server shutdown is logged. -  * -  * @return {@code true} if the server is stopped successfully, -  * {@code false} otherwise. -  */ -  public boolean stop() { -  try { -  registry.unbind("RMIGameServer"); -  UnicastRemoteObject.unexportObject(this, true); -  watchdogs.values().forEach(RMIHeartbeat::disconnect); -  watchdogs.clear(); -  System.out.println("RMI Server stopped"); -  return true; -  } catch (RemoteException | NotBoundException e) { -  e.printStackTrace(); -  return false;   }   }   @@ -484,7 +461,7 @@ Current scope: all classes