From 452e6189e416f451a06aa0081eeff42a16e027c3 Mon Sep 17 00:00:00 2001 From: Narayanan Madaswamy Date: Sat, 1 Aug 2026 23:10:28 +0530 Subject: [PATCH] Migrated Queries - 4,5 and 70 --- .../main/java/lib/models/CasePunching.java | 2 +- .../src/main/java/lib/models/UserSession.java | 29 ++++ .../lib/constants/ApplicationError.class | Bin 5764 -> 5764 bytes .../classes/lib/models/CasePunching.class | Bin 3970 -> 4035 bytes .../target/classes/lib/models/Option.class | Bin 1353 -> 1353 bytes .../UserSession$UserSessionBuilder.class | Bin 0 -> 4111 bytes .../classes/lib/models/UserSession.class | Bin 0 -> 7725 bytes .../compile/default-compile/inputFiles.lst | 1 + .../TEST-lib.models.ErrorDetailsTest.xml | 37 +++-- .../lib.models.ErrorDetailsTest.txt | 2 +- .../WEB-INF/app/edp/punching/initcase.jsp | 24 +-- .../WEB-INF/app/fragments/app-title.jspf | 4 +- .../identity/CloudAuthenticationGateway.java | 4 +- .../cloud/identity/CloudSessionMapper.java | 51 +++++-- .../AbstractAuthenticatedController.java | 10 +- .../nimble/controller/SessionController.java | 11 +- .../controllers/PunchingController.java | 20 ++- .../services/commons/CommonService.java | 39 +++++ .../matrix/services/edp/PunchingService.java | 142 ++++++++++-------- .../nimble/RoleVisibleBatchMigrationTest.java | 6 +- .../identity/CloudSessionMapperTest.java | 23 ++- .../AbstractAuthenticatedControllerTest.java | 18 +-- .../services/commons/CommonServiceTest.java | 19 +++ .../services/edp/PunchingServiceTest.java | 76 ++++++++++ 24 files changed, 372 insertions(+), 146 deletions(-) create mode 100644 cygnus-lib/src/main/java/lib/models/UserSession.java create mode 100644 cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class create mode 100644 cygnus-lib/target/classes/lib/models/UserSession.class create mode 100644 cygnus-onprem-app/src/test/java/matrix/services/edp/PunchingServiceTest.java diff --git a/cygnus-lib/src/main/java/lib/models/CasePunching.java b/cygnus-lib/src/main/java/lib/models/CasePunching.java index c0a40bc..d561e2b 100644 --- a/cygnus-lib/src/main/java/lib/models/CasePunching.java +++ b/cygnus-lib/src/main/java/lib/models/CasePunching.java @@ -13,7 +13,7 @@ public class CasePunching { private Map optionsl; private Map> options; private List visibleSections; - private Integer portfolioId; + private Short portfolioId; private Integer formMode; private String userId; private String dynamicFields; diff --git a/cygnus-lib/src/main/java/lib/models/UserSession.java b/cygnus-lib/src/main/java/lib/models/UserSession.java new file mode 100644 index 0000000..d9268df --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/UserSession.java @@ -0,0 +1,29 @@ +package lib.models; + +import java.io.Serial; +import java.io.Serializable; +import lombok.Builder; +import lombok.Value; + +/** Immutable, type-safe representation of an authenticated Cygnus user. */ +@Value +@Builder +public class UserSession implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + Short companyId; + String companyName; + String companyCode; + Short branchId; + String branchName; + String branchCode; + String branchLocation; + Short userId; + String username; + String userDisplayName; + Short userGroupId; + String userGroupName; + String loginTime; + String menuHtml; +} diff --git a/cygnus-lib/target/classes/lib/constants/ApplicationError.class b/cygnus-lib/target/classes/lib/constants/ApplicationError.class index 859f4fabf6ba47cb28ff9ac39a86f65bd86696ac..71c961f21da5bf430160731e2d8050089e8e4c3a 100644 GIT binary patch delta 20 ccmZqCZPDHETX=G*NW|nH!d08kifm^D0A8pF`2YX_ delta 20 ccmZqCZPDHETX=GqNcrR+!qJ=0ifm^D09~*M+5i9m diff --git a/cygnus-lib/target/classes/lib/models/CasePunching.class b/cygnus-lib/target/classes/lib/models/CasePunching.class index 079128bf92e131ee285c5688ebe8c66d12f68df1..4a094cff90aca57fec2af80e689fc06204d7f393 100644 GIT binary patch literal 4035 zcma)-`%@b?5XV=%9P9&Q8=MC;O;XA$59iS|X`!?fLLf1L#0lxUJ=?-4J>N0sGc)45r@M zr*_4$-BxA4{*E^S24ic&6~Q`#;icunakv2E8OU0Y1B<~$N7O5AugRTGWz+8PgRa{+ z7H*4y#eLuNw|HO+r^DcKRZ%`srdEkKX+a*Q7+mm90^zwGhe5t7chU`nQ`xgmq^xK` ziDa2bMoVWbD8oh6pNfvCJG_Q_CIlWuAyh>tkci6`T!C2zxf9P1jyy+ryG;g#P%4jI zJH{EQ{lJ2&@FDK%$n)EKct{2%MY!t*yv2Pfy>7t`_y~Q~?QoxnMMYQ(d~}J_eQd!3 z=_Z=*UArwB+k!jI4xMAkf@PY?MKe1=+oAEB7Tluo;wksVk!aX-I&$@Hlcw)jP@(C` zrq}4Uxf_I24907s<=R2l$6Y^EJb}JkOYSW>vcAe-C*?YMN#x=+^_KVLU9PU7Z0FGS1@)uBk>FV9v86^K0`n~%sNu$7 zc4=ANr8g=&$WK zqh|UvXE}xOi?BCQGEMhsqHw_kN6D6&N8uKtAxa_|A=x;} z&Vpq|6-BW^nkm%i(b5}=q6G(x(LzEkTCz2->o@qepy#QeK09|P|KU2m&O=yZbNIzt ziT{SE$N_`9^8Y>TV>OHW_py(aEbc$RK9(w}#WEyYtTD318X{Y)7_!9*AzLg3*b)Pa zIetIEUIkl*?dZy1z01r*f#j? zk`A0Q0Q-;n6m|@tIUQ6O2-<~b2GBJfR2&F;ZUoKipwd84)d*VDLDK_4dq&WT4w@MV zdSL|J)0=n@OkJDidRsB z5t&d`6+c1vVI?)s!-o&hYgC6hKZZ}zy`DjuzKfGX@J2IyXf|9(YdC!ARKq2>-!n|p zq2afh;cwtu(}}0k8V;XS)o>Xe^bD6{!{2F!zlR@8H+hK+tFPdBuBNv;zR4?zoBR=e zGU4aa;;AIW_^S#0&+v;0e=RMZDou>Pk-*z#{CrwG6|fk;kigf?_{Fq%s*5pxIe~AO f@hfTZRBmJZtpvVl#@|khrz#%fD+xT80eJL3TF<|3 literal 3970 zcma)-`%)V>6vmGX*kCVUOfX4FFG*8kppAP;8X8llgi9cpKtn?Bm$fa7()BL0UNe)o zYG>N%O#kQu^r136N4s8Y*N#`i46>x7-*+T^NBiIFfBpr4O=xBy#bD7A^>W*3a;sC` zGCTaZYd6k?-O9i?gZxYL(kxr1-6|i|U-E{>z~HXyxZB(_h1Fqjt){HsQKl*kCY=jU zICjTkFk6$Pt|zSWp?QImQzxQjn_k!D4DLl|H~g-YJ@H&jrZPBEMMfqNV6dl2kO|a8 z$Js`!VgUW$&WTl@sKOWEToC~#VfLAPQYS8%I|Y2||cp4Y|`E?ja~oQZ}> zNz+9VXQt^ix@~TIy@B+Gu!UD;FjiVQWiY;lx>*>5w+*-kZ_zyon?LQg>)d^A;vrBf zPQ$cLO;=Dq7##P`Mf~zr^UyK2xTpGo!BS~OJ#=*v#4IX+`s(ffb1|}I~ z`zj2cXaf^HM?3l0fE;NQP~$Xiz(PbTu;B8*;E*l(8@Ok{G|ZqK5PqyWa-qkNwbt__ z<@1FBd6@H0b~i96jc*uGpz$e0y$IZTB|-`OO2JLGu~y>q8|Y`SKf zd)%ceLq^|Pg;LB}v}!#zIOHCNS&Nnyqt*55qE}(rzAS?SU4cZak!AtW0~VWCC8WbB z^mcr7$kwVAikv}c#9GB*X~bC+Ne9|<6#58zJs&NoO9C6wiaf?d?BmNRra`M<%%D}! zAhb4O5Uk@9r|UNOuAujAPJOrT(6a$I&_ZMQiOfNYo)`R;q6Yv+r{wP}_OV#QzJYzL zudqLheJmasi^U>atOMDiW+Q z@XknJSr7OLd>Ur>*+}4BJ>chXKjG}w^*|32K@~mFmrzZ}=%F5HGZFMi544>K+R+0& zP6X}gfu1CS4)j2W@D%+NFP#T?0Vyh{)wRE1IbMWWSvy5PA}B&CP}xZ`g}3*Xfh_Mcf*cp7H=JD!%p-@*4uH@U8Rlk|>{b+SsgICf=k@?0Q+khtIh zcqqh-ZKZNzDY@D4tY^MC{QLLc?>_*J@w|=#iWW*X%BTqJT*$d}Jn2uIQ};rRj6mg; z_O*E}Q0(@GHB?cvP`A;5Ezt6`>r8{O@*?N-(&)e!D9@!gQv&V5GV6%5n>MzwLt&nD zm6r`WGokh;aah~NE{8S7DjJ14W^?+Ujr}-%5(cwNfzlhQF0eh&zWO+ux+?r4T`w*l zjHEY|p=Lk5ESYm13G5D5`aTkRN249^M<*QH{HBO;}WYR1&omHSoW#3*6ne=gzOjnH-E$wwzJL(Ndu@B0e2jfpN zlv8C?NR4n-S~HWCmgKA^g=CA;MOw6e7RHJ|%UIyq$>MwY_|~R)esBvs ZJ6U``AK%#&&+mAFXD5q4q^%Y3>_6B4zqSAX literal 1353 zcma)*+iuf95QhKF`C!sCJy2+&w49O@@I6IH6^IHcP}HK_uai}}#jz`Alji~ngv138 zz(XNs)>cZ=O7@M%-kJUOpMS@H{{H$6;0Vvl$O)|a+H=R@Q27)0MiFEDd|g3`HRUj6X{??$@)-D29dUODjh}P^irVoN(b7! z7Ra|deSyLo5>Z1QD-P;#1Xg-FP#>pbPeq@l=i8IRf%N+_()^t)7R zM#}VK+3W4jO~SWNr-9L9^*)&Ci6-n(5QIju5kzhE{BZ1rU)*CAs7M+$Jgh?Cj)Njf zF}@c!zKBm+=h}M?%BTo5NXpwQA2{{EL6uXi@|aEG#fJ`Rc5yP7zR|v}oGoj9Q06=w zev*+KE2AP3T%lcwqJ>?FAl}uWlK+Ind+hN7wX<*<4b(f$cGu&1c){0=J(8BExhWvW zz0+Hc`?8Umu#t3A>3NI3T#ABXvHKH^Z?>#S&yroNV3ppvlnT(o8byJ1Y!G}i zsk%*Z5%e8fUuiLiD^Tf1&|Pe&fOfKh?x%uwvw`+fLHpT2kMNkTW7(sZ)NYP_>mK~T z*0S4WYtm+1k+{t_!PhD9g!UEb?<7|Ro}!(G-^q&SDVgKT7T-z7?`FmG@Xhg6i|?l6 S_p{=8rsw#Y#UI$=d-e~7J-tl; diff --git a/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class b/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..af44226eddbe7c8a3dd2865cc961c97ca92a1479 GIT binary patch literal 4111 zcmd^?>rNX-6vxk)i!Ur-2!%p!gg|No#Z4M|b07o~z^y~l7)aCfqP0E33+r8LcZ|fF z^f6i~Risqv1N1%m6qTx;;~B$lW`j0-?T2CKoIUfKvvc_$^Vh#`{se#r@N)(d(36B- z1Nxw!LH5u*HVd}t92A~Z4|z>6=)Y$Fbr88E~E4 zLo&MT)=Yt4MI&w)FhlhIHh!&S&l)gC(J68{iu{oQIdTq@^P%OpZ1bc$>%0LA#2BD= zTb|o)NzlgzEYX<3Q-62FCkEW6H)-2Fu$)~>X8)-HcRLd|xzpYjO*;vnF&K~Dk_;@v z7qrP=GWaJKT++_+2OV;a&-YwtkPf~O=0bzy-1+@cJoZHc?!gL!iKcnPH(Up|_qin+ z*z<+y2%jyxI{Fg0<@3fm$?(Ld5kfQNA+54tvk*%D)qG2Ivp&Wg9BlHBPSk*Tv|6YLXV=fwQ z{i*5UtrgtE4DN@R>d?Fww698n$6zY=u4FLvlyEB@ID;{a3y7hd5|ygrw!IqPv}nz; zd#DsjTbC#p2|L^u+pdoSon3cb;S0}f$?x$~@GXPCgJS}HrN_BbHC|zh(*eN^n6!mt zc9rz3Pr`I&h2y$%N$*L?O7(7!#If5CXkyo;q%dT5Cpr~AdfU~z6_y|Fhe`%^VJ`{$ zbgQ2;m_1uf%Q<$BctI|;yy%-|O}O3(gI|I>tperxZJSQr=KgHib&uMuqP{x;PiWxo zNsC8>zYN67qFM}Yxk7B1wq3CV$J1ey9K1*yw(0wv?w7uMNqEU%PW#ZP{FCq_gKOu9 zVm*@|3pcRFB~T)V@Gn+)z*~k^KR)l{GePxP^I;j*d{}}tA68(^hvirEVeQp?SadZX zR$a}9MOX7-vDJK7Xf+>}Sj~q8_ATECt^@v5!nIh#UIE`S^31;m_8WE*_@hcL7(fQr zu}_oJkPUc<&){<6PXKrXJsnUHN7BM4=NEp*KfhvEM~%x6g~DL9N1HSO(XwyxhhZy< zKNy=Y_gnGF2F^$q4gjqSt>qHecRb#h=mmbJ6+VjLnxCp!j5j^Up=| zZ^hHeYI{;*$~P-;L(q ziOrY#tN3Ju`P)!JNnAtuJH&USvul6A@{9RbD50-l5Zeg0F>Djqrm$VbHjV8jwp-Zp z*cP!Bu-$nLpGOO?)bO=P4gVUxQ8_fQY*G%Z$hy${Z{RC{^D*cARZ_yW@KJ^TPa!Q_8X?iQ*5 literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/classes/lib/models/UserSession.class b/cygnus-lib/target/classes/lib/models/UserSession.class new file mode 100644 index 0000000000000000000000000000000000000000..5fb4f06a412aac0f8754f5ab1d5627949de28399 GIT binary patch literal 7725 zcmd^E`*U1X9sitU-+T9w&GRN{DG;#TwnWe>+|n8v2n3T-NgFIw%O<%tOE$Y+qZ%lYCF4bB+o^@Atbq>%I*7?6HM7RtHe z;_~#8D2EJ~0**OKAr|$Bfl;5@qu6NREKw&N^h{|nSLG1I<7@-x2zzLqLvy&t44fzE zh^UG#^IHsT7G+A5m**>Mh1^lE)vST7!VwqSmF3d;T^)$)a*kxch-o+T$H?QXk6@~uIKAf{gc5b;|m@hN1N0{Se-s8@P z=r1>Lh3KQyOUI^{M0=%yt3;c0wQg+0bhUwZW5zMLU6kM`^fh+)5Cij``vSgj~!_~+2slDcX0IO)zJ!nqltz`MT`n-L${cjwkVJ8mX3? zLxLlkE3KCo?Ww#@mj^g|?!Dsz$*4Re_u7@}tS!la8#KMARH|00<=mRHwJQ-ksqiPC z+vfUi+NHK_@-1KAr;JZNz3??;>38F+8Rx}8>`t&fNh0FOzKD1#cP^Sfy@u)m5~~-W zU201zgr{Tp6@DGYGjbgNMq#XR3(gmBDXrM!P7IwBdMdYAEtQWd+~+?+T%Z%It8&Gq zf?XM#DV0{%*LI%r@NIJ3e{{`m1HZw?;9cZ=Dwkq1S18Qot2XnYF$m-YAAP(Gg#h;BfRt|tntw>j4~>et2}eNu#SwpMJQ+F zL7{8D6?DzFfv))+&^7P>y5@yn*Sy{9npb*V^A@jb-q>}`8@jG}AJ;W+;H-ODg7_f1 z@gW}i2K$hrWEfL90FRBNXUIB0buG%F2CQ|GVg4^jX1N|uLC_aXdbMOo@ zHnEm}k*Bfa;Ny7b!<1E1Sp1$!UO2AjIB^n~VD>SD#myhhl#Zt10NiLc6Y(9=hA7cW zlrosjzoN7wIS+jCCYRp;;X0)(O@f4Z$~0NqS_D*w-WVrB;uQ^4bg^H zqW+FVd~UWO+SE!k(2`277Xd9w! ztwh5eiTG}9Lp0t>G}4iX@7y*-7qt?Nb|m5-ES%&V7$o6Y-1Ea*vkxK|IKK5cMD9nh z`}o#p5t+@Nz{PvF@s}0Y{vzUL;05#?gR$KVoWP|TM#O{_BxJ%0nL)vXUO?s;5@yg0 z`9PCan4n23Vul42aY11-;sZ@tQG%wdm>CsN%mqcwm=82<#R;0W3^Ohu!v#_Dfo81) zL9T^N8W}gpq(CR1XpfzCj3uwRv^_v4e&>?G(phMP>IVhkZ7c^)N`9Oy)lc2-a zuxSct*aey9un)9gjS#e8jhZ6@8g)S<=BN*3TN?Qz&C316esr)<>l zbxQqe1rPBOaR&y}UF7`+r9pKMdv`yjA@vYe@J&jls=>y$C=IKZFokbZ8d0xc0^gxD zs$Rv}_%5Xl>Lf<+JxUw#0OR=pwuK|FVRQF0NP9GtF5s zZHm=ROgWC%ycO3bW*gTl?wJl+hBg^>li`^TSqW`o`f zfCniBu$#N$7^NT%s`Kz;N+DEL3_qb1=1%)7eo86A-!I{3l%jYZPqHo9pMT++|2d^N zUgPgyuo!9p%iKrYpXx%);$ccjHG_-r2&I%dfe7b0t zJau~H4gNE5aGOYCX20L!_jm#3zX78h{)qqp literal 0 HcmV?d00001 diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 588215f..7251d26 100644 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -2,3 +2,4 @@ /Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/CasePunching.java /Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ErrorDetails.java /Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/Option.java +/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/UserSession.java diff --git a/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml b/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml index 07aa669..0ea63ab 100644 --- a/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml +++ b/cygnus-lib/target/surefire-reports/TEST-lib.models.ErrorDetailsTest.xml @@ -1,18 +1,18 @@ - + - + - + - + - + - - + + @@ -20,8 +20,8 @@ - - + + @@ -29,10 +29,10 @@ - + - + @@ -40,11 +40,11 @@ - + - + - + @@ -52,13 +52,12 @@ - - - + + - + - + \ No newline at end of file diff --git a/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt b/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt index c838cbc..18dfcf8 100644 --- a/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt +++ b/cygnus-lib/target/surefire-reports/lib.models.ErrorDetailsTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: lib.models.ErrorDetailsTest ------------------------------------------------------------------------------- -Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 s -- in lib.models.ErrorDetailsTest +Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.028 s -- in lib.models.ErrorDetailsTest diff --git a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp index ef74d95..6a7f76e 100644 --- a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp +++ b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp @@ -53,7 +53,7 @@ @@ -133,9 +133,9 @@ - - - + + + @@ -152,7 +152,7 @@ @@ -184,7 +184,7 @@ @@ -200,7 +200,7 @@ @@ -311,7 +311,7 @@ - + @@ -429,7 +429,7 @@ - + @@ -556,7 +556,7 @@ - + @@ -689,8 +689,8 @@ - - + + diff --git a/cygnus-onprem-app/build/WebContent/WEB-INF/app/fragments/app-title.jspf b/cygnus-onprem-app/build/WebContent/WEB-INF/app/fragments/app-title.jspf index 648c45b..662c5ab 100644 --- a/cygnus-onprem-app/build/WebContent/WEB-INF/app/fragments/app-title.jspf +++ b/cygnus-onprem-app/build/WebContent/WEB-INF/app/fragments/app-title.jspf @@ -6,8 +6,8 @@ Cygnus 1.0
- () - () + () + ()
diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudAuthenticationGateway.java b/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudAuthenticationGateway.java index d510989..5916d71 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudAuthenticationGateway.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudAuthenticationGateway.java @@ -5,7 +5,7 @@ import com.cygnus.client.CloudIdentityClient; import java.time.Duration; import java.util.logging.Level; import java.util.logging.Logger; -import matrix.nimble.model.Session; +import lib.models.UserSession; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClientResponseException; @@ -28,7 +28,7 @@ public class CloudAuthenticationGateway { this.sessionMapper = sessionMapper; } - public Session authenticate(String loginId, String password) { + public UserSession authenticate(String loginId, String password) { try { Duration blockingTimeout = properties.requestTimeout().plusSeconds(1); return sessionMapper.map(client.authenticate(loginId, password).block(blockingTimeout)); diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudSessionMapper.java b/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudSessionMapper.java index fc47fbe..f297ee6 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudSessionMapper.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/cloud/identity/CloudSessionMapper.java @@ -5,6 +5,7 @@ import com.cygnus.client.model.CloudMenuItem; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.List; +import lib.models.UserSession; import matrix.nimble.model.Session; import org.springframework.stereotype.Component; @@ -20,22 +21,42 @@ public class CloudSessionMapper { this.menuRenderer = menuRenderer; } - public Session map(CloudIdentitySession source) { + public UserSession map(CloudIdentitySession source) { + return UserSession.builder() + .userId(source.userId()) + .username(source.loginId()) + .userDisplayName(source.displayName()) + .userGroupId(source.groupId()) + .userGroupName(source.groupName()) + .branchId(source.branchId()) + .branchName(source.branchName()) + .branchCode(source.branchCode()) + .branchLocation(source.branchLocation()) + .companyId(source.companyId()) + .companyName(source.companyName()) + .companyCode(source.companyCode()) + .loginTime(LEGACY_LOGIN_TIME.format(source.loginTime())) + .menuHtml(menuRenderer.render(toLegacyMenu(source.menu()))) + .build(); + } + + /** Temporary projection used by controllers that have not migrated to UserSession yet. */ + public Session toLegacy(UserSession source) { Session target = new Session(); - target.setUserID(Short.toString(source.userId())); - target.setUsername(source.loginId()); - target.setUserDisplayName(source.displayName()); - target.setUserGroupID(Short.toString(source.groupId())); - target.setUserGroupName(source.groupName()); - target.setBranchID(Short.toString(source.branchId())); - target.setBranchName(source.branchName()); - target.setBranchCode(source.branchCode()); - target.setBranchLocation(source.branchLocation()); - target.setCompanyID(Short.toString(source.companyId())); - target.setCompanyName(source.companyName()); - target.setCompanyCode(source.companyCode()); - target.setLoginTime(LEGACY_LOGIN_TIME.format(source.loginTime())); - target.setMenuHtml(menuRenderer.render(toLegacyMenu(source.menu()))); + target.setUserID(Short.toString(source.getUserId())); + target.setUsername(source.getUsername()); + target.setUserDisplayName(source.getUserDisplayName()); + target.setUserGroupID(Short.toString(source.getUserGroupId())); + target.setUserGroupName(source.getUserGroupName()); + target.setBranchID(Short.toString(source.getBranchId())); + target.setBranchName(source.getBranchName()); + target.setBranchCode(source.getBranchCode()); + target.setBranchLocation(source.getBranchLocation()); + target.setCompanyID(Short.toString(source.getCompanyId())); + target.setCompanyName(source.getCompanyName()); + target.setCompanyCode(source.getCompanyCode()); + target.setLoginTime(source.getLoginTime()); + target.setMenuHtml(source.getMenuHtml()); return target; } diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/controller/AbstractAuthenticatedController.java b/cygnus-onprem-app/src/main/java/matrix/nimble/controller/AbstractAuthenticatedController.java index d522876..1d1c1fd 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/controller/AbstractAuthenticatedController.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/controller/AbstractAuthenticatedController.java @@ -4,7 +4,7 @@ import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import lib.constants.ApplicationError; import lib.models.ErrorDetails; -import matrix.nimble.model.Session; +import lib.models.UserSession; import matrix.services.commons.CommonErrorService; import matrix.services.commons.CommonService; import org.springframework.ui.ModelMap; @@ -26,14 +26,14 @@ public abstract class AbstractAuthenticatedController { ModelMap model, HttpSession httpSession, HttpServletResponse response) { - Session session = commonService.getSession(httpSession); + UserSession session = commonService.getUserSession(httpSession); if (session == null) { return denied(model, response, httpSession, ApplicationError.SESSION_REQUIRED); } if (!commonService.hasPageAccess(session, pageRoute)) { return denied(model, response, httpSession, ApplicationError.ACCESS_DENIED); } - model.addAttribute(CommonService.SESSION_ATTRIBUTE, session); + model.addAttribute(CommonService.USER_SESSION_ATTRIBUTE, session); return PageAuthorization.granted(session); } @@ -47,8 +47,8 @@ public abstract class AbstractAuthenticatedController { return PageAuthorization.denied(viewName); } - protected record PageAuthorization(Session session, String viewName) { - private static PageAuthorization granted(Session session) { + protected record PageAuthorization(UserSession session, String viewName) { + private static PageAuthorization granted(UserSession session) { return new PageAuthorization(session, null); } diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/controller/SessionController.java b/cygnus-onprem-app/src/main/java/matrix/nimble/controller/SessionController.java index 82be155..08a25b7 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/controller/SessionController.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/controller/SessionController.java @@ -2,9 +2,11 @@ package matrix.nimble.controller; import matrix.nimble.cloud.identity.CloudAuthenticationException; import matrix.nimble.cloud.identity.CloudAuthenticationGateway; +import matrix.nimble.cloud.identity.CloudSessionMapper; import matrix.nimble.model.Login; import matrix.nimble.model.Session; import matrix.services.commons.CommonService; +import lib.models.UserSession; //servlet libraries import jakarta.servlet.http.HttpServletRequest; @@ -23,12 +25,15 @@ import org.springframework.web.bind.annotation.SessionAttributes; public class SessionController { private final CloudAuthenticationGateway cloudAuthenticationGateway; private final CommonService commonService; + private final CloudSessionMapper cloudSessionMapper; public SessionController( CloudAuthenticationGateway cloudAuthenticationGateway, - CommonService commonService) { + CommonService commonService, + CloudSessionMapper cloudSessionMapper) { this.cloudAuthenticationGateway = cloudAuthenticationGateway; this.commonService = commonService; + this.cloudSessionMapper = cloudSessionMapper; } @RequestMapping(value="login", method={RequestMethod.GET, RequestMethod.POST}) public String LoginPage(ModelMap model) @@ -53,10 +58,12 @@ public class SessionController { HttpSession httpSession) { try { - Session cloudSession = cloudAuthenticationGateway.authenticate( + UserSession userSession = cloudAuthenticationGateway.authenticate( login.getLoginid(), login.getPassword()); + Session cloudSession = cloudSessionMapper.toLegacy(userSession); model.remove("login"); model.addAttribute("Sessvals", cloudSession); + commonService.storeUserSession(httpSession, userSession); commonService.storeSession(httpSession, cloudSession); return "home"; } catch (CloudAuthenticationException exception) { diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java index b4850cc..b48b940 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java @@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.RequestParam; import jakarta.servlet.http.HttpSession; import jakarta.servlet.http.HttpServletResponse; import matrix.nimble.controller.AbstractAuthenticatedController; -import matrix.nimble.model.Session; +import lib.models.UserSession; import matrix.services.commons.CommonService; import matrix.services.edp.PunchingService; import matrix.services.commons.CommonErrorService; @@ -38,11 +38,10 @@ public class PunchingController extends AbstractAuthenticatedController { if (!authorization.isGranted()) { return authorization.viewName(); } - Session Sessvals = authorization.session(); + UserSession userSession = authorization.session(); model.addAttribute("model", punchingService.init( - Sessvals.getBranchID(), Sessvals.getUserID(), null, "xxx")); - model.addAttribute("Sessvals", Sessvals); + userSession.getBranchId(), userSession.getUserId(), null, null)); return "edp/punching/initcase"; } @@ -58,16 +57,15 @@ public class PunchingController extends AbstractAuthenticatedController { return authorization.viewName(); } - Session session = authorization.session(); + UserSession session = authorization.session(); model.addAttribute("model", punchingService.addCase( - submitted, session.getBranchID(), session.getUserID())); - model.addAttribute("Sessvals", session); + submitted, session.getBranchId(), session.getCompanyId(), session.getUserId())); return "edp/punching/initcase"; } @RequestMapping(value = "caseedit", method = RequestMethod.POST) public String editCase( - @RequestParam("PortfolioId") Integer portfolioId, + @RequestParam("PortfolioId") Short portfolioId, @RequestParam("uuid") String documentCaseId, ModelMap model, HttpSession httpSession, @@ -78,10 +76,10 @@ public class PunchingController extends AbstractAuthenticatedController { return authorization.viewName(); } - Session session = authorization.session(); + UserSession session = authorization.session(); model.addAttribute("model", punchingService.editCase( - portfolioId, documentCaseId, session.getBranchID(), session.getUserID())); - model.addAttribute("Sessvals", session); + portfolioId, documentCaseId, session.getBranchId(), + session.getCompanyId(), session.getUserId())); return "edp/punching/initcase"; } } diff --git a/cygnus-onprem-app/src/main/java/matrix/services/commons/CommonService.java b/cygnus-onprem-app/src/main/java/matrix/services/commons/CommonService.java index a13c4b8..a0e2720 100644 --- a/cygnus-onprem-app/src/main/java/matrix/services/commons/CommonService.java +++ b/cygnus-onprem-app/src/main/java/matrix/services/commons/CommonService.java @@ -3,6 +3,7 @@ package matrix.services.commons; import com.cygnus.db.CygnusDbExecutor; import jakarta.servlet.http.HttpSession; import lib.models.Option; +import lib.models.UserSession; import java.util.List; import java.util.Objects; @@ -15,6 +16,7 @@ import org.springframework.stereotype.Service; @Service public class CommonService { public static final String SESSION_ATTRIBUTE = "Sessvals"; + public static final String USER_SESSION_ATTRIBUTE = "userSession"; private static final Pattern MENU_COMMAND = Pattern.compile( "SubmitMenuCommand\\(\\s*'([^']+)'\\s*,", @@ -46,6 +48,20 @@ public class CommonService { httpSession.setAttribute(SESSION_ATTRIBUTE, Objects.requireNonNull(session, "session")); } + public UserSession getUserSession(HttpSession httpSession) { + if (httpSession == null) { + return null; + } + Object value = httpSession.getAttribute(USER_SESSION_ATTRIBUTE); + return value instanceof UserSession session ? session : null; + } + + public void storeUserSession(HttpSession httpSession, UserSession session) { + Objects.requireNonNull(httpSession, "httpSession"); + httpSession.setAttribute( + USER_SESSION_ATTRIBUTE, Objects.requireNonNull(session, "session")); + } + public boolean hasPageAccess(HttpSession httpSession, String pageRoute) { return hasPageAccess(getSession(httpSession), pageRoute); } @@ -69,6 +85,29 @@ public class CommonService { return false; } + public boolean hasPageAccess(UserSession session, String pageRoute) { + return session != null && hasPageAccess(session.getMenuHtml(), pageRoute); + } + + private boolean hasPageAccess(String menuHtml, String pageRoute) { + if (menuHtml == null) { + return false; + } + + String requiredRoute = normalizeRoute(pageRoute); + if (requiredRoute.isEmpty()) { + return false; + } + + Matcher matcher = MENU_COMMAND.matcher(menuHtml); + while (matcher.find()) { + if (normalizeRoute(matcher.group(1)).equals(requiredRoute)) { + return true; + } + } + return false; + } + private String normalizeRoute(String route) { if (route == null) { return ""; diff --git a/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java b/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java index 30acdd0..c2e06e5 100644 --- a/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java +++ b/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java @@ -1,5 +1,6 @@ package matrix.services.edp; +import com.cygnus.db.SqlArrayParameter; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -13,7 +14,6 @@ import lib.models.ErrorDetails; import lib.models.Option; import lib.constants.ApplicationError; import matrix.nimble.edp.punching.model.PunchingHandler; -import matrix.nimble.utilities.CommonFunctions; import matrix.nimble.utilities.GlobalClass; import matrix.services.commons.CommonService; @@ -25,8 +25,15 @@ public class PunchingService { private static final String PRODUCT = "product."; private static final String CITY = "city."; private static final String APPLICATION_TYPE = "applicationType."; + private static final String DATABASE_APPLICATION_TYPE = "apptype."; private static final String CATEGORY = "category."; + private static final Short ACTIVE = Short.valueOf((short) 1); + private static final SqlArrayParameter GENERAL_OPTION_TYPES = + SqlArrayParameter.text("CITY", "APPTYPE"); + private static final SqlArrayParameter PORTFOLIO_OPTION_TYPES = + SqlArrayParameter.text("CATEGORY", "PRODUCT"); + private final CommonService commonService; public PunchingService(CommonService commonService) { @@ -34,8 +41,8 @@ public class PunchingService { } public CasePunching init( - String branchId, - String userId, + Short branchId, + Short userId, String verificationCaseId, String documentCaseId) { PunchingHandler punchingHandler = new PunchingHandler(); @@ -43,16 +50,15 @@ public class PunchingService { CasePunching casePunching = new CasePunching(); Map> options = new LinkedHashMap<>(); - Short databaseBranchId = Short.valueOf(branchId.trim()); List