From 3f9caf9918f1e047314e84227784f5de5cad77e0 Mon Sep 17 00:00:00 2001 From: bancika Date: Tue, 21 Aug 2012 08:29:27 +0000 Subject: [PATCH] [Improvement] Improved overall performance [Bug Fix] Should be more stable under OSX and not crash unexpectedly --- .../diylc-core/.classpath | 6 +- .../diylc-core/lib/cloning-1.5.jar | Bin 9838 -> 0 bytes .../diylc-core/lib/cloning-1.8.1.jar | Bin 0 -> 20827 bytes .../diylc-core/lib/objenesis-1.1.jar | Bin 31582 -> 0 bytes .../diylc-core/lib/objenesis-1.2.jar | Bin 0 -> 36046 bytes .../diylc/components/AbstractComponent.java | 67 +++++++++++++++++- .../src/org/diylc/core/IDIYComponent.java | 10 ++- .../src/org/diylc/core/Project.java | 46 +++++++++--- .../diylc/core/measures/AbstractMeasure.java | 31 ++++---- .../org/diylc/core/measures/Capacitance.java | 8 +-- .../org/diylc/core/measures/Inductance.java | 8 +-- .../src/org/diylc/core/measures/Power.java | 8 +-- .../org/diylc/core/measures/Resistance.java | 8 +-- .../src/org/diylc/core/measures/Size.java | 8 +-- .../src/org/diylc/core/measures/Voltage.java | 8 +-- .../src/org/diylc/presenter/Presenter.java | 57 +++++++-------- .../diylc/components/MockDIYComponent.java | 2 +- 17 files changed, 183 insertions(+), 84 deletions(-) delete mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.5.jar create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.8.1.jar delete mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.1.jar create mode 100644 diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.2.jar diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath b/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath index baa39e03..5b6fba27 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/.classpath @@ -7,11 +7,11 @@ - - - + + + diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.5.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.5.jar deleted file mode 100644 index 781fe27d85e554d45042272c4ec4267d94c2891d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9838 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 WsKPD4cOC5O*Ti)s@uU9!>Hh$`bG{A$ diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.8.1.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/cloning-1.8.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..ebd2d8c24d075cfaa354077f1e9cac9e79793aa6 GIT binary patch literal 20827 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⪻Ceg~5U5d&6z&_6LzK;tFjeF-!!~BhVI^SGAuPZ=t%VKoYWiFd*soKCTQrEp& zhHqBePxE~Vzm8$3+L8$X@IBm+)RclN3 zCBm39!gk+!ep}#CMZh*!^M`4qj_Hr+D@j=i0HqNE&qvGo1%dd?fSwYK_Cri;`F!DK z8Hx@EmhoA@D8;!q3&4=B&F-%pkOE>uB@k>YB=X{7f@8ZnoW9B^&k@polsO29x=Poe;KcG5Npp)Zen=OVr-P8EYy~5E&W&GVg+Xv$KbNMv1<)qRdi&~~{Jc2JoasU> zlCM4Hv!>!ZA{qU!#bW4rr{H%lOw1nIrb$;*S7AC4Qf@wG2Y^t`Y&2dT7l)2G16C$7 zvTD6-LOom82T&iKv5{_e@t^&-<0`s{wpAv@^Q5>Ro3$v2_TBcV8saok-Ee@3$@ z(B6s~{+*2_fiTOvO#mgsC4duAp(z*O5$hGZPsS<3Wt6Eb;7ffFgc`_SffVHc+}O0h zMM&(z9UA{sL?)Gv0OS(4L!W4%kZ|{rBF6RzE`=2k|E9tkf-=dh>^~|NgwxI|r-7}_ zS6S__J0|O&4ks0%?o{Ec(qg>UJ{B$Da_jX-WTDLtmDkAPEyM)4bLmzp)YV|rjQUmq zrIn7L$_X_uh~NQX_D+UEuwFm`$7B%vrXMcj1^$;I?#Ig3B3ur>oe}82@pi@xA^T;z z;7AykpcA|=vHcR9eh@_-`H1N26a?h=S)D+y!sS`s#HI7Z*$Z2k*2r$`Zb{gp_>Hid zaB~v4@#&gnsv)xynVJ{%)u&A{z;kK%1a!(gdxbamcV$)ZVf(#anMxb+=H;oy7a<)+ zJJ9K*ejF%AwJkPlF;Z>n6EmkYTx?K~!~Px~3hNKG14EJ(h_c@j(M#oDH^}4+5lA5G z$h~zLm4*OTfh5<9c(q@TQ!}?47YFj0^Td-rKunCx^-;V7gWpG-SsJ@9t#$hrl_?%> z@^QU7P$HDng|?__;5cv};fu6!2+Mtz5v!yR5nIP40`R+S1Oo3Bu9gK+!1XVm=lPeCyVL0f2%Y%dMSeA71;BcslVjxkwkO{F zw8pB+F%)JBxeo6g?>_E>U>lHL>*{)Z7o(QTfY*{Z_Pg-%-tDTG*OrZr)-g-A%EaqQw++(1P z5+$-o(?eyrT?OEssh!8|khG!UujrUhMtyu=YN$HB)0(m?^?~DQEWz$M%e<0r7LKTz z{g?3qfCO?~OtBHnJahsF&N@=ZyccKV19GW}FyU6SS_HpQ4)2QP0L1a++MJZ>hr2Sq z=^^9PAxk9Sb03Q^J>_O|Nfs0B7X663U(GZ>wVr5!4yJ{-<>4uv7@z}Qs9B5jpb{?@ zCU)L`At7P%xvoV_U*+HyJRs-w6cd)Er6wZAOK0+>#~9|+MUQ%%0LmoCeLlXc?dUx3 z4%@xyNs{4XMp!Lgj)-+)XsOwtF3Nln>WZkNS)#%a@KdQgR%60YO9W6YWGRElUT^7Q zyU9R_G*Gj;HaRN>ML9}wMzLdu@1UE@Xms#VzCZ||J+N4gTKm+nX2}?fBqE?2BEvU6 zi)rDr?O{)-ZPOUc9ZfXzxp`zdn5N@&x$RjXn&ea$h62&@w-zW#FZAO{=2TI5GU1?O z9b^C9O&-CMaZZsH4bAy%D)4E1sc{w_U9S<=0Ay2D(j)Q;pnJGcPC4Gt%59WEXxitk zA#m^ZpyTsPOLmC!_VhL}#>`#X37m62FhsqT=SOEZwYYa^XZTJA;D{!#NQ2@ILhFT2 z3Is8YRe_X6Gf_lp;WpuJF{O}}0tbukpwU#DAkI0%1dOd!QBF{TlARd@Wc^O4Dl8D_ z?tUiTh~VuJ{8nh)H$Ku?j%8sx4LcANRLEp4?0*KIFw-R~ruN3v6`ib+b7%y?rub!I z{fUMxvFFoWb`l&9JaHqW z3D62Q7rb3?_mq9Gs7F1r_r0UlH(Qz})HZEXw75u|;vKUVX6_v|FZI{38Wh|fOWoBo-LD~D*qN8n~JB)*d z7jJQz0;spGG{DDoohq9>3*XapbbDRVLu|!$o~l=2I{kGtb830FWOPfJa@<}vr_s1B z{!yURv_Kgzs4IV^#-ZTt68mRb1uu6@K4w1(K0#poKKW}FMRHO-bt8!+F1>-WkemoXEvrdg zZq}_dJ@t?5P5d0i593XtiSTWwa%z1s5MS06zYhno%{`_5Hk=*FF>zt9d#)Z4@l0NV zRgBvI^~yyW`z8HNi%Z8?<9{H;UrFY-~cOczMW<5e@Fp?4z-C!4*~6oDPUL9@s-aeNI! z>IP{aD>OP0F>V`<1ZKRVa5h8!gDDp&3%SRv(@*mD z1!FtEd?b3x>-4hHGL3<6Bi*ez<7nk%qtt5g7B(a6X5o5d&pfZXje@H=joG2%!_kq< z>=(<;pwud4RbE4Cd&iUHbGgc=%}mG{EVMOzEym9C=(~r4(Bc~rwOxwgYwXCH!!yNG zgLgm!HP&KZ{PptH1@sjiUmFZDPGQn73V1B8eam|5Ky911GaYYdcq*KplZn=heyiiK zs)C{Z$md*@ckfVvjsuo%igMbl*hAl=3eaQg)?H!%)27ac8D+~ut~TTN$}=O2HEO6# zP&7t`BYd;p=-b#fIF^-V87({3l^35zL@ywH(WSpECilCOAZm>0PWOH25;RU7b7rad zHrAFLFzNPCD&NvViavasduoeghRNySIWanQFm z1E3#%co_vlL2XYHQ-B=97-4RRwI)v5O7Ks?%Mm~#&hJO|IN=-VjuSoXM-H_BxB-WR3rhmVkO zgUVCnpER-@>74VoEbv1??`uDE(S3Ik*%lrU{ahRCDQF-mG?&ZR+Uyg%NCS=lEJ&D| z%!bADBfLXTBN_L7kWECyjFwcR0@An3vv-{lcL{}pDO@;Klpeo7z^ngK;5a|@%nDaDA7_TdAQ{bLmcIequ6gw|-bjqXZ z=dl^VBxii`3L;tv$$0T}&%whT5*SVey;)~frVPP*b z)nsr?2Ob7BVs#{%hTH+(U(I*{+yYyI;NDOG_XhC|yq5l6;GtEVgTp%|f@FAmOFD+;Fc^d@?m8W3F=X z@RSo2zZTvs61F2gu*^Ku(qOooUt~!br2K^W(Sl6^$znLjHw&#-agL(0If%&FOFBst z1@TK&zk%tH26JhTG86t?CEmlFZ=(LfQfrG0IpKsgL2I8v9hj7|2k#k-l@t1n2S+;- zTjnyo@JwK(`Wno_>Xl4GU`HoD%+F*glIK!LF{L!ucS!M$8kduCMAzh%Wk{R$!9mCa zvyBM^b>R1xw*7OvAHC4d$T-_^<=T0f{UT9szIV#c-7M0PBI1{i$mx+*NlT zzY~np(Wk4cdQ*j$F*vZ1><*}HI<`?+^}=J5+#CwqLa;S5%!ZH4(o-VIDe{0gi;{Rd zJ6jyw@?XF!f41LR-|lBl<;zw7uikBNT7ds0TmGX57TM0CXa~ zjk?ZZ%8BpF`6C*UlulBH+Nks)Rr6$p3|F|19JV3v=g_)=Ofn?IAS@DN#FF5?V+nYW(i3@W6_TLL|$ZgFHs0Jl3`-| zi-3ejmDVumfcRjpkE?$BIaStbb_QN`Iw1i#a>i%&bqr((l?BkkEo8I+!u1UBZzRUt*x^Cc-3|jI<7m@~Z*&svH&Eef!)!1pxXT8FqJe7`{f}h z{7R@jTF4+KqBdXY6%U-6LS3o03g3G)^t$rNaj@!ZUy4|zFp>xOBG{5rLUgse?()YV zr=aFyJS)QPbcDu%K~~dB7$3$kRO>7&ejgP=!sVIuUIx_WK5d=4q`kspkobJ5%G54r zpoPQsX-pQw{R`LWvXC?1P#MPK+|RVNh7G*KD9!zJyF<+W;^HiTc?A8y3fGu9W|eB` zp{iQ8(1oJi)9c<6t&QLKdF&@(Pu+b*q zm6VMSI%JO-Cn@;JY{P&~qu7UX=y>)8Lz?AxoA5-XB+cB^^s!H>^@8pR1w$#3PB>aL zq{}e_s_Aq68_CTkhn6dwG#u*7ntErIh8S&SzA@z#zq zMv1RB;$r5jEYd0A7<3iDXYS+6ExP?+aw_*abv;aVf*Y!a16MV{gCi}bmj1|1Z^>I{ zhwWQQ&J&h+&r=Z6Ox5IgO06P4K(Wk{2pDtnELCu`j&s3>^Hu@}#gVqY&MOUOFedTED03>q{|bAK9l!yj3E) zxSv0c2r%l|u4`aOD0Sg4_SqhD>NtAsvie+Vaq!|UXmz#tVuhwVGdgSq7miV8tyFR8 z@v4WcLtJ6HRZ%=qVKNcZjvDv-hvTnQhZc_fpZE4hOd1Z}M^h9R>(TMvp~8cGT9muX zJ@oq6ev2}%LB0@Mpc^SBes3jwBW(H3z{q9`5QNM(Npu0BS`1-~$#%gn_)c&f+wZxw z{?wx?_J-H1lsHux74SCyTL~|k@TwBnXSnQln?2U|%}YrcpUE-i`;$so^3++-=I!J{ z1#Yzs>Q0v0BnU}SI0^J$mBKgfMjpPH>EbF_8{vGff79Kl_n3!B&wKWksIMB)EBt7VSF5-D23e$aEY2OIr0vLY^)+1~2);n+( zuyBcSBW)g{g0WeyZx|6d1{6p4hM85xi`mk$_)QaC&Cb_eSeBZ+gb{X^dQgB-k!-R5 zJy18VQI8YQA=N+hU~((paw~j^I^5j6B%Of<$BE98yTqsgw65v6j*?+$!un|{ujrUt zBv+um==E5vuhDv(iI82Y)c5;ObNsV&;fCt-Xkwc3mN6YBoy9|h-aMLhl+WOB-cG|h z#(d9~RA%IDokHt~K<| z@J=I~?*1|kiwB?Et>gT+PIajt(X6Bi(5#SH1r#wy^A;*gbl+|h5ol-pw09=OSGpEL z6%mQ49N`MzZN^{QheDkr2J=Rk)h1fI9$zJAjjAedmg{NKfYkcHV&IFdZ5U0c4(5$& z{G|eJs4n+sK?( z{F;}v7-1Mv{RVYBT$ps6VIsdYnJ>rl;IZ0%mvZuXmpI{|wq zB)m9tesvw=Y=rrQ1#2FXyxNT&Ow%3dJIfWN;q4KR7Q`-)t71N}IoER&vb)xgdVJyh z6jCr}Pd+tJj)`o}*FM8J*<2ZcM5r}?YS+QI)pwE=Z~0c(X-iz-?)x6>X-3c{9kKxo z$um8mSm+8Ov{A(i?C69RwDNq#~FjLAa`!1H6|q0Z(}P ze-C19WkK(3@hnVPTc(2%=t1;R!2dNv?Kof9qkX06MB*STGMT-Z&~-m@^X(Q6xke48 zw%R$nVF_E<%Ar&x=&>Tr^FT2S-+3tNh0OdpTO|^<690q?q)FDCX?nH81xre{UZrGmyyenP$Rj z5=ZJW9I5DqYTPsWlA)e_tEtR9rl(<~H4*_z@9_`=PziJC%W~8d+5B`kGr}I0V{>Rq z9z&zyE^@nR<>v9NW;^!Yc1vkAV`2TW4^)LJJvJ0$jt-!JL_NGtmR2&rsW$2`7 zrR0<(U#RZO(aH?2tSKYW52{#8$*D7zsWLLxFtgV(Gb&j-A}TR5Gcs6isTu?QagS7^lj0M#Zbu6R-3GgVZrujnxxU5|_~F49 z3e=9!<>#MrT;28~X%S@2r^_E-Ub#Mh8OFaN!$(o{-a3K)uUe4 znfm#g%g@U)O+T*7J2t^zFYowuhFpK|W!a`5*X6xH@XYz^y{5lZ00Pg~>w!pq;{30@ zCMEoqk-G&lP$z+>atp*MnUeP_MxHZU+0At>-3TiGSk#Pgr=cuDPMr zejGZ!q3QlAtK`jSm%)WMJ=$eis2|s5!v*{X_UC%%3gpKqhAb2H6DHTE;Wv=KjEWzf zc~j9SNGixuM^{vO;L(3WQ~sd3vG5Tj7i3+VE3Wt8YA655bz_wqNG`}4D!*`nx3&Ms zrSP9Bsz8!M=CQvbp9a6R|NqE;7`Y%BAyZagG3tU#-~CHQupJFtJLZ}M){u;lX>qR@ zEwOK8{F@A)e=iec*3c`4a}XeXDC9TN{nWlU<+_pZTAp8htB~SBo{hU=I|N%VZxHX#vjM-_8vcIDLY^zS z;=mRB?;MxP=(S8J7j-BMz>y3zL)+# zQT|7fA*1K6_%DmC{k4rRr|~bbbdaJzMyXvvty~XveeXktyIzlVo(!Cb*Vd2%iM&qlt{AphJdNe{bXZ37hLv@b5wYuy|cH9PIzfTtgafuCQrL|3UVv2mY%mM^Od_ywie$ RVg&ygp+Z3|gMpx+{vXgZKy3g3 diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.2.jar b/ diy-layout-creator --username bancika@gmail.com/diylc-core/lib/objenesis-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..fb04d7fa64238e689b52e37751ff2576e4da19f3 GIT binary patch literal 36046 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 literal 0 HcmV?d00001 diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java index 258ebe8b..90b84bf4 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -4,20 +4,30 @@ import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; +import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import org.diylc.common.HorizontalAlignment; import org.diylc.common.VerticalAlignment; import org.diylc.core.IDIYComponent; import org.diylc.core.annotations.EditableProperty; +import com.rits.cloning.CloningException; + /** * Abstract implementation of {@link IDIYComponent} that contains component name * and toString. * + * IMPORTANT: to improve performance, all fields except for Point + * and Point arrays should be immutable. Failing to comply with + * this can result in annoying and hard to trace bugs. + * * @author Branislav Stojkovic * * @param @@ -80,9 +90,11 @@ public abstract class AbstractComponent implements IDIYComponent { } protected void drawCenteredText(Graphics2D g2d, String text, int x, int y, - HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment) { + HorizontalAlignment horizontalAlignment, + VerticalAlignment verticalAlignment) { FontMetrics fontMetrics = g2d.getFontMetrics(); - Rectangle stringBounds = fontMetrics.getStringBounds(text, g2d).getBounds(); + Rectangle stringBounds = fontMetrics.getStringBounds(text, g2d) + .getBounds(); Font font = g2d.getFont(); FontRenderContext renderContext = g2d.getFontRenderContext(); @@ -117,4 +129,55 @@ public abstract class AbstractComponent implements IDIYComponent { g2d.drawString(text, textX, textY); } + + @SuppressWarnings("unchecked") + public IDIYComponent clone() throws CloneNotSupportedException { + try { + // Instantiate object of the same type + AbstractComponent newInstance = (AbstractComponent) this + .getClass().getConstructors()[0].newInstance(); + Class clazz = this.getClass(); + while (AbstractComponent.class.isAssignableFrom(clazz)) { + Field[] fields = clazz.getDeclaredFields(); + clazz = clazz.getSuperclass(); + // fields = this.getClass().getDeclaredFields(); + // Copy over all non-static, non-final fields that are declared + // in + // AbstractComponent or one of it's child classes + for (Field field : fields) { + if (!Modifier.isStatic(field.getModifiers()) + && !Modifier.isFinal(field.getModifiers())) { + field.setAccessible(true); + Object value = field.get(this); + + // Deep copy point arrays. + // TODO: something nicer + if (value != null + && value.getClass().isArray() + && value.getClass().getComponentType() + .isAssignableFrom(Point.class)) { + Object newArray = Array.newInstance(value + .getClass().getComponentType(), Array + .getLength(value)); + for (int i = 0; i < Array.getLength(value); i++) { + Point p = (Point) Array.get(value, i); + Array.set(newArray, i, new Point(p)); + } + value = newArray; + } + // Deep copy points. + // TODO: something nicer + if (value != null && value instanceof Point) { + value = new Point((Point) value); + } + + field.set(newInstance, value); + } + } + } + return newInstance; + } catch (Exception e) { + throw new CloningException("Could not clone the component", e); + } + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java index ecf23912..7a16358e 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -107,7 +107,8 @@ public interface IDIYComponent extends Serializable { * @param project * @param drawingObserver */ - void draw(Graphics2D g2d, ComponentState componentState, boolean outlineMode, Project project, + void draw(Graphics2D g2d, ComponentState componentState, + boolean outlineMode, Project project, IDrawingObserver drawingObserver); /** @@ -119,4 +120,11 @@ public interface IDIYComponent extends Serializable { * @param height */ void drawIcon(Graphics2D g2d, int width, int height); + + /** + * Clones the component. + * + * @return + */ + IDIYComponent clone() throws CloneNotSupportedException; } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java index e48d708f..b1f226a9 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/Project.java @@ -2,8 +2,10 @@ package org.diylc.core; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.diylc.appframework.update.VersionNumber; @@ -210,15 +212,37 @@ public class Project implements Serializable { } } - // @Override - // public Project clone() throws CloneNotSupportedException { - // List clonedComponents = new - // ArrayList(); - // for (IDIYComponent component : components) { - // clonedComponents.add(component.clone()); - // } - // Project project = new Project(title, author, description, - // width.clone(), height.clone(), clonedComponents); - // return project; - // } + @Override + public Project clone() { + Project project = new Project(); + project.setTitle(this.getTitle()); + project.setAuthor(this.getAuthor()); + project.setDescription(this.getDescription()); + project.setFileVersion(this.getFileVersion()); + project.setGridSpacing(this.getGridSpacing()); + project.setHeight(this.getHeight()); + project.setWidth(this.getWidth()); + project.getLockedLayers().addAll(this.getLockedLayers()); + + Map, IDIYComponent> cloneMap = new HashMap, IDIYComponent>(); + + for (IDIYComponent component : this.components) { + try { + IDIYComponent clone = component.clone(); + project.getComponents().add(clone); + cloneMap.put(component, clone); + } catch (CloneNotSupportedException e) { + throw new RuntimeException(e); + } + } + + for (Set> group : this.groups) { + Set> cloneGroup = new HashSet>(); + for (IDIYComponent component : group) { + cloneGroup.add(cloneMap.get(component)); + } + project.groups.add(cloneGroup); + } + return project; + } } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java index 509fa204..ad2386ee 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/AbstractMeasure.java @@ -4,6 +4,13 @@ import java.io.Serializable; import java.text.DecimalFormat; import java.text.Format; +/*** + * Immutable measure class. + * + * @author bancika + * + * @param + */ public class AbstractMeasure> implements Serializable, Cloneable { private static final long serialVersionUID = 1L; @@ -13,8 +20,8 @@ public class AbstractMeasure> implements Serializ protected Double value; protected T unit; - public AbstractMeasure() { - } +// public AbstractMeasure() { +// } public AbstractMeasure(Double value, T unit) { super(); @@ -26,22 +33,22 @@ public class AbstractMeasure> implements Serializ return value; } - public void setValue(Double value) { - this.value = value; - } +// public void setValue(Double value) { +// this.value = value; +// } public T getUnit() { return unit; } - public void setUnit(T multiplier) { - this.unit = multiplier; - } +// public void setUnit(T multiplier) { +// this.unit = multiplier; +// } - @Override - public Object clone() throws CloneNotSupportedException { - return super.clone(); - } +// @Override +// public Object clone() throws CloneNotSupportedException { +// return super.clone(); +// } @Override public int hashCode() { diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java index 4e2e79c3..b4d81742 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Capacitance.java @@ -4,10 +4,10 @@ public class Capacitance extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Capacitance() { - super(); - // TODO Auto-generated constructor stub - } +// public Capacitance() { +// super(); +// // TODO Auto-generated constructor stub +// } public Capacitance(Double value, CapacitanceUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java index af598a2a..a63bfcae 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Inductance.java @@ -4,10 +4,10 @@ public class Inductance extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Inductance() { - super(); - // TODO Auto-generated constructor stub - } +// public Inductance() { +// super(); +// // TODO Auto-generated constructor stub +// } public Inductance(Double value, InductanceUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java index ed4b35f7..f7f6069a 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Power.java @@ -4,10 +4,10 @@ public class Power extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Power() { - super(); - // TODO Auto-generated constructor stub - } +// public Power() { +// super(); +// // TODO Auto-generated constructor stub +// } public Power(Double value, PowerUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java index 3d2f8716..bfe0ebbd 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Resistance.java @@ -15,10 +15,10 @@ public class Resistance extends AbstractMeasure { Color.decode("#FFB90F"), Color.black, Color.decode("#8B4513"), Color.red, Color.orange, Color.yellow, Color.decode("#76EE00"), Color.blue }; - public Resistance() { - super(); - // TODO Auto-generated constructor stub - } +// public Resistance() { +// super(); +// // TODO Auto-generated constructor stub +// } public Resistance(Double value, ResistanceUnit multiplier) { super(value, multiplier); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java index e7543161..b5c7715c 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Size.java @@ -6,10 +6,10 @@ public class Size extends AbstractMeasure implements Comparable private static final long serialVersionUID = 1L; - public Size() { - super(); - // TODO Auto-generated constructor stub - } +// public Size() { +// super(); +// // TODO Auto-generated constructor stub +// } public Size(Double value, SizeUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java index 0f090635..373b45cb 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/core/measures/Voltage.java @@ -4,10 +4,10 @@ public class Voltage extends AbstractMeasure { private static final long serialVersionUID = 1L; - public Voltage() { - super(); - // TODO Auto-generated constructor stub - } +// public Voltage() { +// super(); +// // TODO Auto-generated constructor stub +// } public Voltage(Double value, VoltageUnit unit) { super(value, unit); diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java index d8d95f7c..0dea3240 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/src/org/diylc/presenter/Presenter.java @@ -47,8 +47,6 @@ import org.diylc.core.Theme; import org.diylc.core.measures.SizeUnit; import org.diylc.utils.Constants; -import com.rits.cloning.Cloner; - /** * The main presenter class, contains core app logic and drawing routines. * @@ -58,7 +56,7 @@ public class Presenter implements IPlugInPort { private static final Logger LOG = Logger.getLogger(Presenter.class); - public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, 9, + public static final VersionNumber CURRENT_VERSION = new VersionNumber(3, 10, 0); public static final String DEFAULTS_KEY_PREFIX = "default."; @@ -79,7 +77,7 @@ public class Presenter implements IPlugInPort { private Set> lockedComponents; // Utilities - private Cloner cloner; + //private Cloner cloner; private DrawingManager drawingManager; private ProjectFileManager projectFileManager; private InstantiationManager instantiationManager; @@ -109,7 +107,7 @@ public class Presenter implements IPlugInPort { selectedComponents = new ArrayList>(); lockedComponents = new HashSet>(); currentProject = new Project(); - cloner = new Cloner(); + //cloner = new Cloner(); drawingManager = new DrawingManager(messageDispatcher); projectFileManager = new ProjectFileManager(messageDispatcher); instantiationManager = new InstantiationManager(); @@ -412,7 +410,7 @@ public class Presenter implements IPlugInPort { // Keep the reference to component type for later. ComponentType componentTypeSlot = instantiationManager .getComponentTypeSlot(); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); switch (componentTypeSlot.getCreationMethod()) { case SINGLE_CLICK: try { @@ -505,8 +503,7 @@ public class Presenter implements IPlugInPort { // Notify the listeners. if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage( - EventType.PROJECT_MODIFIED, oldProject, cloner - .deepClone(currentProject), "Add " + EventType.PROJECT_MODIFIED, oldProject, currentProject.clone(), "Add " + componentTypeSlot.getName()); projectFileManager.notifyFileChange(); } @@ -612,10 +609,10 @@ public class Presenter implements IPlugInPort { return false; } - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); moveSelectedComponents(controlPointMap, dx, dy, snapToGrid); messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Move Selection"); + oldProject, currentProject.clone(), "Move Selection"); messageDispatcher.dispatchMessage(EventType.REPAINT); return true; } @@ -760,7 +757,7 @@ public class Presenter implements IPlugInPort { } this.dragInProgress = true; this.dragAction = dragAction; - this.preDragProject = cloner.deepClone(currentProject); + this.preDragProject = currentProject.clone(); Point scaledPoint = scalePoint(point); this.previousDragPoint = scaledPoint; List> components = findComponentsAtScaled(scaledPoint); @@ -1067,7 +1064,7 @@ public class Presenter implements IPlugInPort { if (!preDragProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - preDragProject, cloner.deepClone(currentProject), "Drag"); + preDragProject, currentProject.clone(), "Drag"); projectFileManager.notifyFileChange(); } messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1077,7 +1074,7 @@ public class Presenter implements IPlugInPort { @Override public void pasteComponents(List> components) { LOG.info(String.format("addComponents(%s)", components)); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); for (IDIYComponent component : components) { for (int i = 0; i < component.getControlPointCount(); i++) { Point point = new Point(component.getControlPoint(i)); @@ -1096,7 +1093,7 @@ public class Presenter implements IPlugInPort { .getClass()), false); } messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Add"); + oldProject, currentProject.clone(), "Add"); projectFileManager.notifyFileChange(); updateSelection(new ArrayList>(components)); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1109,7 +1106,7 @@ public class Presenter implements IPlugInPort { LOG.debug("Nothing to delete"); return; } - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); // Remove selected components from any groups. ungroupComponents(selectedComponents); // Remove from area map. @@ -1118,7 +1115,7 @@ public class Presenter implements IPlugInPort { } currentProject.getComponents().removeAll(selectedComponents); messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Delete"); + oldProject, currentProject.clone(), "Delete"); projectFileManager.notifyFileChange(); updateSelection(EMPTY_SELECTION); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1160,7 +1157,7 @@ public class Presenter implements IPlugInPort { @Override public void groupSelectedComponents() { LOG.info("groupSelectedComponents()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); // First remove the selected components from other groups. ungroupComponents(selectedComponents); // Then group them together. @@ -1170,7 +1167,7 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.REPAINT); if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Group"); + oldProject, currentProject.clone(), "Group"); projectFileManager.notifyFileChange(); } } @@ -1178,13 +1175,13 @@ public class Presenter implements IPlugInPort { @Override public void ungroupSelectedComponents() { LOG.info("ungroupSelectedComponents()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); ungroupComponents(selectedComponents); // Notify the listeners. messageDispatcher.dispatchMessage(EventType.REPAINT); if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), "Ungroup"); + oldProject, currentProject.clone(), "Ungroup"); projectFileManager.notifyFileChange(); } } @@ -1206,7 +1203,7 @@ public class Presenter implements IPlugInPort { @Override public void sendSelectionToBack() { LOG.info("sendSelectionToBack()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); for (IDIYComponent component : selectedComponents) { ComponentType componentType = ComponentProcessor.getInstance() .extractComponentTypeFrom( @@ -1235,7 +1232,7 @@ public class Presenter implements IPlugInPort { } if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Send to Back"); projectFileManager.notifyFileChange(); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1245,7 +1242,7 @@ public class Presenter implements IPlugInPort { @Override public void bringSelectionToFront() { LOG.info("bringSelectionToFront()"); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); for (IDIYComponent component : selectedComponents) { ComponentType componentType = ComponentProcessor.getInstance() .extractComponentTypeFrom( @@ -1274,7 +1271,7 @@ public class Presenter implements IPlugInPort { } if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Bring to Front"); projectFileManager.notifyFileChange(); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1303,7 +1300,7 @@ public class Presenter implements IPlugInPort { if (getSelectedComponents().isEmpty()) { return; } - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); List> components = new ArrayList>( getSelectedComponents()); // Sort components by their location. @@ -1369,7 +1366,7 @@ public class Presenter implements IPlugInPort { } messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Renumber selection"); projectFileManager.notifyFileChange(); messageDispatcher.dispatchMessage(EventType.REPAINT); @@ -1593,7 +1590,7 @@ public class Presenter implements IPlugInPort { private void applyPropertiesToSelection(List properties) { LOG.debug(String.format("applyPropertiesToSelection(%s)", properties)); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); try { for (IDIYComponent component : selectedComponents) { drawingManager.invalidateComponent(component); @@ -1613,7 +1610,7 @@ public class Presenter implements IPlugInPort { // Notify the listeners. if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Edit Selection"); projectFileManager.notifyFileChange(); } @@ -1641,7 +1638,7 @@ public class Presenter implements IPlugInPort { @Override public void applyPropertiesToProject(List properties) { LOG.debug(String.format("applyPropertiesToProject(%s)", properties)); - Project oldProject = cloner.deepClone(currentProject); + Project oldProject = currentProject.clone(); try { for (PropertyWrapper property : properties) { property.writeTo(currentProject); @@ -1656,7 +1653,7 @@ public class Presenter implements IPlugInPort { // Notify the listeners. if (!oldProject.equals(currentProject)) { messageDispatcher.dispatchMessage(EventType.PROJECT_MODIFIED, - oldProject, cloner.deepClone(currentProject), + oldProject, currentProject.clone(), "Edit Project"); projectFileManager.notifyFileChange(); } diff --git a/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java b/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java index 110c5848..a4736db3 100644 --- a/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java +++ b/ diy-layout-creator --username bancika@gmail.com/diylc-core/test/org/diylc/components/MockDIYComponent.java @@ -19,7 +19,7 @@ import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; @ComponentDescriptor(name = "Mock", author = "bancika", category = "Sample", instanceNamePrefix = "M", description = "test", zOrder = IDIYComponent.COMPONENT) -public class MockDIYComponent implements IDIYComponent { +public class MockDIYComponent extends AbstractComponent { private static final long serialVersionUID = 1L;