From df7d99ef8bdd9a6d89a904152ccab69eb3ccd5b8 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Wed, 20 Jan 2016 13:19:07 +0100 Subject: [PATCH] Added pre configuration listener to Configurator --- Zutil.jar | Bin 1190923 -> 1191701 bytes src/zutil/ui/Configurator.java | 41 ++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Zutil.jar b/Zutil.jar index 93ca69cea3b85f9e05ebde96b16878aa0ae6944d..0cc3da47c282fda1723f95ce90517e9db38cddea 100755 GIT binary patch delta 8028 zcmZ8m1zc2J(_cV(S-1-*i`@7#N4=09`h%suDEOv0RI`hq5np$^F@1{ehe1uWY|;vtP4 z3I5`B4!Wds;V+=kPg+#%cnu{)_=Ewd`fRFO^bqBHnHE(q#BNCbUs*cOOJ;~73dbRD zDCR)OdTP^pMm)Q|(|w%`9K*!(K$Pc;(e!r!6;yO-?5V;)Xs@`d1|LS3TtQ$r_&|L!MX2L3g^Rju=h*h zvlsGbrMUV8)ZDu|htGMaXk3 zA_GxC4jI5%_c;X_z?tFzpWzK?7bB?twTZ>qWF?IH&k%Ij=T!(Rf<9dXLXrdmM{MEz zWFJM)Vf~sAr&J&wesJkJA1w$E z<_qEGq!mny#PS5w&T-&{8CkUa5C~_11w@k|sj!Awv`&ySAjCVy^WGKG`dL9ZT=;qa zv5Ep8{-lL&Cy1Lj3j6XWZ4(qn5El>>Hu)S~IOHB~5ENEWhHg^qpP^9Tn-DrU78lSv zf&cQbFBa+c*zqK!(EEqZi|=1bpAWdg0zq*L3EC>)(mWjs999OTF^)Nr0^eTQ<(1Z6 z`Iea|k+n{~Q*mfbuA=&b=-6=Cugiy#j4D{9eN7I`9U8O$U;vx%yFoovmS)(a9p7pe z1M1lr`ItTR;H}PS>a6+lb6br$vE{hqB=fQIi!7fU-+lGOy67jqH>pl&$+=XnJsU9$ zW7P!W_bH>yE4IbgM=(K}34UxqjNK0}I^Nsz$qWLwmcxf^^C@0E>9kT3yWr?kg&|^6*GB>9@qRuAGWNxOV zvgh`C$5Da0_ww1aZu69$`1?1~1F0orSHrOPbtQhk{bEbj!ls6~HklSCPRR!!wQ65* zP=Fi9zVh>6DqlOul~?j$PE--ODCtyU{^9d+#Ua3Wcw%v5o3#7wALkrjaRvZ9x-#*~ z{l+tciM2MnC*Ozt%J=28_iZvwjINi--J8qg34ORuFR>RM_n|}oj->{Fm{~y}+;;nR z>~C?6D4$PoJ!S4bdr?!nF5)YVOr|vt^y;oQ#gRKp4jVbCG+gIp-J?GDt@+F|y|jsw z68tfN&_13AgRF{+5ntl zL&ts6nEz}Y7@-X?V(hf+(HX>EP0KHZ?)@SQc&-p$3!E(NP+vb@v%i%$!4$wc%M_sg zbglJ3)4sdHU$*&R-f!$^wE4Qu&xwr#1y~Kz`)3W^Y)CC^_Q>ao*P_~zleCF%X~?<# zy=y2@YXR-?v90&IJekbNg)Ik3_wUy#8g~_O(GDtwhSrKV3K zx6N*=TTkBc!xs0%)u85dQLhyj1(F4kB?QN{_X0~Il((oEzN68_8ig+!?3s+w^!FAl za*RXi(Q+p5hAje!*=?B&Nh75mKG4;k`n6uII=hU{@!cNSVlm~J=U(*C-E6bAPaGw_ znNVHvv^P3Mzrr08aa1Mka?!e2s$x3Z_)S`hR;lueV6?TwqjPnnyzg3m4G6r{Ee&~{ z7VZY{+dbK^F12&83YsL(y>B$7wIIbC+TZouT+iZN9m#vNV5vVJJZGROW!==6x!`;$ zU%d|ZTGWb&ht}<+afF@8bUfh@bwN6MngS*8?#UjXXfP>MIsE%`9t(V zS2j6?9`no#aejZwbg?UaiTMd@TAiXijj)%xyy~(EMPudTEb*oO79Tw@eAc;fooVm& zBWd1LO0$WL2g11ze*k&y{8|-R`WOACy03>0UPGy*DZ2QG)jm_~&0zMHlMyR>^xD$c z!98emqN*s8q8Gy^{?YAjbQ_y>LA7(8z|Bj6jd$-)xdrvaTT2IEHU*kqK5&*|w8)XH zE)KVKVk#N3y#LEtSUs~&bmfj5X9?wqIGXO^E+>0REipK^*m%Con6KWGG-|9YL4I1*%B*eVtvp5Jv7!=w`w%uMbg*ZsP_l~wuM zsdE))oaN%qBlE#sV!O0mB+G54XZ=Bp&jy0nyu|`6djU9g^b=-dCW~UfNQ`TFnPl!w z9ys7kl!t!PzW79~DdCORCQXEz{;M^K z+0x5D1r3WHvtazMWL@Y^Hl7lcc6rP;lUW@wkG)eTBXYiGP-(c=Xs@_o#X6w3rA$GP zcbLT_$JI;2GgRjtZ-}dBUn8&f%c#Vb$LG~c+?+x~Jxo+s^kQ}QhI^7*MyP7ZUcuMk zRdjb_Wq-J39f~kNG&^HyuwzT3+&uUDNa<6%H(eJsF4#-XCeDGZp8Ljf*2bDc{-Q7yD7x zV1i=4Ohe}M#IE$c!E3b5DU=9VPe{`S?V0#iY9RhW7h^EFhymg&1-(p=y3zBG45dtc zJTeSP%8ud~%ao`Cx(tm`)-XP!J$7wUbuN_H$*?esdiarA7>6*Qx1cj-mAzBGUOg{eLL85Z>-ZCLC2h4D{1wPk*K8B>lCrwpcm zJ-&0tY7IZIG?yK^166|J-{jwF9J(2ZAjvO&A$40m@$3Oby}qM4V(mUd=24vDA2m|_ zcf-TAS-TyK4oTQ0s-aP(x|QO#qf4&!_gP2nf1J+4%rXnaMp)|=1lw@WuTP3msv9_r zQrbA=4jxJzocc83-ukMX--ZsUykE^z%-|8jq34*rWRdQE;e+hRoPLSM8TLsBDy=&l z!EYlnWjx2VGAn_*dx}K>AXy^!XRc>0fm5!Sc(r)al{Z^y6dZY$x6s+O)|ZeE+rQ|Ge0_l|`twZu8ts=g#x6^dX5QT273-pp z`hvR?mtw_^+c=k+0s>Vz{pr{PC_~pn7QR(R_1ABU^!_HJXARK>Mg>1r~q`Llj8n6-XwpPF5RPY`S*b`h0kQ zvbZN@_*kybnQoxJuw==^%sM5j#6J6Jl3}vF^Ow|g%Z##u)J(8?yC5w++s3hqskgs_ zDK{%0v^2I(8|*KPR;kd_yxWi`nGAEs{dU!MNem)P?mmnVy43!hUuOFJMRK<$&bs&z z&gm^U<~R|~Yk9+zvSagd!SHg*>(X4lpfztH55WeqoVW-BI7#9w53Y*AI ze|&h#{tC~3qXPym!jbsT8(NHrljk)*zdS3-Ak%5a-`?U`(pjx%Qj&Y(g#ilP(-e_s zc_ny>iYMqw;w!yW_9&uObY(9Z6*UGF<=pthoKK%*Wa_6GsB;|xF z*#&w5xy@Hba=b%HLp#wZgJl7(E9Q~U7VVh$S1RiEBtxsYYKQ>ILGk4m(KouQGfqkvGOnPkxf$L;-_h2t)0)GVRzqnz3+whBDDjNjU3E+nbO2yx)C9sbiyd17id+)g>(ELQNSOu}q6~3l4MZEG@1j0NZm1 z(+L(Ps%UfaVx?d#%64}|iR@9YmB3)dsGM5ZTfQeU99kP2YpVMK81@Ux86i|ACp7x& z{Cm=whndQga1{UWfpji|`P&m2et8)(v}Tc9T%7WTqMVq&?Aa*pYiWJ|HKnSV zh3-%2DK@HDl*&&uX#2#)?WO9JLZ4N~Fgj?XB^p7p%m3Nq>eqXPp&bfOqku|!BxSJ3U@_l?WmtO7pEmp!)Z)t8Z|v9*6UnUxPF!Ih_ZN&oY()N|9I{)9a92= z>AliZ-_;FXVLCJ$hG@RXNpfcW5M}ooP`Bxmt(^6xB=bLJ5#2bXwVTNSIHdIgoOS^3lK^5w_r7&Z!9vkGS0yz;R9$nxoF zcQkWCt<$C(`bD*CxvbHye^G9Eg%!H-0Zo%`A7hiTg`a6#S5|6-+>kPR@;X{XY7?C= zIFoKKxn6E0xlwL)MA0zwBA9hea#n!h`QW(ClZvDA%n98=@z~F2c^!sNWZQG?J3QhO zt$QM4%41`$V~pbqD=wP0m7d-}*UF|+3~v~lFn=Un)XE9%qU0Yy@ZgQplXMPFoTA?fed7c#iKTExe15e(rAjPmf-<^cPT54V?rV7|b!jy&kAnrz&4>_*%OtMQo6uF^m>? zKS9=4I?07eGpW~Gb;O@D9dOrE@y#+%#CRlK1KiR^KmT2fwC6pgeLW5o`` z=UmE|T6p=&TdVGc30SIH(dp;;kNd`QV`ao^C+9B8pO-MJ@H6KOh}ONn=APZ_uIu*d z+?!7_Zkt;KNA`s;J4_nAs=qcYq({X-CL`MM__+3=R@<}Hq`X9#weLCB?YRmI zJx>oR3jHwb9qOZTO-MDa>xuy@L}k6DC;V=n+J!Y6oHoCV{1t9dT^Oz<7I}d3X{CF$ zuEuEInd~>??%74*Fe+Rnb$yG}1o!Kb?YXptj`qAFdsKQTj1HqC4K;Cm|H-jkKpRWp zX_Rx(Ts8dF59aC^U@3E?kw53lB8%fy-M|v5mLYdc`_{-?@>@>CZ}oK_T9p*HAa^Qj zGZK=zE{l9-kXLGHOEjS2mJsnfy`cMthXzG$p97Rp?1Ry6aA*8>h0Ql{*|!~@tZ8*%-&X||%uUVbDt_TE(_NH!%UOqT%pPk1WdrDM zdN3)2?yr$)*b+hHN}T=#U7D8kiH=0cziV8^u!51 zyLW8kzbI=nCixb9S=IG)qMTeaQ!}V?l+aTed#RYLd31NHFC007t5&O0(|cKbs+6NEk$6k7LG-(PJxs$0?AUl`yZ^cVJ~8=_-*g&Gy*c*B z>=cO(M#lTe$#RygcEz>LcIs`Zr?STG(-8-YGl|bPH6N#MwSl1*s6G3PiaRSz>*pL- zdw%KWEO@`$FS}uaqQ5<(U)sCixxzeoU&rCcg|uJB-hL_OS3uWk_{BTYH(TS&+Ojg{ zBVE;N)4w4?F1p*Y4OvaTs7?#8ZKC0*sj4?F8NxK`dkRKX9A0WIHTu4yemgmuqbu&q z@Vqxm!@k(&?3eC&lFZqh8#DX<_0Btd;||$-VJ3m$UTTzivI*5!``3_ynG)Ad=jBRV zdwL`CI7Z=J^kaA4*M*DGVlz7c4Tt1;BD-E)wfOh#|i$`-*nm3T&aCx81mA=E&fkQ-fX?Z<{cTiLF!dOKZh@KN5r^Z z!JXAEk3UrXyeug$<42Cp5gc8vVEgfkQODUEBaO}$9M!kCL!Sq+FZ8_D_zSLgPksSTLpBYx=y`~9uP<9R!f^b_e<$$rmVj+-a48VoYxp^Te_;3aXGsewf$sD zq$}?*to);$5(Ck#shESEA8p`bbJE``B+3C1N61_R-d#$is-Q0QDk4ppd04ta`cr zS$E&Luf1x1s|sH?rxOt$Jn$d(PZ#*QlBi*@Tdb+RVyxhzEx?FfxC$geB@ZmF&hr3D z{$p{4ivU6y09Qu9WzwU79YUoc>M3AA0_8ZTD*+X#gJ}j>K&dK#38IXvfD2G3whEZW zcd&NVfB=*;1(isUEa2lBpc?|<_$=7iTA&olnPNrj0e1q7vmYmDYyjj5$<*X29ErpN zYy_Nm6QE5H;0Bg}ERC$<5EIQn1EC}ZDLm=~g2|wKJGSKtx>iYLLJ+rR<@g+}|a0|Y?^eRlyvLI7|+vSJs109e9E*+;+) zs0ZC5EYC5(O0Win(*6XXCd>stwe-74sB+U#jJcR%IXB?N1`0L;^g7E)jCkXKWZgCil^@;bK@d7jAIyd~48Ps+K0FZ_e z2?vwwfK%W_J|r`-v^QwLhl}lI2mrbV;g;YtJ|rBv-S}-zOoRd7@ge0%L@@wZ9R{2Q z<@o<2#%~Xjlt=&s!U0w=h9AjKGC-i1!9hHQ+qocq#gkCQ0$^JduAnL?fD|N=Cs6z# z21gO!y9ZVXAPtFA6TuS!q&9K>1N`+2cuf#D)xIJEVOs#ugD(Yf@Xb;JC;SnB0O^Eq z9L6#Nr{Xa{1=QUiL^&83%=sCB Gqy7(OW4Z(Y delta 7321 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 { private T obj; private ConfigurationParam[] params; + private PreConfigurationActionListener preListener; + private PostConfigurationActionListener postListener; public Configurator(T obj){ this.obj = obj; @@ -141,13 +143,35 @@ public class Configurator { } + /** + * Set a listener that will be called just before the configuration has been applied + */ + public void setPreConfigurationListener(PreConfigurationActionListener listener){ + preListener = listener; + } + + /** + * Set a listener that will be called after the configuration has been applied + */ + public void setPostConfigurationListener(PostConfigurationActionListener listener){ + postListener = listener; + } + /** * All configuration parameters that was set * for each parameter will be applied to the object. * - * The postConfigurationAction() method will be called on the target object if it implements the ConfigurationActionListener interface. + * The preConfigurationAction() method will be called before the target object has + * been configured if it implements the PreConfigurationActionListener interface. + * The postConfigurationAction() method will be called after the target object is + * configured if it implements the PostConfigurationActionListener interface. */ public void applyConfiguration(){ + if(preListener != null) + preListener.preConfigurationAction(this, obj); + if(obj instanceof PreConfigurationActionListener) + ((PreConfigurationActionListener) obj).preConfigurationAction(this, obj); + StringBuilder strParams = new StringBuilder(); for(ConfigurationParam param : params){ try { @@ -163,17 +187,22 @@ public class Configurator { } catch (IllegalAccessException e) { logger.log(Level.WARNING, null, e); } - if(obj instanceof ConfigurationActionListener) - ((ConfigurationActionListener) obj).postConfigurationAction(); } if(logger.isLoggable(Level.FINE)) logger.fine("Configured object: " + obj.getClass().getName() + " ("+ strParams +")"); + + if(obj instanceof PostConfigurationActionListener) + ((PostConfigurationActionListener) obj).postConfigurationAction(this, obj); + if(postListener != null) + postListener.postConfigurationAction(this, obj); } - - public interface ConfigurationActionListener{ - void postConfigurationAction(); + public interface PreConfigurationActionListener { + void preConfigurationAction(Configurator configurator, T obj); + } + public interface PostConfigurationActionListener { + void postConfigurationAction(Configurator configurator, T obj); }