From f3ef99a6449cec98cf854ef50a8bc89829ebb80c Mon Sep 17 00:00:00 2001 From: MASSY FERNANDEZ Neva Aracely <neva-aracely.massy-fernandez@imt-atlantique.net> Date: Mon, 12 May 2025 10:25:58 +0200 Subject: [PATCH] fix: identation and addmembertest --- .gitignore | 2 +- .../opinion/Book.class | Bin 1831 -> 1831 bytes .../HMI$AddItemBook$AddItemBookAction.class | Bin 2623 -> 2623 bytes .../opinion/HMI$AddItemBook.class | Bin 2677 -> 2677 bytes .../HMI$AddItemFilm$AddItemFilmAction.class | Bin 2734 -> 2734 bytes .../opinion/HMI$AddItemFilm.class | Bin 2812 -> 2812 bytes .../HMI$AddMember$AddMemberAction.class | Bin 2236 -> 2236 bytes .../opinion/HMI$AddMember.class | Bin 2429 -> 2429 bytes .../HMI$ConsultItem$ConsultItemAction.class | Bin 3296 -> 3296 bytes .../opinion/HMI$ConsultItem.class | Bin 1980 -> 1980 bytes .../HMI$ReviewItem$ReviewItemAction.class | Bin 2942 -> 2942 bytes .../opinion/HMI$ReviewItem.class | Bin 3210 -> 3210 bytes .../opinion/HMI$ShowNetwork.class | Bin 1658 -> 1658 bytes .../opinion/HMI.class | Bin 6591 -> 6591 bytes .../opinion/Member.class | Bin 1313 -> 1313 bytes .../opinion/SocialNetwork.class | Bin 5762 -> 5776 bytes .../tests/AddItemBookTest.class | Bin 8125 -> 4520 bytes .../tests/InitTest.class | Bin 2482 -> 2482 bytes .../tests/SocialNetworkTest.class | Bin 1689 -> 1697 bytes .../tests/TestReport.class | Bin 3126 -> 3126 bytes src/opinion/Book.java | 16 +- src/opinion/HMI.java | 1185 ++++++++--------- src/opinion/ISocialNetwork.java | 498 +++---- src/opinion/Member.java | 20 +- src/opinion/SocialNetwork.java | 50 +- src/opinion/package-info.java | 2 +- src/tests/AddItemBookTest.java | 30 +- src/tests/InitTest.java | 131 +- src/tests/SocialNetworkTest.java | 58 +- src/tests/TestReport.java | 201 ++- 30 files changed, 1096 insertions(+), 1097 deletions(-) diff --git a/.gitignore b/.gitignore index 8210d02..5b5f22e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ - out/ \ No newline at end of file + out\ \ No newline at end of file diff --git a/out/production/infrastructureLogicielleClient/opinion/Book.class b/out/production/infrastructureLogicielleClient/opinion/Book.class index f3de8708b500d965918b7bd9c76eedf9e4469425..8dfdf984bf75a2ed66860015a00782fa24b141a7 100644 GIT binary patch delta 88 zcmZ3^x14XocNS3*1{MZU22KVs20jLH24MyX21y3V$vmtnjEa*BS#21#CKs}bPCm@4 o&S(r`O=44Lv;i?D+p<}6x-oDwxHAYdcua0&%VrFm{FcoM0Pc|zLjV8( delta 88 zcmZ3^x14XocNS4$1{MYp22KW120jKc24Mzq21y2q$vmtnjPjEUS#22ACl|7cPCm@4 o&ZrM!O=44LGzT#z+p<}6IxuiEI5G$`I8AP3%VzYP{FcoM0O^tv6#xJL diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemBook$AddItemBookAction.class b/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemBook$AddItemBookAction.class index 645fe77db90301d2c66b47186ba686a05f28ad2c..5811c8e15ab6368237fe351ab4cde70675f00d0d 100644 GIT binary patch delta 60 zcmdllvR`CF3I}7<=2Q+FM$K3T5ym(M4aRr|8^#2N0LDay6viZm3dUrHvy5pB7Z_6* QE;6PvJZDUwe2TLa0LEYsxBvhE delta 60 zcmdllvR`CF3I}7#=2Q+FM$L2v5ylJ#4aQ6c8^$b#0LE;F6viBe3dUT9vy6od7Z~#y QE;1G{JZCJLe2TLa0Mk+sGynhq diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemBook.class b/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemBook.class index 09ba51fe4119c29da22771558a4c84248d8c3ebb..c10889fd6dfe92ace7f3176f4fecf14478940d16 100644 GIT binary patch delta 124 zcmew=@>OKRdv-?I%^%ngF=pB^a4_04NH97u7&AID*f2UVgflubBrv)#R5Q9Vv@p6c z%x83GSi$JQaG24P;S8e}!*fP&h7XKB48ItC83h^r7-bp#8I>6W7&RCJ8BH0380{H@ d8N(Pu7*iQT8M7F}7)u$$8S5D%CQEZg0RSh;8ovMl delta 124 zcmew=@>OKRdv-?k%^%ngF=l!&a4>o@NHBUa7&Ce^*f9DqgfsdwBry6hR5SWBv@ixR z%x4T_Siu;?aF{We;S6I4!*j+^h7XKk48It|83h?57-bnF8I>8M7&RE98BG~u80{Hj d8N(Rk7*iSJ8M7D@7)u!w8S5F7CQEZg0RU)l8`l5; diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemFilm$AddItemFilmAction.class b/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemFilm$AddItemFilmAction.class index 8522a4c8f4f3d0c9e8279222341fe17a0e7a933b..5faaa65c5de9a64b6943404ab9c6178d40584a0d 100644 GIT binary patch delta 64 zcmZ1{x=wV%Mh?aen>TSpG3st+5MkWHpuxD6!G>`gLjdD;h7`sf3>Az!8G0CZF}!Bn W%kYkIH^Y0zJ&df3`zBj*l>z{rLllqz delta 64 zcmZ1{x=wV%Mh?b3n>TSpG3xGT5MeyPpuu>M!G`e=LjdDph7`sl3>Az=8G0CxF}!9x W#qf^t1jBpAlZ>p4rzcx-l>z{-KNT<l diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemFilm.class b/out/production/infrastructureLogicielleClient/opinion/HMI$AddItemFilm.class index 8a16c4e702635840d12a16ae265f0cc6201fa294..a9dbccc96dbe773319d4ee4fac20b6ffab641238 100644 GIT binary patch delta 146 zcmew(`bTtw7YAd`W^ayXjP;WkI2b20NH9)eFlL;}V8b|#A)IkKLjvOrhHA!{3@wba z80It1W>~>Ehv6{eT!u4@^BA5p&S&_*xPXzHaUr7!<03{m#>I@Lj7u0D8J9A;GcIHF zVO-7_$+&_snQ<j!72_(#PR7-YeT-`uXELs3T+FzRVLk%`gBAk|0|Vm{h6R&1aQOfL D+=?f( delta 146 zcmew(`bTtw7YAd-W^ayXjP>&vI2h+MNH8v7FlJoHV8ghGA)IkBLjvOxhHA#83@wby z80IrBXIR0wg5faZN`^Cxs~Da$u4eeaxQ3CNaV?_=<2pt;#`TP*j2jpo88<SzGj3w^ zVcg6Z$+(3vnQ<#)72`I>PR8wweT+L8XEN?&T+FzOVLk%`gBAk|0|Vm{h6R&1aQOfL DNd+k! diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$AddMember$AddMemberAction.class b/out/production/infrastructureLogicielleClient/opinion/HMI$AddMember$AddMemberAction.class index fcdef70960ed6a16b16039d478702a2afcb4efa2..1d470c6107d04cb6a196fa296b5a6a9defe8208a 100644 GIT binary patch delta 47 zcmdlZxJPh9AUh-X<RJDNvV068jQk85i~<ZcjDifAj3Nv<j6w{#jKU1fjG~j>IZ6TR C=m@s} delta 47 zcmdlZxJPh9AUmVb<RJDNvZ4$kjA9HLjN%M7j1ml)j4}*4j8Y7_jM5CvjIxv6IZ6TX CO$hn` diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$AddMember.class b/out/production/infrastructureLogicielleClient/opinion/HMI$AddMember.class index a67e0a770b22316d8707b4c211718e79a61f4e64..a147cc59ad277d6304f91aceea0be86783feea14 100644 GIT binary patch delta 108 zcmew>^jBy@EIZ@F&2j8WjFF!iI2gV#s4#qG&}I0>V9M~F!G+-mLp;Mzh75*Z49yI` z8G0E0FidCo%dno|AHyDo{|tv285mA5GBTWFWMa6?$jtD7k%i$EBP$~#BO9XtBRiug OBL|~ABj;pE&J+NPs2#@u delta 108 zcmew>^jBy@EIZ@N&2j8WjFG<>I2e92s4)Ct&}I0`V9M~1!G+;JLp&n`Lk1%wLo*{2 zLk}Y}!*oU#hV_iB40{;a7!EVCGn`=LU^vIf$#9vGi{SwyH^VDN9!5q+UPb{%K1NYS Nenxplfyt7bDF7fK7k2;v diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$ConsultItem$ConsultItemAction.class b/out/production/infrastructureLogicielleClient/opinion/HMI$ConsultItem$ConsultItemAction.class index e5b4cfcfc77d89e0c64580df802246483e110c35..3d2d75cebbb94ef171434e9b41b8d76ada83a2fb 100644 GIT binary patch delta 108 zcmaDL`9N}m3>V{`&9Yo;7$f&HNHH8>kYzZ?V99WZ!HMB8gDb-kh9HKc49N_~7)lt9 zGfZYU!LXR&B*O-VQw(PrPBXk<IK%Lb;VdHy!#PF~h6{{J3>O&<7%nl|GF)eLV7SWY P$Z(A@oZ-e~C7yi%BS|4r delta 108 zcmaDL`9N}m3>V{}&9Yo;7$c7|NHH8^kYzZ|V99WT!HMA{gDb-+h9HL149N^<7)lt< zGE8PT$FP{;Ji`Wt3k+u&E;77exWw>{;W8r&!xcsmhHH#U4A&VA7;Z4yGTdWyV7SBR P$Z(f2oZ<dtC7yi%KsO=g diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$ConsultItem.class b/out/production/infrastructureLogicielleClient/opinion/HMI$ConsultItem.class index bb5032aaf46248f9fea560ba2eb1bd1ed213f9ca..3314219a8edc0fec191d27f7ca9a01b0acaf74d7 100644 GIT binary patch delta 79 zcmdnPzlVQ=1{>qz$(n3`Y*#aIFsxw^XIRUi%dn2YjA1>41H%S}aE6Tx$qbtqG8r~A l<S}evsAky8(8{olVK&2dhE)tZ7}hiFWZ22DYjP5M6abO57m@$~ delta 79 zcmdnPzlVQ=1{>q*$(n3`Y&S7*Fl=TJXV}7^%dnNfjA0vt1H*QPaE2WW$qYLgG8uL; l<T31KsAky1(8{ovVK&1)hE)vv8P+o#VA#oUaB>oR6ab?<7zzLY diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$ReviewItem$ReviewItemAction.class b/out/production/infrastructureLogicielleClient/opinion/HMI$ReviewItem$ReviewItemAction.class index 5dec7da67cb3b4cb884978b5b02f837c818c12c3..e92981992e0135e71ec2194bf0dfb4991d395485 100644 GIT binary patch delta 80 zcmew-_D^iX9}Y&w&3`%eGTO2*h%m7-XfUxc*f6m(1Tb+hq%d(Z6f<!#>}TR;ILE}p kD8(eqD9gmhD96OlsLLe4=*%R@7{nyRn8746`8!uT0HzBLJOBUy delta 80 zcmew-_D^iX9}Y(T&3`%eGTI6;h%gB=XfTN|*f5DQ1Tcv)q%esy6f;RM>}Qf>IL9Q# kD8;12D9a?vD90qnsLLeJ=**<R7{sK=n8Bnx`8!uT0Lc;$F#rGn diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$ReviewItem.class b/out/production/infrastructureLogicielleClient/opinion/HMI$ReviewItem.class index cac638ff592a9876b146d28a5133875fbf3f2a17..841b4ad63459a3acd42d2f4c41f4e8654208f632 100644 GIT binary patch delta 132 zcmeB@?2_DYlauoS11IA{20q3|n;&r=Wz2laz`^*8L51--gD&F>22;kD3@(hX7~&aU zGh{HnVQ6N2%h1F4j$t|Ddxi~+9~e$Eeq^}9_=({e<7b9{j9(bJ8NV_LF@9r|VEoP~ o%lLy)i}5F;3F9wDZ^qw@QH*~W;~D=lW-<O_EMfdVS%9Ys0MG6%Qvd(} delta 132 zcmeB@?2_DYlaup311IAL20q4*n;&r=Wz77{z`^*1L51-vgD&GY22;lG3@(g67~&a! zGGs9RVrXXk&CtX6hhaJ6Uxp2g{}@g){%5$t#K7>3iIL$S6B8ph6EmX_6APmR6Dy-E m6C0xz6FZ{`69=O=6DMO76BlDV6E|ZP6Axnv6YpdJo+<!{;UNeB diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI$ShowNetwork.class b/out/production/infrastructureLogicielleClient/opinion/HMI$ShowNetwork.class index c51bc2de51b32868bb727881c2a4c894241e2aaf..2a1a3e024395d81c04c028a26977152557a7f96a 100644 GIT binary patch delta 80 zcmeyx^NVN02^PkV%_mv37;U>4xEQ(_Bp7-a)EIgh92oi-!WjA)k{Kp2<T6ZTXknPd mFq2_2!xDxm4C@)DGVEcP&Txrg2E$#3nGDYvW=}R?^8x_3X&0IR delta 80 zcmeyx^NVN02^Plw%_mv37;Psqa4}3`kYJe1pvEwT!GU2aLm0y}hGd5647m(57+M%+ mGR$O{#ju27Hp6;`IShLk<}qAin9p#RVFAN)hDDPN*t`J9u^15m diff --git a/out/production/infrastructureLogicielleClient/opinion/HMI.class b/out/production/infrastructureLogicielleClient/opinion/HMI.class index f697053797ab5a36143e2102bd4491267ac5e2b7..11eb9a2be6552c6d3afdfd27c096009dbc8696a1 100644 GIT binary patch delta 337 zcmdmQyx(|3kZ8RJ0}F#J11Ez5g8+jPgBXJ{gA9WTgA#)egFb^VgFS;EgF8b2gFizc zLli?0Lp(z$Lk>e2Lm5LjLlZ*;LpMVt!&HVShJ_5#467Jo7`8CPG8|xtV>rnW&v2O` zf#E(wBEt)YB!*86$qfG(QW)78QW*sq(ir6#(it@vG8m1_7%~|h7_t~W8FCrJ81fhs z81fl&7z!9m844Ne8HyOY8HyRFFqASbU?^i;!%)GvouQI(KSR}Ib}@I>76w*^*3H3U zLQM7g3>-{`3<69>45Cb?42n!<47yC_43<pR3_eUY3<*rO48=@#4DC$z46~RV7}ha4 zG8|%ZVz|oW%<ziIo#8i=2O|%YC!;Kr7o#4N52HPkFJl0cKVt$@0AnFjAY%(t5aV>F k5XMzZVT>D@q8PU@g)?qtieNm#6v=pkDTdKv@)L>M04<P3v;Y7A delta 337 zcmdmQyx(|3kZ8Rx0}F#911Ezjg8+j%gBXJbgA9WvgAzj^gFZtLgFQnqgF8bggFizU zLli?eLp(ziLk>eULm5L1LlZ+RLpMVl!&HWNhJ_3X467It8MZJaF&tn>W;n@^!f=@( zmEk@^8p8{QbcRn184UjzG8x$!vKR#!vKi$Wau_ujav6=x81fh$81flC8HyOg7>XGa z7)ls(7)lvS8Oj*z8Oj;E87dg3FjO%vV5nwX!%)k(ouQ6#KSTXwb}@I>E(TVH?#;ns zLQM5e3>-`@3<6B945CaP42n#i47yBS43<oO3_eW$3<*pD48=@=4DC!o46~Sm8P+j{ zFdSkEWw^=|#_)<Mn&CH73?mOyETb$_9HSmn0;4@sB4YqkGGhW$3S%KtDq{;%8sl`P k48~PVS&SQ*@)@@<<uGn#%4Iyll*f32sgTiP@)L>M0I(oQ8vp<R diff --git a/out/production/infrastructureLogicielleClient/opinion/Member.class b/out/production/infrastructureLogicielleClient/opinion/Member.class index 3a9a09412346215b777a5f0f7886a96861095686..561d96632d636c74be1cd2ec6a51a3b754764361 100644 GIT binary patch delta 61 zcmZ3;wUBGWZe~Gg1{MYx22KW920jKk24M#I$!D0O7}X~)WD%Wg!=lb;0A^LPs54qk OUdZCg=rZ{^ixmKj84fA{ delta 61 zcmZ3;wUBGWZe~GA1{MY>22KWP20jKE24M!-$!D0O7*!@OWD%Wg!=lcp17=mSs56>Q OUdZCg=rH*?ixmKgTMiHa diff --git a/out/production/infrastructureLogicielleClient/opinion/SocialNetwork.class b/out/production/infrastructureLogicielleClient/opinion/SocialNetwork.class index 9ca64249fdd8c034c313e36e33a5e6757f30aa47..63caec3114c6cff4ec8a5d44055e4672e8b70dec 100644 GIT binary patch delta 3293 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 delta 3240 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 JRfg*fk^q<~WcC06 diff --git a/out/production/infrastructureLogicielleClient/tests/AddItemBookTest.class b/out/production/infrastructureLogicielleClient/tests/AddItemBookTest.class index 3bb34d14e9f737427fd673a180ee6cf6a8b224b2..3aa5982a27f78f513d95d096aabb05cc89434868 100644 GIT binary patch literal 4520 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 literal 8125 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 diff --git a/out/production/infrastructureLogicielleClient/tests/InitTest.class b/out/production/infrastructureLogicielleClient/tests/InitTest.class index 896bf98177f50112d80754002aefd993cd7edd5b..c0afc5c3d16d922a630f928a013f5546bf6359fe 100644 GIT binary patch delta 101 zcmdlayh(UN6+0vU<ZAX0t`ZDP43Z2i3^EKn3`z_l49X1R3@Qu?45|#u3~CJ83>pl2 z44Mq)3|b6U4B8A%47v=i40;TH4EhX#3<eC545kc;3}%xza42&+G0bOhW?0VPGWib2 FH2@s_5Z?d* delta 101 zcmdlayh(UN6+0u}<ZAX0uHp<#3=#}14AKld42ldQ3`z{*49W}&3@QxD45|#;4C)Me z3>pmP44Mp93|b6M3_1+147v<{40;TK4EhX_3?>YT45pJea42&+Gt6gjVOY-KI{6OA FH2@g_5YGSr diff --git a/out/production/infrastructureLogicielleClient/tests/SocialNetworkTest.class b/out/production/infrastructureLogicielleClient/tests/SocialNetworkTest.class index 4a61630792ee60cb4f47709838a85c6853ed2d3d..43008bf72d0e27b0536d8e0706d97b7ef8fbd6d8 100644 GIT binary patch delta 71 zcmbQqyO4K7J1ZmC<PKJO#*33zuqNsoG4L=jFbFYlF^DkmF^Dn<Gl(%rGe|JVGe|P1 bFi0`zFeoxuGpI1wF(@(EGbm3sV9Nvm)K&_B delta 63 zcmZ3;JCk=qJ1Zmi<PKJO#*>p*uqLW&F>o<3FbFenF^DqoF^Dk;Gl(-tGe|PXGe|M0 TFi11#FeoutGpJ0qV9NvmhBpbd diff --git a/out/production/infrastructureLogicielleClient/tests/TestReport.class b/out/production/infrastructureLogicielleClient/tests/TestReport.class index bd809bf00cb128dff832f9ef4f2084bf4ce82072..cdc162f70617cbc7881faec27436fe36d4450860 100644 GIT binary patch delta 179 zcmdlcu}xxwI47qD122OngA{|-WChM_UIPYp215oO1|tRy29wP*IMW&HZ5fyt>=?Kh zoEStIoEhX9To_asTp3Im+!!nv+!-7gycoP0yct3md>FzRd>P^y0vK``0vXB}f*2|p zf*BeaLK!+4!WbqpgflE)h+tUH5XrEeA(mkmLlnbqhG>R;3^5GH7!nvRF(ffuWk_bY h%aF?OfFXt9AwxRDQ-%zN4{Qus3_lohC%15K0st4MCJ+Ds delta 179 zcmdlcu}xxwI47q%122OHgA{}2WChM_UVR331_K5j215o72II{$IMW&Htr?gYY#6v0 z92i6y92w*poETIXoEc0RTo^1ETp1h~JQ%zgJQ+e5ycoh6ycyyd{1|c>{29s^0vIY8 z0vQ?^f*Cp)LKr48gfc8(2xC~!5YDijA%<ZWLnOm)hA4)84ABh77~&Z&F(fivWk_PU h%aF?OfFXt9AwxRDQ-%zN4{QwC3_lq1Cbw{J0ssOkCE5T0 diff --git a/src/opinion/Book.java b/src/opinion/Book.java index 61c5d10..e2b8f61 100644 --- a/src/opinion/Book.java +++ b/src/opinion/Book.java @@ -11,9 +11,10 @@ public class Book { /** * Initialization of private variables with constructor - * @param title The title of the book - * @param kind The type of the book - * @param author The author of the book + * + * @param title The title of the book + * @param kind The type of the book + * @param author The author of the book * @param nbPages The number of pages of the book */ public Book(String title, String kind, String author, int nbPages) { @@ -25,6 +26,7 @@ public class Book { /** * Return the title of the book + * * @return book's title */ public String getTitle() { @@ -33,6 +35,7 @@ public class Book { /** * Return the kind of the book + * * @return book's kind */ public String getKind() { @@ -41,6 +44,7 @@ public class Book { /** * Retrieve the author of the book + * * @return book's author */ public String getAuthor() { @@ -49,6 +53,7 @@ public class Book { /** * Return the number of pages of the book + * * @return book's page number */ public int getNbPages() { @@ -57,6 +62,7 @@ public class Book { /** * Identify if the current book's title is similar as another book + * * @param title2 other's book's title * @return true if same, false if different */ @@ -65,11 +71,13 @@ public class Book { String formattedTitle2 = title2.toUpperCase().trim(); return formattedTitle.equals(formattedTitle2); } + /** * String function to display the details of a book + * * @return the book's details */ public String toString() { - return "Book : "+getTitle()+"\nKind : "+getKind()+"\nAuthor : "+getAuthor()+"\nNumber of pages : "+getNbPages(); + return "Book : " + getTitle() + "\nKind : " + getKind() + "\nAuthor : " + getAuthor() + "\nNumber of pages : " + getNbPages(); } } diff --git a/src/opinion/HMI.java b/src/opinion/HMI.java index 6be31ce..032fa90 100644 --- a/src/opinion/HMI.java +++ b/src/opinion/HMI.java @@ -8,8 +8,6 @@ import hmi.TextJScrollPane; import javax.swing.*; - - import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -17,612 +15,593 @@ import java.util.LinkedList; /** * The <i>HMI</i> class allows the interactive use of a <i>SocialNetwork</i>. - * @author B. Prou + * + * @author B. Prou * @author E. Cousin (English translation) */ public class HMI { - - - - /** - * @uml.property name="sn" - * @uml.associationEnd - */ - private ISocialNetwork sn = null; - - - - private int windowWidth = 600; - - private String memberLogin = ""; - private String memberPassword = ""; - private String memberProfile = ""; - - String bookTitle; - String bookKind; - String bookAuthor; - String bookNbPages; - - String filmTitle; - String filmKind; - String filmDirector; - String filmScenarist; - String filmDuration; - - String comment; - String mark; - - private JFrame interactionWindow; - private JMenuBar menuBar; - private JMenu memberMenu; - private JMenu visitorMenu; - - private JFrame outputWindow; - /** - * @uml.property name="outputWindowJScrollPane" - * @uml.associationEnd - */ - private TextJScrollPane outputWindowJScrollPane; - - private JFrame itemOutputWindow; - /** - * @uml.property name="itemOutputJScrollPane" - * @uml.associationEnd - */ - private TextJScrollPane itemOutputJScrollPane; - - - public HMI() { - // Outputs for the user are given in french - - JMenuItem jMenuItem; - interactionWindow = new JFrame("IHM de SocialNetwork : "); - interactionWindow.setSize(windowWidth + 100, 100); - interactionWindow.setVisible(true); - //Font f = fenetreInteraction.getFont().deriveFont(Font.ITALIC + Font.BOLD); - interactionWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - menuBar = new JMenuBar(); - outputWindow = null; - - - memberMenu = new JMenu("membre"); // member - jMenuItem = new JMenuItem("afficher le réseau social"); // print content of the social network - jMenuItem.addActionListener(new ShowNetwork()); - memberMenu.add(jMenuItem); - jMenuItem = new JMenuItem("consulter un item"); // consult an item - jMenuItem.addActionListener(new ConsultItem()); - memberMenu.add(jMenuItem); - jMenuItem = new JMenuItem("ajouter un profil"); // add a member - jMenuItem.addActionListener(new AddMember()); - memberMenu.add(jMenuItem); - jMenuItem = new JMenuItem("ajouter un item livre"); // add a book - jMenuItem.addActionListener(new AddItemBook()); - memberMenu.add(jMenuItem); - jMenuItem = new JMenuItem("ajouter un item film"); // add a film - jMenuItem.addActionListener(new AddItemFilm()); - memberMenu.add(jMenuItem); - jMenuItem = new JMenuItem("donner un avis sur un item livre"); // rate an item - jMenuItem.addActionListener(new ReviewItem("livre")); // book - memberMenu.add(jMenuItem); - jMenuItem = new JMenuItem("donner un avis sur un item film"); // rate a film - jMenuItem.addActionListener(new ReviewItem("film")); // film - memberMenu.add(jMenuItem); - - - visitorMenu = new JMenu("visiteur"); // anonymous user - jMenuItem = new JMenuItem("consulter un item"); // consult an item - jMenuItem.addActionListener(new ConsultItem()); - visitorMenu.add(jMenuItem); - jMenuItem = new JMenuItem("ajouter un profil"); // add a member - jMenuItem.addActionListener(new AddMember()); - visitorMenu.add(jMenuItem); - - menuBar.add(memberMenu); - menuBar.add(visitorMenu); - - interactionWindow.setJMenuBar(menuBar); - interactionWindow.setVisible(true); - } - - - - - /** - * Setter of the property <tt>topic</tt> - * @param topic The topic to set. - * @uml.property name="topic" - */ - public void setTopic(ISocialNetwork topic) { - this.sn = topic; - } - - - - private class ShowNetwork implements ActionListener { - public void actionPerformed(ActionEvent e) { - if (outputWindow == null) { - outputWindow = new JFrame(); - outputWindow.setLocation(60,60); - outputWindowJScrollPane = new TextJScrollPane(" Social Network ", "", false, windowWidth); - outputWindowJScrollPane.setText(sn.toString()); - outputWindow.getContentPane().removeAll(); - outputWindow.repaint(); - outputWindow.setSize(windowWidth + 100, 350); - outputWindow.getContentPane().add(outputWindowJScrollPane); - outputWindowJScrollPane.setVisible(true); - outputWindow.setVisible(true); - outputWindow.repaint(); - } else { - outputWindowJScrollPane.setText(sn.toString()); - outputWindow.setVisible(true); - outputWindow.repaint(); - } - } - - } - - - - /** - * @author prou - */ - private class ConsultItem implements ActionListener { - /** - * @uml.property name="jPanelNameItem" - * @uml.associationEnd - */ - InputJPanel itemTitleJPanel; - public void actionPerformed(ActionEvent e) { - JPanel consultItem = new JPanel(); - consultItem.setLayout(new GridLayout(2,1, 4, 4)); - itemTitleJPanel = new InputJPanel(" nom de l'item ? ", "", windowWidth); // item's title - consultItem.add(itemTitleJPanel); - JButton confirm = new JButton("valider la demande consultation "); // confirm action - confirm.setPreferredSize(new Dimension(windowWidth-20, 25)); - confirm.addActionListener(new ConsultItemAction()); - consultItem.add(confirm); - consultItem.setVisible(false); - interactionWindow.getContentPane().removeAll(); - interactionWindow.repaint(); - interactionWindow.setSize(windowWidth + 100, 120); - interactionWindow.getContentPane().add(consultItem); - consultItem.setVisible(true); - interactionWindow.repaint(); - } - class ConsultItemAction implements ActionListener { - public void actionPerformed(ActionEvent e) { - try { - LinkedList <String> items = sn.consultItems(itemTitleJPanel.getEntree()); - String s = "\n"; - for (String item : items) { - s += item + "\n"; - } - if (itemOutputWindow == null) { - itemOutputWindow = new JFrame(); - itemOutputWindow.setLocation(30,30); - itemOutputJScrollPane = new TextJScrollPane(" items ", s, false, windowWidth); - itemOutputWindow.getContentPane().removeAll(); - itemOutputWindow.repaint(); - itemOutputWindow.setSize(windowWidth + 100, 350); - itemOutputWindow.getContentPane().add(itemOutputJScrollPane); - itemOutputJScrollPane.setVisible(true); - itemOutputWindow.setVisible(true); - itemOutputWindow.repaint(); - } else { - itemOutputJScrollPane.setText(s); - itemOutputWindow.setVisible(true); - itemOutputWindow.repaint(); - } - - } - catch (Exception exception) { - JOptionPane.showMessageDialog(interactionWindow, "Exception dans consultItems : " + exception); - } - } - } - - } - - - - /** - * @author prou - */ - private class AddMember implements ActionListener { - /** - * @uml.property name="pseudoJPanel" - * @uml.associationEnd - */ - InputJPanel pseudoJPanel; - /** - * @uml.property name="passwordJPanel" - * @uml.associationEnd - */ - InputJPanel passwordJPanel; - /** - * @uml.property name="jScrollPaneProfil" - * @uml.associationEnd - */ - TextJScrollPane profileJScrollPane; - public void actionPerformed(ActionEvent e) { - JPanel addMemberJPanel = new JPanel(); - profileJScrollPane = new TextJScrollPane(" profil du membre ? ", memberProfile, true, windowWidth); // member's profile ? - addMemberJPanel.add(profileJScrollPane); - JPanel loginAndPwdJPanel = new JPanel(); - loginAndPwdJPanel.setLayout(new GridLayout(3,1, 4, 4)); - pseudoJPanel = new InputJPanel(" pseudo ? ", memberLogin, windowWidth); // member's login - loginAndPwdJPanel.add(pseudoJPanel); - passwordJPanel = new InputJPanel(" mot de passe ? ", memberPassword, windowWidth); // member's password ? - loginAndPwdJPanel.add(passwordJPanel); - JButton confirm = new JButton("valider son inscription "); // confirm member's creation - confirm.setPreferredSize(new Dimension(windowWidth-20, 25)); - confirm.addActionListener(new AddMemberAction()); - loginAndPwdJPanel.add(confirm); - loginAndPwdJPanel.setVisible(true); - addMemberJPanel.add(loginAndPwdJPanel); - addMemberJPanel.setVisible(false); - interactionWindow.getContentPane().removeAll(); - interactionWindow.repaint(); - interactionWindow.setSize(windowWidth + 100, 410); - interactionWindow.getContentPane().add(addMemberJPanel); - addMemberJPanel.setVisible(true); - interactionWindow.repaint(); - } - - class AddMemberAction implements ActionListener { - public void actionPerformed(ActionEvent e) { - try { - memberLogin = pseudoJPanel.getEntree(); - memberPassword = passwordJPanel.getEntree(); - memberProfile = profileJScrollPane.getText(); - sn.addMember(memberLogin, memberPassword, memberProfile); - } - catch (Exception exception) { - JOptionPane.showMessageDialog(interactionWindow, "Exception dans addMember : " + exception); - } - } - } - } - - - - - /** - * @author prou - */ - private class AddItemBook implements ActionListener { - /** - * @uml.property name="loginJPanel" - * @uml.associationEnd - */ - InputJPanel loginJPanel; - /** - * @uml.property name="passwordJPanel" - * @uml.associationEnd - */ - PasswordJPanel passwordJPanel; - /** - * @uml.property name="titleJPanel" - * @uml.associationEnd - */ - InputJPanel titleJPanel; - /** - * @uml.property name="kindJPanel" - * @uml.associationEnd - */ - InputJPanel kindJPanel; - /** - * @uml.property name="authorJPanel" - * @uml.associationEnd - */ - InputJPanel authorJPanel; - /** - * @uml.property name="nbPagesJPanel" - * @uml.associationEnd - */ - InputJPanel nbPagesJPanel; - - public void actionPerformed(ActionEvent e) { - JPanel addBookJP = new JPanel(); - addBookJP.setLayout(new GridLayout(7,1, 4, 4)); - loginJPanel = new InputJPanel(" pseudo membre ? ", memberLogin, windowWidth); // member's login ? - addBookJP.add(loginJPanel); - passwordJPanel = new PasswordJPanel(" password membre ? ", memberPassword, windowWidth); // member's password ? - addBookJP.add(passwordJPanel); - titleJPanel = new InputJPanel(" titre ? ", bookTitle, windowWidth); // book's title ? - addBookJP.add(titleJPanel); - kindJPanel = new InputJPanel(" genre ? ", bookKind, windowWidth); // book's kind ? - addBookJP.add(kindJPanel); - authorJPanel = new InputJPanel(" auteur ? ", bookAuthor, windowWidth); // book's author ? - addBookJP.add(authorJPanel); - nbPagesJPanel = new InputJPanel(" nb pages ? ", bookNbPages, windowWidth); // book's nb of pages - addBookJP.add(nbPagesJPanel); - JButton confirm = new JButton("Valider ajouter item livre"); // confirm add a book - confirm.setPreferredSize(new Dimension(windowWidth-20, 25)); - confirm.addActionListener(new AddItemBookAction()); - addBookJP.add(confirm); - addBookJP.setVisible(false); - interactionWindow.getContentPane().removeAll(); - interactionWindow.repaint(); - interactionWindow.setSize(windowWidth + 100, 320); - interactionWindow.getContentPane().add(addBookJP); - addBookJP.setVisible(true); - interactionWindow.setVisible(true); - interactionWindow.repaint(); - } - - class AddItemBookAction implements ActionListener { - public void actionPerformed(ActionEvent e) { - try { - memberLogin = loginJPanel.getEntree(); - memberPassword = passwordJPanel.getPassword(); - bookTitle = titleJPanel.getEntree(); - bookKind = kindJPanel.getEntree(); - bookAuthor = authorJPanel.getEntree(); - bookNbPages = nbPagesJPanel.getEntree(); - sn.addItemBook(memberLogin, memberPassword, bookTitle, bookKind, bookAuthor, new Integer(bookNbPages)); - } - catch (Exception exception) { - JOptionPane.showMessageDialog(interactionWindow, "Exception dans addItemBook : " + exception); - } - } - } - } - - - - private class AddItemFilm implements ActionListener { - /** - * @uml.property name="loginJPanel" - * @uml.associationEnd - */ - InputJPanel loginJPanel; - /** - * @uml.property name="passwordJPanel" - * @uml.associationEnd - */ - PasswordJPanel passwordJPanel; - /** - * @uml.property name="titleJPanel" - * @uml.associationEnd - */ - InputJPanel titleJPanel; - /** - * @uml.property name="kindJPanel" - * @uml.associationEnd - */ - InputJPanel kindJPanel; - /** - * @uml.property name="directorJPanel" - * @uml.associationEnd - */ - InputJPanel directorJPanel; - /** - * @uml.property name="scenaristJPanel" - * @uml.associationEnd - */ - InputJPanel scenaristJPanel; - /** - * @uml.property name="nbPagesJPanel" - * @uml.associationEnd - */ - InputJPanel nbPagesJPanel; - - public void actionPerformed(ActionEvent e) { - JPanel addFilmJP = new JPanel(); - addFilmJP.setLayout(new GridLayout(7,1, 4, 4)); - loginJPanel = new InputJPanel(" pseudo membre ? ", memberLogin, windowWidth); - addFilmJP.add(loginJPanel); - passwordJPanel = new PasswordJPanel(" password membre ? ", memberPassword, windowWidth); - addFilmJP.add(passwordJPanel); - titleJPanel = new InputJPanel(" titre ? ", filmTitle, windowWidth); - addFilmJP.add(titleJPanel); - kindJPanel = new InputJPanel(" genre ? ", filmKind, windowWidth); - addFilmJP.add(kindJPanel); - directorJPanel = new InputJPanel(" réalisateur ? ", filmDirector, windowWidth); - addFilmJP.add(directorJPanel); - scenaristJPanel = new InputJPanel(" scénariste ? ", filmScenarist, windowWidth); - addFilmJP.add(scenaristJPanel); - nbPagesJPanel = new InputJPanel(" durée ? ", filmDuration, windowWidth); - addFilmJP.add(nbPagesJPanel); - JButton confirm = new JButton("Valider ajouter item film"); - confirm.setPreferredSize(new Dimension(windowWidth-20, 25)); - confirm.addActionListener(new AddItemFilmAction()); - addFilmJP.add(confirm); - addFilmJP.setVisible(false); - interactionWindow.getContentPane().removeAll(); - interactionWindow.repaint(); - interactionWindow.setSize(windowWidth + 100, 320); - interactionWindow.getContentPane().add(addFilmJP); - addFilmJP.setVisible(true); - interactionWindow.setVisible(true); - interactionWindow.repaint(); - } - - class AddItemFilmAction implements ActionListener { - public void actionPerformed(ActionEvent e) { - try { - memberLogin = loginJPanel.getEntree(); - memberPassword = passwordJPanel.getPassword(); - filmTitle = titleJPanel.getEntree(); - filmKind = kindJPanel.getEntree(); - filmDirector = directorJPanel.getEntree(); - filmScenarist = scenaristJPanel.getEntree(); - filmDuration = nbPagesJPanel.getEntree(); - sn.addItemFilm(memberLogin, memberPassword, filmTitle, filmKind, filmDirector, filmScenarist, new Integer(filmDuration)); - } - catch (Exception exception) { - JOptionPane.showMessageDialog(interactionWindow, "Exception dans addItemFilm : " + exception); - } - } - } - } - - - - - private class ReviewItem implements ActionListener { - /** - * @uml.property name="pseudoJPanel" - * @uml.associationEnd - */ - InputJPanel pseudoJPanel; - /** - * @uml.property name="passwordJPanel" - * @uml.associationEnd - */ - PasswordJPanel passwordJPanel; - /** - * @uml.property name="titleJPanel" - * @uml.associationEnd - */ - InputJPanel titleJPanel; - /** - * @uml.property name="noteJPanel" - * @uml.associationEnd - */ - InputJPanel noteJPanel; - /** - * @uml.property name="commentJScrollPane" - * @uml.associationEnd - */ - TextJScrollPane commentJScrollPane; - - String type; - - public ReviewItem (String type) { - this.type = type; - } - public void actionPerformed(ActionEvent e) { - JPanel reviewerJP = new JPanel(); - commentJScrollPane = new TextJScrollPane(" commentaire ? ", comment, true, windowWidth); // comment ? - reviewerJP.add(commentJScrollPane); - JPanel loginPwdAndTitleJPanel = new JPanel(); - loginPwdAndTitleJPanel.setLayout(new GridLayout(5,1, 4, 4)); - pseudoJPanel = new InputJPanel(" pseudo membre ? ", memberLogin, windowWidth); // member's login ? - loginPwdAndTitleJPanel.add(pseudoJPanel); - passwordJPanel = new PasswordJPanel(" password membre ? ", memberPassword, windowWidth); // member's password ? - loginPwdAndTitleJPanel.add(passwordJPanel); - titleJPanel = new InputJPanel(" titre ? ", bookTitle, windowWidth); // title ? - loginPwdAndTitleJPanel.add(titleJPanel); - noteJPanel = new InputJPanel(" note ? ", mark, windowWidth); // mark ? - loginPwdAndTitleJPanel.add(noteJPanel); - JButton valider = new JButton("Valider reviewer item " + type); // confirm review item ? - valider.setPreferredSize(new Dimension(windowWidth-20, 25)); - valider.addActionListener(new ReviewItemAction()); - loginPwdAndTitleJPanel.add(valider); - reviewerJP.add(loginPwdAndTitleJPanel); - reviewerJP.setVisible(false); - interactionWindow.getContentPane().removeAll(); - interactionWindow.repaint(); - interactionWindow.setSize(windowWidth + 100, 470); - interactionWindow.getContentPane().add(reviewerJP); - reviewerJP.setVisible(true); - interactionWindow.setVisible(true); - interactionWindow.repaint(); - } - - class ReviewItemAction implements ActionListener { - public void actionPerformed(ActionEvent e) { - try { - memberLogin = pseudoJPanel.getEntree(); - memberPassword = passwordJPanel.getPassword(); - bookTitle = titleJPanel.getEntree(); - mark = noteJPanel.getEntree(); - comment = commentJScrollPane.getText(); - if (type.equals("livre")) //book - sn.reviewItemBook(memberLogin, memberPassword, bookTitle, new Float(mark), comment); - if (type.equals("film")) // film - sn.reviewItemFilm(memberLogin, memberPassword, bookTitle, new Float(mark), comment); - - } - catch (Exception exception) { - if (type.equals("livre")) // book - JOptionPane.showMessageDialog(interactionWindow, "Exception dans reviewItemBook : " + exception); - if (type.equals("film")) // film - JOptionPane.showMessageDialog(interactionWindow, "Exception dans reviewItemFilm : " + exception); - } - } - } - } - - - - - - - - /** - * Creates a new <i>SocialNetwork</i> with <ul> - * <li>3 users (login/pwd) : Paul/paul, Antoine/antoine, Alice/alice</li> - * <li>3 books (title) : "Lignes de faille","La peste", "Guerre et Paix", "Le train sifflera trois fois"</li> - * <li>4 films (title) : "Le train sifflera trois fois", "Avant l'aube", "Le discours d'un roi", "Black Swan", "Guerre et Paix"</li> - * </ul> - * and some opinions :<ul> - * <li>Book "La Peste" : Antoine (1.5),Alice (2.5)</li> - * <li>Book "Lignes de faille" : Alice (1.5)</li> - * <li>Book "Guerre et paix" : Alice (2.0), Antoine (4.5)</li> - * <li>Film "Black Swan" : Paul (2.5)</li> - * <li>Film "Avant l'aube" : Antoine (3.0), Paul (2.5)</li> - * <li>Film "Guerre et paix" : Alice (4.2), Paul (4.4)</li> - * </ul> - * Then add an opinion by a member who already gave one for the same item : Book "La Peste" / Antoine (3.8)</br> - * And finally launches an interactive HMI that gives access to the main actions on this <i>SocialNetwork</i>. - * @param args not used - */ - public static void main (String [] args) { - - try { - ISocialNetwork sn = new SocialNetwork(); // the SocialNetwork to interact with - - HMI ihm = new HMI(); - ihm.setTopic(sn); - - // add 3 members - sn.addMember("Paul", "paul", "lecteur impulsif"); - sn.addMember("Antoine", "antoine", "grand amoureux de littérature"); - sn.addMember("Alice", "alice", "23 ans, sexy"); - - - // add 3 books and 4 films - sn.addItemBook("Alice", "alice", "Lignes de faille", "roman", "Nancy Huston", 220); - sn.addItemFilm("Alice", "alice", "Le train sifflera trois fois", "western 1952", "Fred Zinnemann", "Carl Foreman", 85); - sn.addItemBook("Paul", "paul", "La peste", "roman", " Albert Camus", 336); - sn.addItemFilm("Paul", "paul", "Avant l'aube", "thriller 2011", "Raphael Jacoulot", "Lise Macheboeuf et Raphael Jacoulot", 104); - sn.addItemBook("Antoine", "antoine", "Guerre et Paix", "roman", "Leon Tosltoi", 1247); - sn.addItemFilm("Antoine", "antoine", "Le discours d'un roi", "drame historique 2010", "Tom Hooper", "David Seidler", 118); - sn.addItemFilm("Alice", "alice", "Black Swan", "drame 2010", "Darren Aronofsky", "John McLaughlin et Mark Heyman et Andres Heinz", 103); - sn.addItemBook("Alice", "alice", "Le train sifflera trois fois", "roman", " J. W. Cunningham", 257); - sn.addItemFilm("Paul", "paul", "Guerre et Paix", "aventure historique", "King Vidor", "Bridget Boland, Robert Westbery", 200); - - - - // review some books and films - sn.reviewItemBook("Antoine", "antoine", "La Peste", 1.5f, "un peu daté"); - sn.reviewItemFilm("Paul", "paul", "Black Swan", 2.5f, "pour la performance..."); - sn.reviewItemFilm("Antoine", "antoine", "Avant l'aube", 3.0f, "tout le monde fume..."); - sn.reviewItemBook("Alice", "alice", "Lignes de faille", 1.5f, "famille attachante"); - // review a film and a book that were already reviewed by somebody else - sn.reviewItemFilm("Paul", "paul", "Avant l'aube", 2.5f, "mitigé"); - sn.reviewItemBook("Alice", "alice", "La Peste", 2.5f, " "); - // several reviews of a film and a book with the same title - sn.reviewItemBook("Alice", "alice", "Guerre et Paix", 2.0f, "un peu long"); - sn.reviewItemFilm("Alice", "alice", "Guerre et Paix", 4.2f, "on ne voit pas le temps passer"); - sn.reviewItemBook("Antoine", "antoine", "Guerre et Paix", 4.5f, "parfait pour une semaine pluvieuse"); - sn.reviewItemFilm("Paul", "paul", "Guerre et Paix", 4.4f, "choisir une salle confortable"); - // review a book that was already reviewed by the same member - sn.reviewItemBook("Antoine", "antoine", "La Peste", 3.8f, "bien meilleur à la relecture"); - - System.out.println(sn); - } - catch (Exception e) { - System.out.println("Exception inattendue : " + e); - e.printStackTrace(); - } - - } + /** + * @uml.property name="sn" + * @uml.associationEnd + */ + private ISocialNetwork sn = null; + + + private int windowWidth = 600; + + private String memberLogin = ""; + private String memberPassword = ""; + private String memberProfile = ""; + + String bookTitle; + String bookKind; + String bookAuthor; + String bookNbPages; + + String filmTitle; + String filmKind; + String filmDirector; + String filmScenarist; + String filmDuration; + + String comment; + String mark; + + private JFrame interactionWindow; + private JMenuBar menuBar; + private JMenu memberMenu; + private JMenu visitorMenu; + + private JFrame outputWindow; + /** + * @uml.property name="outputWindowJScrollPane" + * @uml.associationEnd + */ + private TextJScrollPane outputWindowJScrollPane; + + private JFrame itemOutputWindow; + /** + * @uml.property name="itemOutputJScrollPane" + * @uml.associationEnd + */ + private TextJScrollPane itemOutputJScrollPane; + + + public HMI() { + // Outputs for the user are given in french + + JMenuItem jMenuItem; + interactionWindow = new JFrame("IHM de SocialNetwork : "); + interactionWindow.setSize(windowWidth + 100, 100); + interactionWindow.setVisible(true); + //Font f = fenetreInteraction.getFont().deriveFont(Font.ITALIC + Font.BOLD); + interactionWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + menuBar = new JMenuBar(); + outputWindow = null; + + + memberMenu = new JMenu("membre"); // member + jMenuItem = new JMenuItem("afficher le réseau social"); // print content of the social network + jMenuItem.addActionListener(new ShowNetwork()); + memberMenu.add(jMenuItem); + jMenuItem = new JMenuItem("consulter un item"); // consult an item + jMenuItem.addActionListener(new ConsultItem()); + memberMenu.add(jMenuItem); + jMenuItem = new JMenuItem("ajouter un profil"); // add a member + jMenuItem.addActionListener(new AddMember()); + memberMenu.add(jMenuItem); + jMenuItem = new JMenuItem("ajouter un item livre"); // add a book + jMenuItem.addActionListener(new AddItemBook()); + memberMenu.add(jMenuItem); + jMenuItem = new JMenuItem("ajouter un item film"); // add a film + jMenuItem.addActionListener(new AddItemFilm()); + memberMenu.add(jMenuItem); + jMenuItem = new JMenuItem("donner un avis sur un item livre"); // rate an item + jMenuItem.addActionListener(new ReviewItem("livre")); // book + memberMenu.add(jMenuItem); + jMenuItem = new JMenuItem("donner un avis sur un item film"); // rate a film + jMenuItem.addActionListener(new ReviewItem("film")); // film + memberMenu.add(jMenuItem); + + + visitorMenu = new JMenu("visiteur"); // anonymous user + jMenuItem = new JMenuItem("consulter un item"); // consult an item + jMenuItem.addActionListener(new ConsultItem()); + visitorMenu.add(jMenuItem); + jMenuItem = new JMenuItem("ajouter un profil"); // add a member + jMenuItem.addActionListener(new AddMember()); + visitorMenu.add(jMenuItem); + + menuBar.add(memberMenu); + menuBar.add(visitorMenu); + + interactionWindow.setJMenuBar(menuBar); + interactionWindow.setVisible(true); + } + + + /** + * Setter of the property <tt>topic</tt> + * + * @param topic The topic to set. + * @uml.property name="topic" + */ + public void setTopic(ISocialNetwork topic) { + this.sn = topic; + } + + + private class ShowNetwork implements ActionListener { + public void actionPerformed(ActionEvent e) { + if (outputWindow == null) { + outputWindow = new JFrame(); + outputWindow.setLocation(60, 60); + outputWindowJScrollPane = new TextJScrollPane(" Social Network ", "", false, windowWidth); + outputWindowJScrollPane.setText(sn.toString()); + outputWindow.getContentPane().removeAll(); + outputWindow.repaint(); + outputWindow.setSize(windowWidth + 100, 350); + outputWindow.getContentPane().add(outputWindowJScrollPane); + outputWindowJScrollPane.setVisible(true); + outputWindow.setVisible(true); + outputWindow.repaint(); + } else { + outputWindowJScrollPane.setText(sn.toString()); + outputWindow.setVisible(true); + outputWindow.repaint(); + } + } + + } + + + /** + * @author prou + */ + private class ConsultItem implements ActionListener { + /** + * @uml.property name="jPanelNameItem" + * @uml.associationEnd + */ + InputJPanel itemTitleJPanel; + + public void actionPerformed(ActionEvent e) { + JPanel consultItem = new JPanel(); + consultItem.setLayout(new GridLayout(2, 1, 4, 4)); + itemTitleJPanel = new InputJPanel(" nom de l'item ? ", "", windowWidth); // item's title + consultItem.add(itemTitleJPanel); + JButton confirm = new JButton("valider la demande consultation "); // confirm action + confirm.setPreferredSize(new Dimension(windowWidth - 20, 25)); + confirm.addActionListener(new ConsultItemAction()); + consultItem.add(confirm); + consultItem.setVisible(false); + interactionWindow.getContentPane().removeAll(); + interactionWindow.repaint(); + interactionWindow.setSize(windowWidth + 100, 120); + interactionWindow.getContentPane().add(consultItem); + consultItem.setVisible(true); + interactionWindow.repaint(); + } + + class ConsultItemAction implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + LinkedList<String> items = sn.consultItems(itemTitleJPanel.getEntree()); + String s = "\n"; + for (String item : items) { + s += item + "\n"; + } + if (itemOutputWindow == null) { + itemOutputWindow = new JFrame(); + itemOutputWindow.setLocation(30, 30); + itemOutputJScrollPane = new TextJScrollPane(" items ", s, false, windowWidth); + itemOutputWindow.getContentPane().removeAll(); + itemOutputWindow.repaint(); + itemOutputWindow.setSize(windowWidth + 100, 350); + itemOutputWindow.getContentPane().add(itemOutputJScrollPane); + itemOutputJScrollPane.setVisible(true); + itemOutputWindow.setVisible(true); + itemOutputWindow.repaint(); + } else { + itemOutputJScrollPane.setText(s); + itemOutputWindow.setVisible(true); + itemOutputWindow.repaint(); + } + + } catch (Exception exception) { + JOptionPane.showMessageDialog(interactionWindow, "Exception dans consultItems : " + exception); + } + } + } + + } + + + /** + * @author prou + */ + private class AddMember implements ActionListener { + /** + * @uml.property name="pseudoJPanel" + * @uml.associationEnd + */ + InputJPanel pseudoJPanel; + /** + * @uml.property name="passwordJPanel" + * @uml.associationEnd + */ + InputJPanel passwordJPanel; + /** + * @uml.property name="jScrollPaneProfil" + * @uml.associationEnd + */ + TextJScrollPane profileJScrollPane; + + public void actionPerformed(ActionEvent e) { + JPanel addMemberJPanel = new JPanel(); + profileJScrollPane = new TextJScrollPane(" profil du membre ? ", memberProfile, true, windowWidth); // member's profile ? + addMemberJPanel.add(profileJScrollPane); + JPanel loginAndPwdJPanel = new JPanel(); + loginAndPwdJPanel.setLayout(new GridLayout(3, 1, 4, 4)); + pseudoJPanel = new InputJPanel(" pseudo ? ", memberLogin, windowWidth); // member's login + loginAndPwdJPanel.add(pseudoJPanel); + passwordJPanel = new InputJPanel(" mot de passe ? ", memberPassword, windowWidth); // member's password ? + loginAndPwdJPanel.add(passwordJPanel); + JButton confirm = new JButton("valider son inscription "); // confirm member's creation + confirm.setPreferredSize(new Dimension(windowWidth - 20, 25)); + confirm.addActionListener(new AddMemberAction()); + loginAndPwdJPanel.add(confirm); + loginAndPwdJPanel.setVisible(true); + addMemberJPanel.add(loginAndPwdJPanel); + addMemberJPanel.setVisible(false); + interactionWindow.getContentPane().removeAll(); + interactionWindow.repaint(); + interactionWindow.setSize(windowWidth + 100, 410); + interactionWindow.getContentPane().add(addMemberJPanel); + addMemberJPanel.setVisible(true); + interactionWindow.repaint(); + } + + class AddMemberAction implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + memberLogin = pseudoJPanel.getEntree(); + memberPassword = passwordJPanel.getEntree(); + memberProfile = profileJScrollPane.getText(); + sn.addMember(memberLogin, memberPassword, memberProfile); + } catch (Exception exception) { + JOptionPane.showMessageDialog(interactionWindow, "Exception dans addMember : " + exception); + } + } + } + } + + + /** + * @author prou + */ + private class AddItemBook implements ActionListener { + /** + * @uml.property name="loginJPanel" + * @uml.associationEnd + */ + InputJPanel loginJPanel; + /** + * @uml.property name="passwordJPanel" + * @uml.associationEnd + */ + PasswordJPanel passwordJPanel; + /** + * @uml.property name="titleJPanel" + * @uml.associationEnd + */ + InputJPanel titleJPanel; + /** + * @uml.property name="kindJPanel" + * @uml.associationEnd + */ + InputJPanel kindJPanel; + /** + * @uml.property name="authorJPanel" + * @uml.associationEnd + */ + InputJPanel authorJPanel; + /** + * @uml.property name="nbPagesJPanel" + * @uml.associationEnd + */ + InputJPanel nbPagesJPanel; + + public void actionPerformed(ActionEvent e) { + JPanel addBookJP = new JPanel(); + addBookJP.setLayout(new GridLayout(7, 1, 4, 4)); + loginJPanel = new InputJPanel(" pseudo membre ? ", memberLogin, windowWidth); // member's login ? + addBookJP.add(loginJPanel); + passwordJPanel = new PasswordJPanel(" password membre ? ", memberPassword, windowWidth); // member's password ? + addBookJP.add(passwordJPanel); + titleJPanel = new InputJPanel(" titre ? ", bookTitle, windowWidth); // book's title ? + addBookJP.add(titleJPanel); + kindJPanel = new InputJPanel(" genre ? ", bookKind, windowWidth); // book's kind ? + addBookJP.add(kindJPanel); + authorJPanel = new InputJPanel(" auteur ? ", bookAuthor, windowWidth); // book's author ? + addBookJP.add(authorJPanel); + nbPagesJPanel = new InputJPanel(" nb pages ? ", bookNbPages, windowWidth); // book's nb of pages + addBookJP.add(nbPagesJPanel); + JButton confirm = new JButton("Valider ajouter item livre"); // confirm add a book + confirm.setPreferredSize(new Dimension(windowWidth - 20, 25)); + confirm.addActionListener(new AddItemBookAction()); + addBookJP.add(confirm); + addBookJP.setVisible(false); + interactionWindow.getContentPane().removeAll(); + interactionWindow.repaint(); + interactionWindow.setSize(windowWidth + 100, 320); + interactionWindow.getContentPane().add(addBookJP); + addBookJP.setVisible(true); + interactionWindow.setVisible(true); + interactionWindow.repaint(); + } + + class AddItemBookAction implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + memberLogin = loginJPanel.getEntree(); + memberPassword = passwordJPanel.getPassword(); + bookTitle = titleJPanel.getEntree(); + bookKind = kindJPanel.getEntree(); + bookAuthor = authorJPanel.getEntree(); + bookNbPages = nbPagesJPanel.getEntree(); + sn.addItemBook(memberLogin, memberPassword, bookTitle, bookKind, bookAuthor, new Integer(bookNbPages)); + } catch (Exception exception) { + JOptionPane.showMessageDialog(interactionWindow, "Exception dans addItemBook : " + exception); + } + } + } + } + + + private class AddItemFilm implements ActionListener { + /** + * @uml.property name="loginJPanel" + * @uml.associationEnd + */ + InputJPanel loginJPanel; + /** + * @uml.property name="passwordJPanel" + * @uml.associationEnd + */ + PasswordJPanel passwordJPanel; + /** + * @uml.property name="titleJPanel" + * @uml.associationEnd + */ + InputJPanel titleJPanel; + /** + * @uml.property name="kindJPanel" + * @uml.associationEnd + */ + InputJPanel kindJPanel; + /** + * @uml.property name="directorJPanel" + * @uml.associationEnd + */ + InputJPanel directorJPanel; + /** + * @uml.property name="scenaristJPanel" + * @uml.associationEnd + */ + InputJPanel scenaristJPanel; + /** + * @uml.property name="nbPagesJPanel" + * @uml.associationEnd + */ + InputJPanel nbPagesJPanel; + + public void actionPerformed(ActionEvent e) { + JPanel addFilmJP = new JPanel(); + addFilmJP.setLayout(new GridLayout(7, 1, 4, 4)); + loginJPanel = new InputJPanel(" pseudo membre ? ", memberLogin, windowWidth); + addFilmJP.add(loginJPanel); + passwordJPanel = new PasswordJPanel(" password membre ? ", memberPassword, windowWidth); + addFilmJP.add(passwordJPanel); + titleJPanel = new InputJPanel(" titre ? ", filmTitle, windowWidth); + addFilmJP.add(titleJPanel); + kindJPanel = new InputJPanel(" genre ? ", filmKind, windowWidth); + addFilmJP.add(kindJPanel); + directorJPanel = new InputJPanel(" réalisateur ? ", filmDirector, windowWidth); + addFilmJP.add(directorJPanel); + scenaristJPanel = new InputJPanel(" scénariste ? ", filmScenarist, windowWidth); + addFilmJP.add(scenaristJPanel); + nbPagesJPanel = new InputJPanel(" durée ? ", filmDuration, windowWidth); + addFilmJP.add(nbPagesJPanel); + JButton confirm = new JButton("Valider ajouter item film"); + confirm.setPreferredSize(new Dimension(windowWidth - 20, 25)); + confirm.addActionListener(new AddItemFilmAction()); + addFilmJP.add(confirm); + addFilmJP.setVisible(false); + interactionWindow.getContentPane().removeAll(); + interactionWindow.repaint(); + interactionWindow.setSize(windowWidth + 100, 320); + interactionWindow.getContentPane().add(addFilmJP); + addFilmJP.setVisible(true); + interactionWindow.setVisible(true); + interactionWindow.repaint(); + } + + class AddItemFilmAction implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + memberLogin = loginJPanel.getEntree(); + memberPassword = passwordJPanel.getPassword(); + filmTitle = titleJPanel.getEntree(); + filmKind = kindJPanel.getEntree(); + filmDirector = directorJPanel.getEntree(); + filmScenarist = scenaristJPanel.getEntree(); + filmDuration = nbPagesJPanel.getEntree(); + sn.addItemFilm(memberLogin, memberPassword, filmTitle, filmKind, filmDirector, filmScenarist, new Integer(filmDuration)); + } catch (Exception exception) { + JOptionPane.showMessageDialog(interactionWindow, "Exception dans addItemFilm : " + exception); + } + } + } + } + + + private class ReviewItem implements ActionListener { + /** + * @uml.property name="pseudoJPanel" + * @uml.associationEnd + */ + InputJPanel pseudoJPanel; + /** + * @uml.property name="passwordJPanel" + * @uml.associationEnd + */ + PasswordJPanel passwordJPanel; + /** + * @uml.property name="titleJPanel" + * @uml.associationEnd + */ + InputJPanel titleJPanel; + /** + * @uml.property name="noteJPanel" + * @uml.associationEnd + */ + InputJPanel noteJPanel; + /** + * @uml.property name="commentJScrollPane" + * @uml.associationEnd + */ + TextJScrollPane commentJScrollPane; + + String type; + + public ReviewItem(String type) { + this.type = type; + } + + public void actionPerformed(ActionEvent e) { + JPanel reviewerJP = new JPanel(); + commentJScrollPane = new TextJScrollPane(" commentaire ? ", comment, true, windowWidth); // comment ? + reviewerJP.add(commentJScrollPane); + JPanel loginPwdAndTitleJPanel = new JPanel(); + loginPwdAndTitleJPanel.setLayout(new GridLayout(5, 1, 4, 4)); + pseudoJPanel = new InputJPanel(" pseudo membre ? ", memberLogin, windowWidth); // member's login ? + loginPwdAndTitleJPanel.add(pseudoJPanel); + passwordJPanel = new PasswordJPanel(" password membre ? ", memberPassword, windowWidth); // member's password ? + loginPwdAndTitleJPanel.add(passwordJPanel); + titleJPanel = new InputJPanel(" titre ? ", bookTitle, windowWidth); // title ? + loginPwdAndTitleJPanel.add(titleJPanel); + noteJPanel = new InputJPanel(" note ? ", mark, windowWidth); // mark ? + loginPwdAndTitleJPanel.add(noteJPanel); + JButton valider = new JButton("Valider reviewer item " + type); // confirm review item ? + valider.setPreferredSize(new Dimension(windowWidth - 20, 25)); + valider.addActionListener(new ReviewItemAction()); + loginPwdAndTitleJPanel.add(valider); + reviewerJP.add(loginPwdAndTitleJPanel); + reviewerJP.setVisible(false); + interactionWindow.getContentPane().removeAll(); + interactionWindow.repaint(); + interactionWindow.setSize(windowWidth + 100, 470); + interactionWindow.getContentPane().add(reviewerJP); + reviewerJP.setVisible(true); + interactionWindow.setVisible(true); + interactionWindow.repaint(); + } + + class ReviewItemAction implements ActionListener { + public void actionPerformed(ActionEvent e) { + try { + memberLogin = pseudoJPanel.getEntree(); + memberPassword = passwordJPanel.getPassword(); + bookTitle = titleJPanel.getEntree(); + mark = noteJPanel.getEntree(); + comment = commentJScrollPane.getText(); + if (type.equals("livre")) //book + sn.reviewItemBook(memberLogin, memberPassword, bookTitle, new Float(mark), comment); + if (type.equals("film")) // film + sn.reviewItemFilm(memberLogin, memberPassword, bookTitle, new Float(mark), comment); + + } catch (Exception exception) { + if (type.equals("livre")) // book + JOptionPane.showMessageDialog(interactionWindow, "Exception dans reviewItemBook : " + exception); + if (type.equals("film")) // film + JOptionPane.showMessageDialog(interactionWindow, "Exception dans reviewItemFilm : " + exception); + } + } + } + } + + + /** + * Creates a new <i>SocialNetwork</i> with <ul> + * <li>3 users (login/pwd) : Paul/paul, Antoine/antoine, Alice/alice</li> + * <li>3 books (title) : "Lignes de faille","La peste", "Guerre et Paix", "Le train sifflera trois fois"</li> + * <li>4 films (title) : "Le train sifflera trois fois", "Avant l'aube", "Le discours d'un roi", "Black Swan", "Guerre et Paix"</li> + * </ul> + * and some opinions :<ul> + * <li>Book "La Peste" : Antoine (1.5),Alice (2.5)</li> + * <li>Book "Lignes de faille" : Alice (1.5)</li> + * <li>Book "Guerre et paix" : Alice (2.0), Antoine (4.5)</li> + * <li>Film "Black Swan" : Paul (2.5)</li> + * <li>Film "Avant l'aube" : Antoine (3.0), Paul (2.5)</li> + * <li>Film "Guerre et paix" : Alice (4.2), Paul (4.4)</li> + * </ul> + * Then add an opinion by a member who already gave one for the same item : Book "La Peste" / Antoine (3.8)</br> + * And finally launches an interactive HMI that gives access to the main actions on this <i>SocialNetwork</i>. + * + * @param args not used + */ + public static void main(String[] args) { + + try { + ISocialNetwork sn = new SocialNetwork(); // the SocialNetwork to interact with + + HMI ihm = new HMI(); + ihm.setTopic(sn); + + // add 3 members + sn.addMember("Paul", "paul", "lecteur impulsif"); + sn.addMember("Antoine", "antoine", "grand amoureux de littérature"); + sn.addMember("Alice", "alice", "23 ans, sexy"); + + + // add 3 books and 4 films + sn.addItemBook("Alice", "alice", "Lignes de faille", "roman", "Nancy Huston", 220); + sn.addItemFilm("Alice", "alice", "Le train sifflera trois fois", "western 1952", "Fred Zinnemann", "Carl Foreman", 85); + sn.addItemBook("Paul", "paul", "La peste", "roman", " Albert Camus", 336); + sn.addItemFilm("Paul", "paul", "Avant l'aube", "thriller 2011", "Raphael Jacoulot", "Lise Macheboeuf et Raphael Jacoulot", 104); + sn.addItemBook("Antoine", "antoine", "Guerre et Paix", "roman", "Leon Tosltoi", 1247); + sn.addItemFilm("Antoine", "antoine", "Le discours d'un roi", "drame historique 2010", "Tom Hooper", "David Seidler", 118); + sn.addItemFilm("Alice", "alice", "Black Swan", "drame 2010", "Darren Aronofsky", "John McLaughlin et Mark Heyman et Andres Heinz", 103); + sn.addItemBook("Alice", "alice", "Le train sifflera trois fois", "roman", " J. W. Cunningham", 257); + sn.addItemFilm("Paul", "paul", "Guerre et Paix", "aventure historique", "King Vidor", "Bridget Boland, Robert Westbery", 200); + + + // review some books and films + sn.reviewItemBook("Antoine", "antoine", "La Peste", 1.5f, "un peu daté"); + sn.reviewItemFilm("Paul", "paul", "Black Swan", 2.5f, "pour la performance..."); + sn.reviewItemFilm("Antoine", "antoine", "Avant l'aube", 3.0f, "tout le monde fume..."); + sn.reviewItemBook("Alice", "alice", "Lignes de faille", 1.5f, "famille attachante"); + // review a film and a book that were already reviewed by somebody else + sn.reviewItemFilm("Paul", "paul", "Avant l'aube", 2.5f, "mitigé"); + sn.reviewItemBook("Alice", "alice", "La Peste", 2.5f, " "); + // several reviews of a film and a book with the same title + sn.reviewItemBook("Alice", "alice", "Guerre et Paix", 2.0f, "un peu long"); + sn.reviewItemFilm("Alice", "alice", "Guerre et Paix", 4.2f, "on ne voit pas le temps passer"); + sn.reviewItemBook("Antoine", "antoine", "Guerre et Paix", 4.5f, "parfait pour une semaine pluvieuse"); + sn.reviewItemFilm("Paul", "paul", "Guerre et Paix", 4.4f, "choisir une salle confortable"); + // review a book that was already reviewed by the same member + sn.reviewItemBook("Antoine", "antoine", "La Peste", 3.8f, "bien meilleur à la relecture"); + + System.out.println(sn); + } catch (Exception e) { + System.out.println("Exception inattendue : " + e); + e.printStackTrace(); + } + + } } diff --git a/src/opinion/ISocialNetwork.java b/src/opinion/ISocialNetwork.java index 3ea81d2..fdce081 100644 --- a/src/opinion/ISocialNetwork.java +++ b/src/opinion/ISocialNetwork.java @@ -9,7 +9,7 @@ import exceptions.MemberAlreadyExistsException; import exceptions.NotItemException; import exceptions.NotMemberException; -/** +/** * @author - A. Beugnard * @author - E. Cousin * @author - G. Ouvradou @@ -31,266 +31,266 @@ import exceptions.NotMemberException; * raise both, there is no way to predict which of the two will actually be * thrown. * </p> - * + * */ public interface ISocialNetwork { - /** - * Get the number of members registered in the <i>SocialNetwork</i> - * - * @return number of members - */ - public int nbMembers(); + /** + * Get the number of members registered in the <i>SocialNetwork</i> + * + * @return number of members + */ + public int nbMembers(); - /** - * Get the number of films registered in the <i>SocialNetwork</i> - * - * @return number of films - */ - public int nbFilms(); + /** + * Get the number of films registered in the <i>SocialNetwork</i> + * + * @return number of films + */ + public int nbFilms(); - /** - * Get the number of books registered in the <i>SocialNetwork</i> - * - * @return number of books - */ - public int nbBooks(); + /** + * Get the number of books registered in the <i>SocialNetwork</i> + * + * @return number of books + */ + public int nbBooks(); - /** - * Add a new member to the <i>SocialNetwork</i> - * - * @param login - * the new member's login - * @param password - * the new member's password - * @param profile - * a free String describing the new member's profile - * - * @throws BadEntryException - * <ul> - * <li>if login is not instantiated or contains less than one - * non-space character</li> - * <li>if password is not instantiated or contains less than - * four characters (not taking into account leading or trailing - * blanks)</li> - * <li>if profile is not instantiated</li> - * </ul> - * <br> - * - * @throws MemberAlreadyExistsException - * if a member with the same login is already registered in the - * <i>SocialNetwork</i> (same login : not case-sensitive and - * leadings/trailings blanks are not taken into account) - * - */ - public void addMember(String login, String password, String profile) - throws BadEntryException, MemberAlreadyExistsException; + /** + * Add a new member to the <i>SocialNetwork</i> + * + * @param login + * the new member's login + * @param password + * the new member's password + * @param profile + * a free String describing the new member's profile + * + * @throws BadEntryException + * <ul> + * <li>if login is not instantiated or contains less than one + * non-space character</li> + * <li>if password is not instantiated or contains less than + * four characters (not taking into account leading or trailing + * blanks)</li> + * <li>if profile is not instantiated</li> + * </ul> + * <br> + * + * @throws MemberAlreadyExistsException + * if a member with the same login is already registered in the + * <i>SocialNetwork</i> (same login : not case-sensitive and + * leadings/trailings blanks are not taken into account) + * + */ + public void addMember(String login, String password, String profile) + throws BadEntryException, MemberAlreadyExistsException; - /** - * Add a new film to the <i>SocialNetwork</i> - * - * @param login - * login of the member adding the film - * @param password - * password of the member adding the film - * @param title - * the new film's title - * @param kind - * the new film's kind (adventure, thriller, etc.) - * @param director - * the new film's director - * @param scenarist - * the new film's scenarist - * @param duration - * the new film's duration (in minutes) - * - * @throws BadEntryException - * <ul> - * <li>if login is not instantiated or contains less than one - * non-space character</li> - * <li>if password is not instantiated or contains less than - * four characters (not taking into account leading or trailing - * blanks)</li> - * <li>if title is not instantiated or contains less than one - * non-space character</li> - * <li>if kind is not instanciated</li> - * <li>if director is not instanciated</li> - * <li>if scenarist is not instanciated</li> - * <li>if duration is not stricly positive - * </ul> - * <br> - * @throws NotMemberException - * if login does not match with the login of a registered member - * in <i>SocialNetwork</i> or if password does not correspond to - * his registered password. - * @throws ItemFilmAlreadyExistsException - * : a film with the same title is already registered in the - * <i>SocialNetwork</i> (same title : not case-sensitive and - * leadings/trailings blanks are not taken into account) - * - */ - public void addItemFilm(String login, String password, String title, - String kind, String director, String scenarist, int duration) - throws BadEntryException, NotMemberException, - ItemFilmAlreadyExistsException; + /** + * Add a new film to the <i>SocialNetwork</i> + * + * @param login + * login of the member adding the film + * @param password + * password of the member adding the film + * @param title + * the new film's title + * @param kind + * the new film's kind (adventure, thriller, etc.) + * @param director + * the new film's director + * @param scenarist + * the new film's scenarist + * @param duration + * the new film's duration (in minutes) + * + * @throws BadEntryException + * <ul> + * <li>if login is not instantiated or contains less than one + * non-space character</li> + * <li>if password is not instantiated or contains less than + * four characters (not taking into account leading or trailing + * blanks)</li> + * <li>if title is not instantiated or contains less than one + * non-space character</li> + * <li>if kind is not instanciated</li> + * <li>if director is not instanciated</li> + * <li>if scenarist is not instanciated</li> + * <li>if duration is not stricly positive + * </ul> + * <br> + * @throws NotMemberException + * if login does not match with the login of a registered member + * in <i>SocialNetwork</i> or if password does not correspond to + * his registered password. + * @throws ItemFilmAlreadyExistsException + * : a film with the same title is already registered in the + * <i>SocialNetwork</i> (same title : not case-sensitive and + * leadings/trailings blanks are not taken into account) + * + */ + public void addItemFilm(String login, String password, String title, + String kind, String director, String scenarist, int duration) + throws BadEntryException, NotMemberException, + ItemFilmAlreadyExistsException; - /** - * Add a new book to the <i>SocialNetwork</i> - * - * @param login - * login of the member adding the book - * @param password - * password of the member adding the book - * @param title - * the new book's title - * @param kind - * the new book's kind (adventure, thriller, etc.) - * @param author - * the new book's author - * @param nbPages - * number of pages of the new book's - * - * @throws BadEntryException - * <ul> - * <li>if login is not instantiated or contains less than one - * non-space character</li> - * <li>if password is not instantiated or contains less than - * four characters (not taking into account leading or trailing - * blanks)</li> - * <li>if title is not instantiated or contains less than one - * non-space character</li> - * <li>if kind is not instanciated</li> - * <li>if author is not instanciated</li> - * <li>if nbPages is not stricly positive - * </ul> - * <br> - * @throws NotMemberException - * if login does not match with the login of a registered member - * in <i>SocialNetwork</i> or if password does not correspond to - * his registered password. - * @throws ItemBookAlreadyExistsException - * a book with the same title is already registered in the - * <i>SocialNetwork</i> (same title : not case-sensitive and - * leadings/trailings blanks are not taken into account) - * - */ - public void addItemBook(String login, String password, String title, - String kind, String author, int nbPages) throws BadEntryException, - NotMemberException, ItemBookAlreadyExistsException; + /** + * Add a new book to the <i>SocialNetwork</i> + * + * @param login + * login of the member adding the book + * @param password + * password of the member adding the book + * @param title + * the new book's title + * @param kind + * the new book's kind (adventure, thriller, etc.) + * @param author + * the new book's author + * @param nbPages + * number of pages of the new book's + * + * @throws BadEntryException + * <ul> + * <li>if login is not instantiated or contains less than one + * non-space character</li> + * <li>if password is not instantiated or contains less than + * four characters (not taking into account leading or trailing + * blanks)</li> + * <li>if title is not instantiated or contains less than one + * non-space character</li> + * <li>if kind is not instanciated</li> + * <li>if author is not instanciated</li> + * <li>if nbPages is not stricly positive + * </ul> + * <br> + * @throws NotMemberException + * if login does not match with the login of a registered member + * in <i>SocialNetwork</i> or if password does not correspond to + * his registered password. + * @throws ItemBookAlreadyExistsException + * a book with the same title is already registered in the + * <i>SocialNetwork</i> (same title : not case-sensitive and + * leadings/trailings blanks are not taken into account) + * + */ + public void addItemBook(String login, String password, String title, + String kind, String author, int nbPages) throws BadEntryException, + NotMemberException, ItemBookAlreadyExistsException; - /** - * Add in the <i>SocialNetwork</i> a new review for a film on behalf of a - * specific member.</br> If this member has already given a review for this - * same film before, the new review replaces the previous one. - * - * @param login - * login of the member adding the review - * @param password - * password of the member adding the review - * @param title - * the reviewed film's title - * @param mark - * the mark given by the member for this film - * @param comment - * the comment given by the member for this film - * - * @throws BadEntryException - * <ul> - * <li>if login is not instantiated or contains less than one - * non-space character</li> - * <li>if password is not instantiated or contains less than - * four characters (not taking into account leading or trailing - * blanks)</li> - * <li>if title is not instantiated or contains less than one - * non-space character</li> - * <li>if mark is not greater or equals to 0.0 and lesser or - * equals to 5.0.</li> - * <li>if comment is not instantiated</li> - * </ul> - * <br> - * @throws NotMemberException - * if login does not match with the login of a registered member - * in <i>SocialNetwork</i> or if password does not correspond to - * his registered password. - * @throws NotItemException - * if title is not registered as a film's title in the - * <i>SocialNetwork</i> - * - * @return mean of the marks for this film - */ - public float reviewItemFilm(String login, String password, String title, - float mark, String comment) throws BadEntryException, - NotMemberException, NotItemException; + /** + * Add in the <i>SocialNetwork</i> a new review for a film on behalf of a + * specific member.</br> If this member has already given a review for this + * same film before, the new review replaces the previous one. + * + * @param login + * login of the member adding the review + * @param password + * password of the member adding the review + * @param title + * the reviewed film's title + * @param mark + * the mark given by the member for this film + * @param comment + * the comment given by the member for this film + * + * @throws BadEntryException + * <ul> + * <li>if login is not instantiated or contains less than one + * non-space character</li> + * <li>if password is not instantiated or contains less than + * four characters (not taking into account leading or trailing + * blanks)</li> + * <li>if title is not instantiated or contains less than one + * non-space character</li> + * <li>if mark is not greater or equals to 0.0 and lesser or + * equals to 5.0.</li> + * <li>if comment is not instantiated</li> + * </ul> + * <br> + * @throws NotMemberException + * if login does not match with the login of a registered member + * in <i>SocialNetwork</i> or if password does not correspond to + * his registered password. + * @throws NotItemException + * if title is not registered as a film's title in the + * <i>SocialNetwork</i> + * + * @return mean of the marks for this film + */ + public float reviewItemFilm(String login, String password, String title, + float mark, String comment) throws BadEntryException, + NotMemberException, NotItemException; - /** - * Add in the <i>SocialNetwork</i> a new review for a book on behalf of a - * specific member.</br> If this member has already given a review for this - * same book before, the new review replaces the previous one. - * - * @param login - * login of the member adding the review - * @param password - * password of the member adding the review - * @param title - * the reviewed book's title - * @param mark - * the mark given by the member for this book - * @param comment - * the comment given by the member for this book - * - * @throws BadEntryException - * <ul> - * <li>if login is not instantiated or contains less than one - * non-space character</li> - * <li>if password is not instantiated or contains less than - * four characters (not taking into account leading or trailing - * blanks)</li> - * <li>if title is not instantiated or contains less than one - * non-space character</li> - * <li>if mark is not greater or equals to 0.0 and lesser or - * equals to 5.0.</li> - * <li>if comment is not instantiated</li> - * </ul> - * <br> - * @throws NotMemberException - * if login does not match with the login of a registered member - * in <i>SocialNetwork</i> or if password does not correspond to - * his registered password. - * @throws NotItemException - * if title is not registered as a book's title in the - * <i>SocialNetwork</i> - * - * @return mean of the marks for this book - */ - public float reviewItemBook(String login, String password, String title, - float mark, String comment) throws BadEntryException, - NotMemberException, NotItemException; + /** + * Add in the <i>SocialNetwork</i> a new review for a book on behalf of a + * specific member.</br> If this member has already given a review for this + * same book before, the new review replaces the previous one. + * + * @param login + * login of the member adding the review + * @param password + * password of the member adding the review + * @param title + * the reviewed book's title + * @param mark + * the mark given by the member for this book + * @param comment + * the comment given by the member for this book + * + * @throws BadEntryException + * <ul> + * <li>if login is not instantiated or contains less than one + * non-space character</li> + * <li>if password is not instantiated or contains less than + * four characters (not taking into account leading or trailing + * blanks)</li> + * <li>if title is not instantiated or contains less than one + * non-space character</li> + * <li>if mark is not greater or equals to 0.0 and lesser or + * equals to 5.0.</li> + * <li>if comment is not instantiated</li> + * </ul> + * <br> + * @throws NotMemberException + * if login does not match with the login of a registered member + * in <i>SocialNetwork</i> or if password does not correspond to + * his registered password. + * @throws NotItemException + * if title is not registered as a book's title in the + * <i>SocialNetwork</i> + * + * @return mean of the marks for this book + */ + public float reviewItemBook(String login, String password, String title, + float mark, String comment) throws BadEntryException, + NotMemberException, NotItemException; - /** - * Search for items in the <i>SocialNetwork</i>. - * - * @param title - * title of searched item(s) - * - * @throws BadEntryException - * if title is not instantiated or contains less than one - * non-space character - * - * @return LinkedList <String> a list of String representing all items (book - * and/or film) matching the searched name.</br> Each String will - * contain at least the score of the corresponding item. - */ - public LinkedList<String> consultItems(String title) - throws BadEntryException; + /** + * Search for items in the <i>SocialNetwork</i>. + * + * @param title + * title of searched item(s) + * + * @throws BadEntryException + * if title is not instantiated or contains less than one + * non-space character + * + * @return LinkedList <String> a list of String representing all items (book + * and/or film) matching the searched name.</br> Each String will + * contain at least the score of the corresponding item. + */ + public LinkedList<String> consultItems(String title) + throws BadEntryException; - /** - * A <i>SocialNetwork</i> is described at least by member's names, book's - * titles/scores and film's titles/scores. - * - * @return a String representing the <i>SocialNetwork</i>, with at least - * member's names, book's titles/scores and film's titles/scores. - */ - public String toString(); + /** + * A <i>SocialNetwork</i> is described at least by member's names, book's + * titles/scores and film's titles/scores. + * + * @return a String representing the <i>SocialNetwork</i>, with at least + * member's names, book's titles/scores and film's titles/scores. + */ + public String toString(); } diff --git a/src/opinion/Member.java b/src/opinion/Member.java index 37f9bb7..76fd063 100644 --- a/src/opinion/Member.java +++ b/src/opinion/Member.java @@ -4,12 +4,13 @@ package opinion; /** * This class allows us to create and register new members * A member has a login, a password and a profile that he has to register before connecting to the site + * * @author Maryam TENGKU * @author Neva MASSY * @version 1.0 * @since 1.0 */ -public class Member{ +public class Member { /** * Declaration of member's login, password and profile. @@ -18,9 +19,10 @@ public class Member{ /** * Construct new Member with specified login, password and profile. - * @param login member's login + * + * @param login member's login * @param password member's password - * @param profile member's profile + * @param profile member's profile */ Member(String login, String password, String profile) { this.login = login; @@ -30,34 +32,36 @@ public class Member{ /** * Returns member's login + * * @return login */ - public String getLogin(){ + public String getLogin() { return login; } /** * Returns member's password + * * @return password */ - public String getPassword(){ + public String getPassword() { return password; } /** * Returns member's profile + * * @return profile */ - public String getProfile(){ + public String getProfile() { return profile; } - - /** * String function to display details of a member (login and profile) + * * @return string of details of a member */ public String toString() { diff --git a/src/opinion/SocialNetwork.java b/src/opinion/SocialNetwork.java index c2a9f4f..3a0fd69 100644 --- a/src/opinion/SocialNetwork.java +++ b/src/opinion/SocialNetwork.java @@ -1,6 +1,7 @@ package opinion; import java.util.LinkedList; + import exceptions.BadEntryException; import exceptions.ItemBookAlreadyExistsException; import exceptions.ItemFilmAlreadyExistsException; @@ -13,7 +14,6 @@ import exceptions.NotMemberException; * * @author Tengku Maryam BINTI * @author Neva MASSY - * * @version 1.0 */ @@ -38,6 +38,7 @@ public class SocialNetwork implements ISocialNetwork { /** * Returns number of registered members. + * * @return number of members */ @Override @@ -48,6 +49,7 @@ public class SocialNetwork implements ISocialNetwork { /** * Returns number of films. + * * @return 0 */ @Override @@ -58,6 +60,7 @@ public class SocialNetwork implements ISocialNetwork { /** * Returns number of books. + * * @return number of books */ @Override @@ -68,6 +71,7 @@ public class SocialNetwork implements ISocialNetwork { /** * Checks whether a member already exists. + * * @param login the login to be checked * @return true if login exists, else return false */ @@ -82,17 +86,18 @@ public class SocialNetwork implements ISocialNetwork { /** * Validates the format of a user's login and password (not empty or too short) - * @param login the login to be validated + * + * @param login the login to be validated * @param password the password to be validated * @return true if login and password are valid * @throws BadEntryException if either login or password is invalid */ - public boolean validateuser(String login, String password) throws BadEntryException{ + public boolean validateuser(String login, String password) throws BadEntryException { boolean result = false; - if(login == null || login.length() <= 1){ + if (login == null || login.length() <= 1) { throw new BadEntryException("login is null or empty"); } - if(password == null || password.length() <=8 ){ + if (password == null || password.length() < 4) { throw new BadEntryException("password is null or empty"); } return true; @@ -100,7 +105,8 @@ public class SocialNetwork implements ISocialNetwork { /** * Authenticates a user's login and password - * @param login the login of the user + * + * @param login the login of the user * @param password the password of the user * @return true if password corresponds to registered login, false if wrong password */ @@ -116,13 +122,14 @@ public class SocialNetwork implements ISocialNetwork { /** * Checks if a book title is valid (not empty or too short) and if the book already exists + * * @param title the title of the book to be validated * @return true if book does not exist yet in system, false if already exists * @throws BadEntryException if title is empty or too short */ public boolean validatebook(String title) throws BadEntryException { boolean result = false; - if(title == null || title.length() <= 1 ){ + if (title == null || title.length() <= 1) { throw new BadEntryException("title is null or empty"); } for (Book b : listBook) { @@ -135,15 +142,16 @@ public class SocialNetwork implements ISocialNetwork { /** * Adds a new member to the social network. - * @param login the new member's login + * + * @param login the new member's login * @param password the new member's password - * @param profile a free String describing the new member's profile - * @throws BadEntryException if parameter is null or too short + * @param profile a free String describing the new member's profile + * @throws BadEntryException if parameter is null or too short * @throws MemberAlreadyExistsException if login already exists */ @Override - public void addMember(String login, String password, String profile) throws BadEntryException, MemberAlreadyExistsException{ - if (profile == null){ + public void addMember(String login, String password, String profile) throws BadEntryException, MemberAlreadyExistsException { + if (profile == null) { throw new BadEntryException("profile is null or empty"); } validateuser(login, password); @@ -157,14 +165,15 @@ public class SocialNetwork implements ISocialNetwork { /** * Adds a new book to the social network. - * @param login login of the member adding the book + * + * @param login login of the member adding the book * @param password password of the member adding the book - * @param title the new book's title - * @param kind the new book's kind - * @param author the new book's author - * @param nbPages number of pages of the new book's - * @throws BadEntryException if any input is invalid (empty or number pages equal or less than 0) - * @throws NotMemberException if login or password is wrong + * @param title the new book's title + * @param kind the new book's kind + * @param author the new book's author + * @param nbPages number of pages of the new book's + * @throws BadEntryException if any input is invalid (empty or number pages equal or less than 0) + * @throws NotMemberException if login or password is wrong * @throws ItemBookAlreadyExistsException if book already exists in system */ @Override @@ -204,9 +213,10 @@ public class SocialNetwork implements ISocialNetwork { /** * Displays a whole list of registered members + * * @return list of registered members */ - public String toString(){ + public String toString() { if (listMember.isEmpty()) { return "There are currently no registered members :("; } diff --git a/src/opinion/package-info.java b/src/opinion/package-info.java index ebd7bee..4899300 100644 --- a/src/opinion/package-info.java +++ b/src/opinion/package-info.java @@ -1,4 +1,4 @@ /** - * Main package for SocialNetwork + * Main package for SocialNetwork */ package opinion; \ No newline at end of file diff --git a/src/tests/AddItemBookTest.java b/src/tests/AddItemBookTest.java index cc3ac0d..07dc4b9 100644 --- a/src/tests/AddItemBookTest.java +++ b/src/tests/AddItemBookTest.java @@ -17,15 +17,15 @@ public class AddItemBookTest { * Check that the method addItemBook throws BadEntryException or NotMemberException correctly. * If OK, the method just returns 0. If not OK, displays an error message and returns 1. * - * @param sn the <i>ISocialNetwork</i> - * @param login the login of the member - * @param password the password of the member - * @param title the title of the book - * @param kind the kind of the book - * @param author the author of the book - * @param nbPages the page number of the book + * @param sn the <i>ISocialNetwork</i> + * @param login the login of the member + * @param password the password of the member + * @param title the title of the book + * @param kind the kind of the book + * @param author the author of the book + * @param nbPages the page number of the book * @param expectedException the expected exception class - * @param testId the test ID + * @param testId the test ID * @return 0 if test is OK, 1 if not OK */ private static int checkAddItemBookException(ISocialNetwork sn, String login, String password, String title, String kind, String author, int nbPages, Class<?> expectedException, String testId) { @@ -48,14 +48,14 @@ public class AddItemBookTest { * Check that the method addItemBook succeeds. * If OK, the method just returns 0. If not OK, displays an error message and returns 1. * - * @param sn the <i>ISocialNetwork</i> - * @param login the login of the member + * @param sn the <i>ISocialNetwork</i> + * @param login the login of the member * @param password the password of the member - * @param title the title of the book - * @param kind the kind of the book - * @param author the author of the book - * @param nbPages the number of pages of the book - * @param testId the test's ID + * @param title the title of the book + * @param kind the kind of the book + * @param author the author of the book + * @param nbPages the number of pages of the book + * @param testId the test's ID * @return 0 if test is OK, 1 if not OK */ private static int checkAddItemBookSuccess(ISocialNetwork sn, String login, String password, String title, String kind, String author, int nbPages, String testId) { diff --git a/src/tests/InitTest.java b/src/tests/InitTest.java index 9d6ce39..bd6ac05 100644 --- a/src/tests/InitTest.java +++ b/src/tests/InitTest.java @@ -5,8 +5,9 @@ import opinion.ISocialNetwork; import opinion.SocialNetwork; -/** +/** * Tests for the <i>SocialNetwork()</i> constructor. + * * @author B. Prou, E Cousin, GO * @version V2.0 - 2011-2018 */ @@ -14,70 +15,68 @@ import opinion.SocialNetwork; public class InitTest { + /** + * Main test for the <i>SocialNetwork()</i> constructor. + * + * @return a summary of the performed tests + */ + public static TestReport test() { + int nbTests = 0; // total number of performed tests + int nbErrors = 0; // total number of failed tests + + + System.out.println("Testing brand new Social Networks... "); + + + try { + + // a fresh SocialNetwork should not contain any member, book or film + ISocialNetwork sn = new SocialNetwork(); + nbTests++; + if (sn.nbMembers() != 0) { + nbErrors++; + System.out.println("Err 0.1 : non-zero number of members in a newly instanciated Social Network"); + } + nbTests++; + if (sn.nbBooks() != 0) { + nbErrors++; + System.out.println("Err 0.2 : non-zero number of books in a newly instanciated Social Network"); + } + nbTests++; + if (sn.nbFilms() != 0) { + nbErrors++; + System.out.println("Err 0.3 : non-zero number of films in a newly instanciated Social Network"); + } + + + // Show the Social Network, just in case the tester could detect a problem + System.out.println("Here is the newly created SocialNetwork :"); + System.out.println(sn); + + } catch (Exception e) { + System.out.println("Err 0.4 : Unexpected exception : " + e); + e.printStackTrace(); + System.exit(1); + } + // Print a summary of the tests and return test results + try { + TestReport tr = new TestReport(nbTests, nbErrors); + System.out.println("InitTest : " + tr); + return tr; + } catch (NotTestReportException e) { //This shouldn't happen + System.out.println("Unexpected error in InitTest test code - Can't return valuable test results"); + return null; + } + } + + /** + * Launches test() + * + * @param args not used + */ + public static void main(String[] args) { + test(); + } + - /** - * Main test for the <i>SocialNetwork()</i> constructor. - * @return a summary of the performed tests - */ - public static TestReport test(){ - int nbTests = 0; // total number of performed tests - int nbErrors = 0; // total number of failed tests - - - System.out.println("Testing brand new Social Networks... "); - - - try { - - // a fresh SocialNetwork should not contain any member, book or film - ISocialNetwork sn = new SocialNetwork(); - nbTests++; - if (sn.nbMembers()!= 0) { - nbErrors++; - System.out.println("Err 0.1 : non-zero number of members in a newly instanciated Social Network"); - } - nbTests++; - if (sn.nbBooks() != 0) { - nbErrors++; - System.out.println("Err 0.2 : non-zero number of books in a newly instanciated Social Network"); - } - nbTests++; - if (sn.nbFilms() != 0) { - nbErrors++; - System.out.println("Err 0.3 : non-zero number of films in a newly instanciated Social Network"); - } - - - // Show the Social Network, just in case the tester could detect a problem - System.out.println("Here is the newly created SocialNetwork :"); - System.out.println(sn); - - } - catch (Exception e) { - System.out.println("Err 0.4 : Unexpected exception : " + e); - e.printStackTrace(); - System.exit(1); - } - // Print a summary of the tests and return test results - try{ - TestReport tr = new TestReport(nbTests, nbErrors); - System.out.println("InitTest : " + tr); - return tr; - } - catch (NotTestReportException e){ //This shouldn't happen - System.out.println("Unexpected error in InitTest test code - Can't return valuable test results"); - return null; - } - } - - /** - * Launches test() - * @param args not used - */ - public static void main(String[] args) { - test(); - } - - - } \ No newline at end of file diff --git a/src/tests/SocialNetworkTest.java b/src/tests/SocialNetworkTest.java index c991d3e..f30c228 100644 --- a/src/tests/SocialNetworkTest.java +++ b/src/tests/SocialNetworkTest.java @@ -1,40 +1,40 @@ package tests; - -/** +/** * This class launches a test suite for the SocialNetwork + * * @author B. Prou, GO * @version V2.0 - April 2018 - * */ public class SocialNetworkTest { - /** - * @param args not used - */ - public static void main(String[] args) { - - try { - TestReport testSuiteReport = new TestReport(0,0); - TestReport tr; - tr = InitTest.test(); - testSuiteReport.add(tr); - System.out.println("\n\n **********************************************************************************************\n"); - // - tr = AddMemberTest.test(); - testSuiteReport.add(tr); - System.out.println("\n\n **********************************************************************************************\n"); - // - // TODO : calls to other tests have to be added from here - // - - - // End of the test suite : give some feedback to the tester - System.out.println("Global tests results : \n" + testSuiteReport); - } - catch (Exception e) {System.out.println("ERROR : Some exception was throw unexpectedly");} - - } + /** + * @param args not used + */ + public static void main(String[] args) { + + try { + TestReport testSuiteReport = new TestReport(0, 0); + TestReport tr; + tr = InitTest.test(); + testSuiteReport.add(tr); + System.out.println("\n\n **********************************************************************************************\n"); + // + tr = AddMemberTest.test(); + testSuiteReport.add(tr); + System.out.println("\n\n **********************************************************************************************\n"); + // + // TODO : calls to other tests have to be added from here + // + + + // End of the test suite : give some feedback to the tester + System.out.println("Global tests results : \n" + testSuiteReport); + } catch (Exception e) { + System.out.println("ERROR : Some exception was throw unexpectedly"); + } + + } } diff --git a/src/tests/TestReport.java b/src/tests/TestReport.java index c43d604..f6ac78d 100644 --- a/src/tests/TestReport.java +++ b/src/tests/TestReport.java @@ -1,112 +1,111 @@ package tests; + import exceptions.NotTestReportException; /** * TestReport helps to convey information about performed tests - * @author cousin * + * @author cousin */ public class TestReport { - - private int nbTests; // Total number of tests that were run - private int nbErrors; // Total number of errors that were detected while running these tests - - /** - * - * @param nbTests Total number of tests that were run. - * @param nbErrors Total number of errors that were detected while running these tests. - * @throws NotTestReportException if nbTests and/or nbErrors are not complying with the following constraints : nbTests and nbErrors should be positive, nbTests should be greater or equal to nbErrors - */ - public TestReport (int nbTests, int nbErrors) throws NotTestReportException { - if ((nbTests<0) || (nbErrors <0) || (nbTests < nbErrors)) throw new NotTestReportException(); - this.nbTests = nbTests; - this.nbErrors = nbErrors; - } - - /** - * Get a String representation of a TestReport - */ - public String toString (){ - String s = "[ Nb of performed tests : " + nbTests + " / nb of detected error(s) : "+ nbErrors + " ]"; - return s; - } - - /** - * Add to the current TestReport the results contained in an other TestReport - * @param other another TestReport - */ - public void add (TestReport other){ - this.nbTests += other.nbTests; - this.nbErrors += other.nbErrors; - } - - /** - * Two TestReport are equals if all their attributes are equals. - */ - public boolean equals (Object o){ - if (o instanceof TestReport){ - TestReport tr = (TestReport) o; - return ((this.nbTests == tr.nbTests) && (this.nbErrors == tr.nbErrors)); - } - return false; - } - /** - * This is only a (very) small auto-test for the TestReport class - * @param args not used - */ - public static void main(String[] args) { - int nbErrors = 0; - System.out.println("*** Launching auto-test for TestReport class ***"); - - try { - // basic tests - TestReport tr1 = new TestReport(10,5); - TestReport tr2 = new TestReport(3,0); - tr1.add(tr2); // this should change tr1 attributes appropriately : - if ((tr1.nbTests != 13)||(tr1.nbErrors != 5)){ - nbErrors++; - System.out.println("Error : TestReport.add() seems not to work appropriately"); - } - // - TestReport tr3 = new TestReport(3,0); - if (! tr3.equals(tr2)){ - nbErrors++; - System.out.println("Autotest error : TestReport.equals() seems not to work appropriately"); - } - // - tr3.add(new TestReport(0,0)); - if (! tr3.equals(tr2)){ - nbErrors++; - System.out.println("Autotest error : TestReport.add() seems not to work appropriately"); - } - System.out.println("Here is how TestReport is converted into String :"); - System.out.println("--------------------------------"); - System.out.println("tr1 :" + tr1); - System.out.println("tr2 :" + tr2); - System.out.println("--------------------------------"); - } - catch (NotTestReportException e){ - nbErrors++; - System.out.println ("Autotest error : NotTestReportException was thrown unexpectedly"); - } - // check if TestReport() throws NotTestReportException for some inaccurate arguments - try{ - TestReport tr = new TestReport(10,-5); - // the end of this bloc shouldn't be executed - nbErrors++; - System.out.println ("Autotest error : NotTestReportException should have been thrown"); - } - catch (NotTestReportException e){ // nothing to do here because it is what was awaited - } - - if (nbErrors==0) { - System.out.println("*** Auto-test was OK ***"); - } - else { - System.out.println("*** Errors were detected in the auto-test. The TestReport class shoudn't be used ***"); - } - - } + private int nbTests; // Total number of tests that were run + private int nbErrors; // Total number of errors that were detected while running these tests + + /** + * @param nbTests Total number of tests that were run. + * @param nbErrors Total number of errors that were detected while running these tests. + * @throws NotTestReportException if nbTests and/or nbErrors are not complying with the following constraints : nbTests and nbErrors should be positive, nbTests should be greater or equal to nbErrors + */ + public TestReport(int nbTests, int nbErrors) throws NotTestReportException { + if ((nbTests < 0) || (nbErrors < 0) || (nbTests < nbErrors)) throw new NotTestReportException(); + this.nbTests = nbTests; + this.nbErrors = nbErrors; + } + + /** + * Get a String representation of a TestReport + */ + public String toString() { + String s = "[ Nb of performed tests : " + nbTests + " / nb of detected error(s) : " + nbErrors + " ]"; + return s; + } + + /** + * Add to the current TestReport the results contained in an other TestReport + * + * @param other another TestReport + */ + public void add(TestReport other) { + this.nbTests += other.nbTests; + this.nbErrors += other.nbErrors; + } + + /** + * Two TestReport are equals if all their attributes are equals. + */ + public boolean equals(Object o) { + if (o instanceof TestReport) { + TestReport tr = (TestReport) o; + return ((this.nbTests == tr.nbTests) && (this.nbErrors == tr.nbErrors)); + } + return false; + } + + /** + * This is only a (very) small auto-test for the TestReport class + * + * @param args not used + */ + public static void main(String[] args) { + int nbErrors = 0; + System.out.println("*** Launching auto-test for TestReport class ***"); + + try { + // basic tests + TestReport tr1 = new TestReport(10, 5); + TestReport tr2 = new TestReport(3, 0); + tr1.add(tr2); // this should change tr1 attributes appropriately : + if ((tr1.nbTests != 13) || (tr1.nbErrors != 5)) { + nbErrors++; + System.out.println("Error : TestReport.add() seems not to work appropriately"); + } + // + TestReport tr3 = new TestReport(3, 0); + if (!tr3.equals(tr2)) { + nbErrors++; + System.out.println("Autotest error : TestReport.equals() seems not to work appropriately"); + } + // + tr3.add(new TestReport(0, 0)); + if (!tr3.equals(tr2)) { + nbErrors++; + System.out.println("Autotest error : TestReport.add() seems not to work appropriately"); + } + System.out.println("Here is how TestReport is converted into String :"); + System.out.println("--------------------------------"); + System.out.println("tr1 :" + tr1); + System.out.println("tr2 :" + tr2); + System.out.println("--------------------------------"); + } catch (NotTestReportException e) { + nbErrors++; + System.out.println("Autotest error : NotTestReportException was thrown unexpectedly"); + } + // check if TestReport() throws NotTestReportException for some inaccurate arguments + try { + TestReport tr = new TestReport(10, -5); + // the end of this bloc shouldn't be executed + nbErrors++; + System.out.println("Autotest error : NotTestReportException should have been thrown"); + } catch (NotTestReportException e) { // nothing to do here because it is what was awaited + } + + if (nbErrors == 0) { + System.out.println("*** Auto-test was OK ***"); + } else { + System.out.println("*** Errors were detected in the auto-test. The TestReport class shoudn't be used ***"); + } + + } } -- GitLab