From 80ba949505d0da126a78b012b2e0bd34a4deb183 Mon Sep 17 00:00:00 2001 From: Notmoo Date: Wed, 26 Jul 2017 21:41:09 +0200 Subject: [PATCH] =?UTF-8?q?Module=20Server=20:=20fin=20de=20l'impl=C3=A9me?= =?UTF-8?q?ntation=20du=20support=20des=20query;=20Suppression=20des=20que?= =?UTF-8?q?ryLogin=20et=20queryConnect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.~lock.Interactions_serveur-clients.ods# | 1 + .../Interactions_serveur-clients.ods | Bin 15649 -> 16020 bytes .../pqt/core/entities/query/ConnectQuery.java | 19 --------- .../com/pqt/core/entities/query/LogQuery.java | 32 --------------- .../classes/com/pqt/server/Server.java | 7 ---- .../controller/SimpleMessageHandler.java | 37 ++++++++---------- .../server/module/account/AccountService.java | 3 ++ .../server/module/account/IAccountDao.java | 1 + .../pqt/server/module/stock/StockService.java | 22 +++++++++-- 9 files changed, 40 insertions(+), 82 deletions(-) create mode 100644 Documentation/.~lock.Interactions_serveur-clients.ods# delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/ConnectQuery.java delete mode 100644 Workspace/core/src/main/java/com/pqt/core/entities/query/LogQuery.java delete mode 100644 Workspace/server/src/main/WEB-INF/classes/com/pqt/server/Server.java diff --git a/Documentation/.~lock.Interactions_serveur-clients.ods# b/Documentation/.~lock.Interactions_serveur-clients.ods# new file mode 100644 index 00000000..2af99208 --- /dev/null +++ b/Documentation/.~lock.Interactions_serveur-clients.ods# @@ -0,0 +1 @@ +,Notmoo-PC/Guillaume,Notmoo-PC,26.07.2017 21:36,file:///C:/Users/Guillaume/AppData/Roaming/LibreOffice/4; \ No newline at end of file diff --git a/Documentation/Interactions_serveur-clients.ods b/Documentation/Interactions_serveur-clients.ods index b9561dc4798ce5e79d2c409550088d5e7a2b42f0..4c2525176df9a8504a2647c3320b4efdea9e148e 100644 GIT binary patch delta 14089 zcmZv@1#lj{vMoAhJH{Aeh?$u&W@ct)J7#8oF*8%l%n&m(Gc(1^j4|Krf1mx{K6US? zs!JuU?$V4j>Mm(@u4keTf`T*zBsu`V0zgnk9D)+~UunSpFFDEiFZq-8pBCZ-12FWz zwFFqOe;Ou<6DGkh{{avu{NVod>Hjy9Z~(^hKRUWR2>*1z!ovQwo}dj*2%6_a@BCdH zss!g(pGvBnlR2IGy@3W2l~85Nh+(6DM1#}8#LIV-Y^qMaLB4iK?rh|ewVpOdS4tJ< zg=Z*xDm#Xyqj~*se#M9$mL}Pj6J7@fi%D7{j&1|_GTZC$V*exsKDmf=P_cJMHX8mI z&O^AyUZ5F8k*&p>qtqsh`n&uo89P;~^rC&%6 z1GlACRMulEOceWjHfl#j-;BqVRKZnity*sh-Otpg5brK1y@$g3+reUDdW}VltsIh( zu@UWakztYTREKd{)j{d_3$Oi$%_cfp#K(6=FpH^cD!OAC(ZywHY}1hxBZTNj8PBne zv8y_~#4Sb{T=8N?;AyEzPR@hdf>p_`Y(UaBr)23&ac z*g}I%{gvx;UDhmEmlB;NZ;WJ0t+vQ^D0fSAyvX**4&nuVY084()K||+hsKsD*qC!> z^N!pGNUCr@K(Wol-AQSRD8|_+K-W<%K`@~cj`;n)r2#dS_Xf1ageT9jbyG6kW-po* zEt--0g65V=SCPUWbqO>xU43O+wa(|qI953z#PoGlWHmR^8@?%O?#phu3dp@BCI~GJ zBkZBZf2Qg_^2`OxR1$(OcW9)#R~2VCUu#fBsKjd%d|Up#EbBW_GP4j(7+@nZb8+D{D z?Z#HOAP)aDd%XQTZ;Fd@cwI;*D&7m`ui*cqY{H{SF~}(v;bO_3~cnsC;4hbby;_*2QjW8GO^L0 z3Ok<|^}|an)-|Bhy%?Vak7uK5TH|Ay?%1Vab*$#K0ZY4Mm_nl$|s?p&l_HQYtF>pkRQ; zd!0xEcVfy!sZo_%<#z<$>WVB0bHK*z8ALqSUT2JthFBNRug_xCN<4|hd&^Kle3g-@ zWrw(X&7cv`8^hmEgg|@hiyskegBYGJ9v&XsZZM~DwZ?(bYe{GmpJgHM9yvOMt7@Zk z-zrz7-*PO}JFci%PuT`N(Id-}XJSA~S6;5|6ZPu%L%8C!JeQh_84s!4jp(@ytc|zT zy^_S1XiB{NC)jxnN>&mS3g#{rSyvVWP#dXG9?#SeVHkntdiDns*{$V-SNCox^R(#p z_vOa0hfU>bgyr0ky^Lwu6IoeVOW5$zBF}5Ko|LbvFE6%C$A4sVI{B+GBgkp1ab8l4 zmI$ga->(SBD&D~qq+ww1(JqHWpaEc>5CHz|4*%`2>TuzB!T#m+v_9d1q+{k7(Ssge z!-uP7Ux(||(pHEt31g2!_lIljB8VDj)>0Ee^7yirx$w2OEx+%%I$ckSZ)+m-dOU0< zFlPdDU?c0L()%!ZFE@uUJil+wyLK(1HrLkj`@>y-_75FY+kH}6&D+Gb4O+^=b%2}- z*n5C9v)OK9&5pv{U$?vkIYo4a*zbHn?u$jRG}-{0n=lJFJPD`v*q7@#HItG=_$q^h zKNq-@l!^LoR}$6{Wm4IJBl`!{v(Y%v#9i~(T@Td)FL(EFk-H3~f2ckif}Nr>*ZV{_ z_V>kOIi@sEB$BV8jHuVk2#6&0k&@VRj^fgCN^-TN@-)mKHs9$Q(3v9uAqRPy7Srl- z<GZIT)-FdgT& zE}`#T9c$M=^NMqb>r({=0N)}0Gq3*+bDpK%h$`>w@c_UcFF^u<2{a7=zz6JK6wvge zq!0ig00kKpQ2>(w_(BHYa{}bl05u1|!9`ESNYBc}LP^fWMDvY<6`&Ib=#>CYap0R8 zz-!3KE(C~51HvkRh!!BF3`pw$O7eh;4j^OY0VjXJF%s|&0=yyskW&KSln!_%0AA^UT@K)o2e_02-g$u6UsKU};#-0AIv}+ZC}`#`=mH}8frLIFVFbwR2hzrY^m(9o7{~+71Nmz}=^Rk84%CbR z_47dO8ql%;w5h_3-!0Jp42;|XWAAz)af+o~ z)<2Sb{DWPBQ(Pl+JmU&IYPtj(=QZ2red~M0M^5C{K8z=iO{Pz+w?F)B^aCArLtM=Q zyj>G~tU#fDUI{;JQi5FbqdbZeLBYYnL6J$338~4Efk{zuKjXrZlau|UbAysg!ZYg= z(+kpbvLbUEGxAH5iklPax=K=l^V3smv%-q<(wp+5TT7CPi;D}&YpbfON^9Hd%JSN3 zi#t0zQ_6bM>j#RP2TR&!>N*C4`sWjtPs;ljT0niHts{$_Gpo%L+ieT`xo01}6+egT zG6oup20EIiJ4(lTn-=>jmqwbl#_M;d+k1L?`X?4A<|l^d*A~VHW+tcCW`~!SmIjv( z<~R06wl){`evfY5^xk}|?4GP1-yW_E?XAyW{~kHnU%A;Hzdc?(I5^lpzrDCUKE3^O za|Sy2b9Z`kdwcWnboX?B|MdFwaQ*Up|Nj2|_m5a1gVh26Y#K=sK^6Dab6t2HH1*Dl zD*Lt$n;b|X+E7M>)5g<$Gr9#FOo&fCCGGT!q7h(VOyDgyjNia-q+nUN9-ogcHaEPM z{HxFj3Nh8xv_u3@HdNQE7PQb$NoLP)VnInL;K3QcGkdUdQe{f2X){?^NXIiixNi4f zvOhAMhM(L86D>49MM&bgp%(TRYsB-@FZX_WhwsHg^)sas1{=(zt(1;4%QFdF-v88Bs{=MdGAW3v^Yw*F%(PE8k_r|OWf?I?;wOrb?ztdualum>vF zlI>jEt{tR9K(Q+{jLAub7Wra7zhc5y`!kSHDtLG&gofl4JjkT-`wxs6h{ObFJbN63 zmWbwDIRRAMux1m-OpVd668>BP~6NT z{d0-2;=0mk(sWJsnc;J+KZ|ce67PaE>W*78NPk3+)%cMHLJ%8kD&m7>c#pJ|HyW2` za*mXJsi|b0XOan2U?Rox2hRXRaO~E>&&bk;P&sdIDUAjU9n&e*8WFd)qSX}FZ6I?r za9eFGTnIBMi(P>@q6d){S4(UUox)M|Sm-xPXp~^CeL@qyYj%(UK}%{a zVyV$G^C3d&C}wEDXSE_3L*#ykMpm#9O+`hizi$ieD6H$>av2_EdyGeBkL52?T#_UN zhuR;G6!jpUAhseUj#cOiyGtpVg4S9XmH<%nXiClmf7-~)n9rar&PydU7vsh`%G-l> zvSd+7Oih)fpe(5)%hg~nf&{I6%IOA6llG2HeF993JU$_y?AXDt7XC8b?DlS0o5^} z6xIu1qDQt+7Pcrsf`&yj6i^g@aZ~huHet8 zjFVPENl4oywP>PQS$OGa9sf7%FTOUwDE1=Fx2$DM5rG`GVc!Rnbld|;2+ycU!jciP zhxXznUZkpB@68%f zg4IMckc7Mb6qKXvZziIu<06_B;6X>sb#7TW6IehX;#k0}Se>j9+6a9~2wUb18nam! zYQ;6egUVMX}F<_ zYY7WQ!2&yOEIvdk?skVIxWD=JfR`2zx=M4^B`|~K1FZ;OeY{qh9;ut}QqY*_BIPTqv$-2Ok5wmm|*6#>Ax6jk0n_-&ZM;Z1L%B2=GaYKEcvrhy$ zW}%E*xUALc@b}ykTZJ)*DhP-c(7B4nKYTW{ICD-Hd-OO9PEQMAN{Tmz=VpNUea$DM zDTb|1+*hgWs%+TBK8&v~X$TMy1KT*8+n^1K12+XG6CJhV()$az59huccna?_ECP+Z zd;^J(+bMQ|ODXxca{qy=M>+?xnkchB8ENw?Go>pCz` zKHvfG)sH*46el6ykr`Us5^51$DnmRWx`rO3ga=OLSq0y*R8?#wx~?qjmSVMA)s_g_?r z>he&nDX4RvEqOe?(4S3P$Y%t zeba%A&Se#;cnV(^wU8`IJk^78UEHg!tkZwMoHp=c5y&IzFik@`+jKZk`R!lz+F1h3 zi}d%X~xQek`EzMInNH(mB-+Dg5F&-dcFgp=}pV9il<^P%!P_fG+%csq zHx<2F0WT^ta?WF~s`fi+vp1AFZd1=+1V)%5ObD_L`(zlqj_5z;p?1MlD3yVGW6QWa zfjWdrHBnwr6>7SKz{UH4u3VC0D8>))oOlR@*d%dp*tmCxby5ddO2SDLbNEa_b|}II zJP14&azYtZYA$?ifn!H%;wG(VG*g=4GpSez6%9dlS%G*$P#r?)xlu&|%2t+P*NCP~ z)GGKjCM&{LbDP2edgLCbjU#minWpjT{`|TIj1n}++~tQ=>z6Rki9UjSgOX4*5|ujR zvxti6r5`+2=hZh#7560=;zeK>d0YozBX53QqqIN5^))Rs?ck?bv2?!f^-D&qH&SCS zSFA!;3zaWX>d4VUa&Dm$E)rwqy5kxs!((8qK<$m_V``eN?&xILkU6hghuzGILHckl zWsJpve#D!BEgb>0@-`5Ap(y>IvCYDoDmM|9ahraO3nh;YD-8}Kqdcq>uqOv7<*xsP zqqp>tJ>?yjE>Op@qLUPJ8lb_mA%7ynojQDw+Z;uyVDP z{C%Kd;AlxFF(;|32V~kZ%BRB;u2QMd|NPbx{6 zRUM9Mc$+lzx^se+g*g$YnN*?w)7Ql5?u=O+?RXLgzi9tMk)f$a>=2*NkN5CUp%=DO zq~*XGI}XDv2#ch)my$vDZS$cX?Zs$s`Af=6^bg9!lq{ll(j=&%$WeYZnBx&XG4HT- z(9*YQ6HkR1SeIh)r=fL0BN_WqT4i=AYKqnRSQ<4L8}>hOcL}Bp7HjnErV6zruniViJcH51rHQ)HV&=?6Shd2 z(}K#1X_Cw2V8JXQ;n<)aJ|jaYrW~OMQie%2lOT=+cXURB6$=nl`#FR|IOw#Kuck!B zAeuKas}QCX9qdP0qhO06h7~J5dKKvJp-a%fHYq#l*f@mdC+y2gT!TCb8MlTC&X^vE zVlBHZ!#crA$etWpWmbvwI9L36E`Ydiashm3+RZPJTGtIuW3HT-6f@fPy=r? ze^LqL-#4CvrD=zTatUQ1)}rJ{IKYRkw|~bqK!c%t^`i?KljM9a!xkc)z_gax(a0ah z!~#db&9~>eHUn1)6@NxRmu!&mki@609Z{Y(viK6~^vzxo6=8z-n{2R1XF5ub5d~z4 zXb=mDuq<;yG)z^CHLX?;G#4HbNIdoDh@uE|b!jV~5)q1|@U#xDPF}r)N7x_hw+L&3 zPZg<9iRwrF;ET;(v`e6Ut8RK)X41nX$bzE~9z7~=*#YKrN43B>NrK3*Dvpo_Ozl2S?nQ*f+Kvobhn+E|O$Nl4^>Hslt!v!1*U z7Phmd>H`_JqtfF>NM4RauW9eqS+^^YxMD56dPsf^rjxC38Pw>)~bU|B3 z#pYEWS-R7f{<&55%av$%f9NYdEZk(#_Iw0KVts8{UWeN2_}|R%_mFRVy*(~1l{_rz zWrI6C2`*kTa8Mk0y6p529#!crtxh$;e{~$fM=*4I*@4`lZ<1Yc4zbjeIzNt6%llOW z;DW2-tXBU(=G57MzD}v=;cNsy^QSL0lvGw;()~GR`n|NaT3>L3s+&vPku#aGoZ?`+ zfoqO6PiL{c0O#qQb6refm}0&WelSah7-6+Zlil>Faou{d(eaP%$X9MXims{0KRr9i zX=cMOj+x2+xxQW8?>>4PMsM0zo6?8L1Zd8lnL1+n9w14Ov{e=2@voGu(~cRIoGv~C z>kx$;9|P4@Zy&&Sqx^5g(QMjYN>Y_(Ei5eJ8dU?~yMgo)=5|#S9iFSVQ+r*sD3L+> zpxx1rc<1&#%WAok(`etu@;3j#E%TU)kr(QpCGmGrTrvo|bfoD?KMZPr5)HCh9UDJ+%M)Gfa$} zQbs%Y%M+OL56{sMHeXz4XE3y@8;)J`x6etUO{YZE>ycvK3W;L%9qJI8qaU_=63~-kYZWap z>|j@&x1S$29L}*6W_^y3VOBZO%mrDdxZS1)?;f`6uU79IIXaC>Q{YoGyp@c%S!#G# z#**i>of4FUq{FacdHPJUIP2@%e@DIpodibr8f~wGiS(&S&jqRlMRP!7_Y@{yP0|+SVW8X6ez6I}<;2j}X4~|AK@%XoprCgagB& zsq3j+f-D>fqG$2sRWc}iQohZHtLd6#F$8(gbOOV zb9z&|Nd{J^DJi|kLnHI)Kq`qS-?=Fz;t*&sXr|~F_>k%Bp}Ex7{vPFow35RVLeTHT zH!}a`^%<%FS2N2p#^LGX-ryVK(*DCLEc)PK`>7ZY^k{PJ$^<5XDlwp7XpgULnjL~Z z0qIyy8X|*SsEeP%m-E#FeJZyyeYu%dCOI49XQ>=9)(%)IxPgO)Gw7ScTnqKifr%8M zoH``bp@09+$O3diI{W&tRvUnn7GtI=D7$%To zPP^I4%UN$G*V&_VsmD|@d;XMWBdhhN8O%bW%Io_-um2tf$|!t63{~@^`qT~0B{j5MY1{vkMLrWz%(X)xU0^*46`~BcrAz}YamuCng84D#N;rv z2AC!EyvNE4Ck9~>f;vy>jbt5O5P~?zj7v*kLqBq4dB5xf`q|EzUms?pe>UV{dHH#%K`zSi+XAyL$AA2`>Dfm z6z>#zk^m)z}HbUtwp5wV7m@T{srBMhCW3-YKoeCuJl0O2t0&F^?u#+kzVFrFq zAY%@uzp9!<8kIm0?Pr>muMWM--9$@ZFmXgPb(xM#GiRc@~EYQ3l&GXR4t7xvhZ=5zEcuRfdhH~93DO?J64wFe)9 zEhbQp@xlI2j~0*+F1OGpEJV9Q@mKh}!69=39ghl|dG`w2J2vS?lBoPLCe`Wu6MRaB zsFsF7a~#G|>A5GGw6}3})>MWWW(1~x%8WUv#7@GTDJK}#F-hhlTuvH5^ife;WV%Mc z=53qe)9YOnL{?C5cEI*4^rp%LiT>7CDzc*c_2+17lchSnxHKdiQ7@d+@>^{lc%#z$ z;e)bi$ks&YCk?%J7*|!1L_{^*iv@N3qXMI&x_GnvE!*4kP~j_;%->Iid;#@9W{E$j z@X(_2idgA7b8!Q!&u(gNoB~w3ftcdvj+5-tzSf?+M1)2FMHE*Ii6tC72%0`$ccHAuk97BhTtFwSuC^;Qk$PQzQ6$8f=QTx673DXJ5LP ziz6s!unj~46br9oX6Nk#4^$LdTYp`<4LuIlCiBkiy3VGpj-_C5^!~8lcqZo(F&NDeu>1T3pE9ljL+ZI3PeL+Urj4mnv#jYUM5*%;l zenxP}Muu^va;R{Aj<^bkxK^2UC@zu@A^vfnEerucavA(L`tjlV|DqofVNBTrKGY6^ zL$emYpcXg*`?Nw!m?Pp3uqj)28*B&z$-fsafTXCLNR^O*|9@XaC&-iIgLF1*cbhRf zFO^~SaxDDf_PaR4(oGZ%YL0+}yi9_e4wC|s^siF$v5A@M_iUa^V?|3o5M7el1tHIM zdlGtFN;+m7J%q+_A$!GreK7)a(FMKYB+YTH^ger|=AmN}7?Pc!7i24UllnDEtumZ==@xY!?3p~Ey&nB(JN~{qL z%P3YXjd=5?)}j_+$4Yig_UZ4V?AgZqnFgz1e@4RqWM>+6R$xWA>%Uhq2bMMP$J z(H|p&^?$+86y^o(TC=Bbn{n?M9Y-=SFk}`q0%w@6inJO=`z=U}py>cf^KW=OEjB>- z-+MHhvDjYDW{8}7uG7824M<_VXDRQsnrtrW%W0l!Q{?77tXe5VfO!}n3;&QaQ?o9RV z*CP71%-4d?I{go6y$5Zdn((7Tq$!xFZ;yMRcjNMH!pXwsIzS|#8rlbn?4jJ0S%DLT z<`@A5T~Uo$YsKSSyq-w@{4r~JntKHz&rh`aZv%7-u6-?EB@mzyJn`wID$8GjVK3HP ziXk$+-hE@dA~us8%T5j+ZpFoyRy^1Gqlj=zNwLTS(sghPbOxb@gUXV?^mGB#*f}Q{? zz?2dVUu3^$hY)X%ZY;<(@DwXBkB}~#;Q})D*TdH>r9q_oX^)uHr(jPlHW~81x(Gsv ztCTIgUUn|*#@lUYU%bZS(rR5DB#M+F!}QEgYx^r#j*bZIGw62yb`L)cC9zet3gOiS zQfSsm2SEwjGRVGP>}h)r;_|=@U0WJZneYPIh%mGLUW_<-c(Bic8GW+a64)GZ))9$b zzq!T8L%&q;yG@16jU{YnJqCNRf8$xmQz^)jx#Sy^q?)4xO0{kM)N=n@EBdoZ z4t8e5X^&fe-08FLW((#dyP-4oYW$E8#fZ0O_Rp-pGjUUc$9D_W#bjoE3lEt2>d zMUXZDt7LGBQ(gA!Yw!Acfv-%=0b(nKA-<2rJl3z7C)u0Hqc0qj5s2CiD|)Xjf%XBL z?opE*lTC-e;?kpTcLuEP@)SRxu$tx9hVxwTp2atQ&cgiG0F4;y*4|grt~$))*H;iMlc`L^b$$Iew`Wd8%hY|b?=lJXnyzXR z=HD`R!x1m$)z_gzV{w9&rzT@D}>slG%WyX(U$YP<)GO!Yx zFRkLWUsnIh`Zf9q0N_c8aQo@Po(?NKn^0^`tIFpSDip8|EWc_ zyEWWZ!W22@R!7Q)ns47Ft=&rrtf@R`R8h{WWsF)q0Vi{If+J>rm_)6 z`lww9`ML_CUt$<>*9jf5UK&S{jfe59UagF_WU{5(;k+@oUM=M;M4ubX+>#z>?yIET zw%1~@$qemh@ilS9*wCRqlvE-9NQjZ~LdH8T!v8Y|jb=%r74 zN<+iaBWV|Mp1&EOI#8CzTOB5tkWwFV66d4tUl1KC-rj+#f(Bn?|l0xP%_zTsHPa(%mQQn{y!?$bPeyHpEm$ zfXqVhh65koN4Husz?Fz;cC5?9Yes1OmnCcasJE17DksU7UfdQvzj%BSPQs*eC6w&r zR#tkPAC>YIPxh%Wle1R1+=7S-DetB`hp9^_Vh36PEnBHnl$tB7z8|S6JxT`^v zdu^LyeLXNUL?ZV)ekZXxM?ei`3cx>j=uO0vbz{hSB(iMnE9uXG`+=|n<}_TRxX?d= zaIc(a#&Isz4u8vHmK05uZrskvyql9~r%P_Ybdh1w%akWYIgGa^4swICZ5;iS7t5py z<+D|gM?mNHLeSt-p~|u{<~l+>(I6|uPlO~0@un&d_rlm{oR7a;{4zd&C7TpU?OWP; z7}1p6I+&BNxI#r$9MXk#gp|)8^eV;`tPst2-(OqH2ytc-g`oV+l~~2d?YGf)kBozF ziIs9izhCYpDDMG7OM^f9+?E5S=7>AxPg#({ZQl>;BI=&}mLib5)5cr7Pn`N4B{zTJ zkJN4Jf%c2vnYlHe{i{X^*bah@vw08HU-V79Zu$Sk_gltJd}DzF066vk@WTFwpuWyX z2Z|kmq&AcyXOG2(^}T5xX=KbAjvq^A+FSb7Z_G~QF63_Vh(eGS{=QLQ3+%Mt;-(?QvvuhmTpnFO|_kg65 zK5r*o5mTx1Pe{qkZWJ&RewMhJ%&DG-?>nZI*Dq%HDlD4{ zcm>=YXIz(o#o1iGAAG21&*FFG5Is>;6Iu?{vg=5NUj&t`t2ss6;@nvIra)L8F)96> zm-AXmzH)La_AfJgyMyS)FoP`~?K)4c1~?y)wV-?%%Gf8*gBk*o8vNmiX1IPyx#9DC zvq+=XdVUX(#AU$m{4<^DkcqygSg7v_MmTnY#?)qtEsm;{DxG?n20Bw)N$fJs$CeV# zX$_z6+YQEvAnwXGkjcoJ^d^j+%Q62RLPL}QKn zlPQt*bs{>JN_o$|OY%j=t<{Nx6qS4-jC`>C%} zv00nIA03(rCL%^@lncbLvDxWp;9o_*|D)So(YnOokDDa5c>c-Tc;&p%FRB>YhSSr^ zRR%kSL8KY)HctW%Ixnzym=vz=uJ!7NJ(WQv@yzdwLTVXOzs?ZO64&^gg=wQgzRtJ+ zKfv+5ZAi)hMz;R0AyBL7ThF9e_xv7geQWpqKDLFMU&08Hg%v0VV(+s8ST*w&gecm1 zm%ti$G`aC~D5FUN;(E)IeX19s@ts=(aH9L^IJ@4V2o!BS#nr_cRut>-1o8C+z~pE4a|N3xd= z?+sHPZqzuZpMYK+{QH z3AY|3<;L#bpjv2V@Iz9{Z8XwZ63O{7Uuege&e5&~lWTT+*30Uqy7_%Cws()wmAp(7 z=yVH>-ms4r?{nA-q-QL2h}f;3>F#sIHP`u#EM2p9&<*m1l(GSX;%`)eL;6mou-_Tv zB3xGumAE->IZ=$?WEz(1_%%su2l0NmR0q6{n!&U+ts*Lz+0}tTi0HC>Ik|FqP^z<$ z5vF0N1{$+t(dPjF;Hl~l(|M_pdH5E&-v)<`X5&Jd(VC-rQ!(0H8C9#8U)3s3lOb#3 zce;(P4qnjvvPNMInma!61XX12Sik4XvhZGZ>>ny`pV&sZ*93?YE4^Q z@3X1ej*38}8x<)H+b7>~xEX&&PL5<25%Gi#zh|2dx}p7K!{dbzrNVakVVsY@EOHoF zSP8cgiNCD!K=S|XW$N@eRQ_R=*K__Wl`4Ub2QLAdi~3(xcP_jHIWF|LD;H+Q?TU_M-v1QGT{x?nQ|6!~k!G`-EV_V$P z|F$Ux7nJcV^$!z1!JCKSUyYSKcwk5gqdd53|LXd0GWFkNvHyBxKLLP^sk0%yyN$Ji z^nVZhzlqiW@a4aB0DuW0K?VVb_CE^$_Q20l|LvRM|ChoNWrE)~Y{Gwy<-b2I!v6vZ sGbglu!}$l~67!+@`7ir>TQJ}H8|JCz<0QK!~8UO$Q delta 13778 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 W0I9+S-sZ*u`w6~>E#&^I_kRF>c53wi diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/ConnectQuery.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/ConnectQuery.java deleted file mode 100644 index f5caa308..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/ConnectQuery.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.pqt.core.entities.query; - -public class ConnectQuery extends SimpleQuery { - - private String serverAddress; - - public ConnectQuery(String serverAddress) { - super(QueryType.CONNECT); - this.serverAddress = serverAddress; - } - - public String getServerAddress() { - return serverAddress; - } - - public void setServerAddress(String serverAddress) { - this.serverAddress = serverAddress; - } -} diff --git a/Workspace/core/src/main/java/com/pqt/core/entities/query/LogQuery.java b/Workspace/core/src/main/java/com/pqt/core/entities/query/LogQuery.java deleted file mode 100644 index 106d5fd7..00000000 --- a/Workspace/core/src/main/java/com/pqt/core/entities/query/LogQuery.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.pqt.core.entities.query; - -import com.pqt.core.entities.user_account.Account; - -public class LogQuery extends SimpleQuery { - - private Account account; - - private boolean newDesiredState; - - public LogQuery(Account account, boolean newDesiredState) { - super(QueryType.LOG); - this.account = account; - this.newDesiredState = newDesiredState; - } - - public Account getAccount() { - return account; - } - - public void setAccount(Account account) { - this.account = account; - } - - public boolean isNewDesiredState() { - return newDesiredState; - } - - public void setNewDesiredState(boolean newDesiredState) { - this.newDesiredState = newDesiredState; - } -} diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/Server.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/Server.java deleted file mode 100644 index 7e88ea10..00000000 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/Server.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.pqt.server; - -public class Server { - public static void main(String[] args){ - - } -} diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/SimpleMessageHandler.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/SimpleMessageHandler.java index 008640c3..db41df3f 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/SimpleMessageHandler.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/controller/SimpleMessageHandler.java @@ -2,11 +2,14 @@ package com.pqt.server.controller; import com.pqt.core.communication.GSonMessageToolFactory; import com.pqt.core.communication.IMessageToolFactory; +import com.pqt.core.entities.members.Client; import com.pqt.core.entities.messages.Message; import com.pqt.core.entities.messages.MessageType; import com.pqt.core.entities.product.LightweightProduct; import com.pqt.core.entities.product.Product; +import com.pqt.core.entities.product.ProductUpdate; import com.pqt.core.entities.sale.Sale; +import com.pqt.core.entities.user_account.Account; import com.pqt.server.exception.ServerQueryException; import com.pqt.server.module.account.AccountService; import com.pqt.server.module.client.ClientService; @@ -16,8 +19,10 @@ import com.pqt.server.module.statistics.StatisticsService; import com.pqt.server.module.stock.StockService; import java.util.HashMap; +import java.util.List; import java.util.Map; +//TODO ajouter des messages d'erreur spécifiques pour les NullPointerException si le param du message vaut null public class SimpleMessageHandler implements IMessageHandler { private final String header_ref_query = "Detail_refus"; @@ -55,7 +60,7 @@ public class SimpleMessageHandler implements IMessageHandler { long saleId = saleService.submitSale(messageToolFactory.getObjectParser(Sale.class).parse(message.getField("sale"))); fields.put("saleId", Long.toString(saleId)); return new Message(MessageType.ACK_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); - }catch(ServerQueryException e){ + }catch(ServerQueryException | NullPointerException e){ fields.put(header_ref_query, e.toString()); return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); } @@ -64,7 +69,7 @@ public class SimpleMessageHandler implements IMessageHandler { try{ saleService.submitSaleRevert(messageToolFactory.getObjectParser(Long.class).parse(message.getField("saleId"))); return new Message(MessageType.ACK_REVERT_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, null); - }catch(ServerQueryException e){ + }catch(ServerQueryException | NullPointerException e){ Map fields = new HashMap<>(); fields.put(header_err_query, e.toString()); return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); @@ -84,16 +89,15 @@ public class SimpleMessageHandler implements IMessageHandler { return new Message(MessageType.MSG_STAT, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); }); queryHandlers.put(MessageType.QUERY_UPDATE, (message)->{ - //TODO Supporter les query update - return null; - }); - queryHandlers.put(MessageType.QUERY_CONNECT, (message)->{ - //TODO Supporter les query client - return null; - }); - queryHandlers.put(MessageType.QUERY_LOGIN, (message)->{ - //TODO Supporter les query account - return null; + try{ + List updates = messageToolFactory.getListParser(ProductUpdate.class).parse(message.getField("updates")); + stockService.applyUpdateList(updates); + return new Message(MessageType.ACK_UPDATE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, null); + }catch (ServerQueryException | NullPointerException e){ + Map fields = new HashMap<>(); + fields.put(header_err_query, e.toString()); + return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); + } }); } @@ -102,10 +106,6 @@ public class SimpleMessageHandler implements IMessageHandler { Map fields = new HashMap<>(); - if(!checkClient(message)){ - fields.put(header_ref_query, "client non enregistré sur le serveur"); - return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); - } if(!isAccountRegistered(message)){ fields.put(header_ref_query, "Compte utilisateur inconnu"); return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields); @@ -127,11 +127,6 @@ public class SimpleMessageHandler implements IMessageHandler { Message execute(Message request); } - private boolean checkClient(Message message){ - //TODO faire ça - return false; - } - private boolean isAccountRegistered(Message message){ //TODO faire ça return false; diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java index 3c7c6abb..c7eb5548 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/AccountService.java @@ -20,4 +20,7 @@ public class AccountService { return dao.setAccountConnected(acc, connected); } + public boolean isAccountRegistered(Account acc){ + return dao.isAccountRegistered(acc); + } } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java index 61a76a54..2160d2df 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/account/IAccountDao.java @@ -10,4 +10,5 @@ public interface IAccountDao { boolean setAccountConnected(Account acc, boolean connected); + boolean isAccountRegistered(Account acc); } diff --git a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java index a4cb6ec8..a5e08643 100644 --- a/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java +++ b/Workspace/server/src/main/WEB-INF/classes/com/pqt/server/module/stock/StockService.java @@ -1,6 +1,8 @@ package com.pqt.server.module.stock; import com.pqt.core.entities.product.Product; +import com.pqt.core.entities.product.ProductUpdate; +import com.pqt.server.exception.ServerQueryException; import java.util.List; @@ -22,15 +24,29 @@ public class StockService { return dao.getProduct(id); } - public void addProduct(Product product) { + public void applyUpdateList(List updates) throws ServerQueryException{ + for(ProductUpdate upd : updates){ + if(upd.getOldVersion()==null){ + addProduct(upd.getNewVersion()); + }else if(upd.getNewVersion()==null){ + removeProduct(upd.getOldVersion().getId()); + }else if(upd.getOldVersion()!=null && upd.getNewVersion()!=null){ + modifyProduct(upd.getOldVersion().getId(), upd.getNewVersion()); + }else{ + //TODO écrit le throw d'une ServerQueryException + } + } + } + + private void addProduct(Product product) { dao.addProduct(product); } - public void removeProduct(long id) { + private void removeProduct(long id) { dao.removeProduct(id); } - public void modifyProduct(long id, Product product) { + private void modifyProduct(long id, Product product) { dao.modifyProduct(id, product); } }