From d39374d8bb4d0c1f3d4475860d2118425a9da1be Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 22 Jul 2024 00:46:49 +0700 Subject: [PATCH] now new entity is created in XML as well, not only as in-memory object --- .gitignore | 1 + bin/gui/CustomIcon.class | Bin 2043 -> 0 bytes bin/gui/DrawboxEditor.class | Bin 4844 -> 0 bytes bin/gui/Editable.class | Bin 4116 -> 0 bytes bin/gui/HitboxCircleEditor.class | Bin 930 -> 0 bytes bin/gui/HitboxPoligonEditor.class | Bin 933 -> 0 bytes bin/gui/HitboxRectangleEditor.class | Bin 939 -> 0 bytes bin/gui/ListGUI$ListEntityRenderer.class | Bin 2552 -> 0 bytes bin/gui/ListGUI.class | Bin 8030 -> 0 bytes bin/gui/MainGUI.class | Bin 4085 -> 0 bytes bin/gui/PropertyFrameAddElement.class | Bin 3152 -> 0 bytes bin/launch/Launcher.class | Bin 2077 -> 0 bytes .../AddListElementEntityListener.class | Bin 979 -> 0 bytes bin/listeners/CopyImageToFile.class | Bin 3511 -> 0 bytes .../CreateFrameAddElementListener.class | Bin 779 -> 0 bytes bin/listeners/OpenXMLFileButtonListener.class | Bin 2410 -> 0 bytes .../RemoveListElementEntityListener.class | Bin 1197 -> 0 bytes bin/model/Drawbox.class | Bin 3222 -> 0 bytes bin/model/Entity.class | Bin 2929 -> 0 bytes bin/model/Formatter.class | Bin 105 -> 0 bytes bin/model/FormatterCircle.class | Bin 305 -> 0 bytes bin/model/FormatterRectangle.class | Bin 314 -> 0 bytes bin/model/Hitbox.class | Bin 3450 -> 0 bytes bin/model/Point.class | Bin 366 -> 0 bytes bin/repository/Project.class | Bin 9783 -> 0 bytes src/exception/DuplicateEntryException.java | 13 ++ .../EntityListIntegrityException.java | 12 ++ src/gui/ListGUI.java | 5 +- .../AddListElementEntityListener.java | 9 +- src/repository/Project.java | 122 ++++++++++-------- 30 files changed, 102 insertions(+), 60 deletions(-) create mode 100644 .gitignore delete mode 100644 bin/gui/CustomIcon.class delete mode 100644 bin/gui/DrawboxEditor.class delete mode 100644 bin/gui/Editable.class delete mode 100644 bin/gui/HitboxCircleEditor.class delete mode 100644 bin/gui/HitboxPoligonEditor.class delete mode 100644 bin/gui/HitboxRectangleEditor.class delete mode 100644 bin/gui/ListGUI$ListEntityRenderer.class delete mode 100644 bin/gui/ListGUI.class delete mode 100644 bin/gui/MainGUI.class delete mode 100644 bin/gui/PropertyFrameAddElement.class delete mode 100644 bin/launch/Launcher.class delete mode 100644 bin/listeners/AddListElementEntityListener.class delete mode 100644 bin/listeners/CopyImageToFile.class delete mode 100644 bin/listeners/CreateFrameAddElementListener.class delete mode 100644 bin/listeners/OpenXMLFileButtonListener.class delete mode 100644 bin/listeners/RemoveListElementEntityListener.class delete mode 100644 bin/model/Drawbox.class delete mode 100644 bin/model/Entity.class delete mode 100644 bin/model/Formatter.class delete mode 100644 bin/model/FormatterCircle.class delete mode 100644 bin/model/FormatterRectangle.class delete mode 100644 bin/model/Hitbox.class delete mode 100644 bin/model/Point.class delete mode 100644 bin/repository/Project.class create mode 100644 src/exception/DuplicateEntryException.java create mode 100644 src/exception/EntityListIntegrityException.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6dd29b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin/ \ No newline at end of file diff --git a/bin/gui/CustomIcon.class b/bin/gui/CustomIcon.class deleted file mode 100644 index acb0a5dd1272225bdce24a8f510ef3a4d0fe29a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2043 zcmZux?NS?67=BK^Hc6KPfwV&TC=@9P&`_w)C`{7#?CnPuTyWsKi-4mbIyh&2-(Tm_ni0hdEWQzpa1^$JAgTqHMj&WXRB6h zv0AZ<2Z>a%pur>1v2Pq2vAj{p#x|1sX3Ey!tDnA#RgNs4OIrc2bzo#ofq_-!VI0{p zbrO46&1B57nNCRk91V}Gw4Dn>sEb z$P}wq!CbE%B+c>@Bbg_Wq19r_$Zr{COYZB39y@1MBu!^qMVeZeJ7rq2o3jN1CBrJ% zPM;=PDqk!fl!^tjV9zy+Unv`kW^! zP;hEAr{S(Z*E#3ur6A&<_MSjrLwf;nI_~3vfIn;6+s@puy9w#MpyLy%3Q+ZkW0bRl zn8iaKi&&yV#k5t^nf(l6IaCtZES7bw;1NwTRzAORXyoM>B=~dGpX>MntBjv68%K&# zfti+24$Fx|lRBq-b-t0TnB_y0sdhQ(DS_^$S(A0DvaGMEYS2c_EB?RdFlVRJB=@|{ z^b)%sR5|O+Tv8j!g}hQ)*{oFa_S1&66T~jQ)$mR0#Zc8slAj3-wV+d>VoKY@Lf&_= zCwYG+J7CDmljI0U)+A|hq;;6cFo81_r+5UeUNjwqARCd>Vaa=|rL9V-Sm7+WtpgI{ zOR6fkO|J0U(6(tCsh4X;seTu9HeSwj9erDU>&ybF*(_GeDRbG9m#Mw^S-U024MV(p zZvMUSz$LFGzk@D$Db<@-lJAiG4)E=z-DR|M?cnZ5T6_48Mo-WgeT(iLJ#-~>HT1y= zdXCW-jgHqaaE#$--!Vp_{l^%6Lu(htxc0)wwS)dw_;g~BIY!Wh2tP#;8Pkc(_c(WQ zuVI3Dr6g-}DQS|Dto;^ZPEEqi8fC?M6E#e|!|Xk8^j8em@bRqA5$0#Leo7-@U)r00 zG3yU|xEl>?Y8U8{=6yAM+T-n4nh~k3;WMQe4*SCaQA1+831pPz06koL3E>)_egYg| zGp}QTk8B!?Y>l?_V8GNA_ROz$-~H7*u)b83(@{-p81$% ziKju5GKRa@rsQYF2%b_3Fb+S~4k7qiH5Ql|{{!)#;2(d7`0KZb?~D_OTAq7P@M4X8 zrPe3M-EM_%vWD!$YXWntZVfOIaFc6|)6%h-2DlmQtBwt_qc2&W ziyrOB6NnoJDzea7V*wB9mC6>%2Fn(V{6fK*6rVbbs~plnPN6du0>ulRNB{3Uf1z_p HrTFeYDRiai diff --git a/bin/gui/DrawboxEditor.class b/bin/gui/DrawboxEditor.class deleted file mode 100644 index 633801ccd48370e6e2719157817544956078c66e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4844 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 WwuiQF^8ZcTQg#BjaR-0Jf&T#$%;Y}+ diff --git a/bin/gui/HitboxCircleEditor.class b/bin/gui/HitboxCircleEditor.class deleted file mode 100644 index ea0cbeb90d7c7dda614536496d02a4522a7cfefd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmaiyU2hUW6o%gc1jVH&3RJ;JAnQyuS~q~ z2l%5*&+KjjEfBKV&7802J?G5+`~T-JfHn?tNHJ8drn2=>nvwd^mD=+~Z!C?{Ib;|d z8?!ba`GO()UIx;17@jm-8*yc5`d>t8KIya(*nsP`IN?k+J4;8C+3$!~Mo*yv66H)z|#{we-Tb zXHjE}!sWG5nj_>hamEcF1iipW^OGUnu+umbH4R1Am)?ySGwdzl#Y_aIHMH@bJ;oxm zo!UZVC5Is&5r=AKc}4CSse;c!e^q*7J^L#Pr%}p6qJAI0oIw0@HPxQ@Anip}R~LC= z_k%;wgmn2pmR`CivU7CmAVm*(-!y;Y;V(L+kf(1x^4c5S!DF&3aTXjD$g-3j6p2Br z#M6ZJj{KIz78ol7l$Q{+;sn7^!m|kRoHF8enzno$q81^XIG7;l7e+NH+^BuHL3D6ee+wyJ$zn)A?x)+a3~YDI?zG^~@`}U@ ze}F&Ac+T!7MQPJC+syfT-t+PM&(B`~TG%S1Kv?Y!O!Jd*9eaOnL({WSyK9_{%P0~& z35u;cp(d2xo5;9B!a~EBh;I^i^5wL(b44f~*{-f&2D2WXp+u?=v+^b1 z1}eN#u@O6W7TvW;2x}>DOdl;mIm~njbN|S4q#LU{6ZHtShJT}ms;TZ=^CVW^u1%2a zAE%uWhgZf%d5}a6^|5m5G-^lAxbK9ShK%F&?I6)dp$Tqvm$2~&uZKEv%`=I&<(Y}_ zde%oGPjU#Alz3)`!mFyl85^DJ_^XZk;@Nzn@F7hZN!0(xKTcr&g&o9!{%GVM6p@f;oa1yqXtI)ZU(;UBeoe b5?)V7G^QZdQJ>bu-bBQkw2KX%xq!{TS01R9 diff --git a/bin/gui/HitboxRectangleEditor.class b/bin/gui/HitboxRectangleEditor.class deleted file mode 100644 index 0d36f0a049a309a003326f62d609aaa9e27c7a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 939 zcmaiy+fLg+5QhH=X#&9z2+#uIcvGcNH4+k6K}Z#(6v-gO>3-vE!&1kK>`j2j;;K?F zcmN&>b=J0&P!dI!t)0{N&&>Me_3tx)8aDFC5SCgURsE?5_te|&!e^DlHK^yCj^?`nDA zF2C6oVG}$g{{=vfU%oB2^L*Mzh9CBBZU4de6Q43D@V5|qOPo26Nwz;GS#U7LmZeOi z$PC^lW>eNK`z?!l7%KxT_aS)8DS}YKT#T5bnXDDJd?qZE+&S3o?LA|Q- diff --git a/bin/gui/ListGUI$ListEntityRenderer.class b/bin/gui/ListGUI$ListEntityRenderer.class deleted file mode 100644 index 668643a3163dd474b7f698fba098c0de0c1ca730..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2552 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 diff --git a/bin/gui/MainGUI.class b/bin/gui/MainGUI.class deleted file mode 100644 index 2f3596cdaa0690d93c7b811d296c39e4fd5902f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4085 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 diff --git a/bin/launch/Launcher.class b/bin/launch/Launcher.class deleted file mode 100644 index 212fc9c80a93da966f00a50a4ba398560644f116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2077 zcmaJ?TUQfT6#fnjOo)R>xCsJ|HL*b;Qz;-C>x~jgO#(F-R7%@JI3x!qGwIBP1@HY4 zeeF}9+Xr;nwfq77H+}0J&hNK52ul^x-1 z@EubyL^5`fn+5Jjf8RJ%ys~r|`ZNDinI0^)-+;N5D8tcKlY+HM> zRCBnm;#4Mt%M5W}CQ5E-HLiC-5)o$ z^{v=^boREpt;ZIkt{$_(7{{cFi8D0kk6lkxG+c$waKRPcx?@*`;~g_B#asDkJ(+4f z3ga_GRa|En56JNCHyZXE8M~C_7B2}$Lku?5_Ni?^y`W!%dp9~{`FH{&5*0#0=cHY7qkwZ#WxwUIjh4X7B^=LHRZEKSCAzwT2a>$dd{`5R|M%?rlo1Oe@#p zmPcgVIG^)oFrVvH4QYHseoJf5W*BNGSx}Mj`L0PLOQrebc{+@z=<$a&4eR)pYLZ+n zNLL00uf$&kt${lwGG?Gn8Iyox+kTn_IWpFc?ck1R4wX-XJpQQ=Gjy1T3{29OruIbU zQZi?ntR}GDyvK_NSzZm=kczyDO)@5L*PNnANxxn7e&~QfgP`JkOqRNy!>d{0mF-&Y+nZ4Z3c= zM(Fq8I!vQ~4fNpxjavNy&Aqhi!9_anz$IFT2(ljo7z&{NpdP1^@=u?(Ex$)9-o@-?z| zl~F}GLC!a-lR6==7#J`}%7>s}kkpTm`Y{aS3XS8?F@ZSEbJXY`kjJakJ#)AoIB}m` zBGd2;d7Ari9~*d1jt%1u3fLsfF)ZK(mPpqG;lIQy(y>a8ZQ(mwZIjdpI^L6#E*0Oa lNT~Qh#XQmE|EPbY>ke@2&>SMzGJO&Uv8HO5umPuO^ zKllUuQN}w%tq>Kn**kOY%$#%Q-1+|F>o)*(yl{{pZ1&_(i%6)Uzu)Nu3>rPr7m;p6 zTI#V$m{kWU!pd2A9{Rm7>iTb6XQHhgED*{z8-CKhIOlWzep|~p`gM@t7=<_Q4hhRa zcO-qY!m!SGpyGj0dVHY5zF;Q1emtGzny%~N{R=N;B=sx8t~bLp_gJ+_NWG3bB8?<+ zE;3jlB)w{L352{02a9G_aIu6mAs5I<9F6)dp-#hAkE_ZDaXaiaLnRHqPNwunIV5<2 zx!nKlL8G5Vo%C zo~Hg&Y*PP@i(TWr(~-kLJY;8y|I)mR6VfN~NVUa*G@Yo-d!c*AKvcMuN&ask!H=AK z%Mqrt921<+z~#8i=sn{kkGa|xWNX`(xLw=1#Oi0eagAdhDUJn>YfP|?Ebedwdu)#} zy32?OtPI)NJr*)D_ffo&N!n7%wF_3b!0HuBli|@7o=#@lzeTf_yvULz{>oNxeL`>} QSjHZFrYAgO(FC6V1T3BFwEzGB diff --git a/bin/listeners/CopyImageToFile.class b/bin/listeners/CopyImageToFile.class deleted file mode 100644 index c81e1484d9697d9e5faaea25ec660dd2ab8263dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3511 zcmaJ@`+F4C8GcWaGRrz4WCdct=%NUl1+%rK6`osIbDdr=6@;Sd|GVb9PEtq!pURwCgD}mmIsK z9dD-Bu?nQ?$V^PZ8`BU(t zxnj=Sr4UctmSg8AuXNjEI*LZzX`%&d6dDtqqYQy?45BP&*^mLD49dv9nfw)N*pNu531WlQ~ym zL*|x25SztE75}tYfrp2*Gj2NtJ*IGPB6P#&gU}-ZNq3GK*rH(8dOwOzY&DRiPL3|w zZcf}OJ{P-8Y{P>JcT8xnujqPKQKGjl(V4lKG%bu$CccP=6r#Mae;_ktd6NojNFPY7 zjZG9^##an%r@6O@v5Bt=J2Q}9n)db*7BRwghlxk9Q=zS3P3dmCn6idoQR?i-xL#v6%ut!e726GM#Z$JO^jk6 z^R%LWC|qGn$mCWEhh#*b@Hk-N89XcQnY51#mUJ=n5o1}=M4;Pk7fN<9fNbANd>h|2 z@SPhinqiqLnD`zn+GJ0&c&rVzW>Fbp_Is=W+A5@D6qyyYFgZ5Yv9&G&#xZGNLgCJ8 zqSSCSk(1~eB@vP@MlhwY-aobUs(*RuMgNk2)t}#3^Cu=#&mwHHBaFMJ9fx-9xn8(d zSJR_f4x`wN=S(<){D^0V#Vm#fWQEzZiNnIIh0H?y=rKAtfZkCPGx$E0Y9l&!j7Q7t-?B`7wh=`yUO}vC-j7ye{KqNfvvZ(eGm=DW}IaVz;Rp!e9kaLDR zf|nKc`ycox{kQ#dasQNm!9VZ6;h&ECXSsJa&hPX7IsZ-nwEs@rf8GCBsNUn=TRb`G zzwck<>XU78{|wh>;{LkB;G}_H)*!2Iu;*x22VzXTF8!t@K-RElWv50QOA4;y@9vOa z{kqN$Hy+dhg@*#VTV-OM(!rLpf{krD&lFO93JsdDyPium`jN6ZP;0;{1s%)4uZjI2 zN9yXuKCo<@E2w_g#09)Zfu0?<25BY1{UR|$6Ld=U(*}N1nKe?&2QrR?;fUfxd}QFa zRWB}+1h6#mJN%xtR8Y%mQ;E$oO~AjN%u3N)CcG{$T~|jMHyn&JB9$dw=xfHME-{NG z>j~TTT+gve1KOLk$LNMX;gW$*6gCBh2mL8mJZw+t%GeUNvtG7#He#t=sS$hKnN{S?ZA2*8VDPYnWD8bX)oSaL&`|mKFG81fMdb zN_DZdL{L_U-!R5?)i&=$XZ*3aieR2VQ>h3RCxu_M}uU^bR(%tTpoY1^z?o9G{Rz9=tiK@l9RO9K1Qi@h$W%Sj}fESI@8vH}JhK zIfqy>wssb6$yoa=HYB&sqT@188gQ?i2NK%Qgf$!i*Yf^de6}MVoCO@H&3#-6?fsO@ z?87EJ5Xw<6Qzy~!v*cB5J}{3&8C}Uw(NV^i7Vt1Ihx9CVC1a15@kFw*jGn9LI}rPN z(;@~AG{y#p=kSezN$$xPaIu z8(tYl%J_j8Da!Cx8-E)X@WYB8KjKn;yXNtNa5_#-A7S;*CKdbfJbv2VRK{zUY1oID z$5ou5OT|U~kV)t6;CarLuOUee+i(dFl1~>F zk-|SYZvGqF1GjDu9k%S&&u|LAqSQ1czJb#WOfQb(O}s_deu9lzVk7y&?u|=y^H9A5z$`XnLN7&D$Je;<)O{b$+{2R zAD@m)be-Rr*HQ3grRQ&6FtY3vCQkWg`l-o`d&Y}2|GH@<3f_J`pa4^-hPZ>8!c?=B z%s}C8h#3S5)!1b8ay0CbJ<`3D_$JQ#I!&}Sl8=j?duIxTRxDfmhcUcXRhNnn$)4nP zNCSoSX8cc64#c2NEAeq(VReEH0amakLPC-7AcT+GQhONU5jGTpf?Q$>Q|j=VZ^Z${ zlGY~8W!UR{Wc$=LB7bAz2Y(_0co-YW?=4jLr{N_yLj2@d;W{tKah9_#=h73juQ1ns ze2MvwWzPb~Ip&b)p~~1A7CBq~)r}=S$rF^UtOEB?A9EftLOAQ~uUI*5f5Q9~Rxi=u iQ^Wg=^_vqGnSY7#%YRI$|DI6CCbpPaVVgNC*!c;EoUx?< diff --git a/bin/listeners/OpenXMLFileButtonListener.class b/bin/listeners/OpenXMLFileButtonListener.class deleted file mode 100644 index 6dacc1a05f1980e8d660602185eb9f3efcc07585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2410 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 Ut7y;z{vV>klV~v;N2p@>Uk-sg3;+NC diff --git a/bin/model/Formatter.class b/bin/model/Formatter.class deleted file mode 100644 index f5b57d85f00f94325d249503c7f8f26e15ca2b6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105 zcmX^0Z`VEs1_o;ec6J6PMh5=e{FKxjeYgCg+{BWS)FO5U7Dfhvti-ZJ{hY+SbbbG% utkmQZMh33n{L-T2RJY8WR7M6qxN<#^N;XCYMh0e}p&-D>zzQUp7}x+KF&Rw& diff --git a/bin/model/FormatterCircle.class b/bin/model/FormatterCircle.class deleted file mode 100644 index fc01d5e935e390cb82057c4e221d66e455d4d208..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305 zcmZ8cyH3ME5S(@VAjS}gh*GCZDDVda(L_pRK>?w^n*fxj2Ke}Ef>V> PG)K6^h>ZUe16&^gOP4~r diff --git a/bin/model/FormatterRectangle.class b/bin/model/FormatterRectangle.class deleted file mode 100644 index fe598b05119de06884a10e4e5230715d2b3a1531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmZWl%TB{E5S&f(fDq{80^-IEIFJu0;!>%nsFhmOyAv#Mnis=ni93$$~-ZPr;TT7I?60Qc^iK2r#`*Y3G7 zu5LZ!6div|;rKxFX1ly|={bdm|Npw(yNFwKg1i%GL5GPX4k)w?r03e8aL_~ytui`f z!a&?WcY`JY?*zKgBc6x3ZVv?MIRm{6ruEWlJXS7S>mo@4cjJh--mB0Py6P1Zp6gO> z$17@L?FFZ3&s10E?eYa{-qrGZ3zj=)l^yvV8l(QQL*e&_N(PCfkX?m_#p|WOL3Zzm z6B20?gUCpVORmFIpWKVgv(2f9<9??0Y2sy}xKy$WSrZT7L8j1tp=!Cr)F4by zOS$xw1f_k*#KZWELT||`SL{I23*Jt&fCM=V?6GrtE{;dI%Y;*2kc|~in;4a7Jq^)< z`Rz~#oZ|CddDRkmw{2#fjc^a{v6;fYS>IY%nYKz=Zv$r&cnlK;#ueIY-H>-Z%Qx{j z&aojh3~kw^LD)0tyn!bal6AG8Kps<46i+f01NnSAc(=^WP4ftadEWCxVwG1<$0bxej6OD z7`WQlp6eCgUNzxjl^S_f>ToE);&@r@#w6I*YAyi}FBm9oH)-RviL!7rO0tn#jDv9! z*RNj>N@rA@ugRLjDW0WkCf4yah3-{r#h&nr3zmP;@s~NOush^fJh4|-HA^J2UN`X# ze3NoIzFoF_uPkj4%Bgjl3hlWhUc$Exe2YTXDr9@s#CPyAkGZ0~M(B+R30tv^HTOLe zPh(a_ubQ}k*%aI92SVpH*_L(K3{trN$i$E3=!>&`Nbx%O7P5y!hss=i1^`&1n7v+)L0PNn;J2~QP^c6q|JDiyn8;19h0nrQDu z#K4CNNB;LxZWFM^QRcRVC%Eez7Ok75_C5hFwS7SFB$#>_7M!YM&O*p zG2F+mj0Bd_BLNmcKgZ^dB|(b-Jj}NM`;_Y?!lg!FnLC)&fHrZQcrvLIH!v`*;SRM7 zhk!pqDm8Qir`|+zkl*1A5)#{IwJk2Tks6a>q5#_Km~AHl_!Baz1%gRZ z{<^~S2Kt6>;zfnOAz$FC%t!bxpI2_-`?B(focxKxTU(z7(KnEk4SvoTwemhi-GOt= zSe|sAU>{B*gDH&TNfzf6H7{Th(^$d`@3HfB87hUMjN_m#W2MWu7tt*yQ+kuN^b*j! oC2ZvsMapxq;3CJCf`j0*C?X^ZK7fxx z%$XDvw>vZ1$LxLoe0~8K;n0O8XwS=sERSwVT~sa{L4T%RRFtdYF}hA?*|ZYKD__j_ zCTO1PLRS}p#vqP|iNLw!01q~N9~EeE!Cj#%bTrQ?rtj!>=KH$uF$1zvhJkesN z10pf|>n!wWEO}%TR+ze8_~g%+XphJ&-Y2tg@C(8KI_3ZX diff --git a/bin/repository/Project.class b/bin/repository/Project.class deleted file mode 100644 index 2109a977627350861d852032db648ec4bb19f0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9783 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 diff --git a/src/exception/DuplicateEntryException.java b/src/exception/DuplicateEntryException.java new file mode 100644 index 0000000..e3925ae --- /dev/null +++ b/src/exception/DuplicateEntryException.java @@ -0,0 +1,13 @@ +package exception; + +public class DuplicateEntryException extends EntityListIntegrityException { + + public DuplicateEntryException() { + super(); + } + + public DuplicateEntryException(String message) { + super(message); + } + +} diff --git a/src/exception/EntityListIntegrityException.java b/src/exception/EntityListIntegrityException.java new file mode 100644 index 0000000..08fe501 --- /dev/null +++ b/src/exception/EntityListIntegrityException.java @@ -0,0 +1,12 @@ +package exception; + +public class EntityListIntegrityException extends Exception { + + public EntityListIntegrityException() { + super(); + } + + public EntityListIntegrityException(String message) { + super(message); + } +} diff --git a/src/gui/ListGUI.java b/src/gui/ListGUI.java index 0ae529c..c703bb5 100644 --- a/src/gui/ListGUI.java +++ b/src/gui/ListGUI.java @@ -29,6 +29,7 @@ import javax.xml.parsers.ParserConfigurationException; import org.xml.sax.SAXException; +import exception.DuplicateEntryException; import listeners.CreateFrameAddElementListener; import listeners.RemoveListElementEntityListener; import model.Drawbox; @@ -90,7 +91,7 @@ public class ListGUI extends JPanel { return (String) list.getSelectedValue(); } - public void addListElement(String name,String solid) { + public void addListElement(String name,String solid) throws DuplicateEntryException { // плейсхолдеры для новых хитбоксов и дроубоксов, иначе всё валится с NPE List hitboxPoints = new LinkedList(); List drawboxPoints = new LinkedList(); @@ -101,7 +102,7 @@ public class ListGUI extends JPanel { Entity e = new Entity(name, hitbox, drawbox); e.setType(solid); logger.finer("Entity \""+name+"\" was created."); - Project.getInstance().addEntity(e); + Project.getInstance().addEntity(e); updateList(); } diff --git a/src/listeners/AddListElementEntityListener.java b/src/listeners/AddListElementEntityListener.java index a37ca4c..d4634fa 100644 --- a/src/listeners/AddListElementEntityListener.java +++ b/src/listeners/AddListElementEntityListener.java @@ -10,6 +10,7 @@ import javax.swing.JTextField; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; +import exception.DuplicateEntryException; import gui.ListGUI; import gui.PropertyFrameAddElement; @@ -24,7 +25,11 @@ public class AddListElementEntityListener implements ActionListener @Override public void actionPerformed(ActionEvent e) { - listGUI.addListElement(propertyFrame.getInputName(),propertyFrame.getInputType()); - propertyFrame.dispose(); + try { + listGUI.addListElement(propertyFrame.getInputName(),propertyFrame.getInputType()); + propertyFrame.dispose(); + } catch (DuplicateEntryException e1) { + JOptionPane.showMessageDialog(propertyFrame, e1.getMessage(), "Cannot create an entity.", JOptionPane.ERROR_MESSAGE); + } } } diff --git a/src/repository/Project.java b/src/repository/Project.java index ec120d9..a025478 100644 --- a/src/repository/Project.java +++ b/src/repository/Project.java @@ -14,6 +14,7 @@ import javax.imageio.ImageIO; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -27,6 +28,7 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +import exception.DuplicateEntryException; import model.Entity; @@ -198,29 +200,49 @@ public class Project implements Iterable { } return null; } - /* - * Добавляется обьект как в список всех сущностей, так и в xml-метаданные дерева(element objecttype) - * Это лишь добавление в метаданные, а не парсинг в файл! не путать! - * Для парсинга будет сделана отдельная функция! + /** + * Adds a new Entity to in-editor list of all entities and it's in-memory XML-representiation.
+ * Does not write anything to actual XML-file, use {@link #writeXML()} for it + * @throws DuplicateEntryException - thrown if an entity with such a name already exists + * @params e - entity to add */ - public void addEntity(Entity e) { - listEntity.add(e); - Element objecttype = document.createElement("objecttype"); - objecttype.setAttribute("name", e.getName()); - objecttype.setAttribute("color", "000000");//color of entity, needed by Tiled editor - document.getElementsByTagName("objecttypes").item(0).appendChild(objecttype); - /* - * TODO: set "class" property too (code below) - Element property = document.createElement("property"); - objecttype.appendChild(property); - document.appendChild(objecttype); - property.setAttribute("name", "class"); - property.setAttribute("type", "string"); - property.setAttribute("default", e.getType()); + public void addEntity(Entity e) throws DuplicateEntryException { - * creating hitbox or drowbox attributes in advance is insufficient - * they will be added while saving - */ + if(getEntityByName(e.getName()) != null) + throw new DuplicateEntryException("The entity with the name '" + e.getName() + "' already exists!"); + + listEntity.add(e); + + Element objecttypeElement = document.createElement("objecttype"); + document.getElementsByTagName("objecttypes")// get document root element named "objecttypes" + .item(0) + .appendChild(objecttypeElement); // add new "objecttype" element as a child + + objecttypeElement.setAttribute("name", e.getName()); + objecttypeElement.setAttribute("color", "000000");//color of entity, needed by Tiled editor + + // format: + Element classProperty = document.createElement("property"); + classProperty.setAttribute("name", "class"); + classProperty.setAttribute("type", "string"); + classProperty.setAttribute("default", e.getType()); + objecttypeElement.appendChild(classProperty); + + // format: + Element drawboxProperty = document.createElement("property"); + drawboxProperty.setAttribute("name", "drawbox"); + drawboxProperty.setAttribute("type", "string"); + drawboxProperty.setAttribute("default", ""); // empty, because on creation there is no drawbox yet + objecttypeElement.appendChild(drawboxProperty); + + // format: + Element hitboxProperty = document.createElement("property"); + hitboxProperty.setAttribute("name", "hitbox"); + hitboxProperty.setAttribute("type", "string"); + hitboxProperty.setAttribute("default", ""); // empty, no hitbox yet + objecttypeElement.appendChild(hitboxProperty); + + //printXMlToConsole(); //DEBUG! } /* @@ -243,7 +265,7 @@ public class Project implements Iterable { /** * Возвращает объект сущности с заданным именем, или вбрасывает исключение, если такой сущности не существует. * */ - public Entity getEntityByName(String name) throws Exception { + public Entity getEntityByName(String name) { //debug print //System.out.println("----- session started ------"); for(Entity e: listEntity) { @@ -252,45 +274,18 @@ public class Project implements Iterable { return e; } - // можно было бы и просто null возвращать, но обращение за несуществующей сущностью само по себе нехороший прецедент - // так что исключение призвано обратить внимание пользователя, если такое действительно случится - throw new Exception("No entity with such name!"); + return null; } - public void save() { - /* - * thanks to addEntity() and removeEntity() our Document and listEntity - * are interchangeable - they content exactly the same set of objects. - * So we'll iterate over Document instead listEntity. It's more convient - * in this case. - * */ - NodeList objecttypes = document.getElementsByTagName("objecttype"); - for(int i = 0; i < objecttypes.getLength(); i++) { - Node objecttype = objecttypes.item(i); - NodeList propertiesList = objecttype.getChildNodes(); - for(int j = 0; j < objecttypes.getLength(); j++) { - Element property = (Element) propertiesList.item(j); - NamedNodeMap attributes = property.getAttributes(); - String name = attributes.getNamedItem("name").getNodeValue(); - Entity entity = null; - try { - entity = getEntityByName(name); - - } catch (Exception e) { - //if there is no entity with such name we'll skip further parsing - System.err.println("Entity "+name+" is not found"); - } - } - } - - // parsing complete, writing to file now - writeXML(); - } private void writeXML() { try { TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setAttribute("indent-number", 4); Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(new FileOutputStream(path)); transformer.transform(source, result); @@ -300,11 +295,26 @@ public class Project implements Iterable { } public void PrintEntitys() { - // TODO Auto-generated method stub for(Entity ent:listEntity) { ent.PrintEntity(); } - + } + + + public void printXMlToConsole() { + try { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setAttribute("indent-number", 4); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + + DOMSource source = new DOMSource(document); + StreamResult result = new StreamResult(System.out); + transformer.transform(source, result); + } catch (TransformerException e) { + System.err.println("Cannot print XML to console. "+e); + } } @Override