From 73c665e6a258fd447a443abeb58e9778adaadbeb Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Wed, 27 Dec 2023 21:26:06 +0100 Subject: [PATCH 01/29] home-page therapist v.1 --- src/main/webapp/CSS/globals.css | 25 + src/main/webapp/CSS/style.css | 473 ++++++++++++++++++ src/main/webapp/CSS/styleguide.css | 77 +++ src/main/webapp/JSP/homeTherapist.jsp | 123 +++++ .../images/homeTherapist/ellipse-1-1.svg | 3 + .../webapp/images/homeTherapist/ellipse-2.svg | 3 + .../images/homeTherapist/ellipse-28.png | Bin 0 -> 16944 bytes .../images/homeTherapist/ellipse-94.svg | 3 + src/main/webapp/images/homeTherapist/home.png | Bin 0 -> 971 bytes .../homeTherapist/iconly-bold-calendar.svg | 3 + .../homeTherapist/iconly-light-message.svg | 4 + .../homeTherapist/iconly-light-profile.svg | 4 + .../webapp/images/homeTherapist/image.png | Bin 0 -> 11644 bytes .../webapp/images/homeTherapist/line-9.svg | 3 + .../images/homeTherapist/logovettoriale-1.png | Bin 0 -> 12757 bytes .../material-symbols-search-rounded.svg | 3 + .../homeTherapist/material-symbols-sort.svg | 3 + .../images/homeTherapist/rectangle-32.png | Bin 0 -> 883 bytes .../images/homeTherapist/rectangle-359.svg | 3 + 19 files changed, 730 insertions(+) create mode 100644 src/main/webapp/CSS/globals.css create mode 100644 src/main/webapp/CSS/style.css create mode 100644 src/main/webapp/CSS/styleguide.css create mode 100644 src/main/webapp/JSP/homeTherapist.jsp create mode 100644 src/main/webapp/images/homeTherapist/ellipse-1-1.svg create mode 100644 src/main/webapp/images/homeTherapist/ellipse-2.svg create mode 100644 src/main/webapp/images/homeTherapist/ellipse-28.png create mode 100644 src/main/webapp/images/homeTherapist/ellipse-94.svg create mode 100644 src/main/webapp/images/homeTherapist/home.png create mode 100644 src/main/webapp/images/homeTherapist/iconly-bold-calendar.svg create mode 100644 src/main/webapp/images/homeTherapist/iconly-light-message.svg create mode 100644 src/main/webapp/images/homeTherapist/iconly-light-profile.svg create mode 100644 src/main/webapp/images/homeTherapist/image.png create mode 100644 src/main/webapp/images/homeTherapist/line-9.svg create mode 100644 src/main/webapp/images/homeTherapist/logovettoriale-1.png create mode 100644 src/main/webapp/images/homeTherapist/material-symbols-search-rounded.svg create mode 100644 src/main/webapp/images/homeTherapist/material-symbols-sort.svg create mode 100644 src/main/webapp/images/homeTherapist/rectangle-32.png create mode 100644 src/main/webapp/images/homeTherapist/rectangle-359.svg diff --git a/src/main/webapp/CSS/globals.css b/src/main/webapp/CSS/globals.css new file mode 100644 index 0000000..451dba6 --- /dev/null +++ b/src/main/webapp/CSS/globals.css @@ -0,0 +1,25 @@ +@import url("https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"); +@import url("https://fonts.googleapis.com/css?family=Poppins:500,600"); +* { + -webkit-font-smoothing: antialiased; + box-sizing: border-box; +} +html { + margin: 0px; + height: 100%; +} + +body{ + margin: 0px; + height: 100%; + background-color: #52d1c6bd; + +} +/* a blue color as a generic focus style */ +button:focus-visible { + outline: 2px solid #4a90e2 !important; + outline: -webkit-focus-ring-color auto 5px !important; +} +a { + text-decoration: none; +} diff --git a/src/main/webapp/CSS/style.css b/src/main/webapp/CSS/style.css new file mode 100644 index 0000000..7c153fe --- /dev/null +++ b/src/main/webapp/CSS/style.css @@ -0,0 +1,473 @@ +.element-home-logopedista { + background-color: #52d1c6bd; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; /* Aggiunto per centrare verticalmente */ + width: 90%; /* Larghezza del 90% dello schermo */ + margin: 0 auto; /* Auto-margine per centrare orizzontalmente */ +} + +.element-home-logopedista .div { + background-color: #52d1c6bd; + width: 100vw; + height: 100vh; + position: relative; +} + +.element-home-logopedista .overlap { + position: absolute; + width: 100px; + height: 41px; + top: 38px; + left: 781px; + background-image: url(../images/homeTherapist/rectangle-359.svg); + background-size: 100% 100%; +} + +.element-home-logopedista .button-only-text { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 4px; + padding: 0px 4px; + position: relative; + top: 12px; + left: 11px; + border-radius: 9999px; +} + +.element-home-logopedista .button { + position: relative; + width: fit-content; + margin-top: -1px; + font-family: "Poppins", Helvetica; + font-weight: 500; + color: #199a8e; + font-size: 10px; + letter-spacing: 0; + line-height: 16px; + white-space: nowrap; + all: unset; + box-sizing: border-box; +} + +.element-home-logopedista .pop-up { + position: absolute; + width: 50vw; + height: 80vh; + top: 15vh; + left: 30vw; + background-color: #ffffff; + border-radius: 24px; +} + + +.element-home-logopedista .overlap-group { + position: absolute; + width: 499px; + height: 61px; + top: 54px; + left: 76px; +} + +.element-home-logopedista .doctor { + width: 499px; + height: 61px; + top: 0; + position: absolute; + left: 0; +} + +.element-home-logopedista .group { + height: 61px; + background-color: #ffffff; + border-radius: 6px; + border: 1px solid; + border-color: #221f1f1a; +} + +.element-home-logopedista .overlap-group-wrapper { + position: relative; + width: 282px; + height: 16px; + top: 20px; + left: 118px; +} + +.element-home-logopedista .overlap-group-2 { + position: relative; + width: 278px; + height: 16px; +} + +.element-home-logopedista .inizio-terapia-gg-mm { + position: absolute; + width: 164px; + top: 3px; + left: 114px; + text-shadow: 0px 4px 4px #00000040; + font-family: "Poppins", Helvetica; + font-weight: 500; + color: #221f1f66; + font-size: 7px; + text-align: center; + letter-spacing: 0; + line-height: normal; +} + +.element-home-logopedista .text-wrapper { + position: absolute; + width: 228px; + top: 0; + left: 0; + font-family: "Poppins", Helvetica; + font-weight: 600; + color: #221f1f; + font-size: 10px; + letter-spacing: 0; + line-height: normal; +} + +.element-home-logopedista .others-progress { + position: absolute; + width: 43px; + height: 41px; + top: 9px; + left: 427px; + background-image: url(../images/homeTherapist/ellipse-1-1.svg); + background-size: 100% 100%; +} + +.element-home-logopedista .element-wrapper { + position: relative; + height: 41px; + background-image: url(../images/homeTherapist/ellipse-2.svg); + background-size: 100% 100%; +} + +.element-home-logopedista .element { + position: absolute; + width: 41px; + top: 8px; + left: 2px; + font-family: "Poppins", Helvetica; + font-weight: 600; + color: #199a8e; + font-size: 11px; + text-align: center; + letter-spacing: 0; + line-height: 24px; +} + +.element-home-logopedista .image { + position: absolute; + width: 47px; + height: 48px; + top: 6px; + left: 20px; + background-image: url(../images/homeTherapist/ellipse-28.png); + background-size: cover; + background-position: 50% 50%; +} + +.element-home-logopedista .overlap-2 { + position: absolute; + width: 507px; + height: 312px; + top: 136px; + left: 68px; +} + +.element-home-logopedista .doctor-2 { + width: 507px; + height: 312px; + top: 0; + position: absolute; + left: 0; +} + +.element-home-logopedista .group-wrapper { + position: absolute; + width: 499px; + height: 61px; + top: 0; + left: 8px; + background-color: #ffffff; + border-radius: 6px; + border: 1px solid; + border-color: #221f1f1a; +} + +.element-home-logopedista .div-wrapper { + position: absolute; + width: 499px; + height: 61px; + top: 87px; + left: 8px; +} + +.element-home-logopedista .doctor-3 { + position: absolute; + width: 499px; + height: 61px; + top: 174px; + left: 0; +} + +.element-home-logopedista .doctor-4 { + width: 499px; + height: 61px; + top: 251px; + position: absolute; + left: 0; +} + +.element-home-logopedista .overlap-wrapper { + top: 94px; + left: 435px; + background-image: url(../images/homeTherapist/ellipse-1-1.svg); + position: absolute; + width: 43px; + height: 41px; + background-size: 100% 100%; +} + +.element-home-logopedista .others-progress-2 { + top: 11px; + left: 436px; + background-image: url(../images/homeTherapist/ellipse-1-1.svg); + position: absolute; + width: 43px; + height: 41px; + background-size: 100% 100%; +} + +.element-home-logopedista .others-progress-3 { + top: 185px; + left: 435px; + background-image: url(../images/homeTherapist/ellipse-1-1.svg); + position: absolute; + width: 43px; + height: 41px; + background-size: 100% 100%; +} + +.element-home-logopedista .others-progress-4 { + top: 261px; + left: 437px; + background-image: url(../images/homeTherapist/ellipse-1-1.svg); + position: absolute; + width: 43px; + height: 41px; + background-size: 100% 100%; +} + +.element-home-logopedista .image-2 { + position: absolute; + width: 47px; + height: 299px; + top: 8px; + left: 28px; +} + +.element-home-logopedista .ellipse { + position: absolute; + width: 47px; + height: 48px; + top: 0; + left: 0; + object-fit: cover; +} + +.element-home-logopedista .image-3 { + position: absolute; + width: 47px; + height: 213px; + top: 86px; + left: 0; +} + +.element-home-logopedista .image-4 { + position: absolute; + width: 47px; + height: 125px; + top: 88px; + left: 0; +} + +.element-home-logopedista .image-5 { + position: absolute; + width: 47px; + height: 48px; + top: 77px; + left: 0; + background-image: url(../images/homeTherapist/ellipse-28.png); + background-size: cover; + background-position: 50% 50%; +} + + + +.element-home-logopedista .text-wrapper-2 { + position: absolute; + width: 64px; + top: 16px; + left: 294px; + font-family: "Poppins", Helvetica; + font-weight: 600; + color: #221f1f; + font-size: 14px; + letter-spacing: 0; + line-height: normal; + white-space: nowrap; +} + +.element-home-logopedista .overlap-3 { + position: absolute; + width: 116px; + height: 530px; + top: 40px; + left: 65px; +} + +.element-home-logopedista .rectangle-2 { + width: 98px; + height: 530px; + top: 0; + left: 0; + background-color: #ffffff; + position: absolute; + border-radius: 30px; +} + +.element-home-logopedista .group-2 { + position: absolute; + width: 24px; + height: 174px; + top: 161px; + left: 37px; +} + +.element-home-logopedista .iconly-light-outline { + position: absolute; + width: 24px; + height: 24px; + top: 0; + left: 0; +} + +.element-home-logopedista .home { + position: absolute; + width: 20px; + height: 22px; + top: 1px; + left: 2px; +} + +.element-home-logopedista .iconly-bold-calendar { + position: absolute; + width: 24px; + height: 24px; + top: 98px; + left: 0; +} + +.element-home-logopedista .iconly-light-message { + top: 49px; + position: absolute; + width: 24px; + height: 24px; + left: 0; +} + +.element-home-logopedista .iconly-light-profile { + top: 150px; + position: absolute; + width: 24px; + height: 24px; + left: 0; +} + +.element-home-logopedista .img { + position: absolute; + width: 77px; + height: 83px; + top: 369px; + left: 18px; +} + +.element-home-logopedista .logovettoriale { + position: absolute; + width: 63px; + height: 75px; + top: 39px; + left: 17px; + object-fit: cover; +} + +.element-home-logopedista .line { + position: absolute; + width: 75px; + height: 1px; + top: 132px; + left: 11px; + object-fit: cover; +} + +.element-home-logopedista .text-wrapper-3 { + position: absolute; + width: 102px; + top: 467px; + left: 14px; + font-family: "Poppins", Helvetica; + font-weight: 600; + color: #221f1f; + font-size: 7px; + letter-spacing: 0; + line-height: normal; +} + +.element-home-logopedista .ellipse-2 { + position: absolute; + width: 10px; + height: 10px; + top: 444px; + left: 57px; +} + +.element-home-logopedista .material-symbols-wrapper { + position: absolute; + width: 301px; + height: 50px; + top: 35px; + left: 292px; + background-image: url(../images/homeTherapist/rectangle-32.png); + background-size: 100% 100%; +} + +.element-home-logopedista .material-symbols { + position: absolute; + width: 24px; + height: 24px; + top: 13px; + left: 15px; +} + +.element-home-logopedista .img-wrapper { + position: absolute; + width: 132px; + height: 39px; + top: 40px; + left: 621px; + background-color: #ffffff; + border-radius: 50px; +} + +.element-home-logopedista .material-symbols-2 { + position: absolute; + width: 17px; + height: 14px; + top: 11px; + left: 17px; +} diff --git a/src/main/webapp/CSS/styleguide.css b/src/main/webapp/CSS/styleguide.css new file mode 100644 index 0000000..034cc0c --- /dev/null +++ b/src/main/webapp/CSS/styleguide.css @@ -0,0 +1,77 @@ +:root { + --x-8a-36-5e: rgba(178, 34, 34, 1); + --fuschia-100: rgba(178, 34, 34, 1); + --fuschia-80: rgba(232, 29, 29, 1); + --fuschia-60: rgba(252, 221, 236, 1); + --iris-100: rgba(93, 95, 239, 1); + --iris-80: rgba(120, 121, 241, 1); + --iris-60: rgba(165, 166, 246, 1); + --primary-2: rgba(58, 148, 231, 1); + --neutral-1: rgba(37, 37, 38, 1); + --header-1-font-family: "WorkSans-Bold", Helvetica; + --header-1-font-weight: 700; + --header-1-font-size: 34px; + --header-1-letter-spacing: -0.68px; + --header-1-line-height: normal; + --header-1-font-style: normal; + --header-2-font-family: "WorkSans-Bold", Helvetica; + --header-2-font-weight: 700; + --header-2-font-size: 20px; + --header-2-letter-spacing: -0.4px; + --header-2-line-height: normal; + --header-2-font-style: normal; + --body-font-family: "WorkSans-Regular", Helvetica; + --body-font-weight: 400; + --body-font-size: 13px; + --body-letter-spacing: -0.26px; + --body-line-height: normal; + --body-font-style: normal; + --jhjgjghj-font-family: "DroidSans-Regular", Helvetica; + --jhjgjghj-font-weight: 400; + --jhjgjghj-font-size: 14px; + --jhjgjghj-letter-spacing: 0px; + --jhjgjghj-line-height: 16px; + --jhjgjghj-font-style: normal; + --button-large-font-family: "Poppins-Medium", Helvetica; + --button-large-font-weight: 500; + --button-large-font-size: 18px; + --button-large-letter-spacing: 0px; + --button-large-line-height: 24px; + --button-large-font-style: normal; + --button-medium-font-family: "Poppins-SemiBold", Helvetica; + --button-medium-font-weight: 600; + --button-medium-font-size: 16px; + --button-medium-letter-spacing: 0px; + --button-medium-line-height: 20px; + --button-medium-font-style: normal; + --caption-12px-medium-font-family: "Poppins-Medium", Helvetica; + --caption-12px-medium-font-weight: 500; + --caption-12px-medium-font-size: 12px; + --caption-12px-medium-letter-spacing: 0px; + --caption-12px-medium-line-height: 16px; + --caption-12px-medium-font-style: normal; + --title-18px-semibold-font-family: "Poppins-SemiBold", Helvetica; + --title-18px-semibold-font-weight: 600; + --title-18px-semibold-font-size: 18px; + --title-18px-semibold-letter-spacing: 0px; + --title-18px-semibold-line-height: 24px; + --title-18px-semibold-font-style: normal; + --title-28px-semibold-font-family: "Poppins-SemiBold", Helvetica; + --title-28px-semibold-font-weight: 600; + --title-28px-semibold-font-size: 28px; + --title-28px-semibold-letter-spacing: 0px; + --title-28px-semibold-line-height: 36px; + --title-28px-semibold-font-style: normal; + --body-16px-medium-font-family: "Poppins-Medium", Helvetica; + --body-16px-medium-font-weight: 500; + --body-16px-medium-font-size: 16px; + --body-16px-medium-letter-spacing: 0px; + --body-16px-medium-line-height: 20px; + --body-16px-medium-font-style: normal; + --caption-10px-medium-font-family: "Poppins-Medium", Helvetica; + --caption-10px-medium-font-weight: 500; + --caption-10px-medium-font-size: 10px; + --caption-10px-medium-letter-spacing: 0px; + --caption-10px-medium-line-height: 16px; + --caption-10px-medium-font-style: normal; +} diff --git a/src/main/webapp/JSP/homeTherapist.jsp b/src/main/webapp/JSP/homeTherapist.jsp new file mode 100644 index 0000000..fc31abb --- /dev/null +++ b/src/main/webapp/JSP/homeTherapist.jsp @@ -0,0 +1,123 @@ + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
Inizio Terapia:  gg/mm/yyy
+
Nome Cognome
+
+
+
+
+
+
72%
+
+
+
+
+
+
+
+
+
Inizio Terapia:  gg/mm/yyy
+
Nome Cognome
+
+
+
+
+
+
+
+
Inizio Terapia:  gg/mm/yyy
+
Nome Cognome
+
+
+
+
+
+
+
+
+
Inizio Terapia:  gg/mm/yyy
+
Nome Cognome
+
+
+
+
+
+
+
+
+
Inizio Terapia:  gg/mm/yyy
+
Nome Cognome
+
+
+
+
+
+
+
72%
+
+
+
72%
+
+
+
72%
+
+
+
72%
+
+ +
+ +
+ +
+ +
+ +
+
+
+
+
+ +
PAZIENTI
+
+
+ +
+
+ + + +
+ + + +
Dr Nome Cognome
+ +
+
+ +
+
+
+
+ + diff --git a/src/main/webapp/images/homeTherapist/ellipse-1-1.svg b/src/main/webapp/images/homeTherapist/ellipse-1-1.svg new file mode 100644 index 0000000..e1ec5e2 --- /dev/null +++ b/src/main/webapp/images/homeTherapist/ellipse-1-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/main/webapp/images/homeTherapist/ellipse-2.svg b/src/main/webapp/images/homeTherapist/ellipse-2.svg new file mode 100644 index 0000000..6cb02a0 --- /dev/null +++ b/src/main/webapp/images/homeTherapist/ellipse-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/main/webapp/images/homeTherapist/ellipse-28.png b/src/main/webapp/images/homeTherapist/ellipse-28.png new file mode 100644 index 0000000000000000000000000000000000000000..415f8b06798fa16f714d15a6a6a09792b1889ed8 GIT binary patch literal 16944 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 Hu0mjfEhHvZ literal 0 HcmV?d00001 diff --git a/src/main/webapp/images/homeTherapist/ellipse-94.svg b/src/main/webapp/images/homeTherapist/ellipse-94.svg new file mode 100644 index 0000000..bf7d71e --- /dev/null +++ b/src/main/webapp/images/homeTherapist/ellipse-94.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/main/webapp/images/homeTherapist/home.png b/src/main/webapp/images/homeTherapist/home.png new file mode 100644 index 0000000000000000000000000000000000000000..040a57f840e5c20b4413e72ef2dc6a0a1111674d GIT binary patch literal 971 zcmV;+12p`JP)M z#R+&{o@B4B_0O)XHDG4^HD1YD>67$HtM>^ZCQ?-=_2QP60ca5c^Tb&QP$!@(5_nR3 zyY(Gn0wD&{$4&t~s&Xy4kYX-1aiO+Rbion=ERm_~Zz9n}1VM=$Cg?hIRC*7Vup*f` zb{zgW@Y8B~iT0@ZckX6w3wh+`s7b3p;C5a@bh5|$J79s4raOJ;$Wb}v$Gnz(#iW)7 zO{Xd^`bK+b`C%{~$=BbUylOB=u>9xQaJ|X==d(CZ1p4C1b4M>^2fz?UBPsO<+VmrwJ55N%VqtY%S?%323NmA*LNEbb?*5+z$@AQr2IP_-WTQW0 zq6RuuBwOEKkM)NI?fuyLGbb9ZQ>95hAYAAK$E8104A-ewl@FLcEUjPyt6hS$S6koS zg-1fKPD#LuzyvIJG9H9Y?3D1t2}}TzvqD?lm>2Sp>L(vcgHdo- zi*+rTvOZ5fB&Hss# zPh+2yn(`BJLBIqc7vxbF(%be^$y;6!6M#me%R}-L9Ap3RGdL*Qgb4tOZb*v+=R!ti z+LY(Bl~Ogb5~P=KPsmoBj^(0kZcm&kn?;%K>}hLdT@K238wotG2P3zZCG(Gd`W3NP zxe(?RwJpT!cCyaa$$W2AD(g(%0$;I^oXKv8-8Qc}hSflaD;h4_G4s70=|#4(|6328 zO`sbUoh?XZF!R8TL3B;!D1v^2U + + diff --git a/src/main/webapp/images/homeTherapist/iconly-light-message.svg b/src/main/webapp/images/homeTherapist/iconly-light-message.svg new file mode 100644 index 0000000..359c2ff --- /dev/null +++ b/src/main/webapp/images/homeTherapist/iconly-light-message.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/webapp/images/homeTherapist/iconly-light-profile.svg b/src/main/webapp/images/homeTherapist/iconly-light-profile.svg new file mode 100644 index 0000000..b43895c --- /dev/null +++ b/src/main/webapp/images/homeTherapist/iconly-light-profile.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/main/webapp/images/homeTherapist/image.png b/src/main/webapp/images/homeTherapist/image.png new file mode 100644 index 0000000000000000000000000000000000000000..153655b96902e644c0a1f2363ffb9e8525831267 GIT binary patch literal 11644 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 + + diff --git a/src/main/webapp/images/homeTherapist/logovettoriale-1.png b/src/main/webapp/images/homeTherapist/logovettoriale-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f90dfa8de902816156aef475367f019b042b5dc2 GIT binary patch literal 12757 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 WT?sX7!vB6@fXPZKO4N!Ohx|Y7dA7I! literal 0 HcmV?d00001 diff --git a/src/main/webapp/images/homeTherapist/material-symbols-search-rounded.svg b/src/main/webapp/images/homeTherapist/material-symbols-search-rounded.svg new file mode 100644 index 0000000..7dc8223 --- /dev/null +++ b/src/main/webapp/images/homeTherapist/material-symbols-search-rounded.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/main/webapp/images/homeTherapist/material-symbols-sort.svg b/src/main/webapp/images/homeTherapist/material-symbols-sort.svg new file mode 100644 index 0000000..785e4e4 --- /dev/null +++ b/src/main/webapp/images/homeTherapist/material-symbols-sort.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/main/webapp/images/homeTherapist/rectangle-32.png b/src/main/webapp/images/homeTherapist/rectangle-32.png new file mode 100644 index 0000000000000000000000000000000000000000..c44410d43026463e7ea7139d4feb43895a66b817 GIT binary patch literal 883 zcmV-(1C0EMP)Jh^fH1g5U~5I*2PUt^iy?)IsO~@1heUUL+7N*4_C3 zn^}vo1RtMSolbX=oXKLbi1m z&8se`3@ri+KucF9ZO>FekJC1m)n3Edam=7Fu%w zfItvh078-xS^z?_46RoIfH1sSXw3uw!Z789X#gQfuH1t0nE-&_Y-yUTn5Xqe0Kjk0 z_NQ0`(007|F96`LWYuZey32Z)2mttLTV-a;&ue4|zX@J&*L*6Q6ux2M=&0RX>@ z%R5X*+qNndBR_X2n0&R(WtI9t8mWFf0d_*;<-LFBs|JNdTZ-Pnt(t z)3KtetMyjVZWGz`0zeyP8d%+3C+Zdf>)Hw?Q+ZZMc1M+#s%QgYz(Vg7g*+?HRAP0?)C6Pc(EG5`B_K}T+ZwjNds;k*HG(D z0N`{sp?$D9t)Wh%-FWPWwfg!o5mtr(aJ-4+V^`ms1eR&kX>D?ym$h_Xg`KJa)XOAq zc1HWgt?HZkmN=B2VdDC~*gq-jT0uO9#a002ov JPDHLkV1g(tg}(p* literal 0 HcmV?d00001 diff --git a/src/main/webapp/images/homeTherapist/rectangle-359.svg b/src/main/webapp/images/homeTherapist/rectangle-359.svg new file mode 100644 index 0000000..8e6b813 --- /dev/null +++ b/src/main/webapp/images/homeTherapist/rectangle-359.svg @@ -0,0 +1,3 @@ + + + From 3b2030547af8aa8ea8d629079e35442821d2588c Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Wed, 27 Dec 2023 23:51:45 +0100 Subject: [PATCH 02/29] home-page therapist v.2 --- src/main/webapp/CSS/globals.css | 25 ------- .../CSS/{style.css => homeTherapist.css} | 74 +++++++++++-------- ...{styleguide.css => homeTherapistGuide.css} | 0 src/main/webapp/JSP/homeTherapist.jsp | 7 +- 4 files changed, 46 insertions(+), 60 deletions(-) delete mode 100644 src/main/webapp/CSS/globals.css rename src/main/webapp/CSS/{style.css => homeTherapist.css} (95%) rename src/main/webapp/CSS/{styleguide.css => homeTherapistGuide.css} (100%) diff --git a/src/main/webapp/CSS/globals.css b/src/main/webapp/CSS/globals.css deleted file mode 100644 index 451dba6..0000000 --- a/src/main/webapp/CSS/globals.css +++ /dev/null @@ -1,25 +0,0 @@ -@import url("https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"); -@import url("https://fonts.googleapis.com/css?family=Poppins:500,600"); -* { - -webkit-font-smoothing: antialiased; - box-sizing: border-box; -} -html { - margin: 0px; - height: 100%; -} - -body{ - margin: 0px; - height: 100%; - background-color: #52d1c6bd; - -} -/* a blue color as a generic focus style */ -button:focus-visible { - outline: 2px solid #4a90e2 !important; - outline: -webkit-focus-ring-color auto 5px !important; -} -a { - text-decoration: none; -} diff --git a/src/main/webapp/CSS/style.css b/src/main/webapp/CSS/homeTherapist.css similarity index 95% rename from src/main/webapp/CSS/style.css rename to src/main/webapp/CSS/homeTherapist.css index 7c153fe..04c2d2d 100644 --- a/src/main/webapp/CSS/style.css +++ b/src/main/webapp/CSS/homeTherapist.css @@ -1,15 +1,30 @@ -.element-home-logopedista { +html { + margin: 0px; + height: 100%; +} + +body{ + margin: 0px; + height: 100%; background-color: #52d1c6bd; +} + +a { + text-decoration: none; +} + +.element-home-logopedista { + display: flex; flex-direction: row; justify-content: center; - align-items: center; /* Aggiunto per centrare verticalmente */ - width: 90%; /* Larghezza del 90% dello schermo */ - margin: 0 auto; /* Auto-margine per centrare orizzontalmente */ + align-items: center; + width: 90%; + margin: 0 auto; } .element-home-logopedista .div { - background-color: #52d1c6bd; + width: 100vw; height: 100vh; position: relative; @@ -17,10 +32,10 @@ .element-home-logopedista .overlap { position: absolute; - width: 100px; - height: 41px; - top: 38px; - left: 781px; + width: 124px; + height: 48px; + top: 36px; + left: 72vw; background-image: url(../images/homeTherapist/rectangle-359.svg); background-size: 100% 100%; } @@ -62,6 +77,19 @@ border-radius: 24px; } +.element-home-logopedista .text-wrapper-2 { + position: absolute; + width: 10vw; + top: 2vh; + left: 23vw; + font-family: "Poppins", Helvetica; + font-weight: 600; + color: #221f1f; + font-size: 14px; + letter-spacing: 0; + line-height: normal; + white-space: nowrap; +} .element-home-logopedista .overlap-group { position: absolute; @@ -307,22 +335,6 @@ background-position: 50% 50%; } - - -.element-home-logopedista .text-wrapper-2 { - position: absolute; - width: 64px; - top: 16px; - left: 294px; - font-family: "Poppins", Helvetica; - font-weight: 600; - color: #221f1f; - font-size: 14px; - letter-spacing: 0; - line-height: normal; - white-space: nowrap; -} - .element-home-logopedista .overlap-3 { position: absolute; width: 116px; @@ -438,10 +450,10 @@ .element-home-logopedista .material-symbols-wrapper { position: absolute; - width: 301px; + width: 340px; height: 50px; top: 35px; - left: 292px; + left: 30vw; background-image: url(../images/homeTherapist/rectangle-32.png); background-size: 100% 100%; } @@ -456,10 +468,10 @@ .element-home-logopedista .img-wrapper { position: absolute; - width: 132px; - height: 39px; - top: 40px; - left: 621px; + width: 175px; + height: 48px; + top: 36px; + left: 57vw; background-color: #ffffff; border-radius: 50px; } diff --git a/src/main/webapp/CSS/styleguide.css b/src/main/webapp/CSS/homeTherapistGuide.css similarity index 100% rename from src/main/webapp/CSS/styleguide.css rename to src/main/webapp/CSS/homeTherapistGuide.css diff --git a/src/main/webapp/JSP/homeTherapist.jsp b/src/main/webapp/JSP/homeTherapist.jsp index fc31abb..e0d8420 100644 --- a/src/main/webapp/JSP/homeTherapist.jsp +++ b/src/main/webapp/JSP/homeTherapist.jsp @@ -2,9 +2,8 @@ - - - + +
@@ -100,7 +99,7 @@
PAZIENTI
- +
From a7885151671eb6cc516ed5a65de85a302cb3920e Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Thu, 28 Dec 2023 22:33:31 +0100 Subject: [PATCH 03/29] print patient of X therapist v.1 --- pom.xml | 5 + src/main/java/controller/LoginController.java | 14 ++- .../java/controller/homeTherapistServlet.java | 47 +++++++++ ...PersonalInfo.java => DAOPersonalInfo.java} | 15 +-- src/main/java/model/DAO/DAOUser.java | 93 ++++++++++++++++++ src/main/java/model/entity/UserInfo.java | 97 +++++++++++++++++++ .../service/personalinfo/PersonalInfo.java | 8 ++ .../java/model/service/user/UserData.java | 12 ++- .../model/service/user/UserDataInterface.java | 1 + src/main/webapp/JSP/testTable.jsp | 86 ++++++++++++++++ src/main/webapp/index.jsp | 2 +- 11 files changed, 361 insertions(+), 19 deletions(-) create mode 100644 src/main/java/controller/homeTherapistServlet.java rename src/main/java/model/DAO/{DAOAPersonalInfo.java => DAOPersonalInfo.java} (79%) create mode 100644 src/main/java/model/entity/UserInfo.java create mode 100644 src/main/java/model/service/personalinfo/PersonalInfo.java create mode 100644 src/main/webapp/JSP/testTable.jsp diff --git a/pom.xml b/pom.xml index e0154c0..1af7cde 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,11 @@ javax.servlet-api 3.1.0 + + javax.servlet + javax.servlet-api + 4.0.1 + diff --git a/src/main/java/controller/LoginController.java b/src/main/java/controller/LoginController.java index ac349db..38174cd 100644 --- a/src/main/java/controller/LoginController.java +++ b/src/main/java/controller/LoginController.java @@ -5,7 +5,11 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import java.io.IOException; + +import model.DAO.DAOUser; +import model.entity.User; import model.service.login.Authenticator; @WebServlet("/login") @@ -33,7 +37,15 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) if (result > 0) { // Login success, redirect to the welcome page - response.sendRedirect("welcome.jsp"); + HttpSession session = request.getSession(); + DAOUser daouser=new DAOUser(); + User user_logged= daouser.getUserByIdOrEmail(email); + session.setAttribute("user_logged", user_logged); + + + //if(Therapist) + response.sendRedirect("homeTherapist.jsp"); + //else response.sendRedirect("homePatient.jsp"); } else { // Login failed, redirect back to the login page response.sendRedirect("JSP/login.jsp?error=1"); diff --git a/src/main/java/controller/homeTherapistServlet.java b/src/main/java/controller/homeTherapistServlet.java new file mode 100644 index 0000000..9e2f04d --- /dev/null +++ b/src/main/java/controller/homeTherapistServlet.java @@ -0,0 +1,47 @@ +package controller; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import javax.servlet.http.HttpSession; +import javax.servlet.RequestDispatcher; +import model.entity.PersonalInfo; +import model.entity.*; + +@WebServlet("/homeTherapistServlet") +public class homeTherapistServlet extends HttpServlet { + + public homeTherapistServlet() { + super(); + + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + HttpSession session = request.getSession(); + + model.service.user.UserData userService = new model.service.user.UserData(); + + ArrayList list_user=new ArrayList<>(); + //String tipo=request.getParameter("type"); + User u= userService.getUserByIdOrEmail(session.getAttribute("user_logged")); //save in session attribute the id of the therapist by email + list_user=userService.getUsersAndPersonalInfoByIdTherapist((Integer) u.getId()); //save all patient of X therapist + + + session.setAttribute("list_user",list_user); + + + response.sendRedirect("testTable.jsp"); + } + + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + doGet(request, response); + } + +} diff --git a/src/main/java/model/DAO/DAOAPersonalInfo.java b/src/main/java/model/DAO/DAOPersonalInfo.java similarity index 79% rename from src/main/java/model/DAO/DAOAPersonalInfo.java rename to src/main/java/model/DAO/DAOPersonalInfo.java index a2f0ded..7a0d6f3 100644 --- a/src/main/java/model/DAO/DAOAPersonalInfo.java +++ b/src/main/java/model/DAO/DAOPersonalInfo.java @@ -4,20 +4,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; -/** - * The DAOAPersonalInfo class provides methods for creating a user's personal info registry in the database. - */ -public class DAOAPersonalInfo { - - /** - * Creates a user's personal info registry in the database. - * - * @param id the ID of the user - * @param name the first name of the user - * @param surname the last name of the user - * @return {@code true} if the user's personal info registry is created successfully, - * {@code false} otherwise - */ +public class DAOPersonalInfo { public boolean createRegistry(int id, String name, String surname) { Connection connection = null; PreparedStatement preparedStatementPersonalInfo = null; diff --git a/src/main/java/model/DAO/DAOUser.java b/src/main/java/model/DAO/DAOUser.java index ca2edf4..e221d8e 100644 --- a/src/main/java/model/DAO/DAOUser.java +++ b/src/main/java/model/DAO/DAOUser.java @@ -1,11 +1,13 @@ package model.DAO; import model.entity.User; +import model.entity.UserInfo; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; /** * DAOUser is a class that provides methods for accessing the User table in the database. @@ -233,4 +235,95 @@ public boolean resetPassword(String email, String newPassword) { // Default to false if an exception occurs return false; } + + public ArrayList getUsersByIdTherapist(int id) { + + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList list_user=new ArrayList<>(); + try { + + connection = DAOConnection.getConnection(); + String query = null; + + query = "SELECT * FROM user WHERE ID_Therapist = ?"; + + preparedStatement = connection.prepareStatement(query); + preparedStatement.setObject(1, id); + + resultSet = preparedStatement.executeQuery(); + + while (resultSet.next()) { + list_user.add(getUserFromResultSet(resultSet)); + } + return list_user; + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } finally { + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + + return null; // or you may throw an exception here + + } + + public ArrayList getUsersAndPersonalInfoByIdTherapist(int idTherapist) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList list_user=new ArrayList<>(); + + UserInfo u=new UserInfo(); + try { + + connection = DAOConnection.getConnection(); + String query = null; + + query = "SELECT ID,Email,ActivationDate,Firstname,Lastname,DateOfBirth,Gender,Address,SSN,Phone FROM user,personal_info WHERE ID_Therapist = ? AND user.ID= personal_info.ID_USER;"; + + preparedStatement = connection.prepareStatement(query); + preparedStatement.setObject(1, idTherapist); + + resultSet = preparedStatement.executeQuery(); + + while (resultSet.next()) { + u.setId(resultSet.getInt("ID")); + u.setEmail(resultSet.getString("Email")); + u.setActivationDate(resultSet.getTimestamp("ActivationDate")); + u.setFirstname(resultSet.getString("Firstname")); + u.setLastname(resultSet.getString("Lastname")); + u.setDateOfBirth(resultSet.getDate("DateOfBirth")); + u.setGender(resultSet.getString("Gender")); + u.setAddress(resultSet.getString("Address")); + u.setSsn(resultSet.getString("SSN")); + u.setPhone(resultSet.getString("Phone")); + + list_user.add(u); + } + return list_user; + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } finally { + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + + return null; // or you may throw an exception here + } } diff --git a/src/main/java/model/entity/UserInfo.java b/src/main/java/model/entity/UserInfo.java new file mode 100644 index 0000000..e1b43b5 --- /dev/null +++ b/src/main/java/model/entity/UserInfo.java @@ -0,0 +1,97 @@ +package model.entity; + +import java.sql.Date; +import java.sql.Timestamp; + +public class UserInfo { + private int id; + private String email; + private Timestamp activationDate; + private String firstname; + private String lastname; + private Date dateOfBirth; + private String gender; + private String address; + private String ssn; + private String phone; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public Timestamp getActivationDate() { + return activationDate; + } + + public void setActivationDate(Timestamp activationDate) { + this.activationDate = activationDate; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String getLastname() { + return lastname; + } + + public void setLastname(String lastname) { + this.lastname = lastname; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getSsn() { + return ssn; + } + + public void setSsn(String ssn) { + this.ssn = ssn; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } +} diff --git a/src/main/java/model/service/personalinfo/PersonalInfo.java b/src/main/java/model/service/personalinfo/PersonalInfo.java new file mode 100644 index 0000000..1b0e203 --- /dev/null +++ b/src/main/java/model/service/personalinfo/PersonalInfo.java @@ -0,0 +1,8 @@ +package model.service.personalinfo; + +import model.DAO.DAOPersonalInfo; + +public class PersonalInfo { + DAOPersonalInfo personalInfoDAO = new DAOPersonalInfo(); + public boolean createRegistry(int id, String name, String surname) {return personalInfoDAO.createRegistry(id, name, surname);} +} diff --git a/src/main/java/model/service/user/UserData.java b/src/main/java/model/service/user/UserData.java index a4e6cc1..d3610a4 100644 --- a/src/main/java/model/service/user/UserData.java +++ b/src/main/java/model/service/user/UserData.java @@ -1,6 +1,10 @@ package model.service.user; import model.DAO.DAOUser; +import model.entity.User; +import model.entity.UserInfo; + +import java.util.ArrayList; public class UserData /*implements UserDataInterface */{ DAOUser daoUser = new DAOUser(); @@ -9,7 +13,9 @@ public boolean checkIfEmailExists(String email) { return daoUser.checkIfEmailExists(email); } - public int createUser(String email, String password, int therapistId) { - return daoUser.createUser(email, password, therapistId); - } + public int createUser(String email, String password, int therapistId) { return daoUser.createUser(email, password, therapistId);} + public User getUserByIdOrEmail(Object idOrEmail){return daoUser.getUserByIdOrEmail(idOrEmail);} + + public ArrayList getUsersByIdTherapist(int ID_Therapist ){return daoUser.getUsersByIdTherapist(ID_Therapist);} + public ArrayList getUsersAndPersonalInfoByIdTherapist(int ID_Therapist) {return daoUser.getUsersAndPersonalInfoByIdTherapist(ID_Therapist);} } diff --git a/src/main/java/model/service/user/UserDataInterface.java b/src/main/java/model/service/user/UserDataInterface.java index 5ffe085..3ef9843 100644 --- a/src/main/java/model/service/user/UserDataInterface.java +++ b/src/main/java/model/service/user/UserDataInterface.java @@ -55,4 +55,5 @@ public interface UserDataInterface { * @return True se termina con successo. False altrimenti */ boolean modifyTime(String time); + } diff --git a/src/main/webapp/JSP/testTable.jsp b/src/main/webapp/JSP/testTable.jsp new file mode 100644 index 0000000..696554e --- /dev/null +++ b/src/main/webapp/JSP/testTable.jsp @@ -0,0 +1,86 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page import="model.entity.*"%> +<%@ page import="java.util.ArrayList"%> + + + + + + + + + + +
+ + + + + + + + + + + <% + if(session.getAttribute("list_user")!=null) { + @SuppressWarnings("unchecked") + ArrayList list_user=(ArrayList) session.getAttribute("list_user"); + for(UserInfo u: list_user){ + %> + + <% for (int j = 1; j <= 4; j++) { %> + + <% } %> + + <% } %> + +
Colonna 1Colonna 2Colonna 3Colonna 4
Elemento <%= j %> <%=u.getEmail()%>
+
+ + + + + diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index 3d6d7b9..32cb6ec 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -7,6 +7,6 @@

<%= "Hello World!" %>


-
Hello Servlet +Login \ No newline at end of file From 537ba1c9a9a838a434a06acf3982736de918b66d Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Thu, 28 Dec 2023 22:45:51 +0100 Subject: [PATCH 04/29] print patient of X therapist v.1 --- src/main/java/controller/LoginController.java | 2 +- src/main/java/controller/homeTherapistServlet.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/controller/LoginController.java b/src/main/java/controller/LoginController.java index 38174cd..039e40b 100644 --- a/src/main/java/controller/LoginController.java +++ b/src/main/java/controller/LoginController.java @@ -44,7 +44,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) //if(Therapist) - response.sendRedirect("homeTherapist.jsp"); + response.sendRedirect("homeTherapistServlet"); //else response.sendRedirect("homePatient.jsp"); } else { // Login failed, redirect back to the login page diff --git a/src/main/java/controller/homeTherapistServlet.java b/src/main/java/controller/homeTherapistServlet.java index 9e2f04d..614626a 100644 --- a/src/main/java/controller/homeTherapistServlet.java +++ b/src/main/java/controller/homeTherapistServlet.java @@ -28,14 +28,15 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t ArrayList list_user=new ArrayList<>(); //String tipo=request.getParameter("type"); - User u= userService.getUserByIdOrEmail(session.getAttribute("user_logged")); //save in session attribute the id of the therapist by email - list_user=userService.getUsersAndPersonalInfoByIdTherapist((Integer) u.getId()); //save all patient of X therapist + User logged= (User) session.getAttribute("user_logged"); + //User u= userService.getUserByIdOrEmail((User) session.getAttribute("user_logged")); //save in session attribute the id of the therapist by email + list_user=userService.getUsersAndPersonalInfoByIdTherapist((Integer) logged.getId()); //save all patient of X therapist session.setAttribute("list_user",list_user); - response.sendRedirect("testTable.jsp"); + response.sendRedirect("JSP/testTable.jsp"); } From d85310d5669b2ad22d186987577495fdf5fe0cee Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Thu, 28 Dec 2023 22:48:32 +0100 Subject: [PATCH 05/29] print patient of X therapist v.2 --- src/main/webapp/JSP/testTable.jsp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/JSP/testTable.jsp b/src/main/webapp/JSP/testTable.jsp index 696554e..e535c01 100644 --- a/src/main/webapp/JSP/testTable.jsp +++ b/src/main/webapp/JSP/testTable.jsp @@ -40,6 +40,7 @@ background-color: #f2f2f2; } + @@ -66,7 +67,7 @@ Elemento <%= j %> <%=u.getEmail()%> <% } %> - <% } %> + <% }} %>
From 7526e82a3107e578364ab055eab9a8e111f7b7fd Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Thu, 28 Dec 2023 23:23:20 +0100 Subject: [PATCH 06/29] print patient of X therapist v.3 --- .../java/controller/homeTherapistServlet.java | 2 -- src/main/java/model/DAO/DAOUser.java | 3 ++- src/main/webapp/JSP/testTable.jsp | 20 +++++++++++-------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/controller/homeTherapistServlet.java b/src/main/java/controller/homeTherapistServlet.java index 614626a..277b1b1 100644 --- a/src/main/java/controller/homeTherapistServlet.java +++ b/src/main/java/controller/homeTherapistServlet.java @@ -29,10 +29,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t ArrayList list_user=new ArrayList<>(); //String tipo=request.getParameter("type"); User logged= (User) session.getAttribute("user_logged"); - //User u= userService.getUserByIdOrEmail((User) session.getAttribute("user_logged")); //save in session attribute the id of the therapist by email list_user=userService.getUsersAndPersonalInfoByIdTherapist((Integer) logged.getId()); //save all patient of X therapist - session.setAttribute("list_user",list_user); diff --git a/src/main/java/model/DAO/DAOUser.java b/src/main/java/model/DAO/DAOUser.java index e221d8e..01b7427 100644 --- a/src/main/java/model/DAO/DAOUser.java +++ b/src/main/java/model/DAO/DAOUser.java @@ -282,7 +282,7 @@ public ArrayList getUsersAndPersonalInfoByIdTherapist(int idTherapist) ResultSet resultSet = null; ArrayList list_user=new ArrayList<>(); - UserInfo u=new UserInfo(); + try { connection = DAOConnection.getConnection(); @@ -296,6 +296,7 @@ public ArrayList getUsersAndPersonalInfoByIdTherapist(int idTherapist) resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { + UserInfo u=new UserInfo(); u.setId(resultSet.getInt("ID")); u.setEmail(resultSet.getString("Email")); u.setActivationDate(resultSet.getTimestamp("ActivationDate")); diff --git a/src/main/webapp/JSP/testTable.jsp b/src/main/webapp/JSP/testTable.jsp index e535c01..05b0091 100644 --- a/src/main/webapp/JSP/testTable.jsp +++ b/src/main/webapp/JSP/testTable.jsp @@ -49,10 +49,10 @@ - - - - + + + + @@ -63,11 +63,15 @@ for(UserInfo u: list_user){ %> - <% for (int j = 1; j <= 4; j++) { %> - - <% } %> + + + + - <% }} %> + <% + } + } + %>
Colonna 1Colonna 2Colonna 3Colonna 4IconaNomeCognomeInizio Terapia
Elemento <%= j %> <%=u.getEmail()%><%=u.getFirstname()%><%=u.getLastname()%><%=u.getActivationDate()%>
From b3dc0b49edc5c0cdf50c4893f7434657697f7a2a Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Fri, 29 Dec 2023 19:52:53 +0100 Subject: [PATCH 07/29] print patient of X therapist v.4 + name of therapist logged on homepage --- .../java/controller/homeTherapistServlet.java | 8 +- src/main/java/model/DAO/DAOPersonalInfo.java | 60 +++++++ .../service/personalinfo/PersonalInfo.java | 1 + src/main/webapp/CSS/homeTherapist.css | 38 +++- src/main/webapp/JSP/homeTherapist.jsp | 165 +++++++++--------- 5 files changed, 181 insertions(+), 91 deletions(-) diff --git a/src/main/java/controller/homeTherapistServlet.java b/src/main/java/controller/homeTherapistServlet.java index 277b1b1..5631a26 100644 --- a/src/main/java/controller/homeTherapistServlet.java +++ b/src/main/java/controller/homeTherapistServlet.java @@ -9,8 +9,9 @@ import java.util.ArrayList; import javax.servlet.http.HttpSession; import javax.servlet.RequestDispatcher; -import model.entity.PersonalInfo; + import model.entity.*; +import model.service.personalinfo.PersonalInfo; @WebServlet("/homeTherapistServlet") public class homeTherapistServlet extends HttpServlet { @@ -25,6 +26,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t HttpSession session = request.getSession(); model.service.user.UserData userService = new model.service.user.UserData(); + model.service.personalinfo.PersonalInfo piService= new PersonalInfo(); ArrayList list_user=new ArrayList<>(); //String tipo=request.getParameter("type"); @@ -33,8 +35,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t session.setAttribute("list_user",list_user); + model.entity.PersonalInfo InfoLogged=piService.getPersonalInfoById(logged.getId()); + session.setAttribute("NameSurnameLogged",InfoLogged.getFirstname()+" "+InfoLogged.getLastname()); - response.sendRedirect("JSP/testTable.jsp"); + response.sendRedirect("JSP/homeTherapist.jsp"); } diff --git a/src/main/java/model/DAO/DAOPersonalInfo.java b/src/main/java/model/DAO/DAOPersonalInfo.java index 7a0d6f3..4eafbc7 100644 --- a/src/main/java/model/DAO/DAOPersonalInfo.java +++ b/src/main/java/model/DAO/DAOPersonalInfo.java @@ -1,10 +1,28 @@ package model.DAO; +import model.entity.PersonalInfo; +import model.entity.User; + import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; public class DAOPersonalInfo { + + private PersonalInfo getPersonalInfoFromResultSet(ResultSet resultSet) throws SQLException { + PersonalInfo pi = new PersonalInfo(); + + pi.setIdUser(resultSet.getInt("ID_user")); + pi.setFirstname(resultSet.getString("Firstname")); + pi.setLastname(resultSet.getString("Lastname")); + pi.setDateOfBirth(resultSet.getDate("DateOfBirth")); + pi.setGender(resultSet.getString("Gender")); + pi.setAddress(resultSet.getString("Address")); + pi.setSsn(resultSet.getString("SSN")); + pi.setPhone(resultSet.getString("Phone")); + return pi; + } public boolean createRegistry(int id, String name, String surname) { Connection connection = null; PreparedStatement preparedStatementPersonalInfo = null; @@ -46,5 +64,47 @@ public boolean createRegistry(int id, String name, String surname) { return false; // Default to false if an exception occurs } + + public PersonalInfo getPersonalInfoById(int id) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + + connection = DAOConnection.getConnection(); + String query = null; + + + query = "SELECT * FROM personal_info WHERE ID_user = ?"; + + + preparedStatement = connection.prepareStatement(query); + preparedStatement.setObject(1, id); + + resultSet = preparedStatement.executeQuery(); + + if (resultSet.next()) { + return getPersonalInfoFromResultSet(resultSet); + } + + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } finally { + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + + return null; // or you may throw an exception here + } + + } diff --git a/src/main/java/model/service/personalinfo/PersonalInfo.java b/src/main/java/model/service/personalinfo/PersonalInfo.java index 1b0e203..9ce4362 100644 --- a/src/main/java/model/service/personalinfo/PersonalInfo.java +++ b/src/main/java/model/service/personalinfo/PersonalInfo.java @@ -5,4 +5,5 @@ public class PersonalInfo { DAOPersonalInfo personalInfoDAO = new DAOPersonalInfo(); public boolean createRegistry(int id, String name, String surname) {return personalInfoDAO.createRegistry(id, name, surname);} + public model.entity.PersonalInfo getPersonalInfoById(int id) {return personalInfoDAO.getPersonalInfoById(id); } } diff --git a/src/main/webapp/CSS/homeTherapist.css b/src/main/webapp/CSS/homeTherapist.css index 04c2d2d..ed19b9b 100644 --- a/src/main/webapp/CSS/homeTherapist.css +++ b/src/main/webapp/CSS/homeTherapist.css @@ -1,3 +1,30 @@ +.table-container { + max-height: 350px; /* Altezza massima della tabella */ + overflow-y: auto; /* Rendi scorrevole solo l'asse Y quando necessario */ +} + +table { + width: 100%; + border-collapse: collapse; + border-spacing: 0 35px; /* Imposta uno spazio vuoto tra le righe */ +} + +tr { + + text-align: center; /* Centra il testo orizzontalmente */ + vertical-align: middle; /* Centra verticalmente */ +} + +td { + + text-align: center; /* Centra il testo orizzontalmente */ + vertical-align: middle; /* Centra verticalmente */ +} + + + +/*----*/ + html { margin: 0px; height: 100%; @@ -93,7 +120,7 @@ a { .element-home-logopedista .overlap-group { position: absolute; - width: 499px; + width: 600px; height: 61px; top: 54px; left: 76px; @@ -175,10 +202,8 @@ a { } .element-home-logopedista .element { - position: absolute; - width: 41px; + position: relative; top: 8px; - left: 2px; font-family: "Poppins", Helvetica; font-weight: 600; color: #199a8e; @@ -431,12 +456,13 @@ a { position: absolute; width: 102px; top: 467px; - left: 14px; + left: 0px; font-family: "Poppins", Helvetica; font-weight: 600; color: #221f1f; - font-size: 7px; + font-size: 10px; letter-spacing: 0; + text-align: center; /* Allinea il testo al centro orizzontalmente */ line-height: normal; } diff --git a/src/main/webapp/JSP/homeTherapist.jsp b/src/main/webapp/JSP/homeTherapist.jsp index e0d8420..4e55779 100644 --- a/src/main/webapp/JSP/homeTherapist.jsp +++ b/src/main/webapp/JSP/homeTherapist.jsp @@ -1,9 +1,14 @@ +<%@ page import="model.entity.*"%> +<%@ page import="java.util.ArrayList"%> +<%@ page import="java.text.SimpleDateFormat" %> +<%@ page import="java.util.Date" %> +
@@ -12,91 +17,85 @@
+
PAZIENTI
-
-
-
-
-
Inizio Terapia:  gg/mm/yyy
-
Nome Cognome
-
-
-
-
-
-
72%
-
-
-
-
-
-
-
-
-
Inizio Terapia:  gg/mm/yyy
-
Nome Cognome
-
-
-
-
-
-
-
-
Inizio Terapia:  gg/mm/yyy
-
Nome Cognome
-
-
-
-
-
-
-
-
-
Inizio Terapia:  gg/mm/yyy
-
Nome Cognome
-
-
-
-
-
-
-
-
-
Inizio Terapia:  gg/mm/yyy
-
Nome Cognome
-
-
-
-
-
-
-
72%
-
-
-
72%
-
-
-
72%
-
-
-
72%
-
+
+ + + + + + + + + + + + <% + if(session.getAttribute("list_user")!=null) { + @SuppressWarnings("unchecked") + ArrayList list_user=(ArrayList) session.getAttribute("list_user"); + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + for(UserInfo u: list_user){ + %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
- -
- -
- -
- -
-
-
-
+ <% + } + } + %> + +
Inizio Terapia Progressi
<%=u.getFirstname()%> <%=u.getLastname()%><%= sdf.format(u.getActivationDate()) %> +
72%
+
<%=u.getFirstname()%> <%=u.getLastname()%><%= sdf.format(u.getActivationDate()) %> +
72%
+
<%=u.getFirstname()%> <%=u.getLastname()%><%= sdf.format(u.getActivationDate()) %> +
72%
+
<%=u.getFirstname()%> <%=u.getLastname()%><%= sdf.format(u.getActivationDate()) %> +
72%
+
<%=u.getFirstname()%> <%=u.getLastname()%><%= sdf.format(u.getActivationDate()) %> +
72%
+
<%=u.getFirstname()%> <%=u.getLastname()%><%= sdf.format(u.getActivationDate()) %> +
72%
+
-
PAZIENTI
+
@@ -109,7 +108,7 @@ -
Dr Nome Cognome
+
Dr.
<%=session.getAttribute("NameSurnameLogged")%>
@@ -119,4 +118,4 @@
- + \ No newline at end of file From 1864c2dd6015e3ac250db5acb3e10e9e67c883a9 Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Sat, 30 Dec 2023 17:40:28 +0100 Subject: [PATCH 08/29] comments --- src/main/webapp/JSP/homeTherapist.jsp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/webapp/JSP/homeTherapist.jsp b/src/main/webapp/JSP/homeTherapist.jsp index 4e55779..3059c71 100644 --- a/src/main/webapp/JSP/homeTherapist.jsp +++ b/src/main/webapp/JSP/homeTherapist.jsp @@ -46,6 +46,7 @@
72%
+ <%=u.getFirstname()%> <%=u.getLastname()%> @@ -86,7 +87,7 @@
72%
- + <% } } From 271e0db9e956612d93e0884030249d421c2a4da9 Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Sat, 30 Dec 2023 19:03:57 +0100 Subject: [PATCH 09/29] SearchBar --- .../java/controller/homeTherapistServlet.java | 1 + src/main/webapp/CSS/homeTherapist.css | 16 +++++++-- src/main/webapp/JS/searchBar.js | 25 +++++++++++++ src/main/webapp/JSP/homeTherapist.jsp | 4 +++ src/main/webapp/JSP/testTable.jsp | 35 +++++++++++++++++++ 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 src/main/webapp/JS/searchBar.js diff --git a/src/main/java/controller/homeTherapistServlet.java b/src/main/java/controller/homeTherapistServlet.java index 5631a26..20c7f4e 100644 --- a/src/main/java/controller/homeTherapistServlet.java +++ b/src/main/java/controller/homeTherapistServlet.java @@ -39,6 +39,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t session.setAttribute("NameSurnameLogged",InfoLogged.getFirstname()+" "+InfoLogged.getLastname()); response.sendRedirect("JSP/homeTherapist.jsp"); + //response.sendRedirect("JSP/testTable.jsp"); } diff --git a/src/main/webapp/CSS/homeTherapist.css b/src/main/webapp/CSS/homeTherapist.css index ed19b9b..5147785 100644 --- a/src/main/webapp/CSS/homeTherapist.css +++ b/src/main/webapp/CSS/homeTherapist.css @@ -1,3 +1,15 @@ +/* Stile per la barra di ricerca */ +#searchInput { + padding: 8px; + border: 0px; + position: absolute; + width: 70%; + top: 10px; + left: 50px; + outline: none; +} + + .table-container { max-height: 350px; /* Altezza massima della tabella */ overflow-y: auto; /* Rendi scorrevole solo l'asse Y quando necessario */ @@ -5,8 +17,8 @@ table { width: 100%; - border-collapse: collapse; - border-spacing: 0 35px; /* Imposta uno spazio vuoto tra le righe */ + border-collapse: separate; + border-spacing: 0 10px; /* Imposta uno spazio vuoto tra le righe */ } tr { diff --git a/src/main/webapp/JS/searchBar.js b/src/main/webapp/JS/searchBar.js new file mode 100644 index 0000000..4b15710 --- /dev/null +++ b/src/main/webapp/JS/searchBar.js @@ -0,0 +1,25 @@ +//search bar for name and surname +$(document).ready(function () { + var tableContainer = document.getElementById('tableContainer'); + + // Aggiungi un gestore di eventi all'input di ricerca + $('#searchInput').on('input', function () { + var searchText = $(this).val().toLowerCase(); + + // Nascondi tutte le righe + tableContainer.getElementsByTagName('tbody')[0].style.marginTop = '0'; + + // Filtra e mostra solo le righe che corrispondono alla ricerca + $('tbody tr').each(function () { + var name = $(this).find('td:eq(1)').text().toLowerCase(); + var lastName = $(this).find('td:eq(2)').text().toLowerCase(); + + if (name.includes(searchText) || lastName.includes(searchText)) { + $(this).show(); + } else { + $(this).hide(); + } + }); + }); + +}); \ No newline at end of file diff --git a/src/main/webapp/JSP/homeTherapist.jsp b/src/main/webapp/JSP/homeTherapist.jsp index 3059c71..9028175 100644 --- a/src/main/webapp/JSP/homeTherapist.jsp +++ b/src/main/webapp/JSP/homeTherapist.jsp @@ -5,6 +5,7 @@ + @@ -16,6 +17,7 @@
+
PAZIENTI
@@ -113,10 +115,12 @@
+
+ \ No newline at end of file diff --git a/src/main/webapp/JSP/testTable.jsp b/src/main/webapp/JSP/testTable.jsp index 05b0091..9bec059 100644 --- a/src/main/webapp/JSP/testTable.jsp +++ b/src/main/webapp/JSP/testTable.jsp @@ -4,6 +4,8 @@ + + - - - - - - -
- - - - - - - - - - - <% - if(session.getAttribute("list_user")!=null) { - @SuppressWarnings("unchecked") - ArrayList list_user=(ArrayList) session.getAttribute("list_user"); - for(UserInfo u: list_user){ - %> - - - - - - - <% - } - } - %> - -
IconaNomeCognomeInizio Terapia
<%=u.getFirstname()%><%=u.getLastname()%><%=u.getActivationDate()%>
-
- - - - - From 66cc768a5597f68a9f873a980c0922bfb690d318 Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Thu, 4 Jan 2024 19:21:12 +0100 Subject: [PATCH 17/29] fix --- src/main/java/controller/homeTherapistServlet.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/controller/homeTherapistServlet.java b/src/main/java/controller/homeTherapistServlet.java index 0ed0892..a696645 100644 --- a/src/main/java/controller/homeTherapistServlet.java +++ b/src/main/java/controller/homeTherapistServlet.java @@ -34,12 +34,6 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t session.setAttribute("list_user",list_user); - for(UserInfo u: list_user) { - System.out.println(u.getId()); - } - - System.out.println("logged: "+logged.getId()); - model.entity.PersonalInfo InfoLogged=piService.getPersonalInfoById(logged.getId()); if(InfoLogged!=null) session.setAttribute("NameSurnameLogged", InfoLogged.getFirstname() + " " + InfoLogged.getLastname()); From 7a13cc6544447025dd348d6c4e80183f7e83833b Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Thu, 4 Jan 2024 20:36:10 +0100 Subject: [PATCH 18/29] create dao condition --- src/main/java/model/DAO/DAOCondition.java | 129 ++++++++++++++++++++++ src/main/java/model/entity/Condition.java | 10 ++ 2 files changed, 139 insertions(+) create mode 100644 src/main/java/model/DAO/DAOCondition.java diff --git a/src/main/java/model/DAO/DAOCondition.java b/src/main/java/model/DAO/DAOCondition.java new file mode 100644 index 0000000..27145c6 --- /dev/null +++ b/src/main/java/model/DAO/DAOCondition.java @@ -0,0 +1,129 @@ +package model.DAO; + +import model.entity.Condition; +import model.entity.PatientCondition; +import model.entity.User; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; + +public class DAOCondition { + + + private Condition getConditionFromResultSet(ResultSet resultSet) throws SQLException { + Condition c = new Condition(); + + c.setIdCondition(resultSet.getInt("ID_condition")); + c.setDisorderDescription(resultSet.getString("DisorderDescription")); + c.setDisorderName(resultSet.getString("DisorderName")); + c.setSeverity(-1); + + return c; + } + + private Condition getPeronalConditionFromResultSet(ResultSet resultSet) throws SQLException { + Condition c = new Condition(); + + c.setIdCondition(resultSet.getInt("ID_condition")); + c.setDisorderDescription(resultSet.getString("DisorderDescription")); + c.setDisorderName(resultSet.getString("DisorderName")); + c.setSeverity(resultSet.getInt("Severity")); + + return c; + } + + private PatientCondition getPatientConditionFromResultSet(ResultSet resultSet) throws SQLException { + PatientCondition pc = new PatientCondition(); + + pc.setIdCondition(resultSet.getInt("ID_condition")); + pc.setIdPatient(resultSet.getInt("ID_patient")); + pc.setSeverity(resultSet.getInt("Severity")); + + return pc; + } + + public ArrayList getConditionsOfPatient(int id_patient) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList list_PersonalCondition=new ArrayList<>(); + try { + + connection = DAOConnection.getConnection(); + String query = null; + + query = "SELECT c.DisorderName, c.DisorderDescription, pc.Severity\n" + + "FROM `condition` c\n" + + "JOIN PatientCondition pc ON c.ID_condition = pc.ID_condition\n" + + "WHERE pc.ID_patient = ?;"; + + preparedStatement = connection.prepareStatement(query); + preparedStatement.setObject(1, id_patient); + + resultSet = preparedStatement.executeQuery(); + + while (resultSet.next()) { + list_PersonalCondition.add(getPeronalConditionFromResultSet(resultSet)); + } + return list_PersonalCondition; + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } finally { + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + return null; // or you may throw an exception here + } + + public ArrayList getConditionsNOTOfPatient(int id_patient) { + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + ArrayList list_PersonalCondition=new ArrayList<>(); + try { + + connection = DAOConnection.getConnection(); + String query = null; + + query = "SELECT c.*\n" + + "FROM `condition` c\n" + + "LEFT JOIN PatientCondition pc ON c.ID_condition = pc.ID_condition AND pc.ID_patient = ?\n" + + "WHERE pc.ID_patient IS NULL\n" + + "ORDER BY c.DisorderName;"; + + preparedStatement = connection.prepareStatement(query); + preparedStatement.setObject(1, id_patient); + + resultSet = preparedStatement.executeQuery(); + + while (resultSet.next()) { + list_PersonalCondition.add(getConditionFromResultSet(resultSet)); + } + return list_PersonalCondition; + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } finally { + try { + if (resultSet != null) resultSet.close(); + if (preparedStatement != null) preparedStatement.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + return null; // or you may throw an exception here + } + +} diff --git a/src/main/java/model/entity/Condition.java b/src/main/java/model/entity/Condition.java index 5a9b62c..54fc8c2 100644 --- a/src/main/java/model/entity/Condition.java +++ b/src/main/java/model/entity/Condition.java @@ -5,8 +5,18 @@ public class Condition { private String disorderDescription; private String disorderName; + private int severity; + // Getter and Setter methods + public int getSeverity() { + return severity; + } + + public void setSeverity(int severity) { + this.severity = severity; + } + public int getIdCondition() { return idCondition; } From 7c4c1985bce621cfde7af1f3e0de7fbbd8834bbc Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Fri, 5 Jan 2024 20:20:58 +0100 Subject: [PATCH 19/29] added test for condition manager --- .../java/controller/view_patientServlet.java | 14 ++++ src/main/java/model/DAO/DAOCondition.java | 3 +- .../model/service/condition/Condition.java | 14 ++++ .../service/condition/ConditionInterface.java | 11 ++++ src/main/webapp/JSP/test_GestioneMalattie.jsp | 64 +++++++++++++++++++ src/main/webapp/JSP/view_patient.jsp | 10 ++- 6 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 src/main/java/model/service/condition/Condition.java create mode 100644 src/main/java/model/service/condition/ConditionInterface.java create mode 100644 src/main/webapp/JSP/test_GestioneMalattie.jsp diff --git a/src/main/java/controller/view_patientServlet.java b/src/main/java/controller/view_patientServlet.java index a3db256..c7efeb5 100644 --- a/src/main/java/controller/view_patientServlet.java +++ b/src/main/java/controller/view_patientServlet.java @@ -11,6 +11,7 @@ import javax.servlet.RequestDispatcher; import model.entity.*; +import model.service.condition.Condition; import model.service.personalinfo.PersonalInfo; @WebServlet("/view_patientServlet") @@ -37,6 +38,19 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t session.setAttribute("user_selected",user_inf); + /*CONDITION MENU*/ + model.service.condition.Condition ConditionService= new Condition(); + + ArrayList list_PatientCondition=new ArrayList<>(); + ArrayList list_NOTPatientCondition=new ArrayList<>(); + list_PatientCondition=ConditionService.getConditionsOfPatient(userId); + list_NOTPatientCondition=ConditionService.getConditionsNOTOfPatient(userId); + + + + session.setAttribute("list_PatientCondition",list_PatientCondition); + session.setAttribute("list_NOTPatientCondition",list_NOTPatientCondition); + response.sendRedirect("JSP/view_patient.jsp"); } diff --git a/src/main/java/model/DAO/DAOCondition.java b/src/main/java/model/DAO/DAOCondition.java index 27145c6..6b38c27 100644 --- a/src/main/java/model/DAO/DAOCondition.java +++ b/src/main/java/model/DAO/DAOCondition.java @@ -55,7 +55,7 @@ public ArrayList getConditionsOfPatient(int id_patient) { connection = DAOConnection.getConnection(); String query = null; - query = "SELECT c.DisorderName, c.DisorderDescription, pc.Severity\n" + + query = "SELECT c.ID_Condition,c.DisorderName, c.DisorderDescription, pc.Severity\n" + "FROM `condition` c\n" + "JOIN PatientCondition pc ON c.ID_condition = pc.ID_condition\n" + "WHERE pc.ID_patient = ?;"; @@ -68,6 +68,7 @@ public ArrayList getConditionsOfPatient(int id_patient) { while (resultSet.next()) { list_PersonalCondition.add(getPeronalConditionFromResultSet(resultSet)); } + return list_PersonalCondition; } catch (SQLException e) { // Handle the exception (e.g., log or throw) diff --git a/src/main/java/model/service/condition/Condition.java b/src/main/java/model/service/condition/Condition.java new file mode 100644 index 0000000..faca6f6 --- /dev/null +++ b/src/main/java/model/service/condition/Condition.java @@ -0,0 +1,14 @@ +package model.service.condition; + +import model.DAO.DAOCondition; + +import java.util.ArrayList; + +public class Condition { + + DAOCondition c=new DAOCondition(); + + public ArrayList getConditionsOfPatient(int id_patient) { return c.getConditionsOfPatient(id_patient);} + + public ArrayList getConditionsNOTOfPatient(int id_patient) { return c.getConditionsNOTOfPatient(id_patient);} +} diff --git a/src/main/java/model/service/condition/ConditionInterface.java b/src/main/java/model/service/condition/ConditionInterface.java new file mode 100644 index 0000000..818975c --- /dev/null +++ b/src/main/java/model/service/condition/ConditionInterface.java @@ -0,0 +1,11 @@ +package model.service.condition; + +import model.entity.Condition; + +import java.util.ArrayList; + +public interface ConditionInterface { + ArrayList getConditionsOfPatient(int id_patient); + ArrayList getConditionsNOTOfPatient(int id_patient); + +} diff --git a/src/main/webapp/JSP/test_GestioneMalattie.jsp b/src/main/webapp/JSP/test_GestioneMalattie.jsp new file mode 100644 index 0000000..bba6ed6 --- /dev/null +++ b/src/main/webapp/JSP/test_GestioneMalattie.jsp @@ -0,0 +1,64 @@ +<%@ page import="java.util.ArrayList" %> +<%@ page import="model.entity.Condition" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Stampa Array in + + +

Condition

+<% + ArrayList list_PatientCondition = (ArrayList) session.getAttribute("list_PatientCondition"); + ArrayList list_NOTPatientCondition= (ArrayList) session.getAttribute("list_NOTPatientCondition"); +%> + + + + + + + + + + + + <% + for (Condition condition : list_PatientCondition) { + %> + + + + + + + + <% } %> + + <% + for (Condition condition : list_NOTPatientCondition) { + %> + + + + + + + + <% } %> + +
IDDisorder DescriptionDisorder NameSeverityOperazione
<%= condition.getIdCondition() %><%= condition.getDisorderDescription() %><%= condition.getDisorderName() %><%= condition.getSeverity() %> +
+ + +
+
<%= condition.getIdCondition() %><%= condition.getDisorderDescription() %><%= condition.getDisorderName() %><%= condition.getSeverity() %> +
+ + +
+
+ + + + + diff --git a/src/main/webapp/JSP/view_patient.jsp b/src/main/webapp/JSP/view_patient.jsp index 1ef9e35..1510af7 100644 --- a/src/main/webapp/JSP/view_patient.jsp +++ b/src/main/webapp/JSP/view_patient.jsp @@ -50,7 +50,7 @@
-
+
Modifica patologie
@@ -77,5 +77,13 @@
Andamento
+ + + + From feefa5f81c3774f71f16ad16a6b73aaf5f0e4f69 Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Fri, 5 Jan 2024 20:26:31 +0100 Subject: [PATCH 20/29] DAO Condition fix --- src/main/java/model/DAO/DAOCondition.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/model/DAO/DAOCondition.java b/src/main/java/model/DAO/DAOCondition.java index 6b38c27..649f7aa 100644 --- a/src/main/java/model/DAO/DAOCondition.java +++ b/src/main/java/model/DAO/DAOCondition.java @@ -11,7 +11,16 @@ import java.util.ArrayList; public class DAOCondition { + private Connection connection; + public DAOCondition(Connection connection) {this.connection=connection;} + public DAOCondition() { + try{ + this.connection=DAOConnection.getConnection(); + }catch (SQLException e) { + e.printStackTrace(); + } + } private Condition getConditionFromResultSet(ResultSet resultSet) throws SQLException { Condition c = new Condition(); @@ -52,7 +61,7 @@ public ArrayList getConditionsOfPatient(int id_patient) { ArrayList list_PersonalCondition=new ArrayList<>(); try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection():connection; String query = null; query = "SELECT c.ID_Condition,c.DisorderName, c.DisorderDescription, pc.Severity\n" + @@ -93,7 +102,7 @@ public ArrayList getConditionsNOTOfPatient(int id_patient) { ArrayList list_PersonalCondition=new ArrayList<>(); try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection():connection; String query = null; query = "SELECT c.*\n" + From e6467a73dcca3e53eca0980dba0f15d683087e95 Mon Sep 17 00:00:00 2001 From: panuozzo77 Date: Fri, 5 Jan 2024 20:48:19 +0100 Subject: [PATCH 21/29] added constructor method to inject connection in Raffaele's DAOs --- src/main/java/model/DAO/DAOExercise.java | 26 +++++++++++++------ .../java/model/DAO/DAOExerciseGlossary.java | 17 ++++++++++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/model/DAO/DAOExercise.java b/src/main/java/model/DAO/DAOExercise.java index 014bdb1..727782e 100644 --- a/src/main/java/model/DAO/DAOExercise.java +++ b/src/main/java/model/DAO/DAOExercise.java @@ -8,6 +8,20 @@ * The DAOExercise class provides methods for retrieving Exercise information from a database. */ public class DAOExercise { + + private Connection connection; + + public DAOExercise(Connection connection) { + this.connection = connection; + } + + public DAOExercise() { + try { + this.connection = DAOConnection.getConnection(); + } catch (SQLException e) { + e.printStackTrace(); + } + } /** * This method extracts Exercise object data from a ResultSet * @@ -39,12 +53,11 @@ private static Exercise extractExerciseFromResultSet(ResultSet resultSet) throws */ public Exercise getExerciseByPk(int userID, int exerciseID, Date insertDate) { String query = "SELECT * FROM exercise WHERE ID_user = ? AND ID_exercise = ? AND InsertionDate = ?"; - Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection() : connection; preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, userID); preparedStatement.setInt(2, exerciseID); @@ -73,11 +86,10 @@ public Exercise getExerciseByPk(int userID, int exerciseID, Date insertDate) { public boolean setExerciseExecution(int userID, int exerciseID, Date insertDate, Blob execution) { String query = "UPDATE exercise SET Execution = ? WHERE ID_user = ? AND ID_exercise = ? AND InsertionDate = ?;"; - Connection connection = null; PreparedStatement preparedStatement = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection() : connection; preparedStatement = connection.prepareStatement(query); preparedStatement.setBlob(1, execution); preparedStatement.setInt(2, userID); @@ -101,11 +113,10 @@ public boolean setExerciseExecution(int userID, int exerciseID, Date insertDate, public boolean setExerciseEvaluation(int userID, int exerciseID, Date insertDate, int evaluation) { String query = "UPDATE exercise SET Evaluation = ? WHERE ID_user = ? AND ID_exercise = ? AND InsertionDate = ?;"; - Connection connection = null; PreparedStatement preparedStatement = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection() : connection; preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, evaluation); preparedStatement.setInt(2, userID); @@ -129,11 +140,10 @@ public boolean setExerciseEvaluation(int userID, int exerciseID, Date insertDate public boolean setExerciseCompletionDate(int userID, int exerciseID, Date insertDate, Date completion) { String query = "UPDATE exercise SET CompletionDate = ? WHERE ID_user = ? AND ID_exercise = ? AND InsertionDate = ?;"; - Connection connection = null; PreparedStatement preparedStatement = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection() : connection; preparedStatement = connection.prepareStatement(query); preparedStatement.setDate(1, completion); preparedStatement.setInt(2, userID); diff --git a/src/main/java/model/DAO/DAOExerciseGlossary.java b/src/main/java/model/DAO/DAOExerciseGlossary.java index 6fa9e73..9f3b64b 100644 --- a/src/main/java/model/DAO/DAOExerciseGlossary.java +++ b/src/main/java/model/DAO/DAOExerciseGlossary.java @@ -12,6 +12,20 @@ * The DAOExerciseGlossary class provides methods for retrieving ExerciseGlossary information from a database. */ public class DAOExerciseGlossary { + + private Connection connection; + + public DAOExerciseGlossary(Connection connection) { + this.connection = connection; + } + + public DAOExerciseGlossary() { + try { + this.connection = DAOConnection.getConnection(); + } catch (SQLException e) { + e.printStackTrace(); + } + } /** * This method extracts Exercise object data from a ResultSet * @@ -41,12 +55,11 @@ private static ExerciseGlossary extractExerciseFromResultSet(ResultSet resultSet */ public ExerciseGlossary getExerciseByCode(int code) { String query = "SELECT * FROM exercise_glossary WHERE ID_exercise = ?"; - Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection() : connection; preparedStatement = connection.prepareStatement(query); preparedStatement.setInt(1, code); resultSet = preparedStatement.executeQuery(); From 72a5bd72e66d14f51a99d6beadcbfb1ab6c8cdec Mon Sep 17 00:00:00 2001 From: panuozzo77 Date: Fri, 5 Jan 2024 20:57:19 +0100 Subject: [PATCH 22/29] provided test classes for 2 Entities --- .../model/entity/ExerciseGlossaryTest.java | 40 +++++++++++++++++ src/test/java/model/entity/ExerciseTest.java | 43 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/test/java/model/entity/ExerciseGlossaryTest.java create mode 100644 src/test/java/model/entity/ExerciseTest.java diff --git a/src/test/java/model/entity/ExerciseGlossaryTest.java b/src/test/java/model/entity/ExerciseGlossaryTest.java new file mode 100644 index 0000000..5fc0eda --- /dev/null +++ b/src/test/java/model/entity/ExerciseGlossaryTest.java @@ -0,0 +1,40 @@ +package model.entity; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ExerciseGlossaryTest { + + @Test + public void testExerciseGlossary() { + ExerciseGlossary exerciseGlossary = new ExerciseGlossary(); + + int id = 1; + String name = "Test Exercise"; + String description = "Test Description"; + String type = "Type 1"; + int difficulty = 3; + String initialState = "Initial"; + String solution = "Solution"; + String target = "Target"; + + exerciseGlossary.setIdExercise(id); + exerciseGlossary.setExerciseName(name); + exerciseGlossary.setExerciseDescription(description); + exerciseGlossary.setType(type); + exerciseGlossary.setDifficulty(difficulty); + exerciseGlossary.setInitialState(initialState); + exerciseGlossary.setSolution(solution); + exerciseGlossary.setTarget(target); + + assertEquals(id, exerciseGlossary.getIdExercise()); + assertEquals(name, exerciseGlossary.getExerciseName()); + assertEquals(description, exerciseGlossary.getExerciseDescription()); + assertEquals(type, exerciseGlossary.getType()); + assertEquals(difficulty, exerciseGlossary.getDifficulty()); + assertEquals(initialState, exerciseGlossary.getInitialState()); + assertEquals(solution, exerciseGlossary.getSolution()); + assertEquals(target, exerciseGlossary.getTarget()); + } +} diff --git a/src/test/java/model/entity/ExerciseTest.java b/src/test/java/model/entity/ExerciseTest.java new file mode 100644 index 0000000..150c378 --- /dev/null +++ b/src/test/java/model/entity/ExerciseTest.java @@ -0,0 +1,43 @@ +package model.entity; + + +import org.junit.jupiter.api.Test; +import java.sql.Blob; +import java.sql.Date; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ExerciseTest { + + @Test + public void testExercise(){ + Exercise exercise = new Exercise(); + + int idUser = 1; + int idExercise = 2; + Date dateInsertion = new Date(2024, 1, 1); + Date dateCompletion = new Date(2024, 1, 1); + Blob blob = null; // Assuming blob as null for this unit test + int evaluation = 10; + int recommended = 1; + int feedback = -1; + + exercise.setIdUser(idUser); + exercise.setIdExercise(idExercise); + exercise.setInsertionDate(dateInsertion); + exercise.setCompletionDate(dateCompletion); + exercise.setExecution(blob); + exercise.setEvaluation(evaluation); + exercise.setRecommended(recommended); + exercise.setFeedback(feedback); + + assertEquals(idUser, exercise.getIdUser()); + assertEquals(idExercise, exercise.getIdExercise()); + assertEquals(dateInsertion, exercise.getInsertionDate()); + assertEquals(dateCompletion, exercise.getCompletionDate()); + assertEquals(blob, exercise.getExecution()); + assertEquals(evaluation, exercise.getEvaluation()); + assertEquals(recommended, exercise.getRecommended()); + assertEquals(feedback, exercise.getFeedback()); + } +} From 2ca55ce102245da3e5d804e9141fb1419af361cf Mon Sep 17 00:00:00 2001 From: panuozzo77 Date: Fri, 5 Jan 2024 21:08:56 +0100 Subject: [PATCH 23/29] added DAOExerciseGlossaryTest --- .../model/DAO/DAOExerciseGlossaryTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/test/java/model/DAO/DAOExerciseGlossaryTest.java diff --git a/src/test/java/model/DAO/DAOExerciseGlossaryTest.java b/src/test/java/model/DAO/DAOExerciseGlossaryTest.java new file mode 100644 index 0000000..e5708ea --- /dev/null +++ b/src/test/java/model/DAO/DAOExerciseGlossaryTest.java @@ -0,0 +1,54 @@ +package model.DAO; + +import model.entity.ExerciseGlossary; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.sql.*; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class DAOExerciseGlossaryTest { + private DAOExerciseGlossary daoExerciseGlossary; + private Connection connectionMock; + private PreparedStatement preparedStatementMock; + private ResultSet resultSetMock; + + @BeforeEach + void setUp() throws SQLException { + // Mock all SQL objects + connectionMock = mock(Connection.class); + preparedStatementMock = mock(PreparedStatement.class); + resultSetMock = mock(ResultSet.class); + + // When a new prepared statement is created, return the mock + when(connectionMock.prepareStatement(anyString())).thenReturn(preparedStatementMock); + + // Create a new DAOExerciseGlossary instance with the mock connection + daoExerciseGlossary = new DAOExerciseGlossary(connectionMock); + } + + @Test + void testGetExerciseByCode() throws SQLException { + int code = 1; + when(connectionMock.isClosed()).thenReturn(false); + when(connectionMock.prepareStatement(any())).thenReturn(preparedStatementMock); + when(preparedStatementMock.executeQuery()).thenReturn(resultSetMock); + when(resultSetMock.next()).thenReturn(true); + when(resultSetMock.getInt("ID_exercise")).thenReturn(code); + when(resultSetMock.getString("ExerciseName")).thenReturn("Example Exercise"); + // Mock other columns as necessary... + + ExerciseGlossary exerciseGlossary = daoExerciseGlossary.getExerciseByCode(code); + + assertNotNull(exerciseGlossary); + assertEquals(code, exerciseGlossary.getIdExercise()); + assertEquals("Example Exercise", exerciseGlossary.getExerciseName()); + // Assert other columns as necessary... + + verify(connectionMock, times(1)).prepareStatement(any()); + verify(preparedStatementMock, times(1)).setInt(1, code); + verify(preparedStatementMock, times(1)).executeQuery(); + } +} From dd26b851ca12abb10c97f0b96020c8e05fe4d3a0 Mon Sep 17 00:00:00 2001 From: panuozzo77 Date: Fri, 5 Jan 2024 22:18:52 +0100 Subject: [PATCH 24/29] provided Unit Tests for DAOExercise --- src/test/java/model/DAO/DAOExerciseTest.java | 133 +++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 src/test/java/model/DAO/DAOExerciseTest.java diff --git a/src/test/java/model/DAO/DAOExerciseTest.java b/src/test/java/model/DAO/DAOExerciseTest.java new file mode 100644 index 0000000..8975317 --- /dev/null +++ b/src/test/java/model/DAO/DAOExerciseTest.java @@ -0,0 +1,133 @@ +package model.DAO; + +import model.entity.Exercise; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.sql.*; +import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.*; + +class DAOExerciseTest { + private DAOExercise daoExercise; + private Connection connectionMock; + private PreparedStatement preparedStatementMock; + private ResultSet resultSetMock; + + @BeforeEach + void setUp() throws SQLException { + connectionMock = mock(Connection.class); + preparedStatementMock = mock(PreparedStatement.class); + resultSetMock = mock(ResultSet.class); + daoExercise = new DAOExercise(connectionMock); + + when(connectionMock.prepareStatement(anyString())).thenReturn(preparedStatementMock); + when(connectionMock.isClosed()).thenReturn(false); + } + + @Test + void testGetExerciseByPk() throws SQLException { + int userId = 1; + int exerciseId = 1; + Date insertDate = java.sql.Date.valueOf("2023-12-01"); + + when(preparedStatementMock.executeQuery()).thenReturn(resultSetMock); + when(resultSetMock.next()).thenReturn(true); + when(resultSetMock.getInt("ID_user")).thenReturn(userId); + when(resultSetMock.getInt("ID_exercise")).thenReturn(exerciseId); + when(resultSetMock.getDate("InsertionDate")).thenReturn(insertDate); + // Add other mock configurations for the remaining columns in the resultSet + + Exercise exercise = daoExercise.getExerciseByPk(userId, exerciseId, insertDate); + + assertNotNull(exercise); + assertEquals(userId, exercise.getIdUser()); + assertEquals(exerciseId, exercise.getIdExercise()); + assertEquals(insertDate, exercise.getInsertionDate()); + // Add other assertions for the remaining columns + + verify(preparedStatementMock, times(1)).setInt(1, userId); + verify(preparedStatementMock, times(1)).setInt(2, exerciseId); + verify(preparedStatementMock, times(1)).setDate(3, insertDate); + verify(preparedStatementMock, times(1)).executeQuery(); + } + + @Test + void testSetExerciseExecution() throws SQLException { + int userId = 1; + int exerciseId = 1; + Date insertDate = java.sql.Date.valueOf("2023-12-01"); + Blob blob = mock(Blob.class); + + when(preparedStatementMock.executeUpdate()).thenReturn(1); + + boolean result = daoExercise.setExerciseExecution(userId, exerciseId, insertDate, blob); + + assertTrue(result); + + verify(preparedStatementMock, times(1)).setBlob(1, blob); + verify(preparedStatementMock, times(1)).setInt(2, userId); + verify(preparedStatementMock, times(1)).setInt(3, exerciseId); + verify(preparedStatementMock, times(1)).setDate(4, insertDate); + verify(preparedStatementMock, times(1)).executeUpdate(); + } + + @Test + void testSetExerciseEvaluation() throws SQLException { + int userId = 1; + int exerciseId = 1; + Date insertDate = java.sql.Date.valueOf("2023-12-01"); + int evaluation = 5; + + when(preparedStatementMock.executeUpdate()).thenReturn(1); + + boolean result = daoExercise.setExerciseEvaluation(userId, exerciseId, insertDate, evaluation); + + assertTrue(result); + + verify(preparedStatementMock, times(1)).setInt(1, evaluation); + verify(preparedStatementMock, times(1)).setInt(2, userId); + verify(preparedStatementMock, times(1)).setInt(3, exerciseId); + verify(preparedStatementMock, times(1)).setDate(4, insertDate); + verify(preparedStatementMock, times(1)).executeUpdate(); + } + + @Test + void testSetExerciseCompletionDate() throws SQLException { + int userId = 1; + int exerciseId = 1; + Date insertDate = java.sql.Date.valueOf("2023-12-01"); + Date completionDate = java.sql.Date.valueOf("2023-12-31"); + + when(preparedStatementMock.executeUpdate()).thenReturn(1); + + boolean result = daoExercise.setExerciseCompletionDate(userId, exerciseId, insertDate, completionDate); + + assertTrue(result); + + verify(preparedStatementMock, times(1)).setDate(1, completionDate); + verify(preparedStatementMock, times(1)).setInt(2, userId); + verify(preparedStatementMock, times(1)).setInt(3, exerciseId); + verify(preparedStatementMock, times(1)).setDate(4, insertDate); + verify(preparedStatementMock, times(1)).executeUpdate(); + } + + @Test + void testSetExerciseFeedback() throws SQLException { + int userId = 1; + int exerciseId = 1; + Date insertDate = java.sql.Date.valueOf("2023-12-01"); + int feedback = 5; + + when(preparedStatementMock.executeUpdate()).thenReturn(1); + + boolean result = daoExercise.setExerciseFeedback(userId, exerciseId, insertDate, feedback); + + assertTrue(result); + verify(preparedStatementMock, times(1)).setInt(1, feedback); + verify(preparedStatementMock, times(1)).setInt(2, userId); + verify(preparedStatementMock, times(1)).setInt(3, exerciseId); + verify(preparedStatementMock, times(1)).setDate(4, insertDate); + verify(preparedStatementMock, times(1)).executeUpdate(); + } +} From 6911db8641e6049110d31b217a1775363ec0c504 Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Sat, 6 Jan 2024 01:57:19 +0100 Subject: [PATCH 25/29] condition manager BE --- .../controller/AddRemovePatientCondition.java | 53 ++++++++++ src/main/java/controller/PopupServlet.java | 23 +++++ .../java/controller/view_patientServlet.java | 17 ++-- src/main/java/model/DAO/DAOCondition.java | 97 +++++++++++++++++-- .../model/service/condition/Condition.java | 4 + .../service/condition/ConditionInterface.java | 3 +- src/main/webapp/JSP/test_GestioneMalattie.jsp | 47 ++++++--- src/main/webapp/JSP/test_popup.jsp | 95 ++++++++++++++++++ 8 files changed, 309 insertions(+), 30 deletions(-) create mode 100644 src/main/java/controller/AddRemovePatientCondition.java create mode 100644 src/main/java/controller/PopupServlet.java create mode 100644 src/main/webapp/JSP/test_popup.jsp diff --git a/src/main/java/controller/AddRemovePatientCondition.java b/src/main/java/controller/AddRemovePatientCondition.java new file mode 100644 index 0000000..ffebc2b --- /dev/null +++ b/src/main/java/controller/AddRemovePatientCondition.java @@ -0,0 +1,53 @@ +package controller; + +import model.service.condition.Condition; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import javax.servlet.http.HttpSession; + +@WebServlet("/AddRemovePatientCondition") +public class AddRemovePatientCondition extends HttpServlet { + + + + public AddRemovePatientCondition() { + super(); + + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + HttpSession session = request.getSession(); + + model.service.condition.Condition conditionService= new Condition(); + + int idPatient= Integer.parseInt(request.getParameter("idPatient")); + int idCondition= Integer.parseInt(request.getParameter("idCondition")); + + String operation= request.getParameter("operation"); + if (operation.equals("Rimuovi")) //REMOVE + { + conditionService.RemoveConditionPatient(idCondition,idPatient); + } + if (operation.equals("Aggiungi")) //ADD + { + int severity= Integer.parseInt(request.getParameter("severity")); + conditionService.AddConditionPatient(idCondition,idPatient,severity); + } + + response.sendRedirect("view_patientServlet"); + + } + + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + doGet(request, response); + } + + +} diff --git a/src/main/java/controller/PopupServlet.java b/src/main/java/controller/PopupServlet.java new file mode 100644 index 0000000..416ce12 --- /dev/null +++ b/src/main/java/controller/PopupServlet.java @@ -0,0 +1,23 @@ +package controller; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet("/PopupServlet") +public class PopupServlet extends HttpServlet { + private static final long serialVersionUID = 1L; + + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + // Esegui qui la logica per aggiornare il messaggio del popup + String updatedMessage = "Nuovo messaggio dalla servlet"; + + response.setContentType("JSP/test_popup.jsp"); + response.getWriter().write(updatedMessage); + } +} + diff --git a/src/main/java/controller/view_patientServlet.java b/src/main/java/controller/view_patientServlet.java index c7efeb5..3bf94c5 100644 --- a/src/main/java/controller/view_patientServlet.java +++ b/src/main/java/controller/view_patientServlet.java @@ -29,22 +29,25 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t model.service.user.UserData userService = new model.service.user.UserData(); model.service.personalinfo.PersonalInfo piService= new PersonalInfo(); - int userId = Integer.parseInt(request.getParameter("userId")); + if(request.getParameter("userId")!=null) { + int userId = Integer.parseInt(request.getParameter("userId")); - User u = userService.getUserByIdOrEmail(userId); - model.entity.PersonalInfo pi = piService.getPersonalInfoById(userId); + User u = userService.getUserByIdOrEmail(userId); + model.entity.PersonalInfo pi = piService.getPersonalInfoById(userId); - UserInfo user_inf= new UserInfo(u.getId(),u.getEmail(),u.getActivationDate(),pi.getFirstname(),pi.getLastname(),pi.getDateOfBirth(),pi.getGender(),pi.getAddress(),pi.getSsn(),pi.getPhone()); + UserInfo user_inf = new UserInfo(u.getId(), u.getEmail(), u.getActivationDate(), pi.getFirstname(), pi.getLastname(), pi.getDateOfBirth(), pi.getGender(), pi.getAddress(), pi.getSsn(), pi.getPhone()); - session.setAttribute("user_selected",user_inf); + session.setAttribute("user_selected", user_inf); + } + UserInfo ui= (UserInfo) session.getAttribute("user_selected"); /*CONDITION MENU*/ model.service.condition.Condition ConditionService= new Condition(); ArrayList list_PatientCondition=new ArrayList<>(); ArrayList list_NOTPatientCondition=new ArrayList<>(); - list_PatientCondition=ConditionService.getConditionsOfPatient(userId); - list_NOTPatientCondition=ConditionService.getConditionsNOTOfPatient(userId); + list_PatientCondition=ConditionService.getConditionsOfPatient(ui.getId()); + list_NOTPatientCondition=ConditionService.getConditionsNOTOfPatient(ui.getId()); diff --git a/src/main/java/model/DAO/DAOCondition.java b/src/main/java/model/DAO/DAOCondition.java index 649f7aa..f25d008 100644 --- a/src/main/java/model/DAO/DAOCondition.java +++ b/src/main/java/model/DAO/DAOCondition.java @@ -11,7 +11,7 @@ import java.util.ArrayList; public class DAOCondition { - private Connection connection; +/* private Connection connection; public DAOCondition(Connection connection) {this.connection=connection;} public DAOCondition() { @@ -21,7 +21,7 @@ public DAOCondition() { e.printStackTrace(); } } - +*/ private Condition getConditionFromResultSet(ResultSet resultSet) throws SQLException { Condition c = new Condition(); @@ -60,8 +60,8 @@ public ArrayList getConditionsOfPatient(int id_patient) { ResultSet resultSet = null; ArrayList list_PersonalCondition=new ArrayList<>(); try { - - connection = connection.isClosed() ? DAOConnection.getConnection():connection; + connection = DAOConnection.getConnection(); + //connection = connection.isClosed() ? DAOConnection.getConnection():connection; String query = null; query = "SELECT c.ID_Condition,c.DisorderName, c.DisorderDescription, pc.Severity\n" + @@ -101,8 +101,8 @@ public ArrayList getConditionsNOTOfPatient(int id_patient) { ResultSet resultSet = null; ArrayList list_PersonalCondition=new ArrayList<>(); try { - - connection = connection.isClosed() ? DAOConnection.getConnection():connection; + connection = DAOConnection.getConnection(); + //connection = connection.isClosed() ? DAOConnection.getConnection():connection; String query = null; query = "SELECT c.*\n" + @@ -136,4 +136,89 @@ public ArrayList getConditionsNOTOfPatient(int id_patient) { return null; // or you may throw an exception here } + + public boolean AddConditionPatient(int ID_condition, int ID_patient, int Severity) { + Connection connection = null; + PreparedStatement preparedStatementPersonalInfo = null; + + try { + connection = DAOConnection.getConnection(); + connection.setAutoCommit(false); // Start a transaction + + // Insert user data into personal_info table + String queryAnagrafica = "INSERT INTO PatientCondition (ID_condition, ID_patient, Severity)\n" + + "VALUES (?, ?, ?)"; + preparedStatementPersonalInfo = connection.prepareStatement(queryAnagrafica); + preparedStatementPersonalInfo.setInt(1, ID_condition); + preparedStatementPersonalInfo.setInt(2, ID_patient); + preparedStatementPersonalInfo.setInt(3, Severity); + preparedStatementPersonalInfo.executeUpdate(); + + connection.commit(); // Commit the transaction + return true; // User created successfully + + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + try { + if (connection != null) { + connection.rollback(); // Rollback the transaction in case of an exception + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + } finally { + try { + if (preparedStatementPersonalInfo != null) preparedStatementPersonalInfo.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + + return false; // Default to false if an exception occurs + } + + public boolean RemoveConditionPatient(int ID_condition, int ID_patient) { + Connection connection = null; + PreparedStatement preparedStatementPersonalInfo = null; + + try { + connection = DAOConnection.getConnection(); + connection.setAutoCommit(false); // Start a transaction + + // Insert user data into personal_info table + String queryAnagrafica = "DELETE FROM PatientCondition\n" + + "WHERE ID_condition = ? AND ID_patient = ?;"; + preparedStatementPersonalInfo = connection.prepareStatement(queryAnagrafica); + preparedStatementPersonalInfo.setInt(1, ID_condition); + preparedStatementPersonalInfo.setInt(2, ID_patient); + preparedStatementPersonalInfo.executeUpdate(); + + connection.commit(); // Commit the transaction + return true; // User created successfully + + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + try { + if (connection != null) { + connection.rollback(); // Rollback the transaction in case of an exception + } + } catch (SQLException ex) { + ex.printStackTrace(); + } + } finally { + try { + if (preparedStatementPersonalInfo != null) preparedStatementPersonalInfo.close(); + DAOConnection.releaseConnection(connection); + } catch (SQLException e) { + // Handle the exception (e.g., log or throw) + e.printStackTrace(); + } + } + + return false; // Default to false if an exception occurs + } } diff --git a/src/main/java/model/service/condition/Condition.java b/src/main/java/model/service/condition/Condition.java index faca6f6..0e53891 100644 --- a/src/main/java/model/service/condition/Condition.java +++ b/src/main/java/model/service/condition/Condition.java @@ -11,4 +11,8 @@ public class Condition { public ArrayList getConditionsOfPatient(int id_patient) { return c.getConditionsOfPatient(id_patient);} public ArrayList getConditionsNOTOfPatient(int id_patient) { return c.getConditionsNOTOfPatient(id_patient);} + + public boolean AddConditionPatient(int ID_condition, int ID_patient, int Severity) {return c.AddConditionPatient(ID_condition, ID_patient,Severity);} + + public boolean RemoveConditionPatient(int ID_condition, int ID_patient) {return c.RemoveConditionPatient(ID_condition,ID_patient);} } diff --git a/src/main/java/model/service/condition/ConditionInterface.java b/src/main/java/model/service/condition/ConditionInterface.java index 818975c..3c516e3 100644 --- a/src/main/java/model/service/condition/ConditionInterface.java +++ b/src/main/java/model/service/condition/ConditionInterface.java @@ -7,5 +7,6 @@ public interface ConditionInterface { ArrayList getConditionsOfPatient(int id_patient); ArrayList getConditionsNOTOfPatient(int id_patient); - + boolean AddConditionPatient(int ID_condition, int ID_patient, int Severity); + boolean RemoveConditionPatient(int ID_condition, int ID_patient); } diff --git a/src/main/webapp/JSP/test_GestioneMalattie.jsp b/src/main/webapp/JSP/test_GestioneMalattie.jsp index bba6ed6..9d3389f 100644 --- a/src/main/webapp/JSP/test_GestioneMalattie.jsp +++ b/src/main/webapp/JSP/test_GestioneMalattie.jsp @@ -1,17 +1,20 @@ <%@ page import="java.util.ArrayList" %> <%@ page import="model.entity.Condition" %> +<%@ page import="model.entity.User" %> +<%@ page import="model.entity.UserInfo" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> - Stampa Array in + CONDITION -

Condition

<% ArrayList list_PatientCondition = (ArrayList) session.getAttribute("list_PatientCondition"); ArrayList list_NOTPatientCondition= (ArrayList) session.getAttribute("list_NOTPatientCondition"); + UserInfo u= (UserInfo) session.getAttribute("user_selected"); %> - +
+ @@ -22,37 +25,49 @@ - <% - for (Condition condition : list_PatientCondition) { - %> + <% for (Condition condition : list_PatientCondition) { %> <% } %> - - <% - for (Condition condition : list_NOTPatientCondition) { - %> + +
Condition of patient
ID
<%= condition.getIdCondition() %> <%= condition.getDisorderDescription() %> <%= condition.getDisorderName() %> <%= condition.getSeverity() %> -
+ +
+
+ + + + + + + + + + + + + <% for (Condition condition : list_NOTPatientCondition) { %> - - + + + <% } %> diff --git a/src/main/webapp/JSP/test_popup.jsp b/src/main/webapp/JSP/test_popup.jsp new file mode 100644 index 0000000..b9944bf --- /dev/null +++ b/src/main/webapp/JSP/test_popup.jsp @@ -0,0 +1,95 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + Popup Page + + + + +
+ +
+ +
+ + + + + + + From a1030dc9e4c4e8467f2c9fe28cf1bb180e6cfdac Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Sat, 6 Jan 2024 10:36:32 +0100 Subject: [PATCH 26/29] dao condition fix connection --- src/main/java/model/DAO/DAOCondition.java | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/model/DAO/DAOCondition.java b/src/main/java/model/DAO/DAOCondition.java index f25d008..83cb60a 100644 --- a/src/main/java/model/DAO/DAOCondition.java +++ b/src/main/java/model/DAO/DAOCondition.java @@ -11,7 +11,7 @@ import java.util.ArrayList; public class DAOCondition { -/* private Connection connection; + private Connection connection; public DAOCondition(Connection connection) {this.connection=connection;} public DAOCondition() { @@ -21,7 +21,7 @@ public DAOCondition() { e.printStackTrace(); } } -*/ + private Condition getConditionFromResultSet(ResultSet resultSet) throws SQLException { Condition c = new Condition(); @@ -55,13 +55,13 @@ private PatientCondition getPatientConditionFromResultSet(ResultSet resultSet) } public ArrayList getConditionsOfPatient(int id_patient) { - Connection connection = null; + PreparedStatement preparedStatement = null; ResultSet resultSet = null; ArrayList list_PersonalCondition=new ArrayList<>(); try { - connection = DAOConnection.getConnection(); - //connection = connection.isClosed() ? DAOConnection.getConnection():connection; + + connection = connection.isClosed() ? DAOConnection.getConnection():connection; String query = null; query = "SELECT c.ID_Condition,c.DisorderName, c.DisorderDescription, pc.Severity\n" + @@ -96,13 +96,13 @@ public ArrayList getConditionsOfPatient(int id_patient) { } public ArrayList getConditionsNOTOfPatient(int id_patient) { - Connection connection = null; + PreparedStatement preparedStatement = null; ResultSet resultSet = null; ArrayList list_PersonalCondition=new ArrayList<>(); try { - connection = DAOConnection.getConnection(); - //connection = connection.isClosed() ? DAOConnection.getConnection():connection; + + connection = connection.isClosed() ? DAOConnection.getConnection():connection; String query = null; query = "SELECT c.*\n" + @@ -138,11 +138,11 @@ public ArrayList getConditionsNOTOfPatient(int id_patient) { public boolean AddConditionPatient(int ID_condition, int ID_patient, int Severity) { - Connection connection = null; + PreparedStatement preparedStatementPersonalInfo = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection():connection; connection.setAutoCommit(false); // Start a transaction // Insert user data into personal_info table @@ -181,11 +181,11 @@ public boolean AddConditionPatient(int ID_condition, int ID_patient, int Severit } public boolean RemoveConditionPatient(int ID_condition, int ID_patient) { - Connection connection = null; + PreparedStatement preparedStatementPersonalInfo = null; try { - connection = DAOConnection.getConnection(); + connection = connection.isClosed() ? DAOConnection.getConnection():connection; connection.setAutoCommit(false); // Start a transaction // Insert user data into personal_info table From 10d980834084e312f7a1ebe15272d3d82a5cb909 Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Sat, 6 Jan 2024 10:51:14 +0100 Subject: [PATCH 27/29] fix name file --- src/main/java/controller/PopupServlet.java | 23 ----- ...lattie.jsp => PatientConditionManager.jsp} | 0 src/main/webapp/JSP/test_popup.jsp | 95 ------------------- src/main/webapp/JSP/view_patient.jsp | 2 +- 4 files changed, 1 insertion(+), 119 deletions(-) delete mode 100644 src/main/java/controller/PopupServlet.java rename src/main/webapp/JSP/{test_GestioneMalattie.jsp => PatientConditionManager.jsp} (100%) delete mode 100644 src/main/webapp/JSP/test_popup.jsp diff --git a/src/main/java/controller/PopupServlet.java b/src/main/java/controller/PopupServlet.java deleted file mode 100644 index 416ce12..0000000 --- a/src/main/java/controller/PopupServlet.java +++ /dev/null @@ -1,23 +0,0 @@ -package controller; - -import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -@WebServlet("/PopupServlet") -public class PopupServlet extends HttpServlet { - private static final long serialVersionUID = 1L; - - protected void doPost(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - // Esegui qui la logica per aggiornare il messaggio del popup - String updatedMessage = "Nuovo messaggio dalla servlet"; - - response.setContentType("JSP/test_popup.jsp"); - response.getWriter().write(updatedMessage); - } -} - diff --git a/src/main/webapp/JSP/test_GestioneMalattie.jsp b/src/main/webapp/JSP/PatientConditionManager.jsp similarity index 100% rename from src/main/webapp/JSP/test_GestioneMalattie.jsp rename to src/main/webapp/JSP/PatientConditionManager.jsp diff --git a/src/main/webapp/JSP/test_popup.jsp b/src/main/webapp/JSP/test_popup.jsp deleted file mode 100644 index b9944bf..0000000 --- a/src/main/webapp/JSP/test_popup.jsp +++ /dev/null @@ -1,95 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - - - - - Popup Page - - - - -
- -
- -
- - - - - - - diff --git a/src/main/webapp/JSP/view_patient.jsp b/src/main/webapp/JSP/view_patient.jsp index 1510af7..958aa7e 100644 --- a/src/main/webapp/JSP/view_patient.jsp +++ b/src/main/webapp/JSP/view_patient.jsp @@ -81,7 +81,7 @@ From 00c97b56f5355af35e4dd07377bac4e04a3deb4a Mon Sep 17 00:00:00 2001 From: Sewaaa Date: Sat, 6 Jan 2024 13:47:30 +0100 Subject: [PATCH 28/29] Changes by ms --- src/main/java/controller/Login.java | 38 ++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/controller/Login.java b/src/main/java/controller/Login.java index a32856d..ced5818 100644 --- a/src/main/java/controller/Login.java +++ b/src/main/java/controller/Login.java @@ -2,7 +2,9 @@ import model.entity.PersonalInfo; import model.entity.User; +import model.entity.UserInfo; import model.service.login.Authenticator; +import model.service.personalinfo.PersonalInfoManager; import model.service.user.UserData; import model.service.user.UserRegistry; @@ -12,6 +14,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; +import java.util.ArrayList; @WebServlet("/login") public class Login extends HttpServlet { @@ -36,15 +39,15 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) if (result > 0) { // Login success, defining its Session attributes - setSessionAttributes(result,request); - response.sendRedirect("JSP/welcome.jsp"); + setSessionAttributes(result, request, response); + //response.sendRedirect("JSP/welcome.jsp"); Viene gestita sopra il redirect in base all'utente } else { // Login failed, redirect back to the login page response.sendRedirect("JSP/login.jsp?error=1"); } } - private void setSessionAttributes(int id, HttpServletRequest request){ + private void setSessionAttributes(int id, HttpServletRequest request, HttpServletResponse response){ HttpSession session = request.getSession(); userData = new UserData(); @@ -57,12 +60,39 @@ private void setSessionAttributes(int id, HttpServletRequest request){ session.setAttribute("name", personalInfo.getFirstname()); if(!userData.isTherapist(user)) { + session.setAttribute("type", "patient"); session.setAttribute("therapist", user.getIdTherapist()); + try { + response.sendRedirect("JSP/homepagepatient.jsp"); + } catch (IOException e) { + throw new RuntimeException(e); + } } else { + setPatientsInfo(session); session.setAttribute("type", "therapist"); + try { + response.sendRedirect("JSP/homeTherapist.jsp"); + } catch (IOException e) { + throw new RuntimeException(e); + } } } + private void setPatientsInfo(HttpSession session){ + + UserData userService = new UserData(); + PersonalInfoManager piService = new PersonalInfoManager(); + + ArrayList list_user = new ArrayList<>(); + list_user = userService.getUsersAndPersonalInfoByIdTherapist((Integer) session.getAttribute("id")); //save all patient of X therapist + + session.setAttribute("list_user",list_user); + + PersonalInfo InfoLogged=piService.getPersonalInfoById((Integer) session.getAttribute("id")); + if(InfoLogged!=null) + session.setAttribute("NameSurnameLogged", InfoLogged.getFirstname() + " " + InfoLogged.getLastname()); + else session.setAttribute("NameSurnameLogged",null); + } +} -} \ No newline at end of file From 5586aff349fb0ef999c116fc932ab32759e82181 Mon Sep 17 00:00:00 2001 From: panuozzo77 Date: Sat, 6 Jan 2024 15:38:32 +0100 Subject: [PATCH 29/29] fixed unused session items and improved code --- .../controller/AddRemovePatientCondition.java | 20 ++---------- src/main/java/controller/Login.java | 32 +++++-------------- .../personalinfo/PersonalInfoManager.java | 10 ------ .../webapp/JSP/PatientConditionManager.jsp | 18 ++++++++++- src/main/webapp/JSP/homeTherapist.jsp | 14 ++++---- src/main/webapp/JSP/view_patient.jsp | 29 ++++++++++++----- src/main/webapp/errorPage/403.html | 5 +-- 7 files changed, 60 insertions(+), 68 deletions(-) delete mode 100644 src/main/java/model/service/personalinfo/PersonalInfoManager.java diff --git a/src/main/java/controller/AddRemovePatientCondition.java b/src/main/java/controller/AddRemovePatientCondition.java index 2aa1bd3..0bdf98b 100644 --- a/src/main/java/controller/AddRemovePatientCondition.java +++ b/src/main/java/controller/AddRemovePatientCondition.java @@ -13,19 +13,12 @@ @WebServlet("/AddRemovePatientCondition") public class AddRemovePatientCondition extends HttpServlet { - - - public AddRemovePatientCondition() { - super(); - - } - - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { String referer = request.getHeader("Referer"); ConditionManager conditionService= new ConditionManager(); - int idPatient= Integer.parseInt(request.getParameter("idPatient")); - int idCondition= Integer.parseInt(request.getParameter("idCondition")); + int idPatient = Integer.parseInt(request.getParameter("idPatient")); + int idCondition = Integer.parseInt(request.getParameter("idCondition")); String operation= request.getParameter("operation"); if (operation.equals("Rimuovi")) //REMOVE @@ -42,11 +35,4 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t } - - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - - doGet(request, response); - } - - } diff --git a/src/main/java/controller/Login.java b/src/main/java/controller/Login.java index ced5818..b082292 100644 --- a/src/main/java/controller/Login.java +++ b/src/main/java/controller/Login.java @@ -4,7 +4,6 @@ import model.entity.User; import model.entity.UserInfo; import model.service.login.Authenticator; -import model.service.personalinfo.PersonalInfoManager; import model.service.user.UserData; import model.service.user.UserRegistry; @@ -38,16 +37,15 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) int result = authService.authenticate(email, password); if (result > 0) { - // Login success, defining its Session attributes - setSessionAttributes(result, request, response); - //response.sendRedirect("JSP/welcome.jsp"); Viene gestita sopra il redirect in base all'utente + // Login success, defining its Session attributes and the redirect page + response.sendRedirect(setSessionAttributes(result, request)); } else { // Login failed, redirect back to the login page response.sendRedirect("JSP/login.jsp?error=1"); } } - private void setSessionAttributes(int id, HttpServletRequest request, HttpServletResponse response){ + private String setSessionAttributes(int id, HttpServletRequest request){ HttpSession session = request.getSession(); userData = new UserData(); @@ -63,36 +61,22 @@ private void setSessionAttributes(int id, HttpServletRequest request, HttpServle session.setAttribute("type", "patient"); session.setAttribute("therapist", user.getIdTherapist()); - try { - response.sendRedirect("JSP/homepagepatient.jsp"); - } catch (IOException e) { - throw new RuntimeException(e); - } + return "JSP/homePatient.jsp"; } else { setPatientsInfo(session); session.setAttribute("type", "therapist"); - try { - response.sendRedirect("JSP/homeTherapist.jsp"); - } catch (IOException e) { - throw new RuntimeException(e); - } + return "JSP/homeTherapist.jsp"; } } private void setPatientsInfo(HttpSession session){ - UserData userService = new UserData(); - PersonalInfoManager piService = new PersonalInfoManager(); + UserRegistry registry = new UserRegistry(); - ArrayList list_user = new ArrayList<>(); - list_user = userService.getUsersAndPersonalInfoByIdTherapist((Integer) session.getAttribute("id")); //save all patient of X therapist + PersonalInfo infoLogged = registry.getPersonalInfo(((Integer) session.getAttribute("id"))); - session.setAttribute("list_user",list_user); + session.setAttribute("NameSurnameLogged", infoLogged != null ? infoLogged.getFirstname() + " " + infoLogged.getLastname() : null); - PersonalInfo InfoLogged=piService.getPersonalInfoById((Integer) session.getAttribute("id")); - if(InfoLogged!=null) - session.setAttribute("NameSurnameLogged", InfoLogged.getFirstname() + " " + InfoLogged.getLastname()); - else session.setAttribute("NameSurnameLogged",null); } } diff --git a/src/main/java/model/service/personalinfo/PersonalInfoManager.java b/src/main/java/model/service/personalinfo/PersonalInfoManager.java deleted file mode 100644 index 679146b..0000000 --- a/src/main/java/model/service/personalinfo/PersonalInfoManager.java +++ /dev/null @@ -1,10 +0,0 @@ -package model.service.personalinfo; - -import model.DAO.DAOPersonalInfo; -import model.entity.PersonalInfo; - -public class PersonalInfoManager { - DAOPersonalInfo personalInfoDAO = new DAOPersonalInfo(); - public boolean createRegistry(int id, String name, String surname) {return personalInfoDAO.createRegistry(id, name, surname);} - public PersonalInfo getPersonalInfoById(int id) {return personalInfoDAO.getPersonalInfo(id); } -} diff --git a/src/main/webapp/JSP/PatientConditionManager.jsp b/src/main/webapp/JSP/PatientConditionManager.jsp index 2520601..571c088 100644 --- a/src/main/webapp/JSP/PatientConditionManager.jsp +++ b/src/main/webapp/JSP/PatientConditionManager.jsp @@ -1,6 +1,10 @@ <%@ page import="java.util.ArrayList" %> <%@ page import="model.entity.Condition" %> <%@ page import="model.service.condition.ConditionManager" %> +<%@ page import="model.entity.Schedule" %> +<%@ page import="model.entity.UserInfo" %> +<%@ page import="model.entity.User" %> +<%@ page import="model.service.user.UserData" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> @@ -8,8 +12,20 @@ <% + int userId = 0; + if(session.getAttribute("type")!=null && !session.getAttribute("type").equals("therapist") || request.getParameter("userId")==null) { + response.sendRedirect("../errorPage/403.html"); + }else { + userId = Integer.parseInt((request.getParameter("userId"))); + + int userTherapist = new UserData().getUser(userId).getIdTherapist(); + if (userTherapist != (Integer) session.getAttribute("id")) { + response.sendRedirect("../errorPage/403.html"); + } + } + + ConditionManager ConditionService= new ConditionManager(); - int userId = Integer.parseInt(request.getParameter("userId")); ArrayList list_PatientCondition = ConditionService.getConditionsOfPatient(userId); ArrayList list_NOTPatientCondition = ConditionService.getConditionsNOTOfPatient(userId); diff --git a/src/main/webapp/JSP/homeTherapist.jsp b/src/main/webapp/JSP/homeTherapist.jsp index fc00d6f..d28943c 100644 --- a/src/main/webapp/JSP/homeTherapist.jsp +++ b/src/main/webapp/JSP/homeTherapist.jsp @@ -1,4 +1,5 @@ <%@ page import="model.entity.*"%> +<%@ page import="model.service.user.UserData"%> <%@ page import="java.util.ArrayList"%> <%@ page import="java.text.SimpleDateFormat" %> @@ -29,11 +30,11 @@
<% - if(session.getAttribute("list_user")!=null) { + if(session.getAttribute("type")!=null && session.getAttribute("type").equals("therapist")){ @SuppressWarnings("unchecked") - ArrayList list_user=(ArrayList) session.getAttribute("list_user"); + ArrayList list_user= new UserData().getUsersAndPersonalInfoByIdTherapist((Integer) session.getAttribute("id")); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - int i=0; + for(UserInfo u: list_user){ %> @@ -46,14 +47,15 @@ <% } + } else { + response.sendRedirect("../errorPage/403.html"); } %> @@ -89,7 +91,7 @@ diff --git a/src/main/webapp/JSP/view_patient.jsp b/src/main/webapp/JSP/view_patient.jsp index 4799a33..6c552b7 100644 --- a/src/main/webapp/JSP/view_patient.jsp +++ b/src/main/webapp/JSP/view_patient.jsp @@ -1,5 +1,7 @@ <%@ page import="model.entity.*"%> <%@ page import="java.util.ArrayList" %> +<%@ page import="model.service.user.UserRegistry" %> +<%@ page import="model.service.user.UserData" %> @@ -7,10 +9,7 @@ Paziente Selezionato - <% - int index = Integer.parseInt(request.getParameter("patientIndex")); - ArrayList allPatients = (ArrayList) session.getAttribute("list_user"); - %> +
@@ -18,14 +17,28 @@
- <% UserInfo user_selected= allPatients.get(index); %> + <% + + if(session.getAttribute("type")==null || !session.getAttribute("type").equals("therapist") || request.getParameter("patientID") == null) { + response.sendRedirect("../errorPage/403.html"); + }else { + int patientId = Integer.parseInt(request.getParameter("patientID")); + + PersonalInfo user_selected = new UserRegistry().getPersonalInfo(patientId); + User user = new UserData().getUser(patientId); + if (user.getIdTherapist() != (Integer) session.getAttribute("id")) { + response.sendRedirect("../errorPage/403.html"); + } + String email = user.getEmail(); + + %>
Add new condition to patient
IDDisorder DescriptionDisorder NameSeverityOperazione
<%= condition.getIdCondition() %> <%= condition.getDisorderDescription() %> <%= condition.getDisorderName() %><%= condition.getSeverity() %> -
+ +
+ - -
- - Visualizza + Visualizza

Nome: <%=user_selected.getFirstname()%>

Indirizzo: <%=user_selected.getAddress()%>

-

Email: <%=user_selected.getEmail()%>

+

Email: <%=email%>

Cognome: <%=user_selected.getLastname()%>

@@ -86,9 +99,9 @@ - + <%} %> diff --git a/src/main/webapp/errorPage/403.html b/src/main/webapp/errorPage/403.html index 2786d01..d41dc1f 100644 --- a/src/main/webapp/errorPage/403.html +++ b/src/main/webapp/errorPage/403.html @@ -17,12 +17,13 @@

Forse devi eseguire l'accesso?

🚫🚫🚫🚫

error code: 403 forbidden
- +