From dd08c76382a7077d792ea8741a1b0fb989092ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 23 Nov 2011 22:17:52 +0200 Subject: [PATCH] #54 : added first version of case class serializer --- querydsl-root/pom.xml | 2 +- querydsl-scala/.cache | Bin 31375 -> 0 bytes .../mysema/query/scala/BeanSerializer.scala | 78 +++++++++++------- .../query/scala/CaseClassSerializerTest.scala | 58 +++++++++++++ 4 files changed, 108 insertions(+), 30 deletions(-) delete mode 100644 querydsl-scala/.cache create mode 100644 querydsl-scala/src/test/scala/com/mysema/query/scala/CaseClassSerializerTest.scala diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 5f5c32a1d..0fb6bf296 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -31,7 +31,7 @@ 4.01 3.0.1 2.1 - 0.4.4 + 0.4.5 0.2.2 2.2 1.3.2 diff --git a/querydsl-scala/.cache b/querydsl-scala/.cache deleted file mode 100644 index f89dfe1c8f1a1e1e592dd25fd95b3cb7c025cbde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31375 zcmZ^Kb8Ihv&~EKhp4zr;x2Lvk+qT_{W>(a+VA7?1p?YxmTHx1i5I>sAlX*40)hJkRjKH9{4f(-*lpT%;*Xl6({ z*4lw2?U%kjX99RaNHFOJp@6y&4l*(nyD{`KBrJ3s{eeGX!X}P)0HR@cb$3Nac}IIm zdAqpnH{r~KvWw33=UJCp%@zunK`g^cJ83SeR?&lNor_m@Yt`dLy*kbry-73zZILol zqIGh@5U_%!j7dUKg1V*5VMEnwenOf|Ik?uMV$|JhblRlLHO22CMat|MR(5iy*Nr2` zYR>er%C(J+6!|TAEn?%7W}5MD)WNT%@#+Gy$uP#N#Y;5)Hq-G4-Z1I+& zrqhL##i0*XMpDvurUK4FQbuBa?y@xc3Ea9#>v6O91oZ?>9xeqg?)i389|;;Z>?yce z+@nb2J|Q+qgTgY9%i_NaXm#pLB}~aP5@XKQ#_2;SG*yrDHZ~55$je0ydt8iK zqocVot_g7HF{l+)RN+H^N!asbbnh9(q*9p(9;>~ZW z79BWfEy){47l{dTvdKe)lj=#EBGNw1+0;?z0?(4R00En2Ac;gF8~&-FBE-EZa*?rX zkf6Vsp>;M0zAQdg0WYH<;@F_}Uif85Pc9@TlFFeD0_SLY5m(XI4&W}bg_5qH3vCtCM*8H(VOrXn z*-|S%+fqN;7|bWweg~|z2U8byz=+XECsi+WF4#l&y3Z?@ zRJHCP%kN{YF!4<}o-seLW>Z?$pdkyZJwH@qBgIT##Q=-YSc;>l$zU-Kcq1Co$$333 z&?zt&0@nW)YZTHzTSAXrq)_g(zqy4M^NJ9{q86c~oYDP9f)M^eDb@NkZ;Gu~^Vek< zF`=2LNAPp5pen5Z-sC)mTcn;(39cF}KEX`Rw!-rW9O*!;eLwI}q{onr5+<^CGdhH& zN1cWwN>O!^G4V);fVegw=#N~T1dgxZa%u+z^(~4?5CR;W$ewg{7Hz((r*8YKw(1ev zI%NjqpmlvM-L{d-1!rP}C0HF(VWN_L!}E7CJn)tNteU4nMsnSF}eh0?4SohuaeyB~nCdp7oH_yrDEoEl>PZGx?tWKLX=9kUf@ zFYxgF3JiN>Uu07ct!)q72=^38>dj}+WViM4zI_B!g96|1!0XMLE6sSg6@RwbCSYJ7 z=?)lM4Bv$I-KBPo9w@pRm08kA44Yfy53THP0gvG(C-FPirGj5a#_9E1{##gI@Yuuv zCyp+Kr)vc$NcV=ZH&wxuoHPw%I4gQ;T~MZKVYb5PJK01RiE4^uSqWj=!HtcFG~6Qf zmo!#Tqbpg(VQ(it*I6if3Z9h36&xO%51JHvYc>>)kv!NoLW&cRnx=F8A#hi8k!D>Y z0Cw#WmZMv-F6mfW=mN}ip6}-XpSl?OD-V6Mys3EaeU~t)#H7$3)1~U{kqKJr;qL~} zmo4t3!~|}F5uzRtv^LagSk1y4-ha~W9g&$~h(bns3G|Vt0UKj`aZOSc)Na5RDG{vv zBzM~Z#|;UvGMK|E?`CMDVq1(Y=_g{ZKsgKj!TkOu7o8V8Y>iXQCj4ndhQ<1iRK=Z? z9l?|a&glalTvuwV#QD;rI-fN*HRHgFM~%2`p8FUOiwS>-)r`MNr$!vXb}WSL51 zya=hu$Mq>t-}TB~pi!7Wha=l1y5fc(P%?&w4tyoJh-=x`8m(^YxTdYS ztBnmHp!$plXGVs2R-x_?h&ai zJ%+CAxpWEg-DHlirm7W{nS#pAT{@{X%||H;k&C2Dl=t^OK3Hr@jBGYe#CWFL0bnmG zxJb!zTzaj}(g`%iVC=n_U($(#;daXedAB-~1C%o>`jLj^Gy_w4ts-Bzl`i0laegr& zpWrO|rUtwO3#4S@bj@rC%+2eKXV&0Iq_8c@+zR#e;H#Sn7TXMJ%@`v{q{kgRxRoTf zVeCQMC%^wzmRDGf)_Nt2kGrVXrf0_x3->5&ebxyQs9ysnWe0UO;wYGD$iN7hUsFdX z;^IHfk#GX*fzgos7HdjuYwaB?agr(xpjKB8XJL@3y-KhRn3^Q3>Np)5pt7!!g23(6 z^YJo!+e$0F?KaSoY>;6eY}lH==2w99X`DUQ!DW|<9pxzUE_P0%%jGmE>baE2nc>MD z#>EZ6;ChKPD|G~pTwN@E=x9^Rc9P0L>W$s9{YRSE&sTppx~7KNqa7j#zZZ|<#O(5l zn&a^8yG^M0v>u91FocDqiW`CM-gJKy#^J)9W* z6=xi@jEdi|sNmN0{mLvyvaR7T(b4h!ejTODd9|{9MW&WKR)XUKFnltU+SKZg9roj~ zT#}pNc*(TG@w_R`B-f*VP!<``EdA3ElWphs+OG8da?2knrO6fRZm`Yir|r^b)X3P6 zX1ZkEY4jRo)1vEsJlAB#diimSVt4g5#LeC*ODCMDkYf8ntFdO|dlRu`x2f>_p;glL z@@&1&5BNHU=0+ex;1XG)!%1GZe$V;FQ1^R(mcx6kDYGfz@qOiY`#RZ6)f$ySJNO&I zvYfHm`qdSM|G85>{jsUH_5Ipx_vw65Hqzr8RNIKW<`}osW@XCDTyq;g`E{K=?`k|T z5R2cseJ_`QfBTYYk~moDNeXz`!({JCAaa8u$h4aJoMP+h zsL}pD9zIX?{j7D#m399%Yr^+&yZOR-1(&Q(L6t!AP_}s5ug6T>&SJWq{=9B|+3@qD z_WGCL_Vl^HQ_qNwE@ov+8p44Ra;TYTFLJ$WY_uGDS z-OjqT#bG=mar=9~jvgt)@Alp63Flf4<`%DKKWozZYw9>s>dW;Da)L~z=XG#GR;T5% ze%jCW4w8lBq}+Nv>Rul}W8-JH1dDLt{XI_Hj8lJeDEEEn_1wtwa6#utnTV)e)uKIB zjNbjGDs}$l2IzFV>3p{PyhCciV{=@s8Ji*gaOfVgS-t3en8~t#zN`8CfK=1D8Af^k z*nae@@+z<*zKj9)uf*N>{-@S*6OXRfUCZEj%3-h{m5N_y{XTIZK6P-Jk!5P*GxK6{ ze7(i=dbwV`mFCXiGpj(q$omT5*BI+?*>u>petbb9*I|60TE_D`@9I$VYq$+wBIj@0 zmtC8*d2DCW^4&?*JK?-~A`RPE;X0rD{9e=fy6F!peqYz`Y=cdIoqswa9PE5Baj!mbq8a#s+0vs(^dpsxRP#G+7`4z*ZSBQwbfs?psnchB4|)yjV%X#6=QA;y@ZsO)GTj zw8;}89f0^LvG~uMXnjlb zH|(n-7KxwD6gs44V#wdl=)Ag0IKsDY+H_;vyuv18M)Elbek+9>(q^(K)^RK1)rZ{U0xk(ENw0~7L zcZO3EG!n-Nn9dPsQqVpMX0$Ksy%7s!nz&6A=bRYNL^dxi{D1l>`7&78#73mA`I525 z%4PDWRi+H$N9&oCyw(o;rW;H>?Aqk=)ugDuUt?j_Q2KBTsH29a#vH{o(DLo756dCW4bnW{Raf1qy44X+^Qv5w`Qi0AEyNierXBX2f}u^@~<1)Cc(7S0$j!@)~ML zV6`a6M8}Eic3<)>uBdgM#_0E_2Dwzgo?=>Y4vv_*$jbr}$ z=$@;#{kri|_-EE>Gp@FjBWkF0R}{OuF*{k6zK8W}hDzz{BUr3xpWFZ^__uzzL_XK= z-QC=xvAw_Ak)t;e23y^@fNT20w55OF3xbNqlSi|eu{W5Z&P5CMD=O9@N}02`EQg!7v8 zU~l09#CY*`f)5Xgt~4KbJl>)6HZm>>Y3wW!tcsJ;bTec7FHx6;f^dSSIC}L(3dUp! zbV(wP{8@f-|4(D5?lj&8Vn%+(CW%xt?j0uyRyD=!yfeu z+VHZ6qsEwtF=OX{@wDKI7ew<#3t|OJ*}uwuBa9C&*Hovy&N+5FE0$b(M15^I{&jw% zLnb5VgHqV+vJtCPI<1NI(J)UJb52_hY>=&HzW(;vv$rfLa(#xH*THN{-S4pSNS9@N`*uQh zLUDSuqa9}l#qOE)##V_y?Y6Nn<8Fr_e%xTY-r<2L279i`B+_;{WInW>-U1p62@!xb zp4Us_eFu5+deR=r$yUscj!KbvPu5dx(B}{}2_7aK09Inh$j6)v*W}MnmY^^}K2xaN z)0yfM7fYi=>oMB^e7YMgJIyRC>6v3T6Ks@gX-xpPXh)0H5ZtVIw?Ub z3_1dj+gokQ@kv1#qV^-Ju*%-SC^=3J_H7+cYP-->oOC6u0J*UX1b{=`2Sif#itQwIdlPivUX^Qu-Z4^|DjJTDO zk#M)c60!9mxj9ZBPyLJl`AriJEy(>Ma`Mf9V<+^dX#}#3T zQC09-&+3DN=6twfg06rDsD#?2ve8Uc3`l=Xk2IjZdUftaqF`}xiT1DNS%rGpNu9gz z5`Qo_(Iwqh3|d&a@daUYE9m8@+q;cN2BozFCb6w93}v;bo0}I@Q)I;8g72^^B%0FO zb7V!nTuM^MBIN=S$%MVRHEL3)&oRRuWXn1=ukkSljQj@<7k(Mmybe>mC&y#qwV5T!HrR8EID$Tu_Wk$%8&ibMk2AY?1NZw`I<(->iy%t5Pq}q7SF@f`+QL6H6JIHfY)g7H!-ea0=hm6dGgJWhIP@-dgY8_pjiJ8kDbooEbBwqnezgj{V*C zzODbs!t2lP-K;B7EoIS%frD9K#uM$sU67YF{In^0eE1hwl5)TAf#vWxZ#6tFQ(9IjR;u zJ`PxeB%EE^=o4ihyBvlf5oEr$C~DPbXDqMrI*Tt`_}}#h)RLPTYubvOuKf-_gUCNF zBa7ZLU~e+8dA-{n5!5DMSXyd$rlNvFr_v7uB}e6bUujx;aa?4os2cwU`kczZ=G{?zcr$P)pYdxkN^Pi-lb>SBs5NVPrtk@E2XB<)0Q<9v<1&)Cd zxO$l;G63)y@BHgMT24p8*IU5`Rae%6yq?}WgZ)X}R(9M1Ix4U}<^Rwq?qWvnc#jWr zvMbRrA?40QQ2;&HPw0HDG8QHBAl3^P*41ie4Z>o4U#T@&+zm>*2l1bGwuv;6pD_1h z%9+zPNCCA){1^&xe#xvH$(()Lg;QwbJM$C_ui!Odq6YZfj5JAnU6+kc-(R{Ve1a~d z<}YNNo9~<7ykFT0J=lZ;1)X9RMRxCF(NyOsne*HvyFk=j*on>Zr&kII44SL23q_4G zk&{-K3ggGVAG6k$fK#qoEC@_(~uZ#~Zi-?AURm1Ty zFSrCkN0({v_p4K(XkdH~TUtTnhfT1laDZ`zW%7(-Npwl!)(-Xg_wLl%+|W5wEFC4`va5{8Zd5P5lB z7OL`eU`f0-T)E6KA>k<1BUL{lF|?Ei3)TncACIX%n1TSgFc{fNkQoFeeJF3Pjq(~y zWjMacW=D*dB&b1zoq5K)k~-4$K#ixS`j9_t(~c$3<9Dh)*eE(F-FTJQxp!!Bfr+;ON zPy4>Ck)x!qj^sK`fnPt-{nXYM`~CHj3%%hM0oU5>PM*e1y(<_!&lUkqwd%GhmDgP* z&jk|LW>g0pR2JhzO0xq?MW_rc1XI1R)#EgIMoP1|%;hz&ZN)&wCGsIMb*|s*>5UaP{l4a>RsN8!&g@pjVcL|s61_{=cOl%%)FqAB>Kt%hYAHEsv%9%3&kso1m5;*oWv(y(yXl@NQp)y}uB1 z`3H{?O7Fumx@1#rvzohGye?UMd|3`rS%*+pu40sMuX%x!;C8djq)m$N?BOH)SF<)5 zqXd!1`)hfl74ftKI3+;jdf>3%?SiT8dA{nJE_^>w^nH_De|=Dy54c?iJM7%~TQQEr zBW3ahQU7!u#In9xpSN7!f@pB&=5uwb!#3+nFW^k=0)~bPXpAI)2&L`8@QWG22O;jD zhw$*~QD7{|nAA%$A~^Dayd|l&MfczR+rj|p&8=Q8$7?Rs?P}GT5WefC*6snSPa70= zE{IB@^@K6a(%P--ic?HbA(m{xO|+|8@FrUIZbI8BmQ2+{LYpZU*$%c+cwJ#Fq|UqM zwoc~HXhloB&c5+xOHJ8g#E4bBc8*To4EwgOJY;+wx zXu!Hrmsf?vmAGoFYsGgR$~O~vkv~+GHm^3Rm;St9o~{}#e7;c)ro)-5Ix(uLfV7&0<5zcnhV)=qCz@wSGj^#02^L*>wvhB!ZzH+t?MS-wj3jx@#B^ut@v)# zMcfhnkTU>mD=Mq3R-@(OShLOOvE{H<+=vHKTD^TsZaYyhn@cW&)q7nF&iIqjb#V9R zg3i7s&BEo#7UuEO{+yTlyC6E?=t-$1d84l(zyAisrH2t6-dij*7l@xALG=uy3_ZdV ztZwr-=IwChF5?^Tc~wK}%Kh;L7SR4MVD>4h{Rkj{SmAcO9T02sdw&{jPZ(B9F;r8m z@xqvX&`x&79@m}_ zSlj%MuCi+P_)5T<{@LEG6e960rM)E>Kjzzgp)xne;f8&i<6%dEU9MaAq>O@4{D0;M zL`5_^?wV`xurw@a+44sIWuyZ8L}Tsgnv}0-<4GCTwehf}ivQDwCq{M0D%sP|h%8jd zwsfoGksTx)jNsU4M@P40I&VCz-{Z`Qa_s?Sx_I>(wzZ@3t{`m6BW}5w! zKuGoDKp6j%vfk6cdMNf$h@Se(IrU`F%eQM?c1TQ zokV~9hGejfYYbu;lWLU=3tolh&ZJVj)c3cN|5)*^{ld&+0^;&iXm%abuRiU(AQjeT zaJ;iow78&rDike6ong7Lo(jxR;(LK8>JDXUjf?XIX;1v|KzS|U&mxFud3gN;Jy06g z#!}IdFHW~bcdQak{G=?dgNQ~lM90ew3l@BKHn<8nY3=M21Q9nKY z_!Edi5X@yWMC@g=Gv#P_Dnq%5;tVTpZ({_O%OcpMmaKBZSKx5LDpdAs^^eRPyUQ2F z25BgmxQc8r_i{IuKkY5x`G(T|hn7ZdJjx z&>d>#MDFj-Niu0P*g2*sx_Lb%f!?0O+|B|jmuo8nHN=cep~z27P{RhJm|Uh6#~fi3 z2M_4?Av*){XzF3VbFXku6G)umc-U=@WjP%Na{b!J#%z`3(6LN@Q&yZaZUrJAF{O3E zu&|?T0p~VD_am@zh86J&|AO`AfdAm^dznA=C%HK`CIP`X;@OK#Dj?}|!{_XFUL3A+;)?ngeI8_0Zzf_%A3SEM?el3Nh?ZfQYJ?uCJ za+zi2-+?-oR<1%hn8%#_ND9o=n4YMK@IfH$MkpZ)dB~xB%Ee`+YtDUt4M2bU?snq z4qo}BZ)%VU5b9x+4uGe44%Zam)LYer{6oA#$O2m$R%7)Vn7^+#(($d7R4;ZF4n7&l zrYL=kr{8j{HMobyQerHRF`SB;Om0|rr~U&;gRmkVV|u%Ww=5a%e|?3T0kt(9JY;pe zqTbm&pFQLt5r;ORbWi~0b5ITCGr@*SmK;d_%z3yG25@34;H`j}A6LijqY0&m=6fPw z35i7v&Y>q`W}x(iCL5|j2~6{1Rr~E&6DdMyoLnxJUqg&G5+Q`pt}2ul_dj^Wm8i?Q zW^kKK+w)bq&O^2F=f$e;5l3Bg7m1cdd|)^Wmq$oWRMHsRbJ`p2~KMjxSV4&Des+I-cUMp@~=7T$uP znx?}fo)v`_9BYmuHLq0SOG7FZ7fW3z4IQ#dT`H_d!7SVUGh{Cjg>$Puc~}mWw!9@g zw*@A$YP?R!AZ6w!5irN$l``QgX0y>%;c&cfP^BE1Zbwms=kh-f0;*+}4+7AC;U7x3 zN175)czLM)GpdXe1^&oo)~L6cj0spi;u;Nq`~u&pg4aHB&mI@?&3n7-r@iflm~W1^ zT=EMZ^*{f*ObP#+N%I|gWT#T2#j|)DwutYttdsLzB+s1k=jH--j_ zTuPprW!bJ_`E7UO;PFwZ?RWHg0loNc@n(@R`=x1h?Jv*nLr?6}xAhC4l-I8DcU5!> zwna}5Se}*9q_rR&SQtd7D2-|ZioGSM7>ubV4zU|QnG*^Dxa5Ie+Ba&kb}`IC490UW z`wlVp(h=<_LhX}H>J{yi_z+?&yfa8$3ib)mL$0WygScM@y(KzKQ zs#du_2s3qvP0Ki%AsqQGYXK;%;%#Wct-mc<^sB2kdCy|1Z=`gNgk zsBMmfB_{xgfvQ`5jvNZ06rVV7_8@dS(WZT4foDS~2=S-@t`bCLJHaX-S4dt1(*-bm0P|{&Tw{@`BdJ5!h6F zwFx-p2nqur3!mS>7L^;@aq;H7oXCrGgM=%x3 zB%;g6THbQf_JOWiXx7RVfeyc!K&ATf0F+xLDBHTj4nUkSn7`$R5H2c(gJKA-7P3{_ z4E{VL4UYpua-3ehH+(QSkO?ROH8C%|nCGnzkQF8OLY{U}c)( z8Ax*=UeNr6603mjT8C;9>(>gg_eaE)jA4h$5rhwXbRy`kHp9AZA!=p#!83zSxg3>{Rfw|yxtmH$Kj$22Ol!fnosH2CCf+74yGYeaA&*bC-8Uy)^2QB=94-5LtnFO!DG>Y1v?B6+Dj%?Bn zG$+S8@lf@TMA1$AJAb*b9oekZ{4>Hw1cfY2c>rhi7?nFioGzi)iDfX*#>Yho{q%=M zT8VDi*n)I}#&s^-l}-a{FuplZnEIv1Q(kZbu2VFAGsGqfs^|LSR69{#;Mm;+u;NPM z=B>T3u>i7OVtZ8FAc@aL##0qAvMwwQ>HZL!{TQiFk=6$$>DC^SLDFZ->K`*ljgT6p zQVEr6cEDM5L(w-iH4M>+7zZs!XqodjJY{>cw zhi$|4v2CU&Ie6|$k3z-qR21BUs}*(JjqytW;xU}dhO$2&fcBBv?OAS1=k5)g(D4G? zF)(=6_5k8X_2ven@)#^mu;dJwMkT;zX^dO?^&yDp-JtX9g?#pXT~x^EaVq6-=+^rz z_PZ|s!Lt8>1^yqb{-^`a4eSpHbnZ!9MFBN27B0iM0P(l+pqWt&UxnQZ>{mqRqdeR7C&k`$6>4C9|}N7a7=l@%5e=}`Bg&%hqWm$|P2 znfyuuO?pk<8zW8!M~YEXj5||Z`^#nUOSo*BtQwkfBD$Di59?(YktgX)w193-=X+}? z*4JLe?CXmD`rCWG#h2@8VPCIDP#sIYK#A`uB`Ro7UgU36HS~MWZz-#~Ml?)|Dzq)^ zsf5R_=LcODi+$-39C6YqAp8G1AHstH`2jbo;S9c#BgJ{#rpkKvkLxv>3_c(5)C#hW z6}RJI_&&FZ_k3+CtAjE)I&>_f2`Z~#DvuR3qcU1uzH@gu)fSCKfsrOOJCaFjAOby# zoQ6mCiNu|IJIevI(@K$P6&Z%fync}e_*s@kFK5tT>^aWu%}C&|=*9Q8YeQ#Ia4O_s2F zn5=m7o=3yukE_!kCp(A5ncjQcWY^LhXpx+n{6;*siY>G zM^>u0E{&$)G{G~!yJ0LqonP?-1V|vc${}^14ejc_YFh(u+H6?~-@PCNbuIJR8GwD? z-p%w4PkguYu`ug?fwSq=dV%l8t4!nZ)x)d{-|QOR94qe697?BGA>m22zOpoOW_qX} zVka^Z$$G=^eQ=IPKL?=iPmu$>e|gPg4r*E1@9et62QPd?;vkRaE2y=O7kwK-2NUT|F zWk2Cnfw)3>({zvu6~+BI$Q9mWDN1;)lgNq7keA4KsV&K6sKjs2TEq(tT8A;A5>}+W z?Er3t0hwqb6toi)QKx7PWA?%otf()vEIG%$|JD#`k}H<2!8cleDYkH+vbjM;dnf$SJen9j9widyj zjrO1ET|AZe+sb&A@|b}sTk*I7>{ONUU3&&surU1V>D^+x96U?BzD4HP6f?#L`xt5$<`>|D1&VDQ)n3CP@d2Z25W1%x|~|IhFs^7LQq zW}mV&%J3n@V4^1c8^h(c_?YqEBVW;lOdcUDS)qbetarza>XAVWBS`6c;nEHwWU1lO ze?e4yijd~n)d%N)wT7Q!7tm8)b~}FNV%O-sJq|4SaP5BPF8V%f_Psj^rBwg@%OL3{ zD=8)1j)7MO$8J^pWok^rKIEvhI4;AX#znI~q^L|I`kGj<_nX}zGE)+~SyFLBnWnY~ zN@+txN58{*_<+4cy3^^Kn~v{!dwV>m@gUpB?~%Ws4FY7Hh%r6tZ>#H5jtBYho+eGT zN>yuUlv{*Bhq`)HNYnp{3NC}ofvc(h{cmpfL1DcQSC1YUx9s|-XuYdjH~7aF&`2hA<6-NJ zL1cNs*IP-!)(;CageJ36yg-D^zTC!JGi)U?tKbnKG-Ns;ne`i}j6zJk(&+hoBztMK zJE0`Zi^DtvdY<{D1 zfO~gw7!z<~%Yq4m=xqn2zo8+#fS7a#miL1>#QhN6p1T;2FOb*C0)@k zRun{eW?*2}4#Uzq=KxhEEECfoqE(8nNezu~PB*k=g#F=k)D#DLz8<*Ryupm}s2Z?V- z3U^jvvzP{D%>0^TTQ8mzA$OSB?#qqkP0J>qNR>ra|@XjwZv1ea1n1SViJUw5@pjNDkZ?%|X09 zG3nl9Qt4aZz#X3s3x2`lWkY-e}HX;zr zegT{w2*8s+rB617zH=s@DeH>P2KLkKUNA9Z)=v6AD06VV!b%stcV08%pW4ZMGhSbT zfW7{g&qWBMIERPl$DbJ{=GC7Fyn ze>SPDKmNb;cdr8?9^UylR=cPY5`SnDkQno$s>EFA_94$=3XlzN6cgJo$&UY_+9@*j zZIR)rn0*2v8=l~-Ox|*$d5RyX*zB2`00MS)JWOXjR~b<-j#tz1tdHv!PVBjyp)701 zyQ$!;tgwg&ZTzeYUDUC$pXy;`Osu7FbSxG8(0DmX*gw(E<=A-sSV4|6cxMZ<#nEtJ z^rW)oZKw1*@brQe1R$hZ#sy$%#}x&&vcAuaLR>`>R}2SqXoI@7Wg)M=(*AwX z(S*w2@K(d=riR}}UA)n8fFaBUna`X-P5rq1KuD3v@V$>n&2G0{H_86qAR#%0k>2D^ z@b^MH7UWq7|08wi^X;T;TvW8Ct{GWG8q4vJ$oTJ{WgCDe)nVmTT{?2;ue$Ud?qTB= zistmvRE?*-EN^|CpuO3AOU06kt^Qx0m`qN|Om3QgNAOvVZNzW?j-E}sZhEJmYj_MN z2x0ZU9`w51UmGl$9$L zBa`HV2Wc=Bk}gG3O_4MEANoV>%T-5;RX3Lzx2>6`&_c2&6$M0^P)n_~N*0Bud!_$o zTz2g+Xs3j2bU&WCPk5n?c!Y9+5``*z3i1hwQzq<)%J1d>sTt_jJ9tQtUPizq={bTp zx^|?qmxlWYG?^aLg8#j<3HJES86bgj@4Tbq&VItm%ZHlXI0W1Qn%0nCBp5hQ2y*V) zT|Ct?+np3Ou?kjX?lZ!R3da@bH||D74VlCnboTSsx^xyqaSWhTOt|*4HnwIoMeds& z&fY0rx)+~K#QQM%DP z%GTW@lwUq+v5H;3D7ht|(evnGwHe0A8$NI>+2xpMQYP>6xlM{6KmHsAY6x#x43gM$ z3$J6VJ)mIQNT&@<&W_f3I4tyVILy1Bn%(0yanNGd;c2wj_aG?VrTl!r-GAzQIQ+AH zg^26nu$#ZP8lQ}QZs@_7g3gOWVGo(~^N&pzrOp_`OGf$CLmY}d%UH&l4MJn7SV?OE zb*U6|1%;NdtiWEt9cvYMH`>c)KgW(UnfP~M>Kc3@jgoiDv%zl)HdHPr5IOi3%Vh}A zAcTRh;T3rL`m9}{6pFwDL^6KQh8Gn8;J{7ep|HdLZBA!S%@=_0@DH_N+xzmiWvj#M zksVvk+~+Ql`|9`f---|CL#H4nbJ5YDj}+W=hjoR}Oczo1|1L%6 zQf={H4$(aU9X?}(?9J1j&fh(*sr;Qcd8hqAn;53#5uBI}N}Jp;uLYeAf%-{E@s8wl zex7c|MH|EF<1t0r2rY4i4DX16hlXx(>RXTG*GtR^ZsaS4$ZA!y9jWet@~(3N5lgHL zRq2Qt+g@_lqKRzN%1^rr67#rzFj&_vVLtvyz4`bK>UouSzgdW|7ni+1pDNI#@p}d$ z(GoW-JMVVI^*#t|vi+sLwB;yBgN65y47>Jp zpO_rF$ApR=1NA@vo`=;O*D&>>6(5oX?Qzu~PyUjm*o}a(y_iKY>j_X@QgU$tjlCP5 z#1BY+wS64F`PqZ}*5!MChRE`|ITbU?aR}vik!g2NY|W2iPp1)+%66p_H(t8?R@9L4 z-Xb1KZrm8bt&7GvETnxHwB@B0A?7cOz?oT+u0*6Csc=vKZ#k|B&Jk^L5ce$Ouz^DKV?h?C&b<2ck=Z+W&7wB7}M#qFc^SY$pQWF0wM8qXMucUguU#m5?eXcuZ zF2~_>I_`=CymGySS422b|3;S}At!YA9QVKjD&v&#VI}I~4hTth0sU$d#E3=el95G! z{}Uu{=>(|m(Bvq_g?un(v*P^hpq*BQW=gP_Z7lL4OW=b@8nOT0SAlwyzfM0CjrgqK z#ue32y|IOG5rf1tHR5(nYci?+8bk5b@^adV$VBt6B|fMvP*Y!LmG% z0fjM5m`@|SWrBj>o!)R6%sz9Uj5y~>0lo^j@WDfW z6U2de@x|({1j%uFj$Rnu#;rmg6E?^_&|-CLZ*Udd-#*K&zNt9;d&$0(liO%L^xTDO zH$WgtWxviNo}m_5Dn`Qp7-aiZQwqtEDV9Y~-)ugJ7PC@-l>0uLoNxwt?cKQFCv}zH z?)||>?%VU;(xIixp||o!O)^puxl{Oi2Hh^a(!cTlRP|2bku?F^Zfx7OJ+V2lZQHhO z+nLz5*|BXKlZofgJO8)${`NuFL9agQUR_t!b3b)2c{-vIkfiW{kR}@{8H_3M1{<`0 z0}&D0vtA1hvO0nKFrciY&>??gN@PFoz*XaTTw&~KYqG7ub5uDs+ZFP+I@bEVMeKY; zZao@5!a8`Hb;-v2k5!`x74PpHx8gY=)Dj;|QM`4kCjtIaTIc&nwoN|-zio=;G4>ajnhaQ)Z9BJG04SoE-ADY53tEJj%!2ou&>{DGB!-&P?b`o#|f_jP>-w}Icm zEx~tii-!1h6$+`$W5(e{zHq55u%t z04tGfZIuQAk7Z3^6b3Sy)%~bL=3(CKTe|l#A7e4Qmvw3rf=HfdHr!~S*>}=Izp@ol zDV#Yl5MAeXoi&hrGlIl>t~W56JU)ngJn5PdS+b>pE}XCmJ7N+2XB{#EbJ^{*0`3;Hc#nT zF{2j%(@$H#rc_(LG5=W4KlCAvsKR*KM=Jf{Ab~J<1s8P4JXM_aTd6k;JMaFss0wE<7G&qu; z9~f_V&~btoOOKIfdyb`?Dge!EAqTqV4ie*5Onu1J>OIX>xc=D^pOwZzm(M9+X-(ueq(o@Z|vS4T&-l< zZjAdYkVpQ%nJMmjX1e)rW^xC4hYspz!P@d%#dilB1Ksu;Ovku$1%?fMqtZxLi*D)B zzoesrF6;+HPG5h@qYnICQZEktzq!{J;rzun_xk(Iy}l$c<0$^dXG}1{>_*IHO2hDz z7T^81;S0SjY>MY`UzX~VBy?HC&gReAX}SDCTBlD1H#gm@^6hV_JgU6KpOl)wNB%kd z^x#KJ7-1vR%W2_=mpn_0yr_s3DQ?yg5_^0QBjXsu|6MFAW{jK1r1EnFt$P^>-z${; zUWo5oUEQJx=-jP+_6hv{?W~sb1emkFZ2^2FDHJj4P=7QFrzAxuD=A?DMvOwhYU;XM z{BtmPF`6sY=dw;oEIR7->0CyH)&FO3MD0Yt!{dJbi{DA>`8x?4F@C+-?&0r)wR>j;V(ouO(?NT~DA#s@7rxsd~ve?#bjN=~qJa%$PGkHr*zuj5x5nUf?hfs?yMNR(bud?6}%kz*q-H?MeCACaVxqO(L;ldxy z>NtX;L`VE@m`_OXWBOZh9|%JP51CRq9ZA8aaAQO?u;hD~>h9HBheQr719 zmNGS21LM9{xcy5vbA7Q4<3u$_v@($=Xu-5x;YLVa->#m))!VYn4`_acUT$Ue*HolQ zl{S0{*QldvAA#wYUg!@l5lxD_b2?)`M@IvUXcm>90Z`93n!SOObcY9Yw5u6TBHn+{ z1O^qaeI|SdYRq~jw-92T8AqjAngIQrAP+GTX7u=o!cneD`3MXKC{g7)s4r%+&`uu_CYYy6G?OluCn)YA%Z^{0w|&B-KI2ec%nza z4QLrb&9Z|5qHk;$n6Iu$4ki@xSCN-1rH@o`RUkv`c)yIAXjVzR2ox5p)Yu+T7|u6s zHAp|vB}j^RY2hZ;D3wwzR%ohd#$GT9SIxSrmrRDO9uDyls?i%``=Z~Ya3dTxjqp`+sug=^2JP!2>vdvgu<;1ApD6L9 zcq(XFNe&Li+#tG^p`>;8i}q)ggzQPKma$}UNVE^agfUwbh>d-12Uq6QDMz~V^d>M~ z#)HgvzYh0~p>~_09`e8;%>p0MP`y)4W%UlUnCrU zbGR5}6`5z7s0*17H&iV9m2#2$(NTa$osSMFEN|vV0u>IG25ogM*qW`qYFB&M4sLdf zIzyGoQk>8#R29ulku3mDZsl9z5J<6{y#WG-+H)%_95oOy8AyPsLN$dvFt9X_-?H$aTlM+#hf?leQU>Px%#G%{&IFEA0kk?BbF0NpqG9&w^6=Nd#&UlBHH_(uyr(Im6KG)SwW zXd1aXTWuEO%CPp$G4Ir5PfAcWktg1pjYa*gx%mq=Y^pRXN?WKJ#FaVYakb$fm7p1E zG-=ZwGKC(`l91Imn?S5;Ucns%ia^7ZG~gBHUpyQ^);yUHr<@I(%Z0?puK>@}Y3ClT z;Go#rsDZJVYd=G{v+8sCGu~QS8)d-VC7fey2uI7d0dB_5lYB_>sFYHb4lJHm`*K8q zT72Ox90<|~3Y#gjp^o0j`S(TSVG+9xWJB3TBQTD69`Y((#>f_^MwcHzVN}5!w+!LF74d`qm zbS)5}{Lx*Aq0o?ZXoNFR&F6O5bBoH(aniocaDYiJCvy_+|LV`E!PuGj}^BBj4&-7>W-e5T5+*&PWFBpv1Orf*+DR8LbBu$K>f zpAcV)93}?SZYleSt_i}PH9B#)RPVe6wk|2^qtN0uHh~$Syp!B$i9LbEGKsj2<7mxo zbU*m+;Wi$vSOt}KcoNnGb2*@F>{CLq5NSzG^+pM_l?hVEUMWrcUAdNvworTqVOm77 z;h9f^QaWHfjbw5$bZVTIz{#uG+y-36 z`n~Y|L0pRenNm*#577Z9=oBp#3182NXrr38sWa@xKu8+Iu-4E%hY$Yt?`AW?H9R&?xTORp&L35bw8xTcB~wwxMGocF+l;WuEwxScZx6CEdIW6anSGJ4 z;o`0*zpe}xQ)l6WLgLk?oARF5=wdStQDR{aAO_yqD-(X;&Xpe+>%_$Mhrt;A%MCHO zmR6T#?NL|1O?Nw+%H!Tmq`vuZ32TK4^bm(SB;oAXD^Y6JWXV9HmAA$nvm0}6{LZIv zXQPAa>iCB08AFS06c|EWU8?lYDLxGXXF?>3tly31K0=~yR|;w#2kXKO8^1moymoqe z@VVEX@P%)^lyqxgJrtu=>!GqBF|W7+36rKca}e}W%?z1ykqI_LbTB4US`w;rMot9P z;rR;zQSfmG|%z$()C-DM5z+qIN^E;@aj#&BdJLC-;H+W{J-3MtOa^E z4G&39IjxQP6dyTTSkskx#+hjLMYj*q>?ecRlV@l;rMfDc%^*;wsS>a}mMm z35YeAK2CWh!b8>QZcI33+LspznlD3M%`siX*HfVL-p}bZH!5oD;)-`FMRYQ##0qPljNn29c_<-l zlM7~w((J7ticRcCo@CNgA|IEFpGBWHOT`C78>XNj>7&PTk2O7MQ8lqpP5B{G2wx$1 zEHJ4F0eZN7fUUk}4oxiK4DB@x7FxIr%RYB)kPyr7>Ek5U)pRv=O#%Zu;{5i0Fn@Ry zxab-)fU<rhYph)(%Q%I|PmDMuORVOJfUc;>aKV!shW zBi~x-G<3*^5#lcz{JMG^1Ig~e(7V~9k<p(*93HjdO~X#_>_OKS8lJrx*nR z9aqyloEY*Ifw$XwyLjpo%ciYzcQMmYbbEt&IiW;=7<*j&K&hz}SPl-K)uVEq!2CwT zLG+hcD88-xys=!QQ96m&9K;5NoYfHf19XO!+k~PdCai4M3z%qakgeH|wVh3)7@)3p zyUsKRD^E?jUo35`>U`UsnVz4pB0`l1qMrp3faViLg94qC#@w{M$+rfR(W#t!1x~i~&Z(_7L9FX`5ii!tlSRytyA%W5ir%}ht(5}-gc{kK- zlfcdSQvY5%S+sFJ*~*V;aOsLEl9E1Tj)1=Pbgv-iU$m^VHOa;pz|Uja-Aw}zyh4Rn z#HL+e#?TpR8tJ#^r?>}Uo;IeVBp}7KTJ^7_yv~-AnIM_(e_3POr!$V)CFD%(n~LZx ztf~5UEyOf&mp^^N%wtl(@l-Dpl;T;&8X}H4O!@WFCg8A!I85!yb)Jw;>if^s5LtXd zC^w;w@zJqcNO-a19FyWMV0sr}zqoA<725_;am8h#b)f7V0nXrRHP{2H2~`&!xN7o% z%C>P&F!73&8g`$_;_BUXIebqB* ztA4!453@p|hmUlDUn3|!%bowElLPT*-O!3nZJJOCPDsHHAnD<#(rKHX7_eu-AYNex za(k{N0<$b^dJ=CkGUOM01hoYGF-3X@=-q|{hmr2xp?5>YckY2ZGXZ~)4sbVMqq5f| zUvbbUHQ|T1kL<~c={Pp(Xb?fA)^Moe`&1((w0>VSj&YL3A;g6-6Ij0ZjIJW2C^=BV zI)^$di;J~3+9?i$AY%I&d-ZFA*dYpmn3=5f@8BLooTMDP5QcF=^zZta6q=?`b37~z=jh>g`o>HtEWeu0-ETpbx3RSKF8ET|xr3WLV`v$YuZ6vq*m zo$thyf5j&^N|YT4AqJimF`cR6^!a-8T3c}J(+|g-V zU}62KbJ7dih`@y6Ipdr{XOQ;Sb*c1ums)%JUkN_!s#6Zri5DP`-aPZw-|>~fYmE#& z!xS+T9Cvz#`o*P*yq$-l6t3y3qR(v_Inm;JLPtKyuD{S9n`v9!mVg@~<~NU_iU*|c zj{V4s_~1|(k85z+GgNJ3fL65~s$El%d^l3z7%F;H1I%csBu^G zJoTLPL~aEOGM6KPjx8hzn8T{*pPGJ?aSe_wlkv`dFKe#x_NKJwvq1qAONKc^8|h1j zCSloda<6C5=|S|}z;9yEMX?l{l+S-aKbe{zJ;l}Kk%V=AABRF>@(qbPVL)IONHF~8 z(X6d!Lfv(Me?aa#bwca=6eenTvHjt&i4pT+mV@YtyI#T#h{mosQ@COf>7k0MXr#k} zi;_Ot1r~u2kb=Tnn5s)1`70$1B>@FUf&xy5`657%S%J!ZAq(;x;T<*pPCG8KLLw=u zAdU>HCbV!B!v{&eia_l>NO4VX(aqac!_s&*pgqxLga7(+%uus&do=KyRxuqg@Q7@1 zXV0IM=TiwqWpI%k97;U&psW{hkE^0@o*?yhPSG>~*5RB13(*5Fut1IN5jVkxHEksl=vU#fkdLIM=!?5GG#tZcFJ^wMx0c;DE&Z30u zH9-06G&6k>yg`Dg<6>_CmE)A2YBbuZ{S_vIp}QvoxlwckGo>}i6!v8x8Ba5ZbF*>% zzHO1!NrGansfwMs1bHKv@>-FjM+0=0f;FOiC?&SKfUgQn{*?gjRSApbcXgc>`tyXoTRFrORa7<=a(x`hw&zsmPi#-Qc)sV1mDUx}%DF75KNUTei2~@RA+k2I7*h3= zsfkus$f7WcVgFk0-AA-@gh?YAHzOe!qaaTxj8{9i*~#0i<)MKhoMd_L{% zuAqGp`(YpVBHHd|>TF6=XJN$RI(UIl+6xZ)8^v6d50SEvI0ZRg3HZD4DG^F&q(kMt zGyGH`YJ5bN!Bo8Ix<*=T5Z%<$wm1@w5w;`NWQ2}AF6^KNiDn?uD`s?d@^MTvOQ!58 zgco@Sm!se>Vw5QoL)K?nJfVt|BcPyq=}%3~M(rjaUm*%|q^<%R8?Pr^O*%7CZBno? zFi{&t8qEHb%5^L{o*yG4mshkCA&E&xfmAi3p|@vs%JQ{jw+3_EiFi9G9F1rSgCvg+ zIU7KcrnxGL^BCg?8A^$P=|@zw2_Y4(wZBNF6#qMieTgsgl(p8{gn6}@BA){&?kLaY zyywFp0b&yfQAT@Tq<-XPJ*)x%Nmx*eUjX4T2!U~j#jkGKd86iRLwa;@K}@ZnXiCE6 z?s9ra0T)BlBeOt*^itc0Q|7S{mP^$D;KMLK=Z=45AKF`lRh`*Y`H%tu6;JL|A%^#^ zp-aI?(jwXc)_oqshS`p(=2+~`a z@YJVLcE|rGh9iE>`Pm0eVN()TIe|H`x)Wc0*&PH9mYw_ZsiU{BLVwQRkde%+wz)lk zyYTImE){)jOREVrk@hxhc0M`Py>K5;?9mxi zI1eV!(eW1Noq2N|6TAUEXfYXt&f;d&vO{Hlw1A{J+q0I*#ROCDG-==q86Yjm>|hxc z959SxMztd{Uk5kAsBfdhB#nnVBV;dGLYoh3Jdo?$Vv_xq#9N85KjF*h5QF16)oY zK>y3VoGen)si`V{)jIArPEB~zq4*MEjJ|=d{YWH1DA0y``fRkaSjxRs{_3`Fcs_T< zFtyma$MpDU9jT#QvC|j<%`nc1wzJ$od$nA_UJUXTpp2$|swgbxd@(hA!uJctX!J+I z`YV4uLTL9YGti|?(VmCREl)aDYaEu$EDsh11keVGF-fGo4eQ-R6e4+15jAz@E*iMu ze|dpm*NKHyRuXq^5kR|r>xfL8^C3aD=a}DA;fVOhr#ORZxM3l$R%M*scVf1vYXv(; zUPD@ll|O|N1mMu^UC$({NY!UKA1paMLA#)L;V>WYJS#~>pU5mcN(VouU0avr66+;O zjQV&X79|e&>0@ic*u`-$g_ul5+5g|aJ_6l~6VCsqDz#6%ALPs&Zus2_J34UA ze)$od1_P zh{Wsf89+39uG#4=>ImW1`3AqS^$kobli$SWf0m~wlgyqE!$kD^fX+KlgJ4GS0@ggC zhZ9Y5woP9m$gWZ$^xokXacu$U$}3%DBL1Sa81nV#&KrhnIO+rVQUsAhVTdZsy}SL9 zl^*TKj>~Eq=J6oG`w39dpX_qGmF@|?A-G*lF^a&|nQ&{0uw1`F$rZyLo%+p|mI}8Y z-XBDY#up8+dr5G3tB63wHW;!{p}6_q`pk4YfHKvn?bkObYAD37>pD@Nrq9 zcE%Ma_0*s>)&j!y8s$e5`uV46iM~r_oCB0h$e4-I_n}sTP;m6!cmT%k+7Qsc`uq$6 zDy8)L;kd*1PG`|hF{ZuvfJn%3Wx7&Ix~E5g zN}tTk>Zs6cKic#safD^Y<8;1Nugi%JKEEeCSGo7lm}W}D!K4^rwO#ls)wUumkvrJ7 z{^vV+BRs0kh~L;298_WX&Xun78pPYaYX)GVbBMn1`Hs7@%tH2RmPUPZ1@q1HxR^GX zPGt45ohAT4@*4Ca?|s}ce^==7%;NN$ppyx)1DfRNu>tF$J_FvoG&?#BEoyI+HlFlH zo64K_ixD$vSWoz(Q_xC-WNNJ`)xw9Y&6sLeO0I7U#Q{1QJM>_}G?NryiN2Xo209kJ8oFX9w#qIT zjj)xPl@kbiGoViq^GzV>)z2r>QySWgp)A(ljdZXoI&%?!|hW$>* z;IB+)LO;cLkL}(^!-za6)t~x}%~S56x+60Ch_uVzf01yn8~joWTtPs%%N}uybCOcaYj%{FxQ_e?YVS}FO>vE=41S$gjj3H%Vg z7iC={3XIL;>`AtgVYYpm$743G_@nY>!9ph#qP8dW>EZ0kT<4LY#XE5Ti@9vz2_;r< zl31YVm;n7lh%}N-Iz|L;IdT)R=Pz5U7JO#tSmT6DFAj5jN$aB4rX$AYJOcT zF9)YO(0ju%H38?Y5=P7RDj?g^@?2t2TXR-1c9N`%io@)0?SXwT(C364`uij zd7H?OcMa+d{G=vGxx_kub)wRaYkkUcT1E?_%1kp&5D`O)TceM2K8P6&ZuNLp_w}-s zKE0x{UQ~xB>?71PU`|bOH~BjDU5>?(%p94OfnNiIjWHn!~}-j4wnGk+MKnLcH&@^UBDfiqA-Z5lM`+B1EQw6RK)Q}FeM zzxLBiio8VViH}0v{(fqOx{Jp>c8bL7p9-1XngW+(Muw?WUaw^0+dAb-vKd>#GY(w7#!NVLsawQsMPkVE?t3P%@PCk?y-H9st;>pN% zZM));3~1xl}psj=6iYjvV6j zN2d)YM$TIkqxJe#)=wJ>9VpH!G2=ZrwO1eYQVnflVULN3-JlQ;kn|+}j0YB3%^r_O zXHR(nu3b8E8|=H}Zcx$63y9P$VU#PFics%N3-q(U7C#H3=<3u)YTe>?5sOSvD$ zp{9_EA`x^Fd2fd`z)ftmk8e~hngim9MD~OvKX@g$pd@&GP`O5iIR4&8WoeVjq|=fu z!9bS=y=jBg_D?f9r#P^bi9{9H*R5{l0FIrrr#eoOzGS8z(lMl`Z3i0-7;%wGRg(a( zY3?nM*BKuSza?-OMPeIuGpCuaK&ZQp*RSKC3j zHk9ZQ;YKRck({G1in)xrD>V?j4030YX@b(E2k~@9gbqabr!Gy-paL#KiuJRs20?h& zs?21b3#k1jJ2;3{;r?_uttwidz*mJdLsk)%Uv_X0;%I2=`r8b6VqaGK8ARK6f^-5s zbuN}0YvHqbLFa{PjhdW*9-v#O6?Wml(03&EbMCekE2LUJdyG+yKBp+#XiW5dm@8jn z3ByEJU2fWoLGhYcK7#c}EFzli_cv?kwvoEvt^pDg^vSeUbWk!#q?lh!>TEg=~3MOjc(nBeOXe9_s~W!?A^ zpk9uGkUxcTYzi<{#3R6Att-eU&?LFapH`d+(4xq*!fSmfiYsk@I&SrrVy;@mTA%>+ zP=h;)g2@UuF-;X~m^Wmor~#ZmXpm7|ojg0qzOQYSV(KK)A*EiTFaN=pW#WOz^!Sak z7oe2j4s?i9xNJ%)qFQ<}r%M{6=Eh)qcyLDU8$y}rIx$jeB9}zn7VA(m9mcDvN9-p3 z`a0}mqXxp&TfaaagKk!8#$J2OGB;G<5G;upvW1z&vE9t@o<~vavQuE$f;3% z&@*JqvsylVF=f1ctp~0=9mIK$KLsPgT$VnXI}ekuf41cO)cwlANL|p_X-i?AM!j^l z?2vKJ?$hdFkunpczcHM*t|tqvnc}f?&m|N==B*=F)Y88*w-oLvz^COf)ayS~TY#&! zTqPks$jHQ_tiKE2^vUJvwk!phsM)5agZ`RY3!MdLIDuYzZ<-kF^pWq|0+IV0IzqXX z;d`6R5Cnm6i|6g1@CtyZevCvlV;W@fTf@>M_~REd9=+IQTf`tYFJwW_`3Uq=ZY&mo z*34i!wB96Ix!Q19*qgGJNojc0wVwl;(~ywf`@js7cyb@11dvPchlSGCNFpxB3$Oa1 z84Qn=D}-BzF~JHf&G)0CoM4cv_0|m-Zq>bnH}W>73NLa|5X$)Xw?zixW{mJYQQ{ohOJf0h&hjUn+xTE zT11@m*mAENiQF#eYJizaoQx(LvG3mYw$62vY3^l5tKhkA4~)U%|T+-xhJp z1yapxZUy@?Sd2Sd?)kt$wT6I)IBmgfR&wrJBKp9_v~Zen$J;?%_UzD3Ed5ge+R=E)I#oR&}EE42REz>w-tVo7V!^)aS11x(kJ+K8;J<8s-&pBqPKt z=E2G6K|}bq3fv!o+75pQ;UuS6kXm##kbJG`w)kk_3KuN%tl#CQylcmaXulv}QC1EB zw@+~cc}tgK^qr!uM8Ncr5{u&S)t^JJGyIAh3{hN|+0eZRUqIWMl@#h{n*6Eh zuS7L#q~o-a9bXI7mSW2!gtBU$AUK1O?=#%w)S4+zWe#EN<}GX)=6K>4BMlO{Gk;7M zHUqq&`(T&h*FLMIyA<50PTY?nwj4d;np)0=!E$U4s-w3t=-PgBQcMiw>H(>QTsU+} z-?%XX0@nea0>IKX$Gd1iok4LwOx_WPpOvZ@41lVaL9i5e8- z=}(>h7L)t9HXJgHardi}aU|Egtw+O4j9;othi!VPCkpr#9Mm9;BDUTt-qYSoJBg_S8fWl=skN0pUD)z0m{b4<`GQ-Y(h(Yb0SZ+ar4a zL+}UI7zp$Y)F6;WZZD0{^h<$rVGiF5T=syJ3^_c|s3Hj|0@k2qRQc=C`%Wx~J~7eD8&kOe*l2wn$x?_oJ7Bkx`G*9gq5ifaeeWFV-jTe*2NP$e|Rvb@i_vqk97WsOp2ZI@Y{%SN< zx%soSeBPHYv3AC_;|nKrw!@R$9MyaP;NVA20TOt> zVqlNek>Kc6@K;9GkZ{^bikh62h$0#L8{1S~C8LmlW5?XQV;7ykBcrBOv5Qe7qIc&D z^Q$2gc?5O(kAV{D7SYEqUkW9Q@z~_l_#UAR%X?v~Bzt#&hLitcs==0A8ifWHJZAOpGEjWgAmK~K(A)YMxZ(B%j@$l=4DEde5VD zL>9j@j;Zupcy$O2378M;Na~EID&{3SiE?gqbf<Qgt|}ve37*KBZwnGH*N`_7$~6Y}d&~ zOp(u~wM;BY++$H~ho2erqXn~X!T{HVEEgpBOaFL*e3s}fCVfmIZe2mlK(@=+Lj}5R&#*&n zv9tbI342N55P_TXS0S^B9S%F?c9ks7 zdtWj@`v_Y>Fvh#T<4n&{z=O3JgH7^a?J0*n7#hrG11g@^W|PxV0-1xv`6DR8yP!D7 zTgC`t>mSu|ca7oMPHQW>L9u6udww z$-q5bobnxHoyV2?Qi=}Wqd)WGt8ClC6#f9$XC__!uZ^n5Oxja|_443^oFBW7E~)-Vx;8 z;_BtkMCJyB^nUX%35L5>!PKQ9)JiOK%JWv|Q|_)mE^R3s*q+(3w=N~>fZFec5HExD zFVbSHqEaQnt#%Nn(Vm2RNv>QjkzPw+@v2NZTG=5{!5vKiWB!yyFp35}H`Ncr*XnTm zZKCcC7k(XU0`_zd!q0lz??LhUQ?84f7pG}R&K)P@l zO3Us>1$6QWY h|2?O*wUz4{_5@&Se+wiIv;P+~Ff=`;Ujh>7{{W^{4B-F( diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/BeanSerializer.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/BeanSerializer.scala index 128db8c58..1e7030792 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/BeanSerializer.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/BeanSerializer.scala @@ -2,7 +2,7 @@ package com.mysema.query.scala import com.mysema.query.codegen._ import com.mysema.codegen.{ CodeWriter, ScalaWriter } -import com.mysema.codegen.model.Type +import com.mysema.codegen.model.{ Parameter, Type } import com.mysema.query import javax.inject.Inject @@ -14,19 +14,50 @@ import scala.reflect.BeanProperty import scala.collection.JavaConversions._ import scala.collection.mutable.Set -/** - * BeanSerializer for Scala - * - * @author tiwe - * - */ -class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Serializer { +class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends BeanSerializer(typeMappings) { + + var javadocSuffix = " is a Querydsl bean type" + + var javaBeanSupport = true + + def writeClass(model: EntityType, writer: ScalaWriter) = { + // javadoc + writer.javadoc(model.getSimpleName + javadocSuffix) + + // header + model.getAnnotations foreach (writer.annotation(_)) + writer.beginClass(model) + + // properties + model.getProperties foreach { property => + property.getAnnotations.foreach(writer.annotation(_)) + if (javaBeanSupport) writer.line("@BeanProperty") + writer.publicField(property.getType(), property.getEscapedName, "_") + } + + writer.end() + } + +} + +class CaseClassSerializer @Inject() (typeMappings: TypeMappings) extends BeanSerializer(typeMappings) { + + def javaBeanSupport = false + + def writeClass(model: EntityType, writer: ScalaWriter) = { + model.getAnnotations foreach (writer.annotation(_)) + val parameters = model.getProperties.map(p => new Parameter(p.getEscapedName, p.getType)).toArray + writer.caseClass(model.getSimpleName, parameters:_*) + } + +} + + +abstract class BeanSerializer(typeMappings: TypeMappings) extends Serializer { var createCompanionObject = true - var javaBeanSupport = true - - var javadocSuffix = " is a Querydsl bean type" + def javaBeanSupport: Boolean def serialize(model: EntityType, serializerConfig: SerializerConfig, writer: CodeWriter) { val simpleName = model.getSimpleName @@ -47,24 +78,12 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali writeCompanionObject(model, queryType, writer.asInstanceOf[ScalaWriter]) } - // javadoc - writer.javadoc(simpleName + javadocSuffix) - - // header - model.getAnnotations foreach (writer.annotation(_)) - writer.beginClass(model) - - // properties - model.getProperties foreach { property => - property.getAnnotations.foreach(writer.annotation(_)) - if (javaBeanSupport) writer.line("@BeanProperty") - writer.publicField(property.getType(), property.getEscapedName, "_") - } - - writer.end() + writeClass(model, writer.asInstanceOf[ScalaWriter]) } - private def writeCompanionObject(model: EntityType, queryType: Type, writer: ScalaWriter) = { + def writeClass(model: EntityType, writer: ScalaWriter) + + def writeCompanionObject(model: EntityType, queryType: Type, writer: ScalaWriter) = { val modelName = writer.getRawName(model) val queryTypeName = writer.getRawName(queryType) val variable = model.getUncapSimpleName @@ -75,7 +94,6 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali writer.end() } - private def getAnnotationTypes(model: EntityType): Set[String] = { val imports = Set() ++ model.getAnnotations.map(_.annotationType.getName); // flatMap flattens the results of the map-function. @@ -83,4 +101,6 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali imports ++ model.getProperties.flatMap(_.getAnnotations.map(_.annotationType.getName)); } -} \ No newline at end of file +} + + diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/CaseClassSerializerTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/CaseClassSerializerTest.scala new file mode 100644 index 000000000..041087287 --- /dev/null +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/CaseClassSerializerTest.scala @@ -0,0 +1,58 @@ +package com.mysema.query.scala + +import org.apache.commons.lang3.StringUtils +import com.mysema.codegen._; +import com.mysema.codegen.model._; +import com.mysema.query.codegen._; + +import java.io.StringWriter; + +import org.junit._ +import org.junit.Assert._ + +import scala.collection.JavaConversions._ + +class CaseClassSerializerTest extends CompileTestUtils { + + val typeMappings = ScalaTypeMappings.create + + var entityType: EntityType = null + + var writer = new StringWriter() + + @Before + def setUp() { + // type + val typeModel = new SimpleType(TypeCategory.ENTITY, "com.mysema.query.DomainClass", "com.mysema.query", "DomainClass", false, false) + entityType = new EntityType(typeModel) + + // property + entityType.addProperty(new Property(entityType, "entityField", entityType, new Array[String](0))) + entityType.addProperty(new Property(entityType, "collection", new SimpleType(Types.COLLECTION, typeModel), new Array[String](0))) + entityType.addProperty(new Property(entityType, "listField", new SimpleType(Types.LIST, typeModel), new Array[String](0))) + entityType.addProperty(new Property(entityType, "setField", new SimpleType(Types.SET, typeModel), new Array[String](0))) + entityType.addProperty(new Property(entityType, "arrayField", new ClassType(TypeCategory.ARRAY, classOf[Array[String]]), new Array[String](0))) + entityType.addProperty(new Property(entityType, "mapField", new SimpleType(Types.MAP, typeModel, typeModel), new Array[String](0))) + } + + @Test + def Print { + val serializer = new CaseClassSerializer(typeMappings) + typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) + serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) + + println(writer.toString) + } + + @Test + def Compile { + val serializer = new CaseClassSerializer(typeMappings) + serializer.createCompanionObject = false + typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) + serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) + val str = writer.toString() + assertCompileSuccess(str) + } + +} + \ No newline at end of file