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
zcmZqDouJEg>ff$?3=9k|40k4Sy%1$7&a6shWMJ0N^yFe-XOQP%P+(A;_(6?ZnL&k}
zL6wI=jX`~~BBMHoGJ_@$gBFAK<N!tmM%~GUjKUl`4Ej6_1`LLidl*%?jTubX8BBQ?
z%oq$O?`D+YFlMmeVX$PdntY#8SHzgXhKIqHL6(t$EhjZEy(EL3!G5wDlOm@hBZF8@
zetKr!<cUne+;$AkJPfQ1E{qJKlO4H4Si(3M+$Og%$tmbCc<?ZIG8i&4aHpr11SA$0
zm**Fya4{G&c=Is$F!)YB!ldls&&VKFl39|Is*qW%kXM?MqmW;ukeXXiQpwH`$jHEx
zUyzxXnV+Zcl%Jo?#Sp*{%)=1EV8zJ5lboMhkXV!&0@BOD5H?w#S)MI|har+7YH|p(
ztyByTLo7%gUv6q{Qfg69YI<gINoo;0L;U2`%sK*b49r{%It)o5mnSnaSWZ^tFrO^P
z!p4@$!;r?1K3R)JK{=C$A&bG6k%2ie1?=h^9)?^7bw&pE%wkuN134J-C+D(AnHMrL
zh`1IN<ri5gc;=NQ=47TQWM}53=y5O<Gct&w$t0GRWaJm=aWIrl-p8UQQ_jOs!4SpB
zAOI3i%`3@FPAo|cEe1KXY7(oGY7HZUB-8|us6tA9YH^-=i9%{cW^oA@LnVVVJ45|s
zcUC=tI*^Y77@9ynYG!1x0{KYSQ!|W{ft#U~hoOz3osoehDL+4(k%7+#IaIAdNhpVd
zp=<JSRzr&(Mg~zXSZJlDC_sX**oq4jTzxzY{h;{dD9H~lDay=C7h+&wn8?F0iDB|&
z1GWgpsgpa|YBtNV*D+3B%CU@b=VTww#f%3wf8aD=ls?bMz{bd^r@+X?&&F_(i{TQ(
zWp;)uAiY;7TXSD#yfK-dM~meaBZJ)J1>EA3>$uq`NAn2zPhntVU}E57;AdcDn8v`s
zz{D_}fe92vV74fO7?_rX(n3h;W-u^;e9geXAi%)Lz{<eJz{oIj@*W<u`dJJN3{nhi
z3=9kk3@i+a4EzjA3{nir4Dt*r3@Qw&46_*+7<d>M85kH;8Rjs|Wnf@nWSGYw3)0WP
zz@X2-2$o~j+QJ~b25ddZK#=huNrYxrxaRqA%{mN>4D}$BnV8YFS|QoX1lPI%uGI)?
zFNf9^27zr1Qt0|!k@R!G^~W+;LESx>fr){Ifq}ueUTX^j*ER+@U!9!{N{kFM8I*N)
zGH5U|9AMD#)7{3Pw~fI_dmDq%HU{&V46H0`mjAy6b}KUj$eUsetPBhc{tVI#0Sr0}
zfed;K!3>5BAz-@|7?>HP8H5=YGNdywgKUDjf`P%9VG+Y(21bS@ppdO+VE)6v!Oozp
z`ip^yff1Bt8JHMmGB7aAW?%+8(SX@b`xpba_BIA<mc<ObyBX{vg&ejsIPKRt#=xz!
zjlr6I5meL_B+3E`3W)O{(VD=(#E{6q$B@Jz!H~kB!jQ_K$B+(oq80-SLp=k70o-K<
zP?v$kmNG16U}9im&|_G}u$+Mz>{?C+mOl)9jGWw@3@aEI7+4q>8SEICK$#XAtXmnF
zz(L{;4OKr~XsDX&!a~)GMUn+6T<bvrD-IHJ-^O610}g60Xiy(R3TlX7iWp=ViWv+T
zN*Ej%N*SCO${Ac4D&T&RVNe4HHz;D=;hu7bd&->w;wf;zL&LpZ*%A`)D;cby0l%Mt
z8SDucW?PJa_X7nnB+bdeJtqV6TmZ;(+S?d{pdNUL<N+lH4h9B>W(FpP76v|sRt5=%
zb_NrMj(P@LhE4{1hHeHYh90<2Oc=NsRxz}L<KG4D6BmZn;Dp1(-~^5oCUB$(GO&Up
z<qrcpJA<+u$Tx_{VPsgtkPP+LQ3f`!fx)`Rp$R5*J43zGel2aCZ4BYzTH4zfqGvL2
z?`DXL+|H1&Uu!pmP9!MpgCa$D8-vkyhQzH5DWI6u+QN{sjUgjkD{>2iFiXN#2H}ki
z3=EJ&r^dj^z`!tzfrVi<10Ta&22pTnF`q$|VIhMJ!y*O`hQ$m)3`<~Mt!H3h2!{JG
z7#>%_(6|E0u4PyZO@J&6OnhSCv<E5(?HJ-17#Y?vtcQ4zaSa1I*z#LYAL$-r-~~B+
z8$<R?sE_kN@h8c0jDZi7<czj4)Wf9;z*4LrDOPYYgv%6xWJKBKLd_@valuxU%>oHk
zMhaDLXQ<r|O%_({lI+k_uMA>=3zGmV4oMDOaLVA`%}^J)ouOg>^8YurcGoimM1tH1
zc8(;-Vo|p342@eET0q8WZDDAE1++LQpv4gZ?Z+U@z`(GTft_I+gDAsx26=`Z4EhW^
z87vugF?cfUW(a23!w|u+mm!H^A44|7euh$p0}N9b4l>MTIK;4&;RwSDhNBFJ8S0NQ
zoM$-BaFgK#I7WgPI2fid2!azID81f-N6jsG)ZBtc%`I?(1eI>L7&b602B)rD3>z61
zgY(ZVhD{7&3~b;;D#E}m%E`~k&&ekQDelyu>9n4KgMpdBj-isFj)9S3Gs6~0Trw0g
zFn}`*Bgn%{44~2$QmLGUyAxCsL24ur3sR<nSddH(Vu7*?$aRcx*D*3|g}RQBVH?9@
z1~yRoV`SLQAjZHBPFFD3>|kJI*u}6L>Kafw167es-0RTlxXWPY*nulhSVaY@m|@Og
zf(I58Jg}G;_Au-P2Nn}U{XVdJKsgp>^?n9MP|E^Zq#l8mMsA>tw~e7=CIg#L=LVr}
z9~N7Ph#b5eQiPR5I#w*&GN2UIyNh801A|Ws6XWv#cR+c016n@4Q_sM~aF>CX;XZ=^
z!vh8(hKCG#438MB86Gp(F+5>#WOxepAE>6#V-SFsu5Qp|A;4h9a1dN32{D*39AXe-
zfRsrB49vX$7<kwjj2YP(lz%a(F)%V5#u}R0puj@J?pv^R<Oe7A&^*F$l!2LH=H&CD
zlHm3ZBqe<Y+XZqmD5=3x5(hY%7{Q4FQo%u5TE`eT8ICiYfX0e8xE;j6fRQ}^fDMH-
wm>3yOGMoYj_-SyeIm2+4K^kNiBf|v-Muu|?*BBTWxEL52t~1<ZxXmC503Wn<m;e9(

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